Example #1
0
        /// <summary>
        /// Indica que la bala ha impactado con algo
        /// </summary>
        /// <param name="primitive">Primitiva de colisión con la que ha impactado la bala</param>
        public override void PrimitiveContacted(CollisionPrimitive primitive)
        {
            base.PrimitiveContacted(primitive);

            // Desactivar la bala
            this.m_ShotType = ShotType.UnUsed;
        }
Example #2
0
        //test for collision against a specific object
        private Actor CheckCollision(GameTime gameTime, Actor3D actor3D)
        {
            //dont test for collision against yourself - remember the player is in the object manager list too!
            if (this != actor3D)
            {
                if (actor3D is CollidablePrimitiveObject)
                {
                    CollidablePrimitiveObject collidableObject = actor3D as CollidablePrimitiveObject;
                    if (CollisionPrimitive.Intersects(collidableObject.CollisionPrimitive, Transform3D.TranslateIncrement))
                    {
                        return(collidableObject);
                    }
                }
                else if (actor3D is CollidableZoneObject)
                {
                    CollidableZoneObject zoneObject = actor3D as CollidableZoneObject;
                    if (CollisionPrimitive.Intersects(zoneObject.CollisionPrimitive, Transform3D.TranslateIncrement))
                    {
                        return(zoneObject);
                    }
                }
            }

            return(null);
        }
Example #3
0
        void OnPrimitiveContacted(CollisionPrimitive primitive)
        {
            if (primitive is AmmoRound)
            {
                AmmoRound ammo = (AmmoRound)primitive;

                this.TakeDamage(ammo.ShotType, ammo.Position);
            }
        }
Example #4
0
        void OnPrimitiveContacted(CollisionPrimitive primitive)
        {
            if (primitive is AmmoRound)
            {
                AmmoRound ammo = (AmmoRound)primitive;

                this.TakeDamage(ammo.Mass, ammo.Velocity, ammo.Position);
            }
        }
        public static PyObject ToPython(this CollisionPrimitive obj)
        {
            var kindInt    = PyConvert.ToPyObject((int)obj.Kind);
            var parameters = PyConvert.ToPyObject(obj.Parameters);
            var pose       = PyConvert.ToPyObject(obj.Pose);

            using (Py.GIL())
            {
                var kind = pyXamlaMotionTypes.CollisionPrimitiveKind(kindInt);
                return(pyXamlaMotionTypes.CollisionPrimitive(kind, parameters, pose));
            }
        }
 public new object Clone()
 {
     return(new CollidablePickupObject("clone - " + ID,                                   //deep
                                       ActorType,                                         //deep
                                       StatusType,                                        //deep
                                       Transform3D.Clone() as Transform3D,                //deep
                                       EffectParameters.Clone() as EffectParameters,      //deep
                                       this.IVertexData,                                  //shallow - its ok if objects refer to the same vertices
                                       CollisionPrimitive.Clone() as ICollisionPrimitive, //deep
                                       ObjectManager,                                     //shallow - reference
                                       pickupParameters.Clone() as PickupParameters));    //deep
 }
 //deletes primitives that were removed on ARTable side
 private void DeleteRemovedPrimitives()
 {
     for (int i = 0; i < collisionPrimitives.Count; i++)
     {
         CollisionPrimitive colPrimitive = collisionPrimitives[i].GetComponent <CollisionPrimitive>();
         if (!existingPrimitives.Contains(colPrimitive.collisionPrimitiveMsg.GetName()))
         {
             colPrimitive.DestroyAppBar();
             Destroy(collisionPrimitives[i]);
             collisionPrimitives.Remove(collisionPrimitives[i]);
             Debug.Log("Removing " + colPrimitive.collisionPrimitiveMsg.GetName());
             i--;
         }
     }
 }
Example #8
0
        public static void DrawDebugPhysicObject(GraphicsDevice device, IPhysicObject iPhysicObject)
        {
            //Primitiva
            CollisionPrimitive pr = iPhysicObject.Primitive;

            //Transformación
            Matrix transform = pr.Transform;

            //Posición y orientación
            Vector3 position = transform.Translation;
            Vector3 up       = transform.Up + position;
            Vector3 forward  = transform.Forward + position;
            Vector3 right    = transform.Right + position;

            //Velocidad
            Vector3 velocity = pr.Velocity + position;

            //Aceleración
            Vector3 acceleration = pr.Acceleration + position;

            m_DebugBoxVertexes[0].Position = position;
            m_DebugBoxVertexes[0].Color    = Color.Red;
            m_DebugBoxVertexes[1].Position = up;
            m_DebugBoxVertexes[1].Color    = Color.Red;

            m_DebugBoxVertexes[2].Position = position;
            m_DebugBoxVertexes[2].Color    = Color.Green;
            m_DebugBoxVertexes[3].Position = forward;
            m_DebugBoxVertexes[3].Color    = Color.Green;

            m_DebugBoxVertexes[4].Position = position;
            m_DebugBoxVertexes[4].Color    = Color.Blue;
            m_DebugBoxVertexes[5].Position = right;
            m_DebugBoxVertexes[5].Color    = Color.Blue;

            m_DebugBoxVertexes[6].Position = position;
            m_DebugBoxVertexes[6].Color    = Color.White;
            m_DebugBoxVertexes[7].Position = velocity;
            m_DebugBoxVertexes[7].Color    = Color.White;

            m_DebugBoxVertexes[8].Position = position;
            m_DebugBoxVertexes[8].Color    = Color.Cyan;
            m_DebugBoxVertexes[9].Position = acceleration;
            m_DebugBoxVertexes[9].Color    = Color.Cyan;

            Debug.DebugDrawer.DrawLines(device, m_DebugBoxVertexes, 10);
        }
