package org.tjuscs.bulletgame.util; import java.lang.reflect.Constructor; import java.util.List; import org.tjuscs.bulletgame.model.BaseObject; import org.tjuscs.bulletgame.model.GameModel; public class GameUtil { public static int GROUP_GHOST = 0; public static int GROUP_ENEMY_BULLET = 1; public static int GROUP_ENEMY = 2; public static int GROUP_PLAYER_BULLET = 3; public static int GROUP_PLAYER = 4; public static int GROUP_INDES = 5; public static int GROUP_ITEM = 6; public static int GROUP_ALL = 16; public static int GROUP_NUM_OF_GROUP = 16; public static double LAYER_BG = -700; public static double LAYER_ENEMY = -600; public static double LAYER_PLAYER_BULLET = -500; public static double LAYER_PLAYER = -400; public static double LAYER_ITEM = -300; public static double LAYER_ENEMY_BULLET = -200; public static double LAYER_ENEMY_BULLET_EF = -100; public static double LAYER_TOP = 0; public static int MOVE_NORMAL = 0; public static int MOVE_ACCEL = 1; public static int MOVE_DECEL = 2; public static int MOVE_ACC_DEC = 3; public static int STATUS_NORMAL = 0; public static int STATUS_DEL = 1; public static int STATUS_KILL = 2; public static int COLOR_RED = 2; public static int COLOR_PURPLE = 4; public static int COLOR_BLUE = 6; public static int COLOR_CYAN = 8; public static int COLOR_GREEN = 10; public static int COLOR_YELLOW = 12; public static int COLOR_ORANGE = 14; public static int COLOR_GRAY = 16; private GameUtil() { } private static GameUtil instance; public static GameUtil getInstance() { if (instance == null) instance = new GameUtil(); return instance; } @SuppressWarnings({ "rawtypes", "unchecked" }) public static void NewObj(Class instanceClass, Object... params) { if (instanceClass != null) try { if (params == null || params.length <= 0) GameModel.getInstance().getObjList() .add((BaseObject) instanceClass.newInstance()); else { Class[] paramClass = new Class[params.length]; for (int i = 0; i < params.length; i++) paramClass[i] = params[i].getClass(); Constructor con = instanceClass.getConstructor(paramClass); GameModel.getInstance().getObjList() .add((BaseObject) con.newInstance(params)); } } catch (Exception e) { e.printStackTrace(); } } public static void Del(BaseObject unit) { unit.setStatus(STATUS_DEL); unit.del(); } public static void RawDel(BaseObject unit) { unit.setStatus(STATUS_DEL); } public static void Kill(BaseObject unit) { unit.setStatus(STATUS_KILL); unit.kill(); } public static void RawKill(BaseObject unit) { unit.setStatus(STATUS_KILL); } public static void PerserveUnit(BaseObject unit) { unit.setStatus(STATUS_NORMAL); } public static boolean IsValid(BaseObject unit) { if (unit.getStatus() == STATUS_NORMAL) return true; else return false; } public static void SetV(BaseObject unit, double v, double angle, boolean set_rot) { unit.setVx(v * MathUtils.cosDeg(angle)); unit.setVy(v * MathUtils.sinDeg(angle)); if (set_rot) unit.setRot(angle); } public static void SetV2(BaseObject unit, double v, double angle, boolean set_rot, boolean aim) { if (aim) SetV(unit, v, angle + Angle(unit, GameModel.getInstance().getPlayer()), set_rot); else SetV(unit, v, angle, set_rot); } public static boolean BoxCheck(BaseObject unit, double x1, double x2, double y1, double y2) { return unit.getX() > x1 && unit.getX() < x2 && unit.getY() > y1 && unit.getY() < y2; } public static double Dist(BaseObject unit1, BaseObject unit2) { return Dist(unit1.getX(), unit1.getY(), unit2.getX(), unit2.getY()); } public static double Dist(double x1, double y1, double x2, double y2) { return Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)); } public static double Angle(BaseObject unit1, BaseObject unit2) { return Angle(unit1.getX(), unit1.getY(), unit2.getX(), unit2.getY()); } public static double Angle(double x1, double y1, double x2, double y2) { double res = Math.acos((x2 - x1) / Dist(x1, y1, x2, y2)); if (y2 < y1) res = -res; return res * 180.0 / Math.PI; } public static void BulletKiller(double x, double y, boolean kill_indes) { List<BaseObject> objList = GameModel.getInstance().getObjList(); for (int i = 0 ; i < objList.size(); i++) { BaseObject obj = objList.get(i); if (obj.getGroup() == GROUP_ENEMY_BULLET && Dist(x, y, obj.getX(), obj.getY()) < 600) { Kill(obj); } } if (kill_indes) { for (int i = 0 ; i < objList.size(); i++) { BaseObject obj = objList.get(i); if (obj.getGroup() == GROUP_INDES && Dist(x, y, obj.getX(), obj.getY()) < 600) { Kill(obj); } } } } // public static void BulletDeleter(double x, double y, boolean kill_indes) // { // List<BaseObject> objList = GameModel.getInstance().getObjList(); // for (BaseObject obj : objList) { // if (obj.getGroup() == GROUP_ENEMY_BULLET // && Dist(x, y, obj.getX(), obj.getY()) < 600) { // Del(obj); // } // } // if (kill_indes) { // for (BaseObject obj : objList) { // if (obj.getGroup() == GROUP_INDES // && Dist(x, y, obj.getX(), obj.getY()) < 600) { // Del(obj); // } // } // } // } public static void GetPower(int v) { int power = GameModel.getInstance().getPower(); GameModel.getInstance().setPower(Math.min(500, power + v)); } public static void Movement(BaseObject unit) { unit.setX(unit.getX() + unit.getVx()); unit.setY(unit.getY() + unit.getVy()); unit.setRot(unit.getRot() + unit.getOmiga()); unit.setTimer(unit.getTimer() + 1); unit.setAni(unit.getAni() + 1); if (unit.isNavi()) { if (unit.getVx() == 0) { if (unit.getVy() > 0) unit.setRot(90.0); else unit.setRot(-90.0); } else { if (unit.getVx() > 0) { unit.setRot(Math.atan(unit.getVy() / unit.getVx()) * 180.0 / Math.PI); } else { double tmpr = Math.atan(unit.getVy() / unit.getVx()) * 180.0 / Math.PI; unit.setRot(unit.getVy() > 0 ? tmpr + 180.0 : tmpr - 180.0); } } } if (unit.isBound() && !BoxCheck(unit, 0, GameModel.getInstance().getWorldWidth(), 0, GameModel.getInstance().getWorldHeight())) { Del(unit); } } public static void info(Object obj) { System.out.println(obj.toString()); } public static void error(Object obj) { System.err.println(obj.toString()); } }