public void Execute(Collision collision) { IEnemy enemy = (IEnemy)collision.Collider; IPlayer player = (IPlayer)collision.Collidee; if (enemy is OldMan) { // do nothing } else if (enemy is Hand) { int damage = CollisionHandlerUtil.GetEnemyDamage(enemy.GetType()); player.ReceiveDamage(damage, new Vector2(0, 0)); if (player.PlayerInventory.HalfHeartCount != 0) { game.SetState(new GameStateWallmaster(game, player)); } } else { int damage = CollisionHandlerUtil.GetEnemyDamage(enemy.GetType()); player.ReceiveDamage(damage, CompassDirectionUtil.GetOppositeDirectionVector(collision.Side)); } }
public void Execute(Collision collision) { IProjectile proj = (IProjectile)collision.Collider; IPlayer player = (IPlayer)collision.Collidee; switch (proj) { case EnemyBoomerang _: if (player.GetDirection() != CompassDirectionUtil.GetDirectionCharCaps(collision.Side)) { player.ReceiveDamage(boomerangDamage, CompassDirectionUtil.GetOppositeDirectionVector(collision.Side)); } else { AudioManager.PlayFireForget(shield); } proj.BeginDespawn(); break; case Fireballs _: player.ReceiveDamage(fireballDamage, CompassDirectionUtil.GetOppositeDirectionVector(collision.Side)); proj.BeginDespawn(); break; case CandleFire _: player.ReceiveDamage(fireballDamage, CompassDirectionUtil.GetOppositeDirectionVector(collision.Side)); break; } }
public void Execute(Collision collision) { IEnemy enemy = (IEnemy)collision.Collider; Vector2 movementAmount = CompassDirectionUtil.GetDirectionVector(collision.Side) * (collision.Side == CompassDirection.North || collision.Side == CompassDirection.South ? collision.IntersectionRec.Height : collision.IntersectionRec.Width); if (enemy.GetType() != typeof(Bat) && enemy.GetType() != typeof(Hand)) { if (enemy.GetType() == typeof(EnemyDamageDecorator) && ((EnemyDamageDecorator)enemy).stillSlide) { ((EnemyDamageDecorator)enemy).stopKnockback(new Vector2(collision.IntersectionRec.Width, collision.IntersectionRec.Height)); } else { enemy.EditPosition(movementAmount); } } else { if (collision.IntersectionRec.X >= rightXBorder) { enemy.EditPosition(new Vector2(-collision.IntersectionRec.Width, 0)); } else if (collision.IntersectionRec.Y <= topYBorder) { enemy.EditPosition(new Vector2(0, collision.IntersectionRec.Height)); } else if (collision.IntersectionRec.Y >= botYBorder) { enemy.EditPosition(new Vector2(0, -collision.IntersectionRec.Height)); } else if (collision.IntersectionRec.X <= leftXBorder) { enemy.EditPosition(new Vector2(collision.IntersectionRec.Width, 0)); } } }
public void Execute(Collision collision) { if (game.Mode != 2) { IPlayer player1 = (IPlayer)collision.Collider; var side = collision.Side; // side is side of player2 (collidee) Vector2 moveAmount = Vector2.Multiply(new Vector2(collision.IntersectionRec.Width, collision.IntersectionRec.Height), CompassDirectionUtil.GetDirectionVector(side)); player1.EditPosition(moveAmount); if (player1 is DamagedPlayer dP && dP.stillSlide) { dP.StopKnockback(new Vector2(collision.IntersectionRec.Width, collision.IntersectionRec.Height)); } } }
public void Execute(Collision collision) { IProjectile proj = (IProjectile)collision.Collider; IEnemy enemy = (IEnemy)collision.Collidee; Vector2 knockbackDirect = new Vector2(0, 0); if (enemy.GetType() != typeof(Aquamentus) || proj.GetType() == typeof(Boomerang)) { knockbackDirect = CompassDirectionUtil.GetOppositeDirectionVector(collision.Side); } if (collision.Collider.GetType() == typeof(Boomerang)) { switch (enemy) { case Jelly _: case Bat _: enemy.ReceiveDamage(halfHeart, knockbackDirect); proj.BeginDespawn(); break; case Aquamentus _: break; case Dodongo _: enemy.ReceiveDamage(halfHeart, knockbackDirect); proj.BeginDespawn(); break; default: if (enemy.StunnedTimer != int.MaxValue) { enemy.StunnedTimer = boomerangStunTime; } proj.BeginDespawn(); break; } } else if (proj.GetType() == typeof(Arrow)) { enemy.ReceiveDamage(twoHearts, knockbackDirect); proj.BeginDespawn(); } else if (proj.GetType() == typeof(SwordBeam)) { enemy.ReceiveDamage(oneHeart, knockbackDirect); proj.BeginDespawn(); } else if (proj.GetType() == typeof(BombProjectile)) { if (enemy.GetType() == typeof(Dodongo) && proj.GetHitbox().Width == bombWidth && proj.GetHitbox().Height == bombHeight) { if (collision.IntersectionRec.Height < dodongoHeadHeight || collision.IntersectionRec.Width < dodongoHeadWidth) { enemy.ReceiveDamage(0f, knockbackDirect); proj.BeginDespawn(); } else { enemy.StunnedTimer = bombStunTime; proj.BeginDespawn(); } } else if (proj.GetHitbox().Width != bombWidth && proj.GetHitbox().Height != bombHeight) { enemy.ReceiveDamage(fourHearts, knockbackDirect); } } else if (proj.GetType() == typeof(CandleFire)) { enemy.ReceiveDamage(halfHeart, knockbackDirect); } }