protected GameObject BuildGameObjectFromArray(GameObjectArrayPropTypeData gameObjectArrayProp, int index, Matrix4x4 transform) { if (index < 0 || index >= gameObjectArrayProp.Templates.Length) { // Invalid index return(null); } GameObject template = gameObjectArrayProp.Templates[index]; return(BuildGameObject(template, gameObjectArrayProp.NodeId, gameObjectArrayProp.affectsNavigation, transform)); }
public override GameObject AddGameObjectFromArray(GameObjectArrayPropTypeData gameObjectArrayProp, int index, Matrix4x4 transform, IDungeonSceneObjectInstantiator objectInstantiator) { if (gameObjectArrayProp == null) { return(null); } string NodeId = gameObjectArrayProp.NodeId + "_" + index.ToString(); // If we are in 2D mode, then flip the YZ axis { var mode2D = false; if (config != null) { mode2D = config.Mode2D; } if (mode2D) { var position = Matrix.GetTranslation(ref transform); FlipSpritePosition(ref position); Matrix.SetTranslation(ref transform, position); } } GameObject item = null; // Try to reuse an object from the pool if (pooledObjects.ContainsKey(NodeId) && pooledObjects [NodeId].Count > 0) { item = pooledObjects [NodeId].Dequeue(); SetTransform(item.transform, transform); } else { // Pool is exhausted for this object item = BuildGameObjectFromArray(gameObjectArrayProp, index, transform, objectInstantiator); } item.isStatic = gameObjectArrayProp.IsStaticObject; if (gameObjectArrayProp.IsStaticObject) { RecursivelySetStatic(item.transform); } return(item); }
public void BuildFromGraph(Graph graph) { Props.Clear(); if (graph == null) { return; } var nodes = graph.Nodes.ToArray(); Array.Sort(nodes, new LeftToRightNodeComparer()); foreach (var node in nodes) { if (node is VisualNode) { var visualNode = node as VisualNode; foreach (var meshParentNode in visualNode.GetParentNodes()) { if (meshParentNode is MarkerNode) { var markerNode = meshParentNode as MarkerNode; PropTypeData item = null; if (visualNode is GameObjectNode) { var meshItem = new GameObjectPropTypeData(); var goNode = visualNode as GameObjectNode; meshItem.Template = goNode.Template; item = meshItem; } else if (visualNode is GameObjectArrayNode) { var arrayPropData = new GameObjectArrayPropTypeData(); var arrayNode = visualNode as GameObjectArrayNode; if (arrayNode == null || arrayNode.Templates == null) { arrayPropData.Templates = new GameObject[0]; } else { var count = arrayNode.Templates.Length; arrayPropData.Templates = new GameObject[count]; System.Array.Copy(arrayNode.Templates, arrayPropData.Templates, count); } item = arrayPropData; } else if (visualNode is SpriteNode) { var spriteItem = new SpritePropTypeData(); var spriteNode = visualNode as SpriteNode; spriteItem.sprite = spriteNode.sprite; spriteItem.color = spriteNode.color; spriteItem.materialOverride = spriteNode.materialOverride; spriteItem.sortingLayerName = spriteNode.sortingLayerName; spriteItem.orderInLayer = spriteNode.orderInLayer; spriteItem.collisionType = spriteNode.collisionType; spriteItem.physicsMaterial = spriteNode.physicsMaterial; spriteItem.physicsOffset = spriteNode.physicsOffset; spriteItem.physicsSize = spriteNode.physicsSize; spriteItem.physicsRadius = spriteNode.physicsRadius; item = spriteItem; } else { // Unsupported visual node type continue; } // Set the common settings item.NodeId = visualNode.Id.ToString(); item.AttachToSocket = markerNode.Caption; item.Affinity = visualNode.attachmentProbability; item.ConsumeOnAttach = visualNode.consumeOnAttach; item.Offset = visualNode.offset; item.IsStaticObject = visualNode.IsStatic; item.affectsNavigation = visualNode.affectsNavigation; item.UseSelectionRule = visualNode.selectionRuleEnabled; item.SelectorRuleClassName = visualNode.selectionRuleClassName; item.UseTransformRule = visualNode.transformRuleEnabled; item.TransformRuleClassName = visualNode.transformRuleClassName; item.useSpatialConstraint = visualNode.useSpatialConstraint; item.spatialConstraint = visualNode.spatialConstraint; var emitterNodes = visualNode.GetChildNodes(); foreach (var childNode in emitterNodes) { if (childNode is MarkerEmitterNode) { var emitterNode = childNode as MarkerEmitterNode; if (emitterNode.Marker != null) { PropChildSocketData childData = new PropChildSocketData(); childData.Offset = emitterNode.offset; childData.SocketType = emitterNode.Marker.Caption; item.ChildSockets.Add(childData); } } } Props.Add(item); } } } } }
/// <summary> /// Requests the creation of a game object from the provided list /// </summary> /// <returns>The game object from array.</returns> /// <param name="gameObjectArrayProp">Game object array property.</param> /// <param name="index">Index.</param> /// <param name="transform">Transform.</param> public virtual GameObject AddGameObjectFromArray(GameObjectArrayPropTypeData gameObjectArrayProp, int index, Matrix4x4 transform) { return(null); }
/// <summary> /// Requests the creation of a game object from the provided list /// </summary> /// <returns>The game object from array.</returns> /// <param name="gameObjectArrayProp">Game object array property.</param> /// <param name="index">Index.</param> /// <param name="transform">Transform.</param> public virtual GameObject AddGameObjectFromArray(GameObjectArrayPropTypeData gameObjectArrayProp, int index, Matrix4x4 transform, IDungeonSceneObjectInstantiator objectInstantiator) { return(null); }