/// <summary> /// Comprueba las colisiones de cada uno de los nodos del grafo de escena con el resto. Esta pensada para ser llamada /// desde el nodo de raiz /// </summary> /// <param name="sceneGraph"></param> /// <param name="collisionPairs"></param> public void CheckSceneCollision(SceneNode sceneGraph,SortedSet<Pair> collisionPairs) { CheckNodeCollision(sceneGraph, collisionPairs); foreach (SceneNode child in sceneGraph._children) CheckSceneCollision(child, collisionPairs); }
/// <summary> /// Comprueba la colisión de un nodo y sus hijos con otro nodo /// </summary> /// <param name="node">Nodo con el que se va a comparar</param> /// <param name="collisionPairs">Conjunto que almacena todos los pares de elementos colisionados</param> protected void CheckNodeCollision(SceneNode node,SortedSet<Pair> collisionPairs) { if (this is ICollider && node is ICollider && this != node && Utilities.ColliderUtilities.Collision((ICollider)this, (ICollider)node)) { Pair a = Utilities.ColliderUtilities.GetSortedPair((ICollider)this, (ICollider)node); collisionPairs.Add(a); } foreach (SceneNode sc in _children) { sc.CheckNodeCollision(node,collisionPairs); } }
/// <summary> /// Quita el nodo de la lista de nodos hijo /// </summary> /// <param name="scNode">Nodo a quitar</param> /// <remarks> /// Se quita de la lista pero no se elimina de memoria /// </remarks> public bool RemoveChild(SceneNode scNode) { bool encontrado = _children.Remove(scNode); if (encontrado) { scNode.Parent = null; return true; } for (int n = 0; n < _children.Count; n++) { if (_children[n].RemoveChild(scNode) == true) return true; } return false; Debug.Assert(encontrado); }
/// <summary> /// Añade un nodo hijo al nodo /// </summary> /// <param name="scNode">Nodo a aña´dir</param> public void AddChild(SceneNode scNode) { scNode.Parent = this; _children.Add(scNode); }
public override void Execute(SceneNode subject, SFML.System.Time dt) { if (subject.GetType() == typeof(Entities.PlayerShip)) ((Entities.PlayerShip)subject).Fire(); }
public override void Execute(SceneNode subject, SFML.System.Time dt) { ((Entity)subject).Position += velocity * dt.AsSeconds(); }