예제 #1
0
        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));
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
                        }
                    }
                }
            }
        }
예제 #4
0
 /// <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);
 }
예제 #5
0
 /// <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);
 }