Exemplo n.º 1
0
    public void CollisionHits()
    {
        foreach (Side s in collisions.Keys)
        {
            foreach (Tile t in collisions[s])
            {
                switch (s)
                {
                case Side.Right:
                {
                    if (CollisionBox.CollideThrough(Box, t.Box))
                    {
                        Position = new Vec2(t.Position.X - Tile.Size.X - Size.X, Position.Y);
                    }
                    Velocity = (Velocity.X > 0)? new Vec2(0, Velocity.Y) : Velocity;
                    break;
                }

                case Side.Left:
                {
                    if (CollisionBox.CollideThrough(Box, t.Box))
                    {
                        Position = new Vec2(t.Position.X + Tile.Size.X + Size.X, Position.Y);
                    }
                    Velocity = (Velocity.X < 0) ? new Vec2(0, Velocity.Y) : Velocity;
                    break;
                }

                case Side.Up:
                {
                    if (CollisionBox.CollideThrough(Box, t.Box))
                    {
                        Position = new Vec2(Position.X, t.Position.Y - Tile.Size.Y - Size.Y);
                    }
                    Velocity = (Velocity.Y > 0) ? new Vec2(Velocity.X, 0) : Velocity;
                    break;
                }

                case Side.Down:
                {
                    if (CollisionBox.CollideThrough(Box, t.Box))
                    {
                        Position = new Vec2(Position.X, t.Position.Y + Tile.Size.Y + Size.Y);
                    }
                    Velocity = (Velocity.Y < 0) ? new Vec2(Velocity.X, 0) : Velocity;
                    break;
                }
                }
            }
        }
    }