package games.scroller.mr_fish.sprites;
import games.scroller.mr_fish.sprites.player.MrFish;
import java.awt.Dimension;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Random;
import util.Location;
import vooga.scroller.extra_resources.inventory.Item;
import vooga.scroller.extra_resources.movements.TimedMovement;
import vooga.scroller.extra_resources.sprite_interfaces.ICollectible;
import vooga.scroller.extra_resources.sprite_interfaces.IEnemy;
import vooga.scroller.extra_resources.sprite_interfaces.IPlatform;
import vooga.scroller.level_editor.Level;
import vooga.scroller.level_editor.library.EncapsulatedSpriteLibrary;
import vooga.scroller.level_management.LevelPortal;
import vooga.scroller.sprites.Sprite;
import vooga.scroller.sprites.animation.MovingSpriteAnimationFactory;
import vooga.scroller.sprites.interfaces.Locatable;
import vooga.scroller.sprites.movement.Movement;
import vooga.scroller.sprites.movement.TrackPlayer;
import vooga.scroller.sprites.superclasses.GameCharacter;
import vooga.scroller.sprites.superclasses.Player;
import vooga.scroller.util.ISpriteView;
import vooga.scroller.util.Pixmap;
public class FishLib extends EncapsulatedSpriteLibrary {
public static final String IMAGE_LOCATION = "/games/scroller/mr_fish/images/";
public static final Location DEFAULT_CENTER = new Location(0, 0);
private static Random myRandom = new Random();
public static class Krill extends Item implements ICollectible {
private static final Pixmap DEFAULT_IMG = makePixmap(IMAGE_LOCATION, "super_krill.gif");
private static final Dimension DEFAULT_SIZE = new Dimension(32, 64);
private static final int HEALTH_GAIN = 5;
private static final int VALUE = 5;
public Krill () {
super(DEFAULT_IMG, DEFAULT_SIZE);
}
@Override
public int getValue () {
return VALUE;
}
@Override
public void useItem (Player p) {
p.setHealth(p.getHealth() + HEALTH_GAIN);
}
}
public static class TreasureChest extends Item implements ICollectible {
private static final Pixmap DEFAULT_IMG = makePixmap(IMAGE_LOCATION, "treasure_chest.gif");
private static final Dimension DEFAULT_SIZE = new Dimension(64, 32);
private List<Item> myItems;
private void addItems () {
for (int i = 0; i < 50; ++i) {
// myItems.add(new TreasureChest());
myItems.add(new Krill());
myItems.add(new HushPuppies());
}
myItems.add(new JamesCameron());
}
public TreasureChest () {
super(DEFAULT_IMG, DEFAULT_SIZE);
myItems = new ArrayList<Item>();
addItems();
myRandom = new Random();
}
@Override
public int getValue () {
// TODO Auto-generated method stub
return 0;
}
@Override
public void useItem (Player p) {
MrFish fish = (MrFish) p;
fish.addItem(getRandomItem());
}
private Item getRandomItem () {
int index = myRandom.nextInt(myItems.size());
return myItems.get(index);
}
}
public static class HushPuppies extends Item implements ICollectible {
private static final Pixmap DEFAULT_IMG = makePixmap(IMAGE_LOCATION, "hush_puppies.png");
private static final Dimension DEFAULT_SIZE = new Dimension(64, 32);
private static final int HEALTH_MULTIPLIER = 10;
public HushPuppies () {
super(DEFAULT_IMG, DEFAULT_SIZE);
// TODO Auto-generated constructor stub
}
@Override
public int getValue () {
// TODO Auto-generated method stub
return 10;
}
@Override
public void useItem (Player p) {
double multiplier = Math.pow(myRandom.nextGaussian() - .5, 3);
p.takeHit((int) (HEALTH_MULTIPLIER * multiplier));
}
}
public static class JamesCameron extends Item implements ICollectible {
private static final Pixmap DEFAULT_IMG = makePixmap(IMAGE_LOCATION, "james_cameron.png");
private static final Dimension DEFAULT_SIZE = new Dimension(64, 84);
private static final int SCORE = 1000;
public JamesCameron () {
super(DEFAULT_IMG, DEFAULT_SIZE);
// TODO Auto-generated constructor stub
}
@Override
public int getValue () {
// TODO Auto-generated method stub
return 0;
}
@Override
public void useItem (Player p) {
MrFish fish = (MrFish) p;
fish.incrementScore(SCORE);
}
}
public static class Shark extends GameCharacter implements IEnemy {
private static final Pixmap DEFAULT_IMG = makePixmap(IMAGE_LOCATION, "shark.gif");
private static final Dimension DEFAULT_SIZE = new Dimension(64, 32);
private static final int DEFAULT_HEALTH = 10;
private static final int DEFAULT_DAMAGE = 7;
private static final int SPEED = 30;
private static final int RADIUS = 300;
private static final String IMAGE = "shark.gif";
private TrackPlayer movement = new TrackPlayer(this, getLocatable(), SPEED, RADIUS);
public Shark () {
super(DEFAULT_IMG, DEFAULT_SIZE, DEFAULT_HEALTH, DEFAULT_DAMAGE);
MovingSpriteAnimationFactory msaf =
new MovingSpriteAnimationFactory(IMAGE_LOCATION, IMAGE);
ISpriteView animation = msaf.generateAnimation(this);
this.setView(animation);
initStates();
}
private void initStates () {
// left, right
}
public void update (double elapsedTime, Dimension bounds) {
movement.execute();
super.update(elapsedTime, bounds);
}
@Override
public void handleDeath (Level level) {
Sprite treasure = new TreasureChest();
treasure.setCenter(this.getCenter().x, this.getCenter().y);
level.addSprite(treasure);
}
@Override
public void addTarget (Locatable target) {
super.addTarget(target);
movement.setTarget(target);
}
}
public static class Baracuda extends GameCharacter implements IEnemy {
private static final Pixmap DEFAULT_IMG = makePixmap(IMAGE_LOCATION, "baracuda.gif");
private static final Dimension DEFAULT_SIZE = new Dimension(64, 32);
private static final int DEFAULT_HEALTH = 5;
private static final int DEFAULT_DAMAGE = 5;
private static final double SPEED = 50;
private static final double ANGLE = 0;
private static final double TIME_LIMIT = 100;
private static final String IMAGE = "baracuda.gif";
private Movement myMovement;
public Baracuda () {
super(DEFAULT_IMG, DEFAULT_SIZE, DEFAULT_HEALTH, DEFAULT_DAMAGE);
MovingSpriteAnimationFactory msaf =
new MovingSpriteAnimationFactory(IMAGE_LOCATION, IMAGE);
ISpriteView animation = msaf.generateAnimation(this);
this.setView(animation);
initStates();
myMovement = new TimedMovement(this, TIME_LIMIT, ANGLE, SPEED);
}
private void initStates () {
// TODO left, right states
}
public void update (double elapsedTime, Dimension bounds) {
super.update(elapsedTime, bounds);
myMovement.execute();
}
@Override
public void handleDeath (Level level) {
Sprite hp = new HushPuppies();
hp.setCenter(this.getCenter().x, this.getCenter().y);
level.addSprite(hp);
}
}
public static class Coral1 extends Sprite implements IPlatform {
private static final Pixmap IMG1 = makePixmap(IMAGE_LOCATION, "coral1.gif");
private static final Pixmap IMG2 = makePixmap(IMAGE_LOCATION, "coral2.png");
private static final Pixmap IMG3 = makePixmap(IMAGE_LOCATION, "coral3.png");
private static final Pixmap IMG4 = makePixmap(IMAGE_LOCATION, "coral4.gif");
private static final Pixmap IMG5 = makePixmap(IMAGE_LOCATION, "coral5.png");
private static final Random RANDOM = new Random();
private static final Pixmap[] DEFAULT_IMAGES = { IMG1, IMG2, IMG3, IMG4, IMG5 };
private static final Dimension DEFAULT_SIZE = new Dimension(32, 320);
public Coral1 () {
super(DEFAULT_IMAGES[RANDOM.nextInt(DEFAULT_IMAGES.length)], DEFAULT_SIZE);
}
}
public static class Coral2 extends Sprite implements IPlatform {
private static final Pixmap IMG1 = makePixmap(IMAGE_LOCATION, "coral1.gif");
private static final Pixmap IMG2 = makePixmap(IMAGE_LOCATION, "coral2.png");
private static final Pixmap IMG3 = makePixmap(IMAGE_LOCATION, "coral3.png");
private static final Pixmap IMG4 = makePixmap(IMAGE_LOCATION, "coral4.gif");
private static final Pixmap IMG5 = makePixmap(IMAGE_LOCATION, "coral5.png");
private static final Random RANDOM = new Random();
private static final Pixmap[] DEFAULT_IMAGES = { IMG1, IMG2, IMG3, IMG4, IMG5 };
private static final Dimension DEFAULT_SIZE = new Dimension(320, 32);
public Coral2 () {
super(DEFAULT_IMAGES[RANDOM.nextInt(DEFAULT_IMAGES.length)], DEFAULT_SIZE);
}
}
public static class StarPortal extends LevelPortal {
private static final Pixmap DEFAULT_IMGAGE = makePixmap(IMAGE_LOCATION, "porthole.gif");
private static final Dimension DEFAULT_SIZE = new Dimension(64, 64);
@Override
public ISpriteView initView () {
// TODO Auto-generated method stub
return DEFAULT_IMGAGE;
}
@Override
public Dimension initSize () {
// TODO Auto-generated method stub
return DEFAULT_SIZE;
}
}
public static class Fireball extends GameCharacter {
private static final Pixmap DEFAULT_IMGAGE = makePixmap(IMAGE_LOCATION, "fireball.png");
private static final Dimension DEFAULT_SIZE = new Dimension(15, 15);
private static final int DEFAULT_HEALTH = 1;
private static final int DEFAULT_DAMAGE = 3;
private static final int MAX_TIME = 50;
private static final double BUFFER_MAGNITUDE = .5;
private int myTime;
public Fireball () {
super(DEFAULT_IMGAGE, DEFAULT_SIZE, DEFAULT_HEALTH, DEFAULT_DAMAGE);
myTime = 0;
}
@Override
public void update (double elapsedTime, Dimension bounds) {
super.update(elapsedTime, bounds);
myTime += 1;
if (myTime >= MAX_TIME) {
this.setHealth(0);
}
if (this.getVelocity().getMagnitude() < BUFFER_MAGNITUDE) {
this.setHealth(0);
}
}
@Override
public void handleDeath (Level level) {
}
}
}