示例#1
0
        public void Execute(Collision collision)
        {
            IEnemy enemy = (IEnemy)collision.Collider;

            Vector2 movementAmount = CompassDirectionUtil.GetDirectionVector(collision.Side) * (collision.Side == CompassDirection.North || collision.Side == CompassDirection.South ? collision.IntersectionRec.Height : collision.IntersectionRec.Width);

            if (enemy.GetType() != typeof(Bat) && enemy.GetType() != typeof(Hand))
            {
                if (enemy.GetType() == typeof(EnemyDamageDecorator) && ((EnemyDamageDecorator)enemy).stillSlide)
                {
                    ((EnemyDamageDecorator)enemy).stopKnockback(new Vector2(collision.IntersectionRec.Width, collision.IntersectionRec.Height));
                }
                else
                {
                    enemy.EditPosition(movementAmount);
                }
            }
            else
            {
                if (collision.IntersectionRec.X >= rightXBorder)
                {
                    enemy.EditPosition(new Vector2(-collision.IntersectionRec.Width, 0));
                }
                else if (collision.IntersectionRec.Y <= topYBorder)
                {
                    enemy.EditPosition(new Vector2(0, collision.IntersectionRec.Height));
                }
                else if (collision.IntersectionRec.Y >= botYBorder)
                {
                    enemy.EditPosition(new Vector2(0, -collision.IntersectionRec.Height));
                }
                else if (collision.IntersectionRec.X <= leftXBorder)
                {
                    enemy.EditPosition(new Vector2(collision.IntersectionRec.Width, 0));
                }
            }
        }
示例#2
0
        public void Execute(Collision collision)
        {
            if (game.Mode != 2)
            {
                IPlayer player1 = (IPlayer)collision.Collider;
                var     side    = collision.Side;

                // side is side of player2 (collidee)
                Vector2 moveAmount = Vector2.Multiply(new Vector2(collision.IntersectionRec.Width, collision.IntersectionRec.Height), CompassDirectionUtil.GetDirectionVector(side));
                player1.EditPosition(moveAmount);

                if (player1 is DamagedPlayer dP && dP.stillSlide)
                {
                    dP.StopKnockback(new Vector2(collision.IntersectionRec.Width, collision.IntersectionRec.Height));
                }
            }
        }