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