Example #9
0
        private Actor CheckCollision(GameTime gameTime, Actor3D actor3D, Vector3 translation)
        {
            if (!Equals(actor3D))
            {
                if (actor3D is CollidablePrimitiveObject)
                {
                    CollidablePrimitiveObject collidableObject = actor3D as CollidablePrimitiveObject;
                    if (CollisionPrimitive.Intersects(collidableObject.CollisionPrimitive, translation))
                    {
                        return(collidableObject);
                    }
                }
                else if (actor3D is CollidableZoneObject)
                {
                    CollidableZoneObject zoneObject = actor3D as CollidableZoneObject;
                    if (CollisionPrimitive.Intersects(zoneObject.CollisionPrimitive, translation))
                    {
                        return(zoneObject);
                    }
                }
            }

            return(null);
        }
    //updates existing primitive or creates new one
    private void UpdatePrimitive(CollisionPrimitiveMsg primitiveMsg)
    {
        bool updated = false;

        foreach (GameObject primitive in collisionPrimitives)
        {
            CollisionPrimitive colPrimitive = primitive.GetComponent <CollisionPrimitive>();
            //if primitive exists, then just update it
            if (colPrimitive.collisionPrimitiveMsg.GetName().Equals(primitiveMsg.GetName()))
            {
                colPrimitive.UpdatePrimitive(primitiveMsg);
                updated = true;
            }
        }
        //if primitive wasn't updated, meaning it doesn't exists.. so create new one
        if (!updated)
        {
            GameObject new_primitive = new GameObject("CollisionObj-" + primitiveMsg.GetName());
            new_primitive.transform.parent           = worldAnchor.transform;
            new_primitive.transform.localPosition    = Vector3.zero;
            new_primitive.transform.localEulerAngles = Vector3.zero;
            CollisionPrimitive collisionPrimitive = new_primitive.AddComponent <CollisionPrimitive>();
            // TODO pick correct prefab due to collision primitive (cube, sphere..)
            collisionPrimitive.InitNewPrimitive(primitiveMsg, collisionPrefabs[0]);

            new_primitive.SetActive(!environment_hidden);

            collisionPrimitives.Add(new_primitive);

            // remove AppBarDisplay to not to show the app bar in order to disable manipulation with specified objects
            if (nonManipulatableObjects.Contains(primitiveMsg.GetName()))
            {
                Destroy(new_primitive.GetComponentInChildren <AppBarDisplay>());
            }
        }
    }
Example #11
0
        public new object Clone()
        {
            CollidablePrimitiveObject primitive = new CollidablePrimitiveObject(ID, ActorType, StatusType, Transform3D.Clone() as Transform3D,
                                                                                EffectParameters.Clone() as EffectParameters, IVertexData.Clone() as IVertexData, CollisionPrimitive.Clone() as ICollisionPrimitive,
                                                                                ObjectManager);

            primitive.ControllerList.AddRange(GetControllerListClone());
            return(primitive);
        }
Example #12
0
 private void Start()
 {
     colPrimitive   = GetComponentInParent <CollisionPrimitive>();
     appBarInstance = GetComponent <BoundingBoxRig>().appBarInstance;
 }
        public new object Clone()
        {
            MovingObstacleSpawner spawner = new MovingObstacleSpawner(ID, ActorType, StatusType, Transform3D.Clone() as Transform3D,
                                                                      EffectParameters.Clone() as EffectParameters, IVertexData.Clone() as IVertexData, CollisionPrimitive.Clone() as ICollisionPrimitive,
                                                                      ObjectManager);

            spawner.ControllerList.AddRange(GetControllerListClone());
            return(spawner);
        }
        /// <summary>
        /// Obtiene los contactos para el momento actual
        /// </summary>
        private void GenerateContacts()
        {
            // Preparar datos de colisión
            this.m_ContactData.Reset();
            this.m_ContactData.Friction    = 0.75f;
            this.m_ContactData.Restitution = 0.1f;
            this.m_ContactData.Tolerance   = 0.1f;

            // Generadores de contactos
            foreach (ContactGenerator contactGenerator in this.m_ContactGenerators)
            {
                if (this.m_ContactData.HasFreeContacts())
                {
                    contactGenerator.AddContact(ref this.m_ContactData, 0);
                }
                else
                {
                    return;
                }
            }

            // Colisiones de cada proyectil y cada vehículo contra el suelo
            if (this.m_SceneryPrimitive != null)
            {
                // Recorrer los proyectiles
                foreach (AmmoRound projectileObj in this.m_ProjectileData)
                {
                    // Si hay contactos libres
                    if (this.m_ContactData.HasFreeContacts())
                    {
                        // Comprobar si el proyectil está activo
                        if (projectileObj.IsActive)
                        {
                            // Obtener las primitivas del proyectil y del terreno
                            CollisionPrimitive projectileObjPrimitive = projectileObj.Primitive;
                            CollisionPrimitive sceneryPrimitive       = this.m_SceneryPrimitive.GetContactedPrimitive(projectileObj);
                            if (CollisionDetector.BetweenObjects(ref projectileObjPrimitive, ref sceneryPrimitive, ref m_ContactData))
                            {
                                // Generar la explosión
                                if (projectileObj.GenerateExplosion)
                                {
                                    // Explosión
                                    Explosion explosion = Explosion.CreateArtilleryExplosion(projectileObjPrimitive.Position);

                                    this.m_ExplosionData.Add(explosion);

                                    this.FireExplosionStartsEvent(explosion);
                                }

                                // Informar de la colisión entre la bala y el suelo
                                projectileObj.SetContactedWith(this.m_SceneryPrimitive);
                            }
                        }
                    }
                    else
                    {
                        // Fin de la detección
                        return;
                    }
                }

                // Recorrer los vehículos
                foreach (IPhysicObject vehicleObj in this.m_ObjectData)
                {
                    // Si hay contactos libres
                    if (this.m_ContactData.HasFreeContacts())
                    {
                        // Comprobar si el vehículo está activo
                        if (vehicleObj.IsActive)
                        {
                            // Obtener las primitivas del vehículo y del terreno
                            CollisionPrimitive vehicleObjPrimitive = vehicleObj.Primitive;
                            CollisionPrimitive sceneryPrimitive    = this.m_SceneryPrimitive.GetContactedPrimitive(vehicleObj);
                            if (CollisionDetector.BetweenObjects(ref vehicleObjPrimitive, ref sceneryPrimitive, ref this.m_ContactData))
                            {
                                // Informar de la colisión entre el vehículo y el terreno
                                vehicleObj.SetContactedWith(this.m_SceneryPrimitive);
                            }
                        }
                    }
                    else
                    {
                        // Fin de la detección
                        return;
                    }
                }
            }

            // Chequear colisiones de los vehículos y los proyectiles
            foreach (AmmoRound projectileObj in this.m_ProjectileData)
            {
                // Si hay contactos libres
                if (this.m_ContactData.HasFreeContacts())
                {
                    if (projectileObj.IsActive)
                    {
                        CollisionPrimitive projectileObjPrimitive = projectileObj.Primitive;

                        // Recorrer los vehículos
                        foreach (IPhysicObject vehicleObj in this.m_ObjectData)
                        {
                            // Si hay contactos libres
                            if (this.m_ContactData.HasFreeContacts())
                            {
                                CollisionPrimitive vehicleObjPrimitive = vehicleObj.GetContactedPrimitive(projectileObj);
                                if (CollisionDetector.BetweenObjects(ref vehicleObjPrimitive, ref projectileObjPrimitive, ref m_ContactData))
                                {
                                    if (projectileObj.GenerateExplosion)
                                    {
                                        // Explosión
                                        Explosion explosion = Explosion.CreateArtilleryExplosion(projectileObjPrimitive.Position);

                                        this.m_ExplosionData.Add(explosion);

                                        this.FireExplosionStartsEvent(explosion);
                                    }

                                    // Informar de la colisión entre la caja y la bala
                                    vehicleObj.SetContactedWith(projectileObj);
                                    projectileObj.SetContactedWith(vehicleObj);
                                }
                            }
                            else
                            {
                                // Fin de la detección
                                return;
                            }
                        }
                    }
                }
                else
                {
                    // Fin de la detección
                    return;
                }
            }

            // Chequear colisiones entre vehículos
            for (int i = 0; i < this.m_ObjectData.Count; i++)
            {
                if (this.m_ContactData.HasFreeContacts())
                {
                    // Obtener la primitiva de colisión
                    CollisionPrimitive primitive1 = this.m_ObjectData[i].Primitive;

                    for (int x = i + 1; x < this.m_ObjectData.Count; x++)
                    {
                        if (this.m_ContactData.HasFreeContacts())
                        {
                            if (this.m_ObjectData[i].IsActive || this.m_ObjectData[x].IsActive)
                            {
                                // Obtener la segunda primitiva de colisión
                                CollisionPrimitive primitive2 = this.m_ObjectData[x].GetContactedPrimitive(this.m_ObjectData[i]);
                                if (CollisionDetector.BetweenObjects(ref primitive1, ref primitive2, ref this.m_ContactData))
                                {
                                    // Informar de la colisión entre cajas
                                    this.m_ObjectData[i].SetContactedWith(this.m_ObjectData[x]);
                                    this.m_ObjectData[x].SetContactedWith(this.m_ObjectData[i]);
                                }
                            }
                        }
                        else
                        {
                            return;
                        }
                    }
                }
                else
                {
                    return;
                }
            }
        }