package games.scroller.stickmansam;
import java.awt.Dimension;
import util.Location;
import util.Vector;
import vooga.scroller.extra_resources.movements.TimedMovement;
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.movement.Movement;
import vooga.scroller.sprites.superclasses.GameCharacter;
import vooga.scroller.util.ISpriteView;
import vooga.scroller.util.Pixmap;
import vooga.scroller.util.physics.Force;
import vooga.scroller.util.physics.Gravity;
/**
* Library for Stickman Sam sprites
*
* @author David Winegar
*
*/
public class StickmanSpriteLibrary extends EncapsulatedSpriteLibrary {
private static final Dimension ENEMY_SIZE = new Dimension(32, 45);
private static final Dimension BLOCK_SIZE = new Dimension(32, 32);
private static final String PLATFORM_IMAGE = "platform.png";
private static final String PLATFORM_IMAGE_2 = "platform2.png";
private static final String IMAGES = "/games/scroller/stickmansam/images/";
/**
* platform (1 slot)
*
* @author David Winegar
*
*/
public static class Platform extends Sprite implements IPlatform {
/**
* Create platform
*/
public Platform () {
super(makePixmap(PLATFORM_IMAGE), BLOCK_SIZE);
}
}
/**
* Big platform (4x4 slots)
*
* @author David Winegar
*
*/
public static class BigPlatform extends Sprite implements IPlatform {
private static final Dimension BIG_BLOCK_SIZE = new Dimension(128, 128);
/**
* Create big platform
*/
public BigPlatform () {
super(makePixmap(PLATFORM_IMAGE_2), BIG_BLOCK_SIZE);
}
}
/**
* Enemy stick zombie that injures player.
*
* @author David Winegar
*
*/
public static class StickZombie extends GameCharacter implements IEnemy {
private static final String ZOMBIE_IMAGE = "zombie.png";
private static final int HEALTH = 60;
private static final int DAMAGE = 2;
private Force myGravity;
private static final int SPEED = 5;
private static final int TIME = 1;
private static final int ANGLE = 180;
private Movement myMovement = new TimedMovement(this, TIME, ANGLE, SPEED);
/**
* Create zombie
*/
public StickZombie () {
super(makePixmap(ZOMBIE_IMAGE), ENEMY_SIZE, HEALTH, DAMAGE);
myGravity = new Gravity(this);
}
@Override
public void handleDeath (Level level) {
level.removeSprite(this);
}
@Override
public void update (double elapsedTime, Dimension bounds) {
myGravity.apply();
super.update(elapsedTime, bounds);
}
}
/**
* Bullet that player shoots
*
* @author David Winegar
*
*/
public static class Bullet extends GameCharacter {
private static final int VELOCITY = 500;
private static final String BULLET_IMAGE = "bullet.png";
private static final Dimension BULLET_SIZE = new Dimension(15, 10);
private static final int BULLET_DAMAGE = 20;
/**
* Create bullet with given direction
*
* @param direction
*/
public Bullet (int direction, Location location) {
super(makePixmap(BULLET_IMAGE), BULLET_SIZE, 1, BULLET_DAMAGE, location);
this.setVelocity(new Vector(direction, VELOCITY));
}
@Override
public void handleDeath (Level level) {
level.removeSprite(this);
}
}
/**
* door to advance to next level
*
* @author David Winegar
*
*/
public static class Door extends LevelPortal {
private static final String EMPTY_IMAGE = "empty.png";
@Override
public ISpriteView initView () {
return makePixmap(EMPTY_IMAGE);
}
@Override
public Dimension initSize () {
return BLOCK_SIZE;
}
}
/**
* Helper method to create Pixmaps from filepaths.
*
* @author Letter Adventure team
* @param fileName
* @return
*/
public static Pixmap makePixmap (String fileName) {
return makePixmap(IMAGES, fileName);
}
}