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