|
@@ -879,8 +879,8 @@ export class NodeMaterial extends PushMaterial {
|
|
}
|
|
}
|
|
list.push(rootNode);
|
|
list.push(rootNode);
|
|
|
|
|
|
- for (var inputs of rootNode.inputs) {
|
|
|
|
- let connectedPoint = inputs.connectedPoint;
|
|
|
|
|
|
+ for (var input of rootNode.inputs) {
|
|
|
|
+ let connectedPoint = input.connectedPoint;
|
|
if (connectedPoint) {
|
|
if (connectedPoint) {
|
|
let block = connectedPoint.ownerBlock;
|
|
let block = connectedPoint.ownerBlock;
|
|
if (block !== rootNode) {
|
|
if (block !== rootNode) {
|
|
@@ -930,7 +930,7 @@ export class NodeMaterial extends PushMaterial {
|
|
* @param rootUrl defines the root URL to use to load textures and relative dependencies
|
|
* @param rootUrl defines the root URL to use to load textures and relative dependencies
|
|
* @returns a new node material
|
|
* @returns a new node material
|
|
*/
|
|
*/
|
|
- public static Parse(source: any, scene: Scene, rootUrl: string): NodeMaterial {
|
|
|
|
|
|
+ public static Parse(source: any, scene: Scene, rootUrl: string = ""): NodeMaterial {
|
|
let nodeMaterial = SerializationHelper.Parse(() => new NodeMaterial(source.name, scene), source, scene, rootUrl);
|
|
let nodeMaterial = SerializationHelper.Parse(() => new NodeMaterial(source.name, scene), source, scene, rootUrl);
|
|
|
|
|
|
let map: {[key: number]: NodeMaterialBlock} = {};
|
|
let map: {[key: number]: NodeMaterialBlock} = {};
|
|
@@ -940,19 +940,31 @@ export class NodeMaterial extends PushMaterial {
|
|
let blockType = _TypeStore.GetClass(parsedBlock.customType);
|
|
let blockType = _TypeStore.GetClass(parsedBlock.customType);
|
|
if (blockType) {
|
|
if (blockType) {
|
|
let block: NodeMaterialBlock = new blockType();
|
|
let block: NodeMaterialBlock = new blockType();
|
|
-
|
|
|
|
|
|
+ block._deserialize(parsedBlock, scene, rootUrl);
|
|
map[parsedBlock.id] = block;
|
|
map[parsedBlock.id] = block;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
// Connections
|
|
// Connections
|
|
- // for (var parsedBlock of source.blocks) {
|
|
|
|
- // let block = map[parsedBlock.id];
|
|
|
|
|
|
|
|
- // for (var input of parsedBlock.inputs) {
|
|
|
|
|
|
+ // Play them in reverse to make sure types are defined
|
|
|
|
+ for (var blockIndex = source.blocks.length - 1; blockIndex >=0; blockIndex--) {
|
|
|
|
+ let parsedBlock = source.blocks[blockIndex];
|
|
|
|
+ let block = map[parsedBlock.id];
|
|
|
|
+
|
|
|
|
+ for (var input of parsedBlock.inputs) {
|
|
|
|
+ if (!input.targetBlockId) {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ let inputPoint = block.getInputByName(input.inputName);
|
|
|
|
+ let targetBlock = map[input.targetBlockId];
|
|
|
|
+ let outputPoint = targetBlock.getOutputByName(input.targetConnectionName);
|
|
|
|
|
|
- // }
|
|
|
|
- // }
|
|
|
|
|
|
+ if (inputPoint && outputPoint) {
|
|
|
|
+ outputPoint.connectTo(inputPoint);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
// Outputs
|
|
// Outputs
|
|
for (var outputNodeId of source.outputNodes) {
|
|
for (var outputNodeId of source.outputNodes) {
|