bool CheckBoundaries(CollisionCheckType type, MoveDirection dir) { foreach (Boundary b in boundaries) { if (b.CheckPotentialCollision(type, tetriminos[currentTetriminoIndex], dir)) { return(true); } } return(false); }
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}"); } }
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); }
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)); }
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) { }
private DestructableObject LoadKillableObject(string name, Vector2 position, CollisionCheckType perPixel) { return(new DestructableObject("Tiles/" + name, position, perPixel, _engine)); }
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; }
public EvilBug(CollisionCheckType collisionCheck, Engine engine) : base(collisionCheck, engine) { }
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; }