public static void IceballCollideWithBlock(IceballObject iceball, IGameObject block) { Level level = Game1.Instance.currentState.Level; Rectangle iceballRectangle = iceball.GetHitBox(); Rectangle blockRectangle = block.GetHitBox(); IBlock castBlock = (IBlock)block; ICollision collisionSide = CollisionSideDetector.DetectCollisionSide(iceballRectangle, blockRectangle); if (castBlock.State is HiddenItemBlockState) { return; } if (collisionSide is TopCollision) { iceball.Position = new Vector2(iceball.Position.X, iceball.Position.Y - collisionSide.CollisionIntersection.Height); iceball.BounceOffGround(); } else if (collisionSide is RightCollision) { level.AddObject(new IceballExplosion((int)iceball.Position.X, (int)iceball.Position.Y)); iceball.Explode(); } else if (collisionSide is LeftCollision) { level.AddObject(new IceballExplosion((int)iceball.Position.X, (int)iceball.Position.Y)); iceball.Explode(); } else if (collisionSide is BottomCollision) { level.AddObject(new IceballExplosion((int)iceball.Position.X, (int)iceball.Position.Y)); iceball.PhysicsObject.dy = 10.0F; } }
public static void DetectCollision(IceballObject iceball) { List <IGameObject> gameObjects = new List <IGameObject>(Game1.Instance.currentState.Level.GetObjects()); gameObjects.AddRange(Game1.Instance.currentState.Level.BigFloorRectangles); List <IEnemy> enemies = new List <IEnemy>(Game1.Instance.currentState.Level.GetEnemies()); Rectangle iceballRectangle = iceball.GetHitBox(); foreach (IGameObject collidedObject in gameObjects) { Rectangle collidedObjectRectangle = collidedObject.GetHitBox(); if (iceballRectangle.Intersects(collidedObjectRectangle)) { if (collidedObject is IBlock) { IceballBlockCollisionResponder.IceballCollideWithBlock(iceball, collidedObject); } else if (collidedObject is IPipe) { IceballPipeCollisionResponder.IceballCollideWithPipe(iceball, (IPipe)collidedObject, Game1.Instance.currentState.Level); } } } foreach (IEnemy enemy in enemies) { Rectangle enemyRectangle = enemy.GetHitBox(); if (iceballRectangle.Intersects(enemyRectangle)) { Game1.Instance.currentState.Level.AddObject(new IceballExplosion((int)iceball.Position.X, (int)iceball.Position.Y)); IceballEnemyCollisionResponder.IceballCollideWithEnemy(iceball, enemy); } } }
public static void IceballCollideWithPipe(IceballObject iceball, IPipe pipe, Level level) { Rectangle iceballRectangle = iceball.GetHitBox(); Rectangle pipeRectangle = pipe.GetHitBox(); ICollision collisionSide = CollisionSideDetector.DetectCollisionSide(iceballRectangle, pipeRectangle); if (collisionSide is TopCollision) { iceball.BounceOffGround(); } else { level.AddObject(new IceballExplosion((int)iceball.Position.X, (int)iceball.Position.Y)); iceball.Explode(); } }
public IceballSprite(IceballObject iceballObject) { this.iceballObject = iceballObject; destination = new Rectangle((int)iceballObject.Position.X, (int)iceballObject.Position.Y, 16, 16); }
public static void IceballCollideWithEnemy(IceballObject iceball, IEnemy enemy) { iceball.Explode(); enemy.Freeze(); }
public static void IceballCollision(IceballObject iceball) { IceballCollisionDetection.DetectCollision(iceball); }