Skip to content

Commit

Permalink
Variants without depencencies (BabylonJS#8500)
Browse files Browse the repository at this point in the history
  • Loading branch information
sebavan authored Jul 7, 2020
1 parent 6943da3 commit 67d15f2
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 5 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import * as React from "react";

import { Observable } from "babylonjs/Misc/observable";
import { Nullable } from 'babylonjs/types';

import { PropertyChangedEvent } from "../../../propertyChangedEvent";
import { LineContainerComponent } from "../../lineContainerComponent";
Expand All @@ -9,7 +10,8 @@ import { GlobalState } from "../../../globalState";
// import { OptionsLineComponent } from '../../lines/optionsLineComponent';
import { ButtonLineComponent } from '../../lines/buttonLineComponent';
import { CheckBoxLineComponent } from '../../lines/checkBoxLineComponent';
import { KHR_materials_variants } from 'babylonjs-loaders/glTF/2.0/Extensions/KHR_materials_variants';

declare type KHR_materials_variants = import("babylonjs-loaders/glTF/2.0/Extensions/KHR_materials_variants").KHR_materials_variants;

interface IVariantsPropertyGridComponentProps {
globalState: GlobalState;
Expand All @@ -26,14 +28,22 @@ export class VariantsPropertyGridComponent extends React.Component<IVariantsProp
super(props);
}

private _getVariantsExtension(): Nullable<KHR_materials_variants> {
return this.props.globalState?.glTFLoaderExtenstions["KHR_materials_variants"] as KHR_materials_variants;
}

render() {
let variants: string[] = KHR_materials_variants.GetAvailableVariants(this.props.host);
const extension = this._getVariantsExtension();
if (!extension) {
return null;
}
let variants: string[] = extension.getAvailableVariants(this.props.host);

if (!variants || variants.length === 0) {
return null;
}

let lastPickedVariants = KHR_materials_variants.GetLastSelectedVariant(this.props.host);
let lastPickedVariants = extension.getLastSelectedVariant(this.props.host);

variants.sort((a, b) => {
let aIsActive = lastPickedVariants && lastPickedVariants.indexOf ? lastPickedVariants.indexOf(a) > -1 : lastPickedVariants === a;
Expand Down Expand Up @@ -93,7 +103,7 @@ export class VariantsPropertyGridComponent extends React.Component<IVariantsProp
onSelect={(value) => {
if (value) {
this._selectedTags.push(v);
KHR_materials_variants.SelectVariant(this.props.host, v);
extension.selectVariant(this.props.host, v);
} else {
// Do something on extension?
let index = this._selectedTags.indexOf(v);
Expand Down Expand Up @@ -135,7 +145,7 @@ export class VariantsPropertyGridComponent extends React.Component<IVariantsProp
}}
/> */}
<ButtonLineComponent label="Reset" onClick={() => {
KHR_materials_variants.Reset(this.props.host);
extension.reset(this.props.host);
this._selectedTags = [];
this.forceUpdate();
}} />
Expand Down
4 changes: 4 additions & 0 deletions inspector/src/components/globalState.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ export class GlobalState {
public onExtensionLoadedObservable: Observable<IGLTFLoaderExtension>;
public glTFLoaderExtensionDefaults: { [name: string]: { [key: string]: any } } = {};
public glTFLoaderDefaults: { [key: string]: any } = { "validate": true };
public glTFLoaderExtenstions: { [key: string]: IGLTFLoaderExtension } = { };

public blockMutationUpdates = false;
public selectedLineContainerTitles:Array<string> = [];
Expand Down Expand Up @@ -85,6 +86,7 @@ export class GlobalState {
}

public prepareGLTFPlugin(loader: GLTFFileLoader) {
this.glTFLoaderExtenstions = { };
var loaderState = this.glTFLoaderDefaults;
if (loaderState !== undefined) {
for (const key in loaderState) {
Expand All @@ -99,6 +101,8 @@ export class GlobalState {
(extension as any)[key] = extensionState[key];
}
}

this.glTFLoaderExtenstions[extension.name] = extension;
});

if (this.validationResults) {
Expand Down
35 changes: 35 additions & 0 deletions loaders/src/glTF/2.0/Extensions/KHR_materials_variants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,15 @@ export class KHR_materials_variants implements IGLTFLoaderExtension {
return Object.keys(extensionMetadata.variants);
}

/**
* Gets the list of available variant tag names for this asset.
* @param rootMesh The glTF root mesh
* @returns the list of all the variant names for this model
*/
public getAvailableVariants(rootMesh: Mesh): string[] {
return KHR_materials_variants.GetAvailableVariants(rootMesh);
}

/**
* Select a variant given a variant tag name or a list of variant tag names.
* @param rootMesh The glTF root mesh
Expand Down Expand Up @@ -93,6 +102,15 @@ export class KHR_materials_variants implements IGLTFLoaderExtension {
extensionMetadata.lastSelected = variantName;
}

/**
* Select a variant given a variant tag name or a list of variant tag names.
* @param rootMesh The glTF root mesh
* @param variantName The variant name(s) to select.
*/
public selectVariant(rootMesh: Mesh, variantName: string | string[]): void {
return KHR_materials_variants.SelectVariant(rootMesh, variantName);
}

/**
* Reset back to the original before selecting a variant.
* @param rootMesh The glTF root mesh
Expand All @@ -110,6 +128,14 @@ export class KHR_materials_variants implements IGLTFLoaderExtension {
extensionMetadata.lastSelected = null;
}

/**
* Reset back to the original before selecting a variant.
* @param rootMesh The glTF root mesh
*/
public reset(rootMesh: Mesh): void {
return KHR_materials_variants.Reset(rootMesh);
}

/**
* Gets the last selected variant tag name(s) or null if original.
* @param rootMesh The glTF root mesh
Expand All @@ -124,6 +150,15 @@ export class KHR_materials_variants implements IGLTFLoaderExtension {
return extensionMetadata.lastSelected;
}

/**
* Gets the last selected variant tag name(s) or null if original.
* @param rootMesh The glTF root mesh
* @returns The selected variant tag name(s).
*/
public getLastSelectedVariant(rootMesh: Mesh): Nullable<string | string[]> {
return KHR_materials_variants.GetLastSelectedVariant(rootMesh);
}

private static _GetExtensionMetadata(rootMesh: Mesh): Nullable<IExtensionMetadata> {
return rootMesh?.metadata?.gltf?.[NAME] || null;
}
Expand Down

0 comments on commit 67d15f2

Please sign in to comment.