/// <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; }
//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); }
void OnPrimitiveContacted(CollisionPrimitive primitive) { if (primitive is AmmoRound) { AmmoRound ammo = (AmmoRound)primitive; this.TakeDamage(ammo.ShotType, ammo.Position); } }
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--; } } }
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); }
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>()); } } }
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); }
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; } } }