package com.mygame;
import java.io.*;
import java.util.Vector;
import loon.BaseIO;
import loon.EmulatorListener;
import loon.LSystem;
import loon.LTexture;
import loon.LTextures;
import loon.action.sprite.SpriteBatch;
import loon.action.sprite.painting.DrawableScreen;
import loon.canvas.LColor;
import loon.event.GameKey;
import loon.event.GameTouch;
import loon.event.SysKey;
import loon.geom.RectBox;
import loon.utils.ArrayByte;
import loon.utils.timer.GameTime;
public class Game1 extends DrawableScreen implements EmulatorListener{
public final int MAX_BULLETS = 20;
public final int MAX_CHARGESHOTS = 5;
int maxEnemies;
int maxLevels;
int maxThings;
int maxMaps;
int level;
int curBGM;
int bgmInfo[];
float worldX;
float worldY;
float fogX;
float fogSpeed;
boolean fogGoingRight;
boolean titleScreen;
boolean win;
boolean levelClear;
boolean menuDelayPolled;
Player player;
Vector<Item> items;
Bullet bullets[];
ChargeShot shots[];
Bullet eBullets[][];
ChargeShot eShots[][];
LTexture tileMap;
LTexture playerImage;
LTexture deadPlayerImage;
LTexture rollPlayerImage;
LTexture swordImage;
LTexture swordImage2;
LTexture enemy1Image;
LTexture enemy2Image;
LTexture enemy3Image;
LTexture enemy4Image;
LTexture boss1Image;
LTexture health;
LTexture eHealth;
LTexture gameoverImage;
LTexture titleImage;
LTexture winImage;
LTexture levelClearImage;
LTexture greenGemImage;
LTexture blueGemImage;
LTexture hud;
LTexture hudGem;
LTexture hudHealth;
LTexture hudBullet;
LTexture neblockImage;
LTexture bossblock1Image;
LTexture swordBlockImage;
LTexture blockImage;
LTexture moveableBlockImage;
LTexture lockedBlockImage;
LTexture bulletImage;
LTexture chargeShotImage;
LTexture eBulletImage;
LTexture eChargeShotImage;
LTexture ammo15Image;
LTexture mapSwordImage;
LTexture hexContainerImage;
LTexture playerGet;
LTexture swordGet;
LTexture zButtonImage;
LTexture keyImage;
LTexture stepSwitchImage;
Vector<Level> levels;
public Game1() {
LSystem.EMULATOR_BUTTIN_SCALE = 1.5f;
maxEnemies = 0;
maxLevels = 4;
maxThings = 0;
maxMaps = 3;
level = 0;
curBGM = 0;
worldX = 0.0F;
worldY = 0.0F;
fogX = 0.0F;
fogSpeed = 0.5F;
fogGoingRight = false;
titleScreen = true;
win = false;
levelClear = false;
menuDelayPolled = false;
}
public int enemiesLeft() {
return ((Level) levels.get(level)).enemies.size();
}
public void reset() {
level = 0;
player.hp = player.healthLevel;
player.x = 400F;
player.y = 300F;
player.dashing = false;
player.rolling = false;
player.state = 0;
player.frame = 0;
player.attacking = false;
worldX = 0.0F;
worldY = 0.0F;
levelClear = false;
menuDelayPolled = false;
player.swordDelay = 30;
}
public void updateBGM() {
}
public Level readLevel(int level) {
try {
Level l = new Level();
System.out.println((new StringBuilder("map: ")).append(level)
.toString());
ObjectInputStream y = new ObjectInputStream(
Game1.class.getClassLoader().getResourceAsStream(
new StringBuilder("assets/level/map")
.append(level).append(".lv").toString()));
l.map.width = y.readInt();
l.map.height = y.readInt();
l.map.resize();
if (worldX < 0.0F)
worldX = 0.0F;
else if (worldX > (float) (l.map.width * l.map.tileWidth - 800))
worldX = l.map.width * l.map.tileWidth - 800;
else if (worldY < 0.0F)
worldY = 0.0F;
else if (worldY > (float) (l.map.height * l.map.tileHeight - 600))
worldY = l.map.height * l.map.tileHeight - 600;
for (int j = 0; j < l.map.height; j++) {
for (int i = 0; i < l.map.width; i++) {
l.map.tiles[i][j] = y.readInt();
System.out.print((new StringBuilder(" "))
.append(l.map.tiles[i][j]).append(",").toString());
}
}
l.map.setCol();
maxEnemies = y.readInt();
for (int i = 0; i < maxEnemies; i++) {
float tempX = y.readInt();
float tempY = y.readInt();
float tempType = y.readInt();
if (tempType == 0.0F)
l.enemies.add(new Enemy1(tempX * (float) l.map.tileWidth,
tempY * (float) l.map.tileHeight));
if (tempType == 1.0F)
l.enemies.add(new Enemy2(tempX * (float) l.map.tileWidth,
tempY * (float) l.map.tileHeight));
if (tempType == 2.0F && !player.boss1killed)
l.enemies.add(new Boss1(tempX * (float) l.map.tileWidth,
tempY * (float) l.map.tileHeight));
if (tempType == 3F)
l.enemies.add(new Enemy3(tempX * (float) l.map.tileWidth,
tempY * (float) l.map.tileHeight));
}
maxThings = y.readInt();
for (int i = 0; i < maxThings; i++) {
float tempX = y.readInt();
float tempY = y.readInt();
float tempType = y.readInt();
if (tempType == 0.0F)
l.things.add(new NEBlock(tempX * (float) l.map.tileWidth,
tempY * (float) l.map.tileHeight));
if (tempType == 1.0F && !player.boss1killed)
l.things.add(new BossBlock1(
tempX * (float) l.map.tileWidth, tempY
* (float) l.map.tileHeight));
if (tempType == 2.0F && !player.hasSword)
l.things.add(new Sword1(tempX * (float) l.map.tileWidth,
tempY * (float) l.map.tileHeight));
if (tempType == 3F && !player.hasSword)
l.things.add(new SwordBlock(
tempX * (float) l.map.tileWidth, tempY
* (float) l.map.tileHeight));
if (tempType == 4F && !player.hasHex1)
l.things.add(new HexContainer(tempX
* (float) l.map.tileWidth, tempY
* (float) l.map.tileHeight));
if (tempType == 5F)
l.things.add(new GrabBlock1(
tempX * (float) l.map.tileWidth, tempY
* (float) l.map.tileHeight));
if (tempType == 6F)
l.things.add(new NormalBlock1(tempX
* (float) l.map.tileWidth, tempY
* (float) l.map.tileHeight));
if (tempType == 7F)
l.things.add(new KeyPlayer(tempX * (float) l.map.tileWidth,
tempY * (float) l.map.tileHeight));
if (tempType == 8F)
l.things.add(new LockedBlock(tempX
* (float) l.map.tileWidth, tempY
* (float) l.map.tileHeight));
}
int maxSwitches = y.readInt();
for (int i = 0; i < maxSwitches; i++) {
float tempX = y.readInt();
float tempY = y.readInt();
float tempType = y.readInt();
float blockNum = y.readInt();
Vector<Thing> tempBlocks = new Vector<Thing>();
for (int j = 0; j < blockNum; j++) {
float blockX = y.readInt();
float blockY = y.readInt();
int blockType = y.readInt();
if (blockType == 6)
tempBlocks.add(new NormalBlock1(blockX
* (float) l.map.tileWidth, blockY
* (float) l.map.tileHeight));
}
if (tempType == 0.0F)
l.switches.add(new StepSwitch(
(int) (tempX * (float) l.map.tileWidth),
(int) (tempY * (float) l.map.tileHeight),
tempBlocks));
}
System.out.print("\n");
l.map.upExit = y.readInt();
l.map.downExit = y.readInt();
l.map.leftExit = y.readInt();
l.map.rightExit = y.readInt();
y.close();
return l;
} catch (Exception e) {
System.out.println("Exception");
e.getCause();
e.printStackTrace();
return null;
}
}
private float lastWorldX, lastWorldY;
private int levelNo;
private boolean ditry = true;
@Override
public void draw(SpriteBatch batch) {
if(!isOnLoadComplete()){
return;
}
int tempTile = 0;
int tempHeight = 0;
Level lev = (Level) levels.get(level);
if (levelNo != level || lastWorldX != worldX || lastWorldY != worldY
|| ditry) {
tileMap.glBegin();
for (int i = 0; i < lev.map.width; i++) {
for (int j = 0; j < lev.map.height; j++) {
tempTile = lev.map.tiles[i][j];
tempHeight = 0;
if (tempTile >= tileMap.getWidth() / lev.map.tileWidth) {
for (; tempTile >= tileMap.getWidth()
/ lev.map.tileWidth;) {
tempTile -= tileMap.getWidth() / lev.map.tileWidth;
tempHeight++;
}
}
float x = (i * (lev).map.tileWidth) - worldX;
float y = (j * (lev).map.tileHeight) - worldY;
tileMap.drawEmbedded(x, y,
(i * (lev).map.tileWidth + lev.map.tileWidth)
- worldX,
(j * (lev).map.tileHeight + lev.map.tileHeight)
- worldY, tempTile * (lev).map.tileWidth,
tempHeight * (lev).map.tileHeight,
tempTile * (lev).map.tileWidth
+ (lev).map.tileWidth, tempHeight
* (lev).map.tileHeight
+ (lev).map.tileHeight);
}
}
tileMap.glEnd();
tileMap.newBatchCache();
ditry = false;
} else {
tileMap.glCacheCommit();
}
levelNo = level;
lastWorldX = worldX;
lastWorldY = worldY;
stepSwitchImage.glBegin();
for (int i = 0; i < (lev).switches.size(); i++) {
if (((Switch) (lev).switches.get(i)).getClass().getSimpleName()
.equalsIgnoreCase("StepSwitch")) {
stepSwitchImage
.drawEmbedded(
((Switch) (lev).switches.get(i)).x - worldX,
((Switch) (lev).switches.get(i)).y - worldY,
(((Switch) (lev).switches.get(i)).x + ((Switch) ((Level) levels
.get(level)).switches.get(i)).width)
- worldX,
(((Switch) (lev).switches.get(i)).y + ((Switch) ((Level) levels
.get(level)).switches.get(i)).height)
- worldY,
(((Switch) (lev).switches.get(i)).active ? 1
: 0)
* ((Switch) ((Level) levels.get(level)).switches
.get(i)).width,
0.0F,
(((Switch) (lev).switches.get(i)).active ? 1
: 0)
* ((Switch) ((Level) levels.get(level)).switches
.get(i)).width
+ ((Switch) ((Level) levels.get(level)).switches
.get(i)).width, 50F);
}
blockImage.glBegin();
for (int j = 0; j < ((Switch) ((Level) levels.get(level)).switches
.get(i)).blocks.size(); j++) {
if (((Switch) ((Level) levels.get(level)).switches.get(i)).blocks
.get(j) != null
&& ((Thing) ((Switch) ((Level) levels.get(level)).switches
.get(i)).blocks.get(j)).state != Thing.STATE_DEATH
&& ((Thing) ((Switch) ((Level) levels.get(level)).switches
.get(i)).blocks.get(i)).getClass().toString()
.contains("NormalBlock1"))
blockImage
.draw(((Thing) ((Switch) ((Level) levels.get(level)).switches
.get(i)).blocks.get(j)).x - worldX,
((Thing) ((Switch) ((Level) levels
.get(level)).switches.get(i)).blocks
.get(j)).y
- worldY);
}
blockImage.glEnd();
}
stepSwitchImage.glEnd();
for (int i = 0; i < ((Level) levels.get(level)).things.size(); i++)
if (((Level) levels.get(level)).things.get(i) != null
&& ((Thing) ((Level) levels.get(level)).things.get(i)).state != Thing.STATE_DEATH) {
if (((Thing) ((Level) levels.get(level)).things.get(i))
.getClass().toString().contains("NEBlock"))
batch.draw(
neblockImage,
((Thing) ((Level) levels.get(level)).things.get(i)).x
- worldX,
((Thing) ((Level) levels.get(level)).things.get(i)).y
- worldY);
if (((Thing) ((Level) levels.get(level)).things.get(i))
.getClass().toString().contains("BossBlock1"))
batch.draw(
bossblock1Image,
((Thing) ((Level) levels.get(level)).things.get(i)).x
- worldX,
((Thing) ((Level) levels.get(level)).things.get(i)).y
- worldY);
if (((Thing) ((Level) levels.get(level)).things.get(i))
.getClass().toString().contains("Sword1"))
batch.draw(
mapSwordImage,
((Thing) ((Level) levels.get(level)).things.get(i)).x
- worldX,
((Thing) ((Level) levels.get(level)).things.get(i)).y
- worldY);
if (((Thing) ((Level) levels.get(level)).things.get(i))
.getClass().toString().contains("SwordBlock"))
batch.draw(
swordBlockImage,
((Thing) ((Level) levels.get(level)).things.get(i)).x
- worldX,
((Thing) ((Level) levels.get(level)).things.get(i)).y
- worldY);
if (((Thing) ((Level) levels.get(level)).things.get(i))
.getClass().toString().contains("HexContainer"))
batch.draw(
hexContainerImage,
((Thing) ((Level) levels.get(level)).things.get(i)).x
- worldX,
((Thing) ((Level) levels.get(level)).things.get(i)).y
- worldY);
if (((Thing) ((Level) levels.get(level)).things.get(i))
.getClass().toString().contains("GrabBlock1"))
batch.draw(
moveableBlockImage,
((Thing) ((Level) levels.get(level)).things.get(i)).x
- worldX,
((Thing) ((Level) levels.get(level)).things.get(i)).y
- worldY);
if (((Thing) ((Level) levels.get(level)).things.get(i))
.getClass().toString().contains("SysKey"))
batch.draw(
keyImage,
((Thing) ((Level) levels.get(level)).things.get(i)).x
- worldX,
((Thing) ((Level) levels.get(level)).things.get(i)).y
- worldY);
if (((Thing) ((Level) levels.get(level)).things.get(i))
.getClass().toString().contains("LockedBlock"))
batch.draw(
lockedBlockImage,
((Thing) ((Level) levels.get(level)).things.get(i)).x
- worldX,
((Thing) ((Level) levels.get(level)).things.get(i)).y
- worldY);
}
if (!titleScreen && !win && !levelClear) {
if (!player.pickedUpSword && !player.rolling && !player.flicker
&& player.hp > 0) {
batch.drawEmbedded(playerImage, player.x - worldX, player.y
- worldY, (player.x + (float) player.width) - worldX,
(player.y + (float) player.height) - worldY,
player.frame * player.width, player.state
* player.height, player.frame * player.width
+ player.width, player.state * player.height
+ player.height, LColor.white);
} else if (player.pickedUpSword) {
batch.draw(playerGet, player.x - worldX, player.y - worldY);
batch.draw(mapSwordImage, player.x - worldX, player.y - worldY
- (float) mapSwordImage.getHeight());
} else if (player.rolling)
batch.drawEmbedded(rollPlayerImage, player.x - worldX, player.y
- worldY, (player.x + (float) player.width) - worldX,
(player.y + (float) player.height) - worldY,
player.frame * player.width, (player.state - 4)
* player.height, player.frame * player.width
+ player.width, (player.state - 4)
* player.height + player.height, LColor.white);
else if (player.hp <= 0)
batch.draw(deadPlayerImage, player.x - worldX, player.y
- worldY);
for (int i = 0; i < ((Level) levels.get(level)).enemies.size(); i++)
if (((Level) levels.get(level)).enemies.get(i) != null
&& ((Enemy) ((Level) levels.get(level)).enemies.get(i)).state != Enemy.STATE_DEATH
&& !((Enemy) ((Level) levels.get(level)).enemies.get(i)).flicker)
if (((Enemy) ((Level) levels.get(level)).enemies.get(i))
.getClass().toString().contains("Enemy1"))
batch.drawEmbedded(
enemy1Image,
(float) ((Enemy) ((Level) levels.get(level)).enemies
.get(i)).x - worldX,
(float) ((Enemy) ((Level) levels.get(level)).enemies
.get(i)).y - worldY,
(float) (((Enemy) ((Level) levels.get(level)).enemies
.get(i)).x + (double) ((Enemy) ((Level) levels
.get(level)).enemies.get(i)).width)
- worldX,
(float) (((Enemy) ((Level) levels.get(level)).enemies
.get(i)).y + (double) ((Enemy) ((Level) levels
.get(level)).enemies.get(i)).height)
- worldY,
((Enemy) ((Level) levels.get(level)).enemies
.get(i)).frame
* ((Enemy) ((Level) levels.get(level)).enemies
.get(i)).width,
((Enemy) ((Level) levels.get(level)).enemies
.get(i)).state
* ((Enemy) ((Level) levels.get(level)).enemies
.get(i)).height,
((Enemy) ((Level) levels.get(level)).enemies
.get(i)).frame
* ((Enemy) ((Level) levels.get(level)).enemies
.get(i)).width
+ ((Enemy) ((Level) levels.get(level)).enemies
.get(i)).width,
((Enemy) ((Level) levels.get(level)).enemies
.get(i)).state
* ((Enemy) ((Level) levels.get(level)).enemies
.get(i)).height
+ ((Enemy) ((Level) levels.get(level)).enemies
.get(i)).height, LColor.white);
else if (((Enemy) ((Level) levels.get(level)).enemies
.get(i)).getClass().toString().contains("Enemy2"))
batch.drawEmbedded(
enemy2Image,
(float) ((Enemy) ((Level) levels.get(level)).enemies
.get(i)).x - worldX,
(float) ((Enemy) ((Level) levels.get(level)).enemies
.get(i)).y - worldY,
(float) (((Enemy) ((Level) levels.get(level)).enemies
.get(i)).x + (double) ((Enemy) ((Level) levels
.get(level)).enemies.get(i)).width)
- worldX,
(float) (((Enemy) ((Level) levels.get(level)).enemies
.get(i)).y + (double) ((Enemy) ((Level) levels
.get(level)).enemies.get(i)).height)
- worldY,
((Enemy) ((Level) levels.get(level)).enemies
.get(i)).frame
* ((Enemy) ((Level) levels.get(level)).enemies
.get(i)).width,
((Enemy) ((Level) levels.get(level)).enemies
.get(i)).state
* ((Enemy) ((Level) levels.get(level)).enemies
.get(i)).height,
((Enemy) ((Level) levels.get(level)).enemies
.get(i)).frame
* ((Enemy) ((Level) levels.get(level)).enemies
.get(i)).width
+ ((Enemy) ((Level) levels.get(level)).enemies
.get(i)).width,
((Enemy) ((Level) levels.get(level)).enemies
.get(i)).state
* ((Enemy) ((Level) levels.get(level)).enemies
.get(i)).height
+ ((Enemy) ((Level) levels.get(level)).enemies
.get(i)).height, LColor.white);
else if (((Enemy) ((Level) levels.get(level)).enemies
.get(i)).getClass().toString().contains("Enemy3"))
batch.drawEmbedded(
enemy3Image,
(float) ((Enemy) ((Level) levels.get(level)).enemies
.get(i)).x - worldX,
(float) ((Enemy) ((Level) levels.get(level)).enemies
.get(i)).y - worldY,
(float) (((Enemy) ((Level) levels.get(level)).enemies
.get(i)).x + (double) ((Enemy) ((Level) levels
.get(level)).enemies.get(i)).width)
- worldX,
(float) (((Enemy) ((Level) levels.get(level)).enemies
.get(i)).y + (double) ((Enemy) ((Level) levels
.get(level)).enemies.get(i)).height)
- worldY,
((Enemy) ((Level) levels.get(level)).enemies
.get(i)).frame
* ((Enemy) ((Level) levels.get(level)).enemies
.get(i)).width,
((Enemy) ((Level) levels.get(level)).enemies
.get(i)).state
* ((Enemy) ((Level) levels.get(level)).enemies
.get(i)).height,
((Enemy) ((Level) levels.get(level)).enemies
.get(i)).frame
* ((Enemy) ((Level) levels.get(level)).enemies
.get(i)).width
+ ((Enemy) ((Level) levels.get(level)).enemies
.get(i)).width,
((Enemy) ((Level) levels.get(level)).enemies
.get(i)).state
* ((Enemy) ((Level) levels.get(level)).enemies
.get(i)).height
+ ((Enemy) ((Level) levels.get(level)).enemies
.get(i)).height, LColor.white);
else if (((Enemy) ((Level) levels.get(level)).enemies
.get(i)).getClass().toString().contains("Enemy4"))
batch.drawEmbedded(
enemy4Image,
(float) ((Enemy) ((Level) levels.get(level)).enemies
.get(i)).x - worldX,
(float) ((Enemy) ((Level) levels.get(level)).enemies
.get(i)).y - worldY,
(float) (((Enemy) ((Level) levels.get(level)).enemies
.get(i)).x + (double) ((Enemy) ((Level) levels
.get(level)).enemies.get(i)).width)
- worldX,
(float) (((Enemy) ((Level) levels.get(level)).enemies
.get(i)).y + (double) ((Enemy) ((Level) levels
.get(level)).enemies.get(i)).height)
- worldY,
((Enemy) ((Level) levels.get(level)).enemies
.get(i)).frame
* ((Enemy) ((Level) levels.get(level)).enemies
.get(i)).width,
((Enemy) ((Level) levels.get(level)).enemies
.get(i)).state
* ((Enemy) ((Level) levels.get(level)).enemies
.get(i)).height,
((Enemy) ((Level) levels.get(level)).enemies
.get(i)).frame
* ((Enemy) ((Level) levels.get(level)).enemies
.get(i)).width
+ ((Enemy) ((Level) levels.get(level)).enemies
.get(i)).width,
((Enemy) ((Level) levels.get(level)).enemies
.get(i)).state
* ((Enemy) ((Level) levels.get(level)).enemies
.get(i)).height
+ ((Enemy) ((Level) levels.get(level)).enemies
.get(i)).height, LColor.white);
else if (((Enemy) ((Level) levels.get(level)).enemies
.get(i)).getClass().toString().contains("Boss1"))
batch.drawEmbedded(
boss1Image,
(float) ((Enemy) ((Level) levels.get(level)).enemies
.get(i)).x - worldX,
(float) ((Enemy) ((Level) levels.get(level)).enemies
.get(i)).y - worldY,
(float) (((Enemy) ((Level) levels.get(level)).enemies
.get(i)).x + (double) ((Enemy) ((Level) levels
.get(level)).enemies.get(i)).width)
- worldX,
(float) (((Enemy) ((Level) levels.get(level)).enemies
.get(i)).y + (double) ((Enemy) ((Level) levels
.get(level)).enemies.get(i)).height)
- worldY,
((Enemy) ((Level) levels.get(level)).enemies
.get(i)).frame
* ((Enemy) ((Level) levels.get(level)).enemies
.get(i)).width,
((Enemy) ((Level) levels.get(level)).enemies
.get(i)).state
* ((Enemy) ((Level) levels.get(level)).enemies
.get(i)).height,
((Enemy) ((Level) levels.get(level)).enemies
.get(i)).frame
* ((Enemy) ((Level) levels.get(level)).enemies
.get(i)).width
+ ((Enemy) ((Level) levels.get(level)).enemies
.get(i)).width,
((Enemy) ((Level) levels.get(level)).enemies
.get(i)).state
* ((Enemy) ((Level) levels.get(level)).enemies
.get(i)).height
+ ((Enemy) ((Level) levels.get(level)).enemies
.get(i)).height, LColor.white);
for (int i = 0; i < 20; i++)
if (bullets[i] != null && !bullets[i].dead) {
batch.draw(bulletImage, bullets[i].x - worldX, bullets[i].y
- worldY, bullets[i].angle);
}
for (int i = 0; i < 5; i++)
if (shots[i] != null && !shots[i].dead) {
batch.draw(chargeShotImage, shots[i].x - worldX, shots[i].y
- worldY, shots[i].angle);
}
for (int i = 0; i < items.size(); i++)
if (items.get(i) != null
&& ((Item) items.get(i)).state != Item.STATE_DEATH
&& !((Item) items.get(i)).flicker)
if (((Item) items.get(i)).getClass().toString()
.contains("Life"))
batch.draw(health, (float) ((Item) items.get(i)).x
- worldX, (float) ((Item) items.get(i)).y
- worldY);
else if (((Item) items.get(i)).getClass().toString()
.contains("GreenGem"))
batch.draw(greenGemImage,
(float) ((Item) items.get(i)).x - worldX,
(float) ((Item) items.get(i)).y - worldY);
else if (((Item) items.get(i)).getClass().toString()
.contains("BlueGem"))
batch.draw(blueGemImage,
(float) ((Item) items.get(i)).x - worldX,
(float) ((Item) items.get(i)).y - worldY);
else if (((Item) items.get(i)).getClass().toString()
.contains("Ammo15"))
batch.draw(ammo15Image, (float) ((Item) items.get(i)).x
- worldX, (float) ((Item) items.get(i)).y
- worldY);
if (player.attacking || player.dashing)
if (player.swordLevel == 1) {
batch.draw(swordImage, (player.x - worldX)
+ (float) player.swdInfo[player.state][0],
(player.y - worldY)
+ (float) player.swdInfo[player.state][1],
player.swdInfo[player.state][2]);
} else if (player.swordLevel == 2) {
batch.draw(swordImage2, (player.x - worldX)
+ (float) player.swdInfo[player.state][0],
(player.y - worldY)
+ (float) player.swdInfo[player.state][1],
player.swdInfo[player.state][2]);
}
if (player.pickedUpSword)
batch.draw(swordGet, 200F, 450F);
}
if (!titleScreen && !win && !levelClear) {
batch.draw(hud, 0.0F, 0.0F);
for (int i = 0; i < player.healthLevel; i++)
batch.draw(eHealth, 15 + 30 * i, 20F);
for (int i = 0; i < player.hp; i++)
batch.draw(hudHealth, 15 + 30 * i, 20F);
batch.draw(zButtonImage, 225F, 5F);
if (player.hp <= 0)
batch.draw(gameoverImage, 200F, 266F);
} else if (titleScreen)
batch.draw(titleImage, 136F, 206F);
else if (levelClear)
batch.draw(levelClearImage, 0.0F, 271F);
else if (win)
batch.draw(winImage, 263F, 271F);
}
@Override
public void loadContent() {
player = new Player();
levels = new Vector<Level>();
for (int i = 1; i <= maxMaps; i++)
levels.add(readLevel(i));
tileMap = LTextures.loadTexture("assets/graphics/tilemap.png");
playerImage = LTextures.loadTexture("assets/graphics/player.png");
deadPlayerImage = LTextures.loadTexture("assets/graphics/playerdead.png");
playerGet = LTextures.loadTexture("assets/graphics/playerget.png");
rollPlayerImage = LTextures.loadTexture("assets/graphics/playerroll.png");
swordImage = LTextures.loadTexture("assets/graphics/sword.png");
swordImage2 = LTextures.loadTexture("assets/graphics/sword2.png");
enemy1Image = LTextures.loadTexture("assets/graphics/neoscout1.png");
enemy2Image = LTextures.loadTexture("assets/graphics/alienzaku1.png");
enemy3Image = LTextures.loadTexture("assets/graphics/hunter.png");
enemy4Image = LTextures.loadTexture("assets/graphics/neoscout1.png");
boss1Image = LTextures.loadTexture("assets/graphics/boss1.png");
health = LTextures.loadTexture("assets/graphics/health.png");
eHealth = LTextures.loadTexture("assets/graphics/ehealth.png");
gameoverImage = LTextures.loadTexture("assets/graphics/gameover.png");
titleImage = LTextures.loadTexture("assets/graphics/title.png");
winImage = LTextures.loadTexture("assets/graphics/win.png");
levelClearImage = LTextures.loadTexture("assets/graphics/levelclear.png");
greenGemImage = LTextures.loadTexture("assets/graphics/greengem.png");
blueGemImage = LTextures.loadTexture("assets/graphics/bluegem.png");
hud = LTextures.loadTexture("assets/graphics/hud.png");
hudGem = LTextures.loadTexture("assets/graphics/hudgem.png");
hudHealth = LTextures.loadTexture("assets/graphics/hudhealth.png");
hudBullet = LTextures.loadTexture("assets/graphics/hudbullet.png");
neblockImage = LTextures.loadTexture("assets/graphics/neblock.png");
bossblock1Image = LTextures.loadTexture("assets/graphics/bossblock1.png");
blockImage = LTextures.loadTexture("assets/graphics/block.png");
moveableBlockImage = LTextures.loadTexture("assets/graphics/moveblock.png");
lockedBlockImage = LTextures.loadTexture("assets/graphics/lockedblock.png");
bulletImage = LTextures.loadTexture("assets/graphics/bullet.png");
chargeShotImage = LTextures.loadTexture("assets/graphics/chargeshot.png");
eBulletImage = LTextures.loadTexture("assets/graphics/ebullet.png");
eChargeShotImage = LTextures.loadTexture("assets/graphics/echargeshot.png");
ammo15Image = LTextures.loadTexture("assets/graphics/ammo15.png");
mapSwordImage = LTextures.loadTexture("assets/graphics/mapsword.png");
swordBlockImage = LTextures.loadTexture("assets/graphics/swordblock.png");
hexContainerImage = LTextures.loadTexture("assets/graphics/hexcontainer.png");
swordGet = LTextures.loadTexture("assets/graphics/swordget.png");
stepSwitchImage = LTextures.loadTexture("assets/graphics/stepswitch.png");
zButtonImage = LTextures.loadTexture("assets/graphics/zbutton.png");
keyImage = LTextures.loadTexture("assets/graphics/key.png");
items = new Vector<Item>();
bullets = new Bullet[20];
for (int i = 0; i < 20; i++)
bullets[i] = new Bullet(-1F, -1F, true);
shots = new ChargeShot[5];
for (int i = 0; i < 5; i++)
shots[i] = new ChargeShot(-1F, -1F, true);
bgmInfo = (new int[] { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1 });
}
@Override
public void unloadContent() {
// TODO Auto-generated method stub
}
@Override
public void pressed(GameTouch e) {
// TODO Auto-generated method stub
}
@Override
public void released(GameTouch e) {
// TODO Auto-generated method stub
}
@Override
public void move(GameTouch e) {
// TODO Auto-generated method stub
}
@Override
public void drag(GameTouch e) {
// TODO Auto-generated method stub
}
@Override
public void pressed(GameKey e) {
}
@Override
public void released(GameKey e) {
// TODO Auto-generated method stub
}
private RectBox rect = new RectBox();
@Override
public void update(GameTime gameTime) {
if(!isOnLoadComplete()){
return;
}
if (titleScreen)
curBGM = 0;
else if (win)
curBGM = 0;
else if (levelClear)
curBGM = 0;
else
curBGM = bgmInfo[level];
if ((levelClear || win) && !menuDelayPolled) {
player.menuDelay = 30;
menuDelayPolled = true;
}
if (player.menuDelay >= 0)
player.menuDelay--;
updateBGM();
if (isKeyPressed(SysKey.Z)) {
if (!titleScreen && !win && !levelClear) {
boolean b = false;
if (player.canGrab && player.grabbedThing < 0) {
for (int i = 0; i < ((Level) levels.get(level)).things
.size(); i++)
if (player.state == 2 && player.grabDelay <= 0) {
rect.setBounds((int) player.x,
(int) player.y, player.width,
player.height + 1);
if (!b
&& rect
.intersects(
(int) ((Thing) ((Level) levels
.get(level)).things
.get(i)).x,
(int) ((Thing) ((Level) levels
.get(level)).things
.get(i)).y,
((Thing) ((Level) levels
.get(level)).things
.get(i)).width,
((Thing) ((Level) levels
.get(level)).things
.get(i)).height)) {
player.grabbedThing = i;
player.draggingUp = true;
player.grabDelay = 30;
b = true;
}
} else if (player.state == 0 && player.grabDelay <= 0) {
rect.setBounds((int) player.x,
(int) player.y - 1, player.width,
player.height);
if (!b
&& rect
.intersects(
(int) ((Thing) ((Level) levels
.get(level)).things
.get(i)).x,
(int) ((Thing) ((Level) levels
.get(level)).things
.get(i)).y,
((Thing) ((Level) levels
.get(level)).things
.get(i)).width,
((Thing) ((Level) levels
.get(level)).things
.get(i)).height)) {
player.grabbedThing = i;
player.draggingDown = true;
player.grabDelay = 30;
b = true;
}
} else if (player.state == 1 && player.grabDelay <= 0) {
rect.setBounds((int) player.x,
(int) player.y, player.width + 1,
player.height);
if (!b
&& (rect
.intersects(
(int) ((Thing) ((Level) levels
.get(level)).things
.get(i)).x,
(int) ((Thing) ((Level) levels
.get(level)).things
.get(i)).y,
((Thing) ((Level) levels
.get(level)).things
.get(i)).width,
((Thing) ((Level) levels
.get(level)).things
.get(i)).height))) {
player.grabbedThing = i;
player.draggingRight = true;
player.grabDelay = 30;
b = true;
}
} else if (player.state == 3
&& player.grabDelay <= 0
&& !b
&& (new RectBox((int) player.x - 1,
(int) player.y, player.width,
player.height))
.intersects(
(int) ((Thing) ((Level) levels
.get(level)).things
.get(i)).x,
(int) ((Thing) ((Level) levels
.get(level)).things
.get(i)).y,
((Thing) ((Level) levels
.get(level)).things
.get(i)).width,
((Thing) ((Level) levels
.get(level)).things
.get(i)).height)) {
player.grabbedThing = i;
player.draggingRight = true;
player.grabDelay = 30;
b = true;
}
}
if (player.draggingUp || player.draggingDown
|| player.draggingRight || player.draggingLeft)
b = true;
if (player.hp <= 0 && player.menuDelay <= 0)
reset();
else if (player.draggingUp && player.grabDelay <= 0) {
player.draggingUp = false;
player.grabbedThing = -1;
player.grabDelay = 30;
player.swordDelay = Player.MAX_SWORD_DELAY;
b = true;
} else if (player.draggingDown && player.grabDelay <= 0) {
player.draggingDown = false;
player.grabbedThing = -1;
player.grabDelay = 30;
player.swordDelay = Player.MAX_SWORD_DELAY;
b = true;
} else if (player.draggingRight && player.grabDelay <= 0) {
player.draggingRight = false;
player.grabbedThing = -1;
player.grabDelay = 30;
player.swordDelay = Player.MAX_SWORD_DELAY;
b = true;
} else if (player.draggingLeft && player.grabDelay <= 0) {
player.draggingLeft = false;
player.grabbedThing = -1;
player.grabDelay = 30;
player.swordDelay = Player.MAX_SWORD_DELAY;
b = true;
} else if (!b)
if (player.pickedUpSword) {
player.pickedUpSword = false;
player.swordDelay = Player.MAX_SWORD_DELAY;
} else if (player.hasSword && !player.rolling
&& !player.jumping && !player.dashing && !b
&& player.swordDelay <= 0 && player.hp > 0
&& !player.attacking && player.swordDelay <= 0) {
player.attacking = true;
player.swordPause = Player.MAX_SWORD_PAUSE;
player.swordSwing(((Level) levels.get(level)).enemies,
items);
}
}
} else if (titleScreen && player.menuDelay <= 0)
titleScreen = false;
else if (levelClear && player.menuDelay <= 0) {
level++;
reset();
} else if (win && player.menuDelay <= 0) {
win = false;
level = 1;
reset();
}
if (!player.pickedUpSword && !player.rolling && !player.jumping
&& !player.dashing && !player.attacking && player.hp > 0
&& !titleScreen && !win && !levelClear) {
if (isKeyPressed(SysKey.X) && player.hasSword && player.dashDelay <= 0) {
player.dashing = true;
}
if (isKeyPressed(SysKey.C) && player.rollDelay <= 0)
player.rolling = true;
if (isKeyPressed(SysKey.A) && player.bullets > 0 && !player.rolling
&& player.shotDelay <= 0) {
boolean b = false;
for (int i = 0; i < 20; i++)
if (!b) {
bullets[i]
.resetBullet(
player.x
+ ((float) (player.width / 2) - bullets[i].width / 2.0F),
player.y
+ ((float) (player.height / 2) - bullets[i].height / 2.0F),
player.state);
player.shotDelay = 30;
player.bullets--;
b = true;
}
}
if (isKeyPressed(SysKey.UP) && !player.draggingRight
&& !player.draggingLeft) {
Vector<Thing> temp = new Vector<Thing>();
for (int i = 0; i < ((Level) levels.get(level)).things.size(); i++)
temp.add((Thing) ((Level) levels.get(level)).things.get(i));
for (int i = 0; i < ((Level) levels.get(level)).switches.size(); i++) {
for (int j = 0; j < ((Switch) ((Level) levels.get(level)).switches
.get(i)).blocks.size(); j++)
temp.add((Thing) ((Switch) ((Level) levels.get(level)).switches
.get(i)).blocks.get(j));
}
if (player.y < (float) (((Level) levels.get(level)).map.height
* ((Level) levels.get(level)).map.tileHeight - 300)
&& worldY > 0.0F)
worldY = player.moveUp(((Level) levels.get(level)).map,
worldY, temp);
else
player.moveUp(((Level) levels.get(level)).map, worldY, temp);
}
if (isKeyPressed(SysKey.DOWN) && !player.draggingRight
&& !player.draggingLeft) {
Vector<Thing> temp = new Vector<Thing>();
for (int i = 0; i < ((Level) levels.get(level)).things.size(); i++)
temp.add((Thing) ((Level) levels.get(level)).things.get(i));
for (int i = 0; i < ((Level) levels.get(level)).switches.size(); i++) {
for (int j = 0; j < ((Switch) ((Level) levels.get(level)).switches
.get(i)).blocks.size(); j++)
temp.add((Thing) ((Switch) ((Level) levels.get(level)).switches
.get(i)).blocks.get(j));
}
if (player.y > 300F
&& worldY < (float) (((Level) levels.get(level)).map.height
* ((Level) levels.get(level)).map.tileHeight - 600))
worldY = player.moveDown(((Level) levels.get(level)).map,
worldY, temp);
else
player.moveDown(((Level) levels.get(level)).map, worldY,
temp);
}
if (isKeyPressed(SysKey.LEFT) && !player.draggingUp
&& !player.draggingDown) {
Vector<Thing> temp = new Vector<Thing>();
for (int i = 0; i < ((Level) levels.get(level)).things.size(); i++)
temp.add((Thing) ((Level) levels.get(level)).things.get(i));
for (int i = 0; i < ((Level) levels.get(level)).switches.size(); i++) {
for (int j = 0; j < ((Switch) ((Level) levels.get(level)).switches
.get(i)).blocks.size(); j++)
temp.add((Thing) ((Switch) ((Level) levels.get(level)).switches
.get(i)).blocks.get(j));
}
if (player.x < (float) (((Level) levels.get(level)).map.width
* ((Level) levels.get(level)).map.tileWidth - 400)
&& worldX > 0.0F)
worldX = player.moveLeft(((Level) levels.get(level)).map,
worldX, temp);
else
player.moveLeft(((Level) levels.get(level)).map, worldX,
temp);
}
if (isKeyPressed(SysKey.RIGHT) && !player.draggingUp
&& !player.draggingDown) {
Vector<Thing> temp = new Vector<Thing>();
for (int i = 0; i < ((Level) levels.get(level)).things.size(); i++)
temp.add((Thing) ((Level) levels.get(level)).things.get(i));
for (int i = 0; i < ((Level) levels.get(level)).switches.size(); i++) {
for (int j = 0; j < ((Switch) ((Level) levels.get(level)).switches
.get(i)).blocks.size(); j++)
temp.add((Thing) ((Switch) ((Level) levels.get(level)).switches
.get(i)).blocks.get(j));
}
if (player.x > 400F
&& worldX < (float) (((Level) levels.get(level)).map.width
* ((Level) levels.get(level)).map.tileWidth - 800))
worldX = player.moveRight(((Level) levels.get(level)).map,
worldX, temp);
else
player.moveRight(((Level) levels.get(level)).map, worldX,
temp);
} else if (!isKeyPressed(SysKey.UP) && !isKeyPressed(SysKey.DOWN)
&& !isKeyPressed(SysKey.LEFT) && !isKeyPressed(SysKey.RIGHT)) {
player.walking = false;
if (player.state == Player.STATE_NORMAL)
player.frame = 0;
}
}
if (!titleScreen && !win) {
Vector<Thing> temp = new Vector<Thing>();
for (int i = 0; i < ((Level) levels.get(level)).things.size(); i++)
temp.add((Thing) ((Level) levels.get(level)).things.get(i));
for (int i = 0; i < ((Level) levels.get(level)).switches.size(); i++) {
for (int j = 0; j < ((Switch) ((Level) levels.get(level)).switches
.get(i)).blocks.size(); j++)
temp.add((Thing) ((Switch) ((Level) levels.get(level)).switches
.get(i)).blocks.get(j));
}
player.update(((Level) levels.get(level)).map, worldX, worldY, temp);
worldX = player.tempWorldX;
worldY = player.tempWorldY;
if (!player.pickedUpSword) {
if (player.dashing)
player.swordDash(((Level) levels.get(level)).enemies, items);
for (int i = 0; i < ((Level) levels.get(level)).enemies.size(); i++)
if (((Level) levels.get(level)).enemies.get(i) != null
&& ((Enemy) ((Level) levels.get(level)).enemies
.get(i)).state != Enemy.STATE_DEATH) {
((Enemy) ((Level) levels.get(level)).enemies.get(i))
.update(((Level) levels.get(level)).map,
player, items, null, 0, null, 0, temp);
} else {
((Enemy) ((Level) levels.get(level)).enemies.get(i)).rare.x = ((Enemy) ((Level) levels
.get(level)).enemies.get(i)).x;
((Enemy) ((Level) levels.get(level)).enemies.get(i)).rare.y = ((Enemy) ((Level) levels
.get(level)).enemies.get(i)).y;
((Enemy) ((Level) levels.get(level)).enemies.get(i))
.drop(items);
((Level) levels.get(level)).enemies.remove(i);
}
for (int i = 0; i < items.size(); i++)
if (items.get(i) != null
&& ((Item) items.get(i)).state != Item.STATE_DEATH)
((Item) items.get(i)).update(player);
for (int i = 0; i < 20; i++)
if (bullets[i] != null && !bullets[i].dead)
bullets[i].update(((Level) levels.get(level)).map,
((Level) levels.get(level)).enemies);
for (int i = 0; i < 5; i++)
if (shots[i] != null && !shots[i].dead)
shots[i].update(((Level) levels.get(level)).map,
((Level) levels.get(level)).enemies, bullets,
20);
}
for (int i = 0; i < ((Level) levels.get(level)).things.size(); i++)
if (((Level) levels.get(level)).things.get(i) != null
&& ((Thing) ((Level) levels.get(level)).things.get(i)).state != Thing.STATE_DEATH)
((Thing) ((Level) levels.get(level)).things.get(i)).update(
player, enemiesLeft());
else if (((Thing) ((Level) levels.get(level)).things.get(i)).state == Thing.STATE_DEATH)
((Level) levels.get(level)).things.remove(i);
for (int i = 0; i < ((Level) levels.get(level)).switches.size(); i++) {
((Switch) ((Level) levels.get(level)).switches.get(i)).update(
player, ((Level) levels.get(level)).things);
for (int j = 0; j < ((Switch) ((Level) levels.get(level)).switches
.get(i)).blocks.size(); j++)
if (((Switch) ((Level) levels.get(level)).switches.get(i)).blocks
.get(j) != null
&& ((Thing) ((Switch) ((Level) levels.get(level)).switches
.get(i)).blocks.get(j)).state != Item.STATE_DEATH)
((Thing) ((Switch) ((Level) levels.get(level)).switches
.get(i)).blocks.get(j)).update(player,
enemiesLeft());
}
if (player.y < 0.0F) {
level = ((Level) levels.get(level)).map.upExit;
worldY = ((Level) levels.get(level)).map.height
* ((Level) levels.get(level)).map.tileHeight - 600;
player.y = ((float) ((Level) levels.get(level)).map.height - 1.5F)
* (float) ((Level) levels.get(level)).map.tileHeight;
} else if (player.y > (float) (((Level) levels.get(level)).map.height * ((Level) levels
.get(level)).map.tileHeight)) {
level = ((Level) levels.get(level)).map.downExit;
worldY = 0.0F;
player.y = 1.5F * (float) ((Level) levels.get(level)).map.tileHeight;
} else if (player.x < 0.0F) {
level = ((Level) levels.get(level)).map.leftExit;
worldX = ((Level) levels.get(level)).map.width
* ((Level) levels.get(level)).map.tileWidth - 800;
player.x = ((float) ((Level) levels.get(level)).map.width - 1.5F)
* (float) ((Level) levels.get(level)).map.tileWidth;
} else if (player.x > (float) (((Level) levels.get(level)).map.width * ((Level) levels
.get(level)).map.tileWidth)) {
level = ((Level) levels.get(level)).map.rightExit;
worldX = 0.0F;
player.x = 1.5F * (float) ((Level) levels.get(level)).map.tileWidth;
}
}
}
@Override
public void onUpClick() {
setKeyDown(SysKey.UP);
}
@Override
public void onLeftClick() {
setKeyDown(SysKey.LEFT);
}
@Override
public void onRightClick() {
setKeyDown(SysKey.RIGHT);
}
@Override
public void onDownClick() {
setKeyDown(SysKey.DOWN);
}
@Override
public void onTriangleClick() {
System.out.println("onTriangleClick");
setKeyDown(SysKey.Z);
}
@Override
public void onSquareClick() {
System.out.println("onSquareClick");
setKeyDown(SysKey.C);
}
@Override
public void onCircleClick() {
System.out.println("onCircleClick");
setKeyDown(SysKey.A);
}
@Override
public void onCancelClick() {
System.out.println("onCancelClick");
setKeyDown(SysKey.X);
}
@Override
public void unUpClick() {
setKeyUp(SysKey.UP);
}
@Override
public void unLeftClick() {
setKeyUp(SysKey.LEFT);
}
@Override
public void unRightClick() {
setKeyUp(SysKey.RIGHT);
}
@Override
public void unDownClick() {
setKeyUp(SysKey.DOWN);
}
@Override
public void unTriangleClick() {
setKeyUp(SysKey.Z);
}
@Override
public void unSquareClick() {
setKeyUp(SysKey.C);
}
@Override
public void unCircleClick() {
setKeyUp(SysKey.A);
}
@Override
public void unCancelClick() {
setKeyUp(SysKey.X);
}
@Override
public void resize(int width, int height) {
// TODO Auto-generated method stub
}
@Override
public void resume() {
// TODO Auto-generated method stub
}
@Override
public void pause() {
// TODO Auto-generated method stub
}
}