package games.scroller.mr_fish.sprites.collisions; import games.scroller.mr_fish.sprites.FishLib.Baracuda; import games.scroller.mr_fish.sprites.FishLib.Fireball; import games.scroller.mr_fish.sprites.FishLib.Shark; import games.scroller.mr_fish.sprites.player.MrFish; import util.Vector; import vooga.scroller.collision_manager.CollisionDirection; import vooga.scroller.collision_manager.VisitLibrary; import vooga.scroller.extra_resources.inventory.Item; import vooga.scroller.extra_resources.sprite_interfaces.IEnemy; import vooga.scroller.extra_resources.sprite_interfaces.IPlatform; import vooga.scroller.sprites.Sprite; import vooga.scroller.sprites.interfaces.IDoor; import vooga.scroller.sprites.superclasses.GameCharacter; import vooga.scroller.sprites.superclasses.Player; import vooga.scroller.util.Direction; /** * This is where you want to place your visit methods. To keep this class as * clean as possible, I don't actually handle the collision logic here. I handle * that logic in a Game specific Collisions class. You can, of course, handle all * collisions in these visit() methods if you prefer. * * @author Jay Wang * */ public class VisitMethods extends VisitLibrary{ private CollisionDirection direction = new CollisionDirection(); public void visit (GameCharacter player, IPlatform platform) { Direction collisionType = direction.collisionDirection(player, platform); if (collisionType == null) return; switch (collisionType) { case TOP: player.setCenter(player.getX(), platform.getTop() - (player.getHeight() / 2)); Vector v = player.getVelocity().getComponentVector((double) Sprite.DOWN_DIRECTION); v.negate(); player.addVector(v); break; case BOTTOM: player.setCenter(player.getX(), platform.getBottom() + (player.getHeight() / 2)); Vector up = player.getVelocity().getComponentVector(Sprite.UP_DIRECTION); up.negate(); player.addVector(up); break; case LEFT: player.setCenter(platform.getLeft() - (player.getWidth() / 2), player.getY()); Vector l = player.getVelocity().getComponentVector(Sprite.LEFT_DIRECTION); l.negate(); player.addVector(l); break; case RIGHT: player.setCenter(platform.getRight() + (player.getWidth() / 2), player.getY()); Vector r = player.getVelocity().getComponentVector(Sprite.RIGHT_DIRECTION); r.negate(); player.addVector(r); break; default: break; } } public void visit (MrFish fish, Item collectible) { fish.addItem(collectible); collectible.setHealth(0); } public void visit (MrFish fish, Shark enemy) { fish.takeHit(enemy.getHit()); fish.setCenter(enemy.getCenter().x + enemy.getWidth(), enemy.getCenter().y + enemy.getHeight()); } public void visit (MrFish fish, Baracuda enemy) { fish.takeHit(enemy.getHit()); fish.setCenter(enemy.getCenter().x + enemy.getWidth(), enemy.getCenter().y + enemy.getHeight()); } public void visit (Player player, IDoor levelPortal) { levelPortal.goToNextLevel(); } public void visit (Fireball fire, IEnemy enemy){ enemy.takeHit(fire.getHit()); fire.setHealth(0); } }