package com.mygame; import java.util.Vector; import loon.geom.RectBox; import loon.utils.MathUtils; public class Enemy { public int MAX_FRAMES[]; public int MAX_FRAME_DELAY[]; public static int STATE_NORMAL = 0; public static int STATE_DYING = 4; public static int STATE_DEATH = 5; public static int START_OF_ODD_STATES = 4; public static int VISION_HEIGHT = 4; public static int VISION_WIDTH = 3; boolean walking; boolean flicker; int frameDelay; int flickerTime; int height; int width; float x; float y; float destX; float destY; int state; int frame; int hp; float speed; int timeToAct; int choice; boolean makeChoice; boolean droppedItem; boolean droppedRare; boolean aggro; int stopDelay; boolean actionDelaySet; int actionDelay; int visionInfo[][]; int shotDelay; Item rare; public Enemy() { walking = false; flicker = false; frameDelay = 0; flickerTime = 0; height = 26; width = 16; x = 400 - width / 2; y = 300 - height / 2; destX = 0f; destY = 0f; state = 0; frame = 0; hp = 5; speed = 0.5f; timeToAct = 0; choice = 0; makeChoice = true; droppedItem = false; droppedRare = false; aggro = false; stopDelay = 0; actionDelaySet = false; actionDelay = 0; shotDelay = 0; } public void updateStateAndFrame() { if (frameDelay <= 0) { frame++; frameDelay = MAX_FRAME_DELAY[state]; } if (frame >= MAX_FRAMES[state]) { if (state == STATE_DYING) state = STATE_DEATH; frame = 0; } } public void update(Map map, Player player1, Vector<?> vector, Bullet[] abullet, int i, ChargeShot[] achargeshot, int j, Vector<?> vector1) { } public void moveUp(Map m, Vector<?> things) { y -= speed; RectBox col[] = getColTop(m); RectBox thingCol[] = getColThings(things); RectBox rect = new RectBox(); for (int i = 0; i < 3; i++) { rect.setBounds(x, y, width, height); if (rect.intersects(col[i])) y += (float) (col[i].y + col[i].height) - y; } for (int i = 0; i < thingCol.length; i++) { rect.setBounds(x, y, width, height); if (rect.intersects(thingCol[i]) && ((Thing) things.get(i)).solid && ((Thing) things.get(i)).state != Thing.STATE_DEATH) y += (float) (thingCol[i].y + thingCol[i].height) - y; } } public void moveDown(Map m, Vector<?> things) { y += speed; RectBox col[] = getColBottom(m); RectBox thingCol[] = getColThings(things); RectBox rect = new RectBox(); for (int i = 0; i < 3; i++) { rect.setBounds(x, y, width, height); if (rect.intersects(col[i])) { y -= (y + (float) height) - (float) col[i].y; } } for (int i = 0; i < thingCol.length; i++) { rect.setBounds(x, y, width, height); if (rect.intersects(thingCol[i]) && ((Thing) things.get(i)).solid && ((Thing) things.get(i)).state != Thing.STATE_DEATH) y -= (y + (float) height) - (float) thingCol[i].y; } } public void moveLeft(Map m, Vector<?> things) { x -= speed; RectBox col[] = getColLeft(m); RectBox thingCol[] = getColThings(things); RectBox rect = new RectBox(); for (int i = 0; i < 3; i++) { rect.setBounds(x, y, width, height); if (rect.intersects(col[i])) x += (float) (col[i].x + col[i].width) - x; } for (int i = 0; i < thingCol.length; i++) { rect.setBounds(x, y, width, height); if (rect.intersects(thingCol[i]) && ((Thing) things.get(i)).solid && ((Thing) things.get(i)).state != Thing.STATE_DEATH) x += (float) (thingCol[i].x + thingCol[i].width) - x; } } public void moveRight(Map m, Vector<?> things) { x += speed; RectBox col[] = getColRight(m); RectBox thingCol[] = getColThings(things); RectBox rect = new RectBox(); for (int i = 0; i < 3; i++) { rect.setBounds(x, y, width, height); if (rect.intersects(col[i])) x -= (x + (float) width) - (float) col[i].x; } for (int i = 0; i < thingCol.length; i++) { rect.setBounds(x, y, width, height); if (rect.intersects(thingCol[i]) && ((Thing) things.get(i)).solid && ((Thing) things.get(i)).state != Thing.STATE_DEATH) x -= (x + (float) width) - (float) thingCol[i].x; } } public RectBox[] getColThings(Vector<?> things) { RectBox col[] = new RectBox[things.size()]; for (int i = 0; i < things.size(); i++) col[i] = new RectBox((int) ((Thing) things.get(i)).x, (int) ((Thing) things.get(i)).y, ((Thing) things.get(i)).width, ((Thing) things.get(i)).height); return col; } public RectBox[] getColTop(Map m) { RectBox col[] = new RectBox[3]; int startX = (int) (x / (float) m.tileWidth); int startY = (int) (y / (float) m.tileWidth); for (int i = -1; i <= 1; i++) try { if (m.tileInfo[m.tiles[startX + i][startY]] == 1) col[i + 1] = m.tileCol[startX + i][startY]; else col[i + 1] = new RectBox(0, 0, 0, 0); } catch (Exception e) { col[i + 1] = new RectBox(0, 0, 0, 0); } return col; } public RectBox[] getColBottom(Map m) { RectBox col[] = new RectBox[3]; int startX = (int) (x / (float) m.tileWidth); int startY = (int) (y / (float) m.tileWidth); for (int i = -1; i <= 1; i++) try { if (m.tileInfo[m.tiles[startX + i][startY + 1]] == 1) col[i + 1] = m.tileCol[startX + i][startY + 1]; else col[i + 1] = new RectBox(0, 0, 0, 0); } catch (Exception e) { col[i + 1] = new RectBox(0, 0, 0, 0); } return col; } public RectBox[] getColLeft(Map m) { RectBox col[] = new RectBox[3]; int startX = (int) (x / (float) m.tileWidth); int startY = (int) (y / (float) m.tileWidth); for (int i = -1; i <= 1; i++) try { if (m.tileInfo[m.tiles[startX][startY + i]] == 1) col[i + 1] = m.tileCol[startX][startY + i]; else col[i + 1] = new RectBox(0, 0, 0, 0); } catch (Exception e) { col[i + 1] = new RectBox(0, 0, 0, 0); } return col; } public RectBox[] getColRight(Map m) { RectBox col[] = new RectBox[3]; int startX = (int) (x / (float) m.tileWidth); int startY = (int) (y / (float) m.tileWidth); for (int i = -1; i <= 1; i++) try { if (m.tileInfo[m.tiles[startX + 1][startY + i]] == 1) col[i + 1] = m.tileCol[startX + 1][startY + i]; else col[i + 1] = new RectBox(0, 0, 0, 0); } catch (Exception e) { col[i + 1] = new RectBox(0, 0, 0, 0); } return col; } public void deathCheck() { if (hp <= 0 && state != STATE_DYING && state != STATE_DEATH) { frame = 0; state = STATE_DYING; flicker = false; } } public void knockback(int state) { if (state == 0) y -= 10D; else if (state == 1) x += 10D; else if (state == 2) y += 10D; else if (state == 3) x -= 10D; } public boolean isSeeing(Player player) { return state != STATE_DYING && state != STATE_DEATH && flickerTime <= 0 && x + (float) visionInfo[state][0] + (float) visionInfo[state][VISION_WIDTH] > (float) player.x && x + (float) visionInfo[state][0] < (float) (player.x + (float) player.width) && y + (float) visionInfo[state][1] + (float) visionInfo[state][VISION_HEIGHT] > (float) player.y && y + (float) visionInfo[state][1] < (float) (player.y + (float) player.height); } public void drop(Vector<Item> items) { int num = (int) (Math.random() * 4f); if (num == 3) { items.add(rare); droppedRare = true; } if (!droppedRare) { num = (int) (MathUtils.random() * 2f); if (num == 1) { num = (int) (Math.random() * 2f); if (num == 0) items.add(new Life((float) x, (float) y)); else if (num == 1) items.add(new GreenGem((float) x, (float) y)); } } } public void collision(Player player) { if (state != STATE_DYING && state != STATE_DEATH && flickerTime <= 0 && player.flickerTime <= 0 && player.hp > 0 && x + (float) width > (float) player.x && x < (float) (player.x + (float) player.width) && y + (float) height > (float) player.y && y < (float) (player.y + (float) player.height)) { player.hp--; player.flickerTime = 50; player.knockback(); if (player.hp > 0) { } else { player.menuDelay = 30; } } } }