public bool die(Fixture fixtureA, Fixture fixtureB, FarseerPhysics.Dynamics.Contacts.Contact contact) { if (fixtureA.Body.Equals(this._body) || fixtureB.Body.Equals(this._body) && contact.IsTouching()) { health -= 10; if (this.health <= 0) { float x = _body.LinearVelocity.X; float y = _body.LinearVelocity.Y * 1.7f; _body.Inertia = 0f; _body.AngularVelocity = 0f; _body.ApplyLinearImpulse(new Vector2(-x, -y)); _body.CollisionCategories = Category.None; this.health = 0; GameplayScreen.getInstance().showRetryScreen(); } return false; } else return false; }
/// <summary> /// Handle contact interactions. /// </summary> /// <param name="contact">Contact point.</param> private void HandleContact(Physics.Dynamics.Contacts.Contact contact) { if (!contact.IsTouching()) return; // Get Entities from both shapes. Entity entA = (Entity) contact.FixtureA.Body.UserData; Entity entB = (Entity) contact.FixtureB.Body.UserData; entA.OnCollide(entB, contact); entB.OnCollide(entA, contact); }
public bool take10Damage(Fixture fixtureA, Fixture fixtureB, FarseerPhysics.Dynamics.Contacts.Contact contact) { if (contact.IsTouching() && (fixtureA.Body == _body || fixtureB.Body == _body)) { //only take away 10 hitpoints for every 1 second fixtures are touching. health -= 5; _body.Inertia = 0f; _body.Rotation = 0f; _body.AngularVelocity = 0f; _body.LinearVelocity = new Vector2(0f, _body.LinearVelocity.Y); _body.ApplyLinearImpulse(new Vector2(-5f, 0f)); } // Always touch return true; }
public bool PickupsForPlayer(Fixture fixtureA, Fixture fixtureB, FarseerPhysics.Dynamics.Contacts.Contact contact) { if (contact.IsTouching()) { try { if ((fixtureA.UserData.ToString() == "athyl" && fixtureB.UserData.ToString() == "player") || (fixtureA.UserData.ToString() == "athyl" && fixtureB.UserData.ToString() == "playerwheel")) { playerz.playerAthyl += 50; ethanolDrop = true; return true; } else if ((fixtureA.UserData.ToString() == "hpBox" && fixtureB.UserData.ToString() == "player") || (fixtureA.UserData.ToString() == "hpBox" && fixtureB.UserData.ToString() == "playerwheel")) { playerz.playerHP += 35; hpDrop = true; return true; } else { ethanolDrop = false; hpDrop = false; } } catch (Exception ex) { logger.Error(ex.Message + " " + ex.TargetSite + " " + ex.StackTrace); } } return false; }
/// <summary> /// Kollision med kulor, tar bort något träffas /// olika logik beroende på om det är fiende eller spelare som krockar /// </summary> /// <param name="fixtureA"></param> /// <param name="fixtureB"></param> /// <param name="contact"></param> /// <returns></returns> bool body_OnCollision(Fixture fixtureA, Fixture fixtureB, FarseerPhysics.Dynamics.Contacts.Contact contact) { if (contact.IsTouching()) { try { if (fixtureA.UserData.ToString() == "shot" && fixtureB.UserData.ToString() == "enemy" || fixtureA.UserData.ToString() == "shot" && fixtureB.UserData.ToString() == "boss" || fixtureA.UserData.ToString() == "shot" && fixtureB.UserData.ToString() == "enemywheel" || fixtureA.UserData.ToString() == "shot" && fixtureB.UserData.ToString() == "bosswheel") { foreach (Bullet i in newbullets) { if (i.Obj.body.BodyId == fixtureA.Body.BodyId) { if (!removeList.Contains(i)) removeList.Add(i); game.damageList.Add(new Damage(fixtureB.Body.BodyId, i.Damage)); } } return true; } else if (fixtureA.UserData.ToString() == "melee" && fixtureB.UserData.ToString() == "enemy" || fixtureA.UserData.ToString() == "melee" && fixtureB.UserData.ToString() == "boss" || fixtureA.UserData.ToString() == "melee" && fixtureB.UserData.ToString() == "enemywheel" || fixtureA.UserData.ToString() == "melee" && fixtureB.UserData.ToString() == "bosswheel") { foreach (Bullet i in newbullets) { if (i.Obj.body.BodyId == fixtureA.Body.BodyId) { if (!removeList.Contains(i)) removeList.Add(i); } game.damageList.Add(new Damage(fixtureB.Body.BodyId, i.Damage)); } return true; } else if (fixtureA.UserData.ToString() == "fire" && fixtureB.UserData.ToString() == "enemy" || fixtureA.UserData.ToString() == "fire" && fixtureB.UserData.ToString() == "boss" || fixtureA.UserData.ToString() == "fire" && fixtureB.UserData.ToString() == "enemywheel" || fixtureA.UserData.ToString() == "fire" && fixtureB.UserData.ToString() == "bosswheel") { foreach (Bullet i in newbullets) { if (i.Obj.body.BodyId == fixtureA.Body.BodyId) { if (!removeList.Contains(i)) removeList.Add(i); game.damageList.Add(new Damage(fixtureB.Body.BodyId, i.Damage)); } } return true; } else if ((fixtureA.UserData.ToString() == "hostile" && fixtureB.UserData.ToString() == "player") ||(fixtureA.UserData.ToString() == "hostile" && fixtureB.UserData.ToString() == "shield")) { foreach (Bullet i in newbullets) { if (i.Obj.body.BodyId == fixtureA.Body.BodyId) { if (!removeList.Contains(i)) removeList.Add(i); game.damageList.Add(new Damage(fixtureB.Body.BodyId, i.Damage, player.skillTree.playerDmg)); } } return true; } else if (fixtureA.UserData.ToString() == "shot" && fixtureB.UserData.ToString() == "ground") { foreach (Bullet i in newbullets) { if (i.Obj.body.BodyId == fixtureA.Body.BodyId) { if (!removeList.Contains(i)) removeList.Add(i); } } return true; } else if (fixtureA.UserData.ToString() == "fire" && fixtureB.UserData.ToString() == "ground") { foreach (Bullet i in newbullets) { if (i.Obj.body.BodyId == fixtureA.Body.BodyId) { if (!removeList.Contains(i)) removeList.Add(i); } } return true; } else if (fixtureA.UserData.ToString() == "hostile" && fixtureB.UserData.ToString() == "ground") { foreach (Bullet i in newbullets) { if (i.Obj.body.BodyId == fixtureA.Body.BodyId) { if (!removeList.Contains(i)) removeList.Add(i); } } return true; } } catch (Exception ex) { logger.Fatal(ex.Message + " " + ex.TargetSite + " " + ex.StackTrace); } } return false; }
public bool makeShieldStatic(Fixture fixtureA, Fixture fixtureB, FarseerPhysics.Dynamics.Contacts.Contact contact) { if (contact.IsTouching()) { if ((fixtureA.UserData.ToString() == "shield" && fixtureB.UserData.ToString() == "ground")) { JointFactory.CreateFixedDistanceJoint(world, shieldGfx.body, ConvertUnits.ToSimUnits(Vector2.Zero), ConvertUnits.ToSimUnits(shieldGfx.Position)); } if ((fixtureA.UserData.ToString() == "shield" && fixtureB.UserData.ToString() == "hostile") || (fixtureA.UserData.ToString() == "hostile" && fixtureB.UserData.ToString() == "shield")) { shieldHP -= 10; Console.WriteLine(shieldHP); } return true; } return false; }
/// <summary> /// Farseer Physics callback. Handles the case where two objects collide. /// </summary> /// <param name="contact">Contact point.</param> /// <param name="oldManifold">Manifold from last update.</param> protected void PreSolve(Physics.Dynamics.Contacts.Contact contact, ref Physics.Collision.Manifold oldManifold) { if (!contact.IsTouching()) return; // Attempt to get Entities from both shapes. Entity entA = (Entity) contact.FixtureA.Body.UserData; Entity entB = (Entity) contact.FixtureB.Body.UserData; // Determine if shapes agree to collide. bool shouldCollide = entA.ShouldCollide(entB); shouldCollide &= entB.ShouldCollide(entA); contact.Enabled = shouldCollide; if (shouldCollide && contact.IsTouching()) { entA.OnCollide(entB, contact); entB.OnCollide(entA, contact); } }