Beispiel #1
0
 bool CheckBoundaries(CollisionCheckType type, MoveDirection dir)
 {
     foreach (Boundary b in boundaries)
     {
         if (b.CheckPotentialCollision(type, tetriminos[currentTetriminoIndex], dir))
         {
             return(true);
         }
     }
     return(false);
 }
Beispiel #2
0
 public static bool IsBlocking(BlockType blockType, CollisionCheckType checkType)
 {
     if (checkType == CollisionCheckType.All)
     {
         return(blockType == BlockType.Solid || blockType == BlockType.ProjectilePassingSolid);
     }
     else if (checkType == CollisionCheckType.BlocksProjectiles)
     {
         return(blockType == BlockType.Solid);
     }
     else
     {
         throw new Exception($"Unknown check type {checkType}");
     }
 }
Beispiel #3
0
        bool CheckTetriminos(CollisionCheckType type, MoveDirection dir)
        {
            List <Rectangle> check;

            if (type == CollisionCheckType.Tetrimino)
            {
                check = tetriminos[currentTetriminoIndex].rectangles;
            }
            else
            {
                check = tetriminos[currentTetriminoIndex].shadowRectangles;
            }
            foreach (Tetrimino t in tetriminos)
            {
                if (t != tetriminos[currentTetriminoIndex])
                {
                    foreach (Rectangle r1 in t.rectangles)
                    {
                        foreach (Rectangle r2 in check)
                        {
                            Rectangle r2Copy = r2;
                            switch (dir)
                            {
                            case MoveDirection.Left: r2Copy.X -= Tetrimino.tileSize; break;

                            case MoveDirection.Right: r2Copy.X += Tetrimino.tileSize; break;

                            case MoveDirection.Down: r2Copy.Y += Tetrimino.tileSize; break;

                            case MoveDirection.Up: r2Copy.Y -= Tetrimino.tileSize; break;
                            }
                            if (r1.Intersects(r2Copy))
                            {
                                return(true);
                            }
                        }
                    }
                }
            }
            return(false);
        }
Beispiel #4
0
        public static RayResult CastRay(Level level, Vector location, Vector vector, CollisionCheckType collisionCheckType, int maxDistance = 1000)
        {
            vector = vector.ToUnit() * 10;

            var currentLocation = location;
            var step            = 0;

            while (step < maxDistance / 10)
            {
                step++;
                currentLocation += vector;

                var block = Services.Game.Level.GetBlockByPixelLocation((int)currentLocation.X, (int)currentLocation.Y);

                if (PhysicsComponent.IsBlocking(block, collisionCheckType))
                {
                    return(new RayResult(true, currentLocation));
                }
            }

            return(new RayResult(false, Vector.Zero));
        }
Beispiel #5
0
        public bool CheckPotentialCollision(CollisionCheckType type, Tetrimino tetrimino, MoveDirection direction)
        {
            List <Rectangle> check;

            if (type == CollisionCheckType.Tetrimino)
            {
                check = tetrimino.rectangles;
            }
            else
            {
                check = tetrimino.shadowRectangles;
            }
            switch (direction)
            {
            case MoveDirection.Left:
                if (side == BoundarySide.Left)
                {
                    foreach (Rectangle rectangle in check)
                    {
                        Rectangle r = rectangle;     //copy
                        r.X -= Tetrimino.tileSize;
                        if (r.X <= box.X)
                        {
                            return(true);
                        }
                    }
                }
                break;

            case MoveDirection.Right:
                if (side == BoundarySide.Right)
                {
                    foreach (Rectangle rectangle in check)
                    {
                        Rectangle r = rectangle;     //copy
                        r.X += Tetrimino.tileSize;
                        if (r.X >= box.X)
                        {
                            return(true);
                        }
                    }
                }
                break;

            case MoveDirection.Down:
                if (side == BoundarySide.Bottom)
                {
                    foreach (Rectangle rectangle in check)
                    {
                        Rectangle r = rectangle;     //copy
                        r.Y += Tetrimino.tileSize;
                        if (r.Y >= box.Y)
                        {
                            return(true);
                        }
                    }
                }
                break;
            }
            return(false);
        }
 protected AIControllableObject(CollisionCheckType collisionCheck, Engine engine)
     : base(collisionCheck, engine)
 {
 }
Beispiel #7
0
 private DestructableObject LoadKillableObject(string name, Vector2 position, CollisionCheckType perPixel)
 {
     return(new DestructableObject("Tiles/" + name, position, perPixel, _engine));
 }
Beispiel #8
0
 bool CheckCollisions(CollisionCheckType type, MoveDirection dir)
 {
     return(CheckBoundaries(type, dir) || CheckTetriminos(type, dir));
 }
 public DestructableObject(string texture, Vector2 position, CollisionCheckType collisionCheck, Engine engine)
     : base(collisionCheck, engine)
 {
     _textureName = texture;
     Position = position;
 }
 protected CollidableGameObject(CollisionCheckType collisionCheck, Engine engine)
     : base(engine)
 {
     CollCheckLevel = collisionCheck;
 }
Beispiel #11
0
 public EvilBug(CollisionCheckType collisionCheck, Engine engine) : base(collisionCheck, engine)
 {
 }
Beispiel #12
0
 private DestructableObject LoadKillableObject(string name, Vector2 position, CollisionCheckType perPixel)
 {
     return new DestructableObject("Tiles/" + name, position, perPixel, _engine);
 }
 protected CollidableGameObject(CollisionCheckType collisionCheck,Engine engine)
     : base(engine)
 {
     CollCheckLevel = collisionCheck;
 }
Beispiel #14
0
 public EvilBug(CollisionCheckType collisionCheck, Engine engine)
     : base(collisionCheck, engine)
 {
 }
Beispiel #15
0
 protected AIControllableObject(CollisionCheckType collisionCheck, Engine engine) : base(collisionCheck, engine)
 {
 }
Beispiel #16
0
 public DestructableObject(string texture, Vector2 position, CollisionCheckType collisionCheck, Engine engine) : base(collisionCheck, engine)
 {
     _textureName = texture;
     Position     = position;
 }