package games.scroller.letteradventure;
import games.scroller.letteradventure.SpriteLibrary.Projectile;
import util.Vector;
import vooga.scroller.collision_manager.CollisionDirection;
import vooga.scroller.collision_manager.VisitLibrary;
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.Player;
import vooga.scroller.util.Direction;
/**
* These are all the interactions between sprites in LetterAdventure.
*
* @author Ellango, David Liu
*
*/
public class VisitMethods extends VisitLibrary {
/**
* when a player interacts with a platform, it moves on it.
*
* @param player
* @param platform
*/
public void visit (Player player, IPlatform platform) {
Direction collisionType = new CollisionDirection().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;
}
}
/**
* Player takes damage when colliding with an enemy.
*
* @param player
* @param enemy
*/
public void visit (Player player, IEnemy enemy) {
player.takeHit(enemy.getHit());
}
/**
* Enemy takes damage when gets hit by projectile
*
* @param enemy
* @param projectile
*/
public void visit (IEnemy enemy, Projectile projectile) {
enemy.takeHit(projectile.getHit());
}
/**
* When player reaches portal, goes to next level.
* @param player
* @param levelPortal
*/
public void visit (Player player, IDoor levelPortal) {
levelPortal.goToNextLevel();
}
}