public static void HandleCollision(IDavis davis, IEnemy enemy, CollisionSide side, IWorld world) { if (side != CollisionSide.None) { if (!(enemy.PhysicsState is JulianKnockBackState)) { if (davis.PhysicsState is FlyingKneeState || davis.PhysicsState is ShoryukenState || davis.PhysicsState is ShunpoState) { enemy.TakeDamage(); world.HUD.score += 100; } } //if collision is not on bottom if (side == CollisionSide.Top) { if (!enemy.Dead && !davis.DeadFlag && !(enemy.PhysicsState is JulianKnockBackState)) { enemy.TakeDamage(); world.HUD.score += 100; } } else { if (!enemy.Dead && davis.DavisStatus != DavisStatus.Invincible && !davis.DeadFlag && !(davis.PhysicsState is FlyingKneeState) && !(davis.PhysicsState is ShoryukenState && !(davis.PhysicsState is ShunpoState))) { davis.DavisDeath(); world.HUD.lives--; } } } }
public static void HandleCollision(IDavis davis, IItem item, CollisionSide side, IWorld world) { if (side != CollisionSide.None) { if (item is Flower) { Sounds.Instance.PlayDrinkMilk(); world.HUD.score += 1500; davis.DavisState.Static(); } else if (item is Mushroom) { Sounds.Instance.PlayHealSound(); world.HUD.lives += 1; davis.DavisState.Static(); } else if (item is Coin) { world.HUD.coins++; world.HUD.score += 50; Sounds.Instance.PlayItemPickUp(); } else if (item is Key) { world.HUD.score += 150; Sounds.Instance.PlayKeyPickUp(); davis.KeyFlag = true; } world.ObjectToRemove.Add(item); } }
private static void CheckCharactersSurroundingBox(IDavis movers, IWorld world) { var i = (int)(movers.Location.X / (world as World).UNIT_SIZE); var j = (int)(movers.Location.Y / (world as World).UNIT_SIZE); if (!(world as World).IsIndexOutOfBounds(i, j)) { // Get instance of character reference in the World Grid IDavis moverObject = (IDavis)world.GetObject(movers, i, j); if (moverObject != null) { int hitBoxWidthScaleFactor = (int)(moverObject.HitBox.Width / (world as World).UNIT_SIZE) + 1; int hitBoxHeightScaleFactor = (int)(moverObject.HitBox.Height / (world as World).UNIT_SIZE) + 1; int offsetFactor = Variables.Variable.offsetRange; // Magic number here! for (int iOffset = -offsetFactor * hitBoxWidthScaleFactor; iOffset < (offsetFactor + 1) * hitBoxWidthScaleFactor; iOffset++) { for (int jOffset = -offsetFactor * hitBoxHeightScaleFactor; jOffset < (offsetFactor + 1) * hitBoxHeightScaleFactor; jOffset++) { if (!(world as World).IsIndexOutOfBounds(i + iOffset, j + jOffset)) { if (world.WorldGrid[i + iOffset][j + jOffset].Count != 0) { for (int k = 0; k < world.WorldGrid[i + iOffset][j + jOffset].Count; k++) { var target = world.WorldGrid[i + iOffset][j + jOffset][k]; if (!target.Equals(moverObject) && (target is IBlock || target is IItem || target is IEnemy)) { var side = GetCollisionSide(Rectangle.Intersect(moverObject.HitBox, target.HitBox), moverObject.HitBox, target.HitBox); /*if (side != CollisionSide.None)*/ { if (target is IBlock) { DavisBlockCollisionHandler.HandleCollision(moverObject, (IBlock)target, side, world); } if (target is IItem) { DavisItemCollisionHandler.HandleCollision(moverObject, (IItem)target, side, world); } if (target is IEnemy) { DavisEnemyCollisionHandler.HandleCollision(moverObject, (IEnemy)target, side, world); } } } } } } } } } } }
public DavisToBatCommand(IDavis davis) { this.davis = davis; }
public DavisCrouchCommand(IDavis davis) { this.davis = davis; }
public DavisJumpCommand(IDavis davis) { this.davis = davis; }
public DavisStaticCommand(IDavis davis) { this.davis = davis; }
public DavisTurnLeftCommand(IDavis davis) { this.davis = davis; }
public DavisToWoodyCommand(IDavis davis) { this.davis = davis; }
public DavisShootBulletCommand(IDavis davis, IWorld world) { this.davis = davis; this.world = world; }
public static void HandleCollision(IDavis davis, IBlock block, CollisionSide side, IWorld world) { switch (side) { case CollisionSide.Bottom: if (block is HiddenBlock && davis.PhysicsState is JumpState) { block.SpecialState(); } if (block is CoinBrick && davis.PhysicsState is JumpState) { CoinBrick coinBrick = (CoinBrick)block; if (coinBrick.CoinCounter > 0) { world.AddObject(new Coin(new Vector2(block.Location.X, block.Location.Y - 45))); coinBrick.CoinCounter--; coinBrick.IsBumped = true; } } else if (block is QuestionBlock) { block.SpecialState(); } else if (block is Brick) { Brick brick = (Brick)block; brick.Bumped(); } else if (block is MushroomBlock) { if (!block.IsBumped) { world.AddObject(new Mushroom(new Vector2(block.Location.X, block.Location.Y - 25))); block.SpecialState(); block.IsBumped = true; } } else if (block is CoinBlock) { if (!block.IsBumped) { world.AddObject(new Mushroom(new Vector2(block.Location.X, block.Location.Y - 25))); block.SpecialState(); block.IsBumped = true; } } else if (block is FlowerBlock) { if (!block.IsBumped) { world.AddObject(new Flower(new Vector2(block.Location.X, block.Location.Y - 30))); block.SpecialState(); block.IsBumped = true; } } if (!(block is EmptyBlock)) { davis.Location = new Vector2(davis.Location.X, block.Location.Y + block.HitBox.Height); davis.PhysicsState = new FallState(davis); } break; case CollisionSide.Top: //if not hidden block if (!block.IsHidden && !(davis.PhysicsState is FlyingKneeState) && !(davis.PhysicsState is ShoryukenState) && !(davis.PhysicsState is ShunpoState)) { davis.DavisState.Land(); davis.PhysicsState = new StandingState(davis); davis.Location = new Vector2(davis.Location.X, block.Location.Y - davis.HitBox.Height); } break; case CollisionSide.Left: if (!(block.IsHidden)) { if (!((block is CastleDoor) && davis.KeyFlag)) { if (!(block is Door && world.HUD.score > Variables.Variable.doorOpenScore)) { davis.Location = new Vector2(block.Location.X - davis.HitBox.Width, davis.Location.Y); } } } break; case CollisionSide.Right: if (!(block.IsHidden)) { if (!(block is Door && world.HUD.score > Variables.Variable.doorOpenScore)) { davis.Location = new Vector2(block.Location.X + block.HitBox.Width, davis.Location.Y); } } break; case CollisionSide.None: break; } }
public DavisSpecialAttackCommand(IDavis davis) { this.davis = davis; }
public DavisTurnRightCommand(IDavis davis) { this.davis = davis; }