protected GameObject BuildGameObject(GameObjectPropTypeData gameObjectProp, Matrix4x4 transform) { Matrix.DecomposeMatrix(ref transform, out _position, out _rotation, out _scale); var MeshTemplate = gameObjectProp.Template; string NodeId = gameObjectProp.NodeId; var gameObj = Instantiate(MeshTemplate, _position, _rotation) as GameObject; gameObj.transform.localScale = _scale; gameObj.layer = 0; if (itemParent != null) { string parentName = gameObjectProp.AttachToSocket; var subTypeParent = itemParent.transform.Find(parentName); if (subTypeParent == null) { subTypeParent = new GameObject(parentName).transform; subTypeParent.SetParent(itemParent.transform); } gameObj.transform.parent = subTypeParent; } var data = gameObj.AddComponent <DungeonSceneProviderData> (); data.NodeId = NodeId; data.dungeon = dungeon; data.affectsNavigation = gameObjectProp.affectsNavigation; return(gameObj); }
public override GameObject AddGameObject(GameObjectPropTypeData gameObjectProp, Matrix4x4 transform, IDungeonSceneObjectInstantiator objectInstantiator) { if (gameObjectProp == null) { return(null); } var MeshTemplate = gameObjectProp.Template; string NodeId = gameObjectProp.NodeId; if (MeshTemplate == null) { return(null); } // 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 = BuildGameObject(gameObjectProp, transform, objectInstantiator); } item.isStatic = gameObjectProp.IsStaticObject; if (gameObjectProp.IsStaticObject) { RecursivelySetStatic(item.transform); } return(item); }
public override void AddGameObject(GameObjectPropTypeData gameObjectProp, Matrix4x4 transform) { if (gameObjectProp == null) { return; } var MeshTemplate = gameObjectProp.Template; string NodeId = gameObjectProp.NodeId; if (MeshTemplate == null) { return; } // If we are in 2D mode, then flip the YZ axis { var mode2D = false; if (config is GridDungeonConfig) { var gridConfig = config as GridDungeonConfig; mode2D = gridConfig.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 = BuildGameObject(gameObjectProp, transform); } item.isStatic = gameObjectProp.IsStaticObject; }
/// <summary> /// Request the creation of a game object /// </summary> /// <param name="gameObjectProp">The template to use for instantiation</param> /// <param name="transform">The transform of the instantiated game object</param> public virtual void AddGameObject(GameObjectPropTypeData gameObjectProp, Matrix4x4 transform) { }
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); } } } } }
protected GameObject BuildGameObject(GameObjectPropTypeData gameObjectProp, Matrix4x4 transform) { return(BuildGameObject(gameObjectProp.Template, gameObjectProp.NodeId, gameObjectProp.affectsNavigation, transform)); }
/// <summary> /// Request the creation of a game object /// </summary> /// <param name="gameObjectProp">The template to use for instantiation</param> /// <param name="transform">The transform of the instantiated game object</param> public virtual GameObject AddGameObject(GameObjectPropTypeData gameObjectProp, Matrix4x4 transform) { return(null); }
protected GameObject BuildGameObject(GameObjectPropTypeData gameObjectProp, Matrix4x4 transform, IDungeonSceneObjectInstantiator objectInstantiator) { return(BuildGameObject(gameObjectProp.Template, gameObjectProp.NodeId, gameObjectProp.affectsNavigation, transform, objectInstantiator)); }
/// <summary> /// Request the creation of a game object /// </summary> /// <param name="gameObjectProp">The template to use for instantiation</param> /// <param name="transform">The transform of the instantiated game object</param> public virtual GameObject AddGameObject(GameObjectPropTypeData gameObjectProp, Matrix4x4 transform, IDungeonSceneObjectInstantiator objectInstantiator) { return(null); }