diff --git a/android/assets/data/Untitled.xcf b/android/assets/data/Untitled.xcf new file mode 100644 index 0000000..3b98945 Binary files /dev/null and b/android/assets/data/Untitled.xcf differ diff --git a/android/assets/data/powerups/Untitled.xcf b/android/assets/data/powerups/Untitled.xcf new file mode 100644 index 0000000..45f3b44 Binary files /dev/null and b/android/assets/data/powerups/Untitled.xcf differ diff --git a/android/assets/data/powerups/ball_and_chain.png b/android/assets/data/powerups/ball_and_chain.png new file mode 100644 index 0000000..3d4c598 Binary files /dev/null and b/android/assets/data/powerups/ball_and_chain.png differ diff --git a/android/assets/data/powerups/ball_and_chain.xcf b/android/assets/data/powerups/ball_and_chain.xcf new file mode 100644 index 0000000..435bd21 Binary files /dev/null and b/android/assets/data/powerups/ball_and_chain.xcf differ diff --git a/android/assets/data/powerups/bomb.png b/android/assets/data/powerups/bomb.png new file mode 100644 index 0000000..3993ae9 Binary files /dev/null and b/android/assets/data/powerups/bomb.png differ diff --git a/android/assets/data/powerups/bomb.xcf b/android/assets/data/powerups/bomb.xcf new file mode 100644 index 0000000..9150233 Binary files /dev/null and b/android/assets/data/powerups/bomb.xcf differ diff --git a/android/assets/data/powerups/feather.png b/android/assets/data/powerups/feather.png new file mode 100644 index 0000000..dfe93e3 Binary files /dev/null and b/android/assets/data/powerups/feather.png differ diff --git a/android/assets/data/powerups/slug.png b/android/assets/data/powerups/slug.png new file mode 100644 index 0000000..f4893af Binary files /dev/null and b/android/assets/data/powerups/slug.png differ diff --git a/android/assets/data/powerups/slug.xcf b/android/assets/data/powerups/slug.xcf new file mode 100644 index 0000000..367847a Binary files /dev/null and b/android/assets/data/powerups/slug.xcf differ diff --git a/android/assets/data/touchscreen_controller.png b/android/assets/data/touchscreen_controller.png new file mode 100644 index 0000000..74e0a3b Binary files /dev/null and b/android/assets/data/touchscreen_controller.png differ diff --git a/android/build.gradle b/android/build.gradle index ee53eec..fc02571 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -90,14 +90,7 @@ task run(type: Exec) { } dependencies { - implementation files('/home/emamaker/github/amazeing/gdx/lib/kryonet-2.21-all.jar') -<<<<<<< HEAD + implementation files('/srv/nfs/home/github/amazeing/gdx/lib/kryonet-2.21-all.jar') } - -======= - implementation files('/home/emamaker/github/amazeing/gdx/lib/kryonet-2.21-all.jar') -} - ->>>>>>> 98d66880a8d39751df9c3f47d8728c913b0851c6 eclipse.project.name = appName + "-android" diff --git a/build.gradle b/build.gradle index 1d5eb33..33a1ce2 100644 --- a/build.gradle +++ b/build.gradle @@ -49,18 +49,11 @@ project(":desktop") { api "com.badlogicgames.gdx:gdx-backend-lwjgl:$gdxVersion" api "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop" api "com.badlogicgames.gdx:gdx-bullet-platform:$gdxVersion:natives-desktop" -<<<<<<< HEAD api "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-desktop" api "com.badlogicgames.gdx:gdx-tools:$gdxVersion" api "com.badlogicgames.gdx:gdx-controllers-desktop:$gdxVersion" api "com.badlogicgames.gdx:gdx-controllers-platform:$gdxVersion:natives-desktop" api "de.tomgrill.gdxdialogs:gdx-dialogs-desktop:1.2.5" -======= - api "com.badlogicgames.gdx:gdx-tools:$gdxVersion" - api "com.badlogicgames.gdx:gdx-controllers-desktop:$gdxVersion" - api "com.badlogicgames.gdx:gdx-controllers-platform:$gdxVersion:natives-desktop" - api "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-desktop" ->>>>>>> 98d66880a8d39751df9c3f47d8728c913b0851c6 } } @@ -84,27 +77,17 @@ project(":android") { natives "com.badlogicgames.gdx:gdx-bullet-platform:$gdxVersion:natives-arm64-v8a" natives "com.badlogicgames.gdx:gdx-bullet-platform:$gdxVersion:natives-x86" natives "com.badlogicgames.gdx:gdx-bullet-platform:$gdxVersion:natives-x86_64" -<<<<<<< HEAD -======= - api "com.badlogicgames.ashley:ashley:$ashleyVersion" - api "com.badlogicgames.gdx:gdx-ai:$aiVersion" - api "com.badlogicgames.gdx:gdx-controllers:$gdxVersion" - api "com.badlogicgames.gdx:gdx-controllers-android:$gdxVersion" ->>>>>>> 98d66880a8d39751df9c3f47d8728c913b0851c6 api "com.badlogicgames.gdx:gdx-freetype:$gdxVersion" natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-armeabi" natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-armeabi-v7a" natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-arm64-v8a" natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-x86" natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-x86_64" -<<<<<<< HEAD api "com.badlogicgames.gdx:gdx-controllers:$gdxVersion" api "com.badlogicgames.gdx:gdx-controllers-android:$gdxVersion" api "com.badlogicgames.gdx:gdx-ai:$aiVersion" api "com.badlogicgames.ashley:ashley:$ashleyVersion" api "de.tomgrill.gdxdialogs:gdx-dialogs-android:1.2.5" -======= ->>>>>>> 98d66880a8d39751df9c3f47d8728c913b0851c6 } } @@ -122,10 +105,7 @@ project(":ios") { api "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-ios" api "com.badlogicgames.gdx:gdx-bullet-platform:$gdxVersion:natives-ios" api "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-ios" -<<<<<<< HEAD api "de.tomgrill.gdxdialogs:gdx-dialogs-ios:1.2.5" -======= ->>>>>>> 98d66880a8d39751df9c3f47d8728c913b0851c6 } } @@ -137,19 +117,12 @@ project(":core") { dependencies { api "com.badlogicgames.gdx:gdx:$gdxVersion" api "com.badlogicgames.gdx:gdx-bullet:$gdxVersion" -<<<<<<< HEAD api "com.badlogicgames.gdx:gdx-freetype:$gdxVersion" api "com.badlogicgames.gdx:gdx-controllers:$gdxVersion" api "com.badlogicgames.gdx:gdx-ai:$aiVersion" api "com.badlogicgames.ashley:ashley:$ashleyVersion" api "net.dermetfan.libgdx-utils:libgdx-utils:0.13.4" api "de.tomgrill.gdxdialogs:gdx-dialogs-core:1.2.5" -======= - api "com.badlogicgames.ashley:ashley:$ashleyVersion" - api "com.badlogicgames.gdx:gdx-ai:$aiVersion" - api "com.badlogicgames.gdx:gdx-controllers:$gdxVersion" - api "com.badlogicgames.gdx:gdx-freetype:$gdxVersion" ->>>>>>> 98d66880a8d39751df9c3f47d8728c913b0851c6 } } diff --git a/core/assets/data/powerups/Untitled.xcf b/core/assets/data/powerups/Untitled.xcf new file mode 100644 index 0000000..45f3b44 Binary files /dev/null and b/core/assets/data/powerups/Untitled.xcf differ diff --git a/core/assets/data/powerups/ball_and_chain.png b/core/assets/data/powerups/ball_and_chain.png new file mode 100644 index 0000000..3d4c598 Binary files /dev/null and b/core/assets/data/powerups/ball_and_chain.png differ diff --git a/core/assets/data/powerups/ball_and_chain.xcf b/core/assets/data/powerups/ball_and_chain.xcf new file mode 100644 index 0000000..435bd21 Binary files /dev/null and b/core/assets/data/powerups/ball_and_chain.xcf differ diff --git a/core/assets/data/powerups/bomb.png b/core/assets/data/powerups/bomb.png new file mode 100644 index 0000000..3993ae9 Binary files /dev/null and b/core/assets/data/powerups/bomb.png differ diff --git a/core/assets/data/powerups/bomb.xcf b/core/assets/data/powerups/bomb.xcf new file mode 100644 index 0000000..9150233 Binary files /dev/null and b/core/assets/data/powerups/bomb.xcf differ diff --git a/core/assets/data/powerups/feather.png b/core/assets/data/powerups/feather.png new file mode 100644 index 0000000..dfe93e3 Binary files /dev/null and b/core/assets/data/powerups/feather.png differ diff --git a/core/assets/data/powerups/slug.png b/core/assets/data/powerups/slug.png new file mode 100644 index 0000000..f4893af Binary files /dev/null and b/core/assets/data/powerups/slug.png differ diff --git a/core/assets/data/powerups/slug.xcf b/core/assets/data/powerups/slug.xcf new file mode 100644 index 0000000..367847a Binary files /dev/null and b/core/assets/data/powerups/slug.xcf differ diff --git a/core/build.gradle b/core/build.gradle index 4b6bf4f..7ee84c7 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -2,7 +2,7 @@ apply plugin: "java" sourceCompatibility = 1.7 dependencies { - implementation files('/home/emamaker/github/amazeing/gdx/lib/kryonet-2.21-all.jar') + implementation files('/srv/nfs/home/github/amazeing/gdx/lib/kryonet-2.21-all.jar') } [compileJava, compileTestJava]*.options*.encoding = 'UTF-8' diff --git a/core/src/com/emamaker/amazeing/AMazeIng.java b/core/src/com/emamaker/amazeing/AMazeIng.java index f5b7a7b..4811803 100755 --- a/core/src/com/emamaker/amazeing/AMazeIng.java +++ b/core/src/com/emamaker/amazeing/AMazeIng.java @@ -12,6 +12,7 @@ import com.emamaker.amazeing.manager.GameType; import com.emamaker.amazeing.manager.network.GameClient; import com.emamaker.amazeing.manager.network.GameServer; import com.emamaker.amazeing.maze.settings.MazeSettings; +import com.emamaker.amazeing.player.powerups.PowerUps; import com.emamaker.amazeing.ui.UIManager; import com.emamaker.voxelengine.VoxelWorld; @@ -24,7 +25,7 @@ public class AMazeIng extends Game { Random rand = new Random(); public UIManager uiManager; - public GameManager gameManager; + public GameManager gameManager, currentGameManager; public MazeSettings settings; public InputMultiplexer multiplexer = new InputMultiplexer(); @@ -64,6 +65,7 @@ public class AMazeIng extends Game { generated = false; setupGUI(); setupGameManager(); + setupPowerUps(); } public void setupGUI() { @@ -80,8 +82,11 @@ public class AMazeIng extends Game { server = new GameServer(this); client = new GameClient(this); } - - float delta; + + public void setupPowerUps() { + System.out.println("Setting up PowerUps"); + new PowerUps(); + } @Override public void render() { diff --git a/core/src/com/emamaker/amazeing/manager/GameManager.java b/core/src/com/emamaker/amazeing/manager/GameManager.java index 4373eb8..a6dcd61 100644 --- a/core/src/com/emamaker/amazeing/manager/GameManager.java +++ b/core/src/com/emamaker/amazeing/manager/GameManager.java @@ -14,6 +14,8 @@ import com.emamaker.amazeing.maze.MazeGenerator; import com.emamaker.amazeing.maze.settings.MazeSettings; import com.emamaker.amazeing.player.MazePlayer; import com.emamaker.amazeing.player.MazePlayerLocal; +import com.emamaker.amazeing.player.powerups.PowerUp; +import com.emamaker.amazeing.player.powerups.PowerUps; import com.emamaker.amazeing.ui.screens.PreGameScreen; import com.emamaker.voxelengine.block.CellId; import com.emamaker.voxelengine.player.Player; @@ -34,6 +36,10 @@ public class GameManager { GameType type = GameType.LOCAL; public ArrayList players = new ArrayList(); + public ArrayList powerups = new ArrayList(); + ArrayList toDelete = new ArrayList(); + + PowerUp pup; public GameManager(Game main_, GameType t) { main = (AMazeIng) main_; @@ -46,8 +52,6 @@ public class GameManager { stage = new Stage(new ScreenViewport()); } - ArrayList toDelete = new ArrayList(); - public void generateMaze(Set pl, int todraw[][]) { main.setScreen(null); @@ -55,7 +59,7 @@ public class GameManager { anyoneWon = false; - if(AMazeIng.PLATFORM == Platform.DESKTOP) { + if (AMazeIng.PLATFORM == Platform.DESKTOP) { if (pl != null) { for (MazePlayer p : players) if (!pl.contains(p)) @@ -74,15 +78,13 @@ public class GameManager { } toDelete.clear(); } - }else{ - for (MazePlayer p : players) { + } else { + for (MazePlayer p : players) p.dispose(); - } players.clear(); players.addAll(pl); } - for (int i = 0; i < MazeSettings.MAZEX; i++) { for (int j = 0; j < 2; j++) { for (int k = 0; k < MazeSettings.MAZEZ; k++) { @@ -97,6 +99,8 @@ public class GameManager { if (type != GameType.CLIENT) { spreadPlayers(); mazeGen.setupEndPoint(); + powerups.clear(); + spawnPowerUps(); } if (todraw != null && showGame == true) { @@ -112,14 +116,17 @@ public class GameManager { for (MazePlayer p : players) { if (p instanceof MazePlayerLocal) stage.addActor(((MazePlayerLocal) p).tctrl); + stage.addActor(((MazePlayerLocal) p).touchpadPowerUp); } AMazeIng.getMain().multiplexer.addProcessor(stage); } public void update() { + main.currentGameManager = this; if (gameStarted && !anyoneWon) { + pup = null; if (getShowGame()) { main.world.render(); @@ -133,10 +140,27 @@ public class GameManager { } main.world.modelBatch.begin(main.world.cam); + if (getShowGame()) + for (PowerUp p : powerups) + p.render(main.world.modelBatch, main.world.environment); + if (players != null) { for (MazePlayer p : players) { - if (getShowGame() && !p.isDisposed()) - p.render(main.world.modelBatch, main.world.environment); + if (!p.isDisposed()) { + // Check if there's a power-up in the same spot, if so give it to the player + for (PowerUp p1 : powerups) + if ((int) p1.getPosition().x == (int) p.getPos().x + && (int) p1.getPosition().z == (int) p.getPos().z) { + pup = p1; + p.currentPowerUp = pup; + break; + } + if (pup != null) + powerups.remove(pup); + + if (getShowGame()) + p.render(main.world.modelBatch, main.world.environment); + } anyoneWon = false; if (type != GameType.CLIENT) { @@ -161,7 +185,6 @@ public class GameManager { } main.world.modelBatch.end(); - } } @@ -177,6 +200,21 @@ public class GameManager { p.setPlaying(); p.setPos(x + 0.5f, 2f, z + 0.5f); } + } + + public void spawnPowerUps() { + + for (int i = 0; i < MazeSettings.START_POWERUPS; i++) { + PowerUp p = PowerUps.pickRandomPU(); + int x = 1, z = 1; + do { + x = (Math.abs(rand.nextInt() - 1) % (mazeGen.w)); + z = (Math.abs(rand.nextInt() - 1) % (mazeGen.h)); + } while (thereIsPlayerInPos(x, z) || mazeGen.occupiedSpot(x, z) || thereIsPowerUpInPos(x, z)); + p.setPosition(x + 0.5f, 1.25f, z + 0.5f); + powerups.add(p); + System.out.println("Spawning power-up in " + x + ", " + z); + } } @@ -212,6 +250,14 @@ public class GameManager { return false; } + public boolean thereIsPowerUpInPos(int x, int z) { + for (PowerUp p : powerups) { + if ((int) p.getPosition().x == x || (int) p.getPosition().z == z) + return true; + } + return false; + } + public boolean areTherePlayersNearby(int x, int z, int range) { int i, k; for (MazePlayer p : players) { @@ -221,10 +267,17 @@ public class GameManager { if ((x - i) * (x - i) + (k - z) * (k - z) <= range * range) return true; } - return false; } + public MazePlayer getRandomPlayer() { + return players.get(Math.abs(rand.nextInt() % players.size())); + } + + public void requestChangeToMap(int[][] todraw) { + mazeGen.requestChangeToMap(todraw); + } + public void resetCamera() { main.world.cam.position.set(0f, 0f, 0.5f); // Set cam position at origin main.world.cam.lookAt(0, 0, 0); // Direction to look at, for setting direction (perhaps better to set manually) diff --git a/core/src/com/emamaker/amazeing/manager/network/GameClient.java b/core/src/com/emamaker/amazeing/manager/network/GameClient.java index 229aa01..a87508d 100644 --- a/core/src/com/emamaker/amazeing/manager/network/GameClient.java +++ b/core/src/com/emamaker/amazeing/manager/network/GameClient.java @@ -5,8 +5,6 @@ import java.util.ArrayList; import java.util.HashSet; import java.util.Hashtable; -import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.Input.Keys; import com.badlogic.gdx.math.Quaternion; import com.badlogic.gdx.math.Vector3; import com.badlogic.gdx.scenes.scene2d.ui.Touchpad; @@ -240,29 +238,26 @@ public class GameClient { // Consantly search for new players to be added if(AMazeIng.PLATFORM == AMazeIng.Platform.DESKTOP) { // Search for keyboard players (WASD and ARROWS) on Desktop - if (Gdx.input.isKeyJustPressed(Keys.W) || Gdx.input.isKeyJustPressed(Keys.A) - || Gdx.input.isKeyJustPressed(Keys.S) || Gdx.input.isKeyJustPressed(Keys.D)) { - p = PlayerUtils.getPlayerWithKeys(new HashSet<>(players.values()), Keys.W, Keys.S, Keys.A, Keys.D); + if (PlayerUtils.wasdPressed()) { + p = PlayerUtils.getPlayerWithKeys(new HashSet<>(players.values()), PlayerUtils.WASDKEYS); if (p != null) { RemovePlayer msg = new RemovePlayer(); msg.uuid = p.uuid; client.sendTCP(msg); } else { - localPlrQueue.add(new MazePlayerLocal(Keys.W, Keys.S, Keys.A, Keys.D)); + localPlrQueue.add(new MazePlayerLocal(PlayerUtils.WASDKEYS)); client.sendTCP(new LoginAO()); } } - if (Gdx.input.isKeyJustPressed(Keys.UP) || Gdx.input.isKeyJustPressed(Keys.LEFT) - || Gdx.input.isKeyJustPressed(Keys.DOWN) || Gdx.input.isKeyJustPressed(Keys.RIGHT)) { - p = PlayerUtils.getPlayerWithKeys(new HashSet<>(players.values()), Keys.UP, Keys.DOWN, Keys.LEFT, - Keys.RIGHT); + if (PlayerUtils.arrowsPressed()) { + p = PlayerUtils.getPlayerWithKeys(new HashSet<>(players.values()), PlayerUtils.ARROWKEYS); if (p != null) { RemovePlayer msg = new RemovePlayer(); msg.uuid = p.uuid; client.sendTCP(msg); } else { - localPlrQueue.add(new MazePlayerLocal(Keys.UP, Keys.DOWN, Keys.LEFT, Keys.RIGHT)); + localPlrQueue.add(new MazePlayerLocal( PlayerUtils.ARROWKEYS)); client.sendTCP(new LoginAO()); } } @@ -311,6 +306,10 @@ public class GameClient { client.sendTCP(pu); } } + + public void requestUpdateMap(int[][] tmpMap) { + + } public void setUpdateMobilePlayers(){ updateMobilePlayers = true; diff --git a/core/src/com/emamaker/amazeing/maze/MazeGenerator.java b/core/src/com/emamaker/amazeing/maze/MazeGenerator.java index fe38129..68c53ca 100755 --- a/core/src/com/emamaker/amazeing/maze/MazeGenerator.java +++ b/core/src/com/emamaker/amazeing/maze/MazeGenerator.java @@ -15,9 +15,9 @@ public class MazeGenerator { Cell currentCell; Cell[][] cellsGrid; ArrayList stack = new ArrayList(); - public int[][] todraw; + public static int[][] todraw; - public int w, h, W, H; + public static int w, h, W, H; public int WINX = Integer.MAX_VALUE, WINZ = Integer.MAX_VALUE; public int OLDMAZEX, OLDMAZEZ; @@ -234,15 +234,15 @@ public class MazeGenerator { public void show(int[][] todraw_) { - for (int j = 0; j < OLDMAZEX+2; j++) { - for (int i = 0; i < OLDMAZEZ+2; i++) { + for (int j = 0; j < OLDMAZEX + 2; j++) { + for (int i = 0; i < OLDMAZEZ + 2; i++) { main.world.worldManager.setCell(i, 0, j, CellId.ID_AIR); main.world.worldManager.setCell(i, 1, j, CellId.ID_AIR); } } OLDMAZEX = MazeSettings.MAZEX; OLDMAZEZ = MazeSettings.MAZEZ; - + for (int j = 0; j < h; j++) { for (int i = 0; i < w; i++) { todraw[i][j] = todraw_[i][j]; @@ -260,6 +260,19 @@ public class MazeGenerator { } } } + + public static int[][] changeMap(int[][] tmp, int x, int z, int type) { + if(x > 0 && x < w - 1 && z > 0 && z < h - 1 && todraw[x][z] != 2) tmp[x][z] = type; + return tmp; + } + + public void requestChangeToMap(int[][] todraw_) { + if(AMazeIng.getMain().client.isRunning()) { + AMazeIng.getMain().client.requestUpdateMap(todraw_); + }else { + show(todraw_); + } + } boolean allCellsVisited() { for (int i = 0; i < W; i++) { diff --git a/core/src/com/emamaker/amazeing/maze/settings/MazeSetting.java b/core/src/com/emamaker/amazeing/maze/settings/MazeSetting.java index 0786800..c8f1f2a 100644 --- a/core/src/com/emamaker/amazeing/maze/settings/MazeSetting.java +++ b/core/src/com/emamaker/amazeing/maze/settings/MazeSetting.java @@ -43,6 +43,15 @@ public class MazeSetting { setOptions(options_, defaultOption); update(); + + //Build the Table which will be later used to add this to the screen + table = new Table(); + nameLabel = new Label(this.name, uiManager.skin); + currentOptLabel = new Label(this.options[currentOption], uiManager.skin); + backBtn = new TextButton("<", uiManager.skin); + forthBtn = new TextButton(">", uiManager.skin); + resetBtn = new TextButton("R", uiManager.skin); + // Add actions to the buttons backBtn.addListener(new InputListener() { @Override diff --git a/core/src/com/emamaker/amazeing/maze/settings/MazeSettingStartPowerUps.java b/core/src/com/emamaker/amazeing/maze/settings/MazeSettingStartPowerUps.java new file mode 100644 index 0000000..8a6ac00 --- /dev/null +++ b/core/src/com/emamaker/amazeing/maze/settings/MazeSettingStartPowerUps.java @@ -0,0 +1,21 @@ +package com.emamaker.amazeing.maze.settings; + +import com.emamaker.amazeing.ui.UIManager; + +public class MazeSettingStartPowerUps extends MazeSetting{ + + /* Game max. number of players settings*/ + + public MazeSettingStartPowerUps(String name_, String[] options_, UIManager uiManager_) { + super(name_, options_, uiManager_); + } + public MazeSettingStartPowerUps(String name_, String[] options_, int defaultOption, UIManager uiManager_) { + super(name_, options_, defaultOption, uiManager_); + } + + @Override + public void parseOptionString(String opt) { + MazeSettings.START_POWERUPS = Integer.valueOf(opt); + } + +} diff --git a/core/src/com/emamaker/amazeing/maze/settings/MazeSettings.java b/core/src/com/emamaker/amazeing/maze/settings/MazeSettings.java index fbfc16a..7ca4358 100644 --- a/core/src/com/emamaker/amazeing/maze/settings/MazeSettings.java +++ b/core/src/com/emamaker/amazeing/maze/settings/MazeSettings.java @@ -6,53 +6,60 @@ import com.emamaker.amazeing.AMazeIng; public class MazeSettings { - //This must only hold public static variables to eventually their getters and setters + // This must only hold public static variables to eventually their getters and + // setters public static int MAZEX = 20; public static int MAZEZ = 20; public static int MAXPLAYERS = 8; public static int MAXPLAYERS_MOBILE = 1; public static int EPDIST = 5; - + public static int START_POWERUPS = 3; + public static ArrayList settings = new ArrayList(); public static MazeSetting setDim; public static MazeSetting setPlayers; public static MazeSetting setPlayers_Mobile; public static MazeSetting setEpDist; + public static MazeSetting setStartPowerups; + + public static String[] maxPlayersDesktop = new String[] { "2", "4", "6", "8", "10", "15", "20" }; + public static String[] maxPlayersMobile = new String[] { "1", "2", "3", "4" }; - public static String[] maxPlayersDesktop = new String[] { - "2", "4", "6", "8", "10", "15", "20" - }; - public static String[] maxPlayersMobile = new String[] { - "1", "2", "3", "4" - }; - public MazeSettings() { - //Add various settings here - setDim = new MazeSettingDimension("MAZE DIMENSIONS:", new String[] { - "10x10", "20x20", "30x30" - }, 1, AMazeIng.getMain().uiManager); + // Add various settings here + setDim = new MazeSettingDimension("MAZE DIMENSIONS:", new String[] { "10x10", "20x20", "30x30" }, 1, + AMazeIng.getMain().uiManager); - setPlayers = new MazeSettingMaxPlayers("MAX NUMBER OF PLAYERS: ", maxPlayersDesktop, AMazeIng.getMain().uiManager); - setPlayers_Mobile = new MazeSettingMaxPlayersMobile("PLAYERS JOINING FROM THIS DEVICE: ", maxPlayersMobile, 0, AMazeIng.getMain().uiManager); + setPlayers = new MazeSettingMaxPlayers("MAX NUMBER OF PLAYERS: ", maxPlayersDesktop, + AMazeIng.getMain().uiManager); + setPlayers_Mobile = new MazeSettingMaxPlayersMobile("PLAYERS JOINING FROM THIS DEVICE: ", maxPlayersMobile, 0, + AMazeIng.getMain().uiManager); - setEpDist = new MazeSettingEPDIST("END POINT DISTANCE:", new String[] { - "1", "2", "5", "10", "20" - }, 2, AMazeIng.getMain().uiManager); + setStartPowerups = new MazeSettingStartPowerUps("POWERUPS AT START : ", + new String[] { "1", "2", "3", "4", "5", "8", "10", "15" }, 3, AMazeIng.getMain().uiManager); + + setEpDist = new MazeSettingEPDIST("END POINT DISTANCE:", new String[] { "1", "2", "5", "10", "20" }, 2, + AMazeIng.getMain().uiManager); settings.add(setDim); settings.add(setPlayers); settings.add(setEpDist); + settings.add(setStartPowerups); } public static void saveStates() { - for(MazeSetting m : settings) m.saveState(); + for (MazeSetting m : settings) + m.saveState(); } + public static void restoreStates() { - for(MazeSetting m : settings) m.saveState(); + for (MazeSetting m : settings) + m.saveState(); } + public static void resetAll() { - for(MazeSetting m : settings) m.reset(); + for (MazeSetting m : settings) + m.reset(); } - - + } diff --git a/core/src/com/emamaker/amazeing/player/MazePlayer.java b/core/src/com/emamaker/amazeing/player/MazePlayer.java index 13d4943..c469a22 100644 --- a/core/src/com/emamaker/amazeing/player/MazePlayer.java +++ b/core/src/com/emamaker/amazeing/player/MazePlayer.java @@ -16,6 +16,7 @@ import com.badlogic.gdx.math.Quaternion; import com.badlogic.gdx.math.Vector3; import com.badlogic.gdx.utils.Disposable; import com.emamaker.amazeing.AMazeIng; +import com.emamaker.amazeing.player.powerups.PowerUp; import com.emamaker.voxelengine.physics.GameObject; public abstract class MazePlayer implements Disposable { @@ -37,6 +38,13 @@ public abstract class MazePlayer implements Disposable { boolean playing = false; boolean show = true; public String uuid; + public PowerUp currentPowerUp; + + public float baseSpeed = 3f; + public float baseTurnSpeed = 2.5f; + public float speedMult = 1f; + public float speed; + public float turnSpeed; Vector3 pos = new Vector3(); Quaternion rot = new Quaternion(); @@ -115,6 +123,16 @@ public abstract class MazePlayer implements Disposable { } public void update() { + speed = baseSpeed * speedMult; + turnSpeed = baseTurnSpeed * speedMult; + + if(currentPowerUp != null && currentPowerUp.continousEffect) usePowerUp(); + } + + public void usePowerUp() { + if (currentPowerUp != null && !currentPowerUp.beingUsed) + if (currentPowerUp.usePowerUp(this)) + currentPowerUp = null; } @Override diff --git a/core/src/com/emamaker/amazeing/player/MazePlayerLocal.java b/core/src/com/emamaker/amazeing/player/MazePlayerLocal.java index 5dc464e..aff9a34 100644 --- a/core/src/com/emamaker/amazeing/player/MazePlayerLocal.java +++ b/core/src/com/emamaker/amazeing/player/MazePlayerLocal.java @@ -14,293 +14,315 @@ import com.badlogic.gdx.physics.bullet.dynamics.btDiscreteDynamicsWorld; import com.badlogic.gdx.physics.bullet.dynamics.btKinematicCharacterController; import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.InputListener; +import com.badlogic.gdx.scenes.scene2d.ui.TextButton; import com.badlogic.gdx.scenes.scene2d.ui.Touchpad; import com.emamaker.amazeing.AMazeIng; public class MazePlayerLocal extends MazePlayer { - /* - * Player controlled on local machine with mouse and kbd, touch or controller - * (in a remote future= - */ + /* + * Player controlled on local machine with mouse and kbd, touch or controller + * (in a remote future= + */ - btConvexShape ghostShape; - public btPairCachingGhostObject ghostObject; - public btKinematicCharacterController characterController; - Matrix4 characterTransform; - Vector3 characterDirection = new Vector3(); - Vector3 walkDirection = new Vector3(); - public Controller ctrl; - public Touchpad tctrl; - public int tctrlPosition; + btConvexShape ghostShape; + public btPairCachingGhostObject ghostObject; + public btKinematicCharacterController characterController; + Matrix4 characterTransform; + Vector3 characterDirection = new Vector3(); + Vector3 walkDirection = new Vector3(); + public Controller ctrl; + public Touchpad tctrl; + public int tctrlPosition; - boolean touchpadPressed = false; - float oldAngle = 0, angle; + boolean touchpadPressed = false; + public TextButton touchpadPowerUp; + float oldAngle = 0, angle; - // Physics using LibGDX's bullet wrapper - public int kup, kdown, ksx, kdx; - float startx, starty, startz; + // Physics using LibGDX's bullet wrapper + public int kup, kdown, ksx, kdx, kpup; + float startx, starty, startz; - // Give keys in up, down, left, right order - public MazePlayerLocal(int... keys) { - this(keys[0], keys[1], keys[2], keys[3]); - } + // Give keys in up, down, left, right order + public MazePlayerLocal(int... keys) { + this(keys[0], keys[1], keys[2], keys[3], keys[4]); + } - public MazePlayerLocal(int up_, int down_, int sx_, int dx_) { - this(up_, down_, sx_, dx_, 0, 0, 0); - } + public MazePlayerLocal(int up_, int down_, int sx_, int dx_, int pup_) { + this(up_, down_, sx_, dx_, pup_, 0, 0, 0); + } - public MazePlayerLocal(int up_, int down_, int sx_, int dx_, String name) { - this(up_, down_, sx_, dx_, 0, 0, 0, name); - } + public MazePlayerLocal(int up_, int down_, int sx_, int dx_, int pup_, String name) { + this(up_, down_, sx_, dx_, pup_, 0, 0, 0, name); + } - public MazePlayerLocal(int up_, int down_, int sx_, int dx_, float startx, float starty, float startz) { - this(up_, down_, sx_, dx_, startx, starty, startz, String.valueOf((char) (65 + rand.nextInt(26)))); - } + public MazePlayerLocal(int up_, int down_, int sx_, int dx_, int pup_, float startx, float starty, float startz) { + this(up_, down_, sx_, dx_, pup_, startx, starty, startz, String.valueOf((char) (65 + rand.nextInt(26)))); + } - public MazePlayerLocal(int up_, int down_, int sx_, int dx_, float startx, float starty, float startz, - String name) { - super(name, true); - this.kup = up_; - this.kdown = down_; - this.ksx = sx_; - this.kdx = dx_; + public MazePlayerLocal(int up_, int down_, int sx_, int dx_, int pup_, float startx, float starty, float startz, + String name) { + super(name, true); + this.kup = up_; + this.kdown = down_; + this.ksx = sx_; + this.kdx = dx_; + this.kpup = pup_; - this.startx = startx; - this.starty = starty; - this.startz = startz; + this.startx = startx; + this.starty = starty; + this.startz = startz; - initPhysics(); - } + initPhysics(); + } - public MazePlayerLocal(Controller ctrl_) { - this(ctrl_, 0, 0, 0); - } + public MazePlayerLocal(Controller ctrl_) { + this(ctrl_, 0, 0, 0); + } - public MazePlayerLocal(Controller ctrl_, String name) { - this(ctrl_, 0, 0, 0, name); - } + public MazePlayerLocal(Controller ctrl_, String name) { + this(ctrl_, 0, 0, 0, name); + } - public MazePlayerLocal(Controller crtl_, float startx, float starty, float startz) { - this(crtl_, startx, starty, startz, String.valueOf((char) (65 + rand.nextInt(26)))); - } + public MazePlayerLocal(Controller crtl_, float startx, float starty, float startz) { + this(crtl_, startx, starty, startz, String.valueOf((char) (65 + rand.nextInt(26)))); + } - public MazePlayerLocal(Controller ctrl_, float startx, float starty, float startz, String name) { - super(true); - this.ctrl = ctrl_; + public MazePlayerLocal(Controller ctrl_, float startx, float starty, float startz, String name) { + super(true); + this.ctrl = ctrl_; - this.startx = startx; - this.starty = starty; - this.startz = startz; + this.startx = startx; + this.starty = starty; + this.startz = startz; - initPhysics(); - } + initPhysics(); + } - public MazePlayerLocal(Touchpad ctrl_, int p) { - this(ctrl_, p, 0, 0, 0); - } + public MazePlayerLocal(Touchpad ctrl_, int p) { + this(ctrl_, p, 0, 0, 0); + } - public MazePlayerLocal(Touchpad ctrl_, int p, String name) { - this(ctrl_, p, 0, 0, 0, name); - } + public MazePlayerLocal(Touchpad ctrl_, int p, String name) { + this(ctrl_, p, 0, 0, 0, name); + } - public MazePlayerLocal(Touchpad crtl_, int p, float startx, float starty, float startz) { - this(crtl_, p, startx, starty, startz, String.valueOf((char) (65 + rand.nextInt(26)))); - } + public MazePlayerLocal(Touchpad crtl_, int p, float startx, float starty, float startz) { + this(crtl_, p, startx, starty, startz, String.valueOf((char) (65 + rand.nextInt(26)))); + } - public MazePlayerLocal(Touchpad ctrl_, int p, float startx, float starty, float startz, String name) { - super(true); - this.tctrl = ctrl_; + public MazePlayerLocal(Touchpad ctrl_, int p, float startx, float starty, float startz, String name) { + super(true); + this.tctrl = ctrl_; - this.startx = startx; - this.starty = starty; - this.startz = startz; - this.tctrlPosition = p; + this.startx = startx; + this.starty = starty; + this.startz = startz; + this.tctrlPosition = p; - tctrl.setResetOnTouchUp(true); + tctrl.setResetOnTouchUp(true); - oldAngle = 0; - angle = 0; - touchpadPressed = false; + oldAngle = 0; + angle = 0; + touchpadPressed = false; - tctrl.setSize(Gdx.graphics.getHeight() / 6f, Gdx.graphics.getHeight() / 6f); + touchpadPowerUp = new TextButton("No object to use", AMazeIng.getMain().uiManager.skin); + + tctrl.setSize(Gdx.graphics.getHeight() / 6f, Gdx.graphics.getHeight() / 6f); + touchpadPowerUp.setSize(Gdx.graphics.getHeight() / 6f, Gdx.graphics.getHeight() / 12f); + + tctrl.addListener(new InputListener() { + @Override + public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) { + return true; + } - tctrl.addListener(new InputListener() { + @Override + public void touchDragged(InputEvent event, float x, float y, int pointer) { + oldAngle = angle; + angle = MathUtils.atan2(-tctrl.getKnobPercentY(), -tctrl.getKnobPercentX()) * 180f / MathUtils.PI; - @Override - public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) { - return true; - } + touchpadPressed = true; + // System.out.println(angle); + } - @Override - public void touchDragged(InputEvent event, float x, float y, int pointer) { - oldAngle = angle; - angle = MathUtils.atan2(-tctrl.getKnobPercentY(), -tctrl.getKnobPercentX()) * 180f / MathUtils.PI; + @Override + public void touchUp(InputEvent event, float x, float y, int pointer, int button) { + touchpadPressed = false; + } + }); - touchpadPressed = true; - //System.out.println(angle); - } + touchpadPowerUp.addListener(new InputListener() { + @Override + public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) { + usePowerUp(); + return true; + } + }); - @Override - public void touchUp(InputEvent event, float x, float y, int pointer, int button) { - touchpadPressed = false; - } - }); + if (tctrlPosition == 0) { + tctrl.setPosition(tctrl.getWidth() / 2, tctrl.getHeight() / 2); + touchpadPowerUp.setPosition(tctrl.getWidth() / 2, tctrl.getHeight() * 1.75f); + } else if (tctrlPosition == 1) { + tctrl.setPosition(Gdx.graphics.getWidth() - tctrl.getWidth() * 1.5f, tctrl.getHeight() / 2); + touchpadPowerUp.setPosition(Gdx.graphics.getWidth() - tctrl.getWidth() * 1.5f, tctrl.getHeight() * 1.75f); + } else if (tctrlPosition == 2) { + tctrl.setPosition(Gdx.graphics.getWidth() - tctrl.getWidth() * 1.5f, + Gdx.graphics.getHeight() - tctrl.getHeight() * 1.5f); + touchpadPowerUp.setPosition(Gdx.graphics.getWidth() - tctrl.getWidth() * 1.5f, Gdx.graphics.getHeight() - tctrl.getHeight() *2.25f); + } else if (tctrlPosition == 3) { + tctrl.setPosition(tctrl.getWidth() / 2, Gdx.graphics.getHeight() - tctrl.getHeight() * 1.5f); + touchpadPowerUp.setPosition(tctrl.getWidth() / 2, Gdx.graphics.getHeight() - tctrl.getHeight() * 2.25f); + } - if (tctrlPosition == 0) - tctrl.setPosition(tctrl.getWidth() / 2, tctrl.getHeight() / 2); - else if (tctrlPosition == 1) - tctrl.setPosition(Gdx.graphics.getWidth() - tctrl.getWidth() * 1.5f, tctrl.getHeight() / 2); - else if (tctrlPosition == 2) - tctrl.setPosition(Gdx.graphics.getWidth() - tctrl.getWidth() * 1.5f, Gdx.graphics.getHeight() - tctrl.getHeight() * 1.5f); - else if (tctrlPosition == 3) - tctrl.setPosition(tctrl.getWidth() / 2, Gdx.graphics.getHeight() - tctrl.getHeight() * 1.5f); + initPhysics(); + } - initPhysics(); - } + public void initPhysics() { + characterTransform = instance.transform; // Set by reference + characterTransform.set(startx, starty, startz, 0, 0, 0, 0); + // Create the physics representation of the character + ghostObject = new btPairCachingGhostObject(); + ghostObject.setWorldTransform(characterTransform); + ghostShape = new btBoxShape(new Vector3(0.3f, 0.5f, 0.3f)); + ghostObject.setCollisionShape(ghostShape); + ghostObject.setCollisionFlags(btCollisionObject.CollisionFlags.CF_CHARACTER_OBJECT); + characterController = new btKinematicCharacterController(ghostObject, ghostShape, .05f, Vector3.Y); - public void initPhysics() { - characterTransform = instance.transform; // Set by reference - characterTransform.set(startx, starty, startz, 0, 0, 0, 0); + // And add it to the physics world + main.world.dynamicsWorld.addCollisionObject(ghostObject, + (short) btBroadphaseProxy.CollisionFilterGroups.CharacterFilter, + (short) (btBroadphaseProxy.CollisionFilterGroups.StaticFilter + | btBroadphaseProxy.CollisionFilterGroups.DefaultFilter)); + ((btDiscreteDynamicsWorld) (main.world.dynamicsWorld)).addAction(characterController); + } - // Create the physics representation of the character - ghostObject = new btPairCachingGhostObject(); - ghostObject.setWorldTransform(characterTransform); - ghostShape = new btBoxShape(new Vector3(0.3f, 0.3f, 0.3f)); - ghostObject.setCollisionShape(ghostShape); - ghostObject.setCollisionFlags(btCollisionObject.CollisionFlags.CF_CHARACTER_OBJECT); - characterController = new btKinematicCharacterController(ghostObject, ghostShape, .05f, Vector3.Y); + boolean pressed = false; - // And add it to the physics world - main.world.dynamicsWorld.addCollisionObject(ghostObject, - (short) btBroadphaseProxy.CollisionFilterGroups.CharacterFilter, - (short) (btBroadphaseProxy.CollisionFilterGroups.StaticFilter - | btBroadphaseProxy.CollisionFilterGroups.DefaultFilter)); - ((btDiscreteDynamicsWorld) (main.world.dynamicsWorld)).addAction(characterController); - } + public void inputs() { + pressed = false; + // Update for touchscreen controller is done in touchpad listener + if (AMazeIng.PLATFORM == AMazeIng.Platform.DESKTOP) + if (ctrl != null) + inputController(); + else + inputKeyboard(); + else + inputTouchscreen(); - boolean pressed = false; + if (pressed) + main.client.updateLocalPlayer(this); + } - public void inputs() { - //Update for touchscreen controller is done in touchpad listener - if(AMazeIng.PLATFORM == AMazeIng.Platform.DESKTOP){ - if (ctrl != null) { + public void inputController() { - }else{ + } - pressed = false; - // If the left or right key is pressed, rotate the character and update its - // physics update accordingly. - if (Gdx.input.isKeyPressed(ksx)) { - pressed = true; - characterTransform.rotate(0, 1, 0, 2.5f); - ghostObject.setWorldTransform(characterTransform); - } - if (Gdx.input.isKeyPressed(kdx)) { - pressed = true; - characterTransform.rotate(0, 1, 0, -2.5f); - ghostObject.setWorldTransform(characterTransform); - } - // Fetch which direction the character is facing now - characterDirection.set(-1, 0, 0).rot(characterTransform).nor(); - // Set the walking direction accordingly (either forward or backward) - walkDirection.set(0, 0, 0); + public void inputKeyboard() { + if (Gdx.input.isKeyPressed(kdown)) + characterDirection.set(-1, 0, 0).rotate(90, 0, 1, 0).nor(); + if (Gdx.input.isKeyPressed(kup)) + characterDirection.set(-1, 0, 0).rotate(-90, 0, 1, 0).nor(); + if (Gdx.input.isKeyPressed(ksx)) + characterDirection.set(-1, 0, 0).rotate(0, 0, 1, 0).nor(); + if (Gdx.input.isKeyPressed(kdx)) + characterDirection.set(-1, 0, 0).rotate(180, 0, 1, 0).nor(); - if (Gdx.input.isKeyPressed(kup)) { - pressed = true; - walkDirection.add(characterDirection); - } - if (Gdx.input.isKeyPressed(kdown)) { - pressed = false; - walkDirection.add(-characterDirection.x, -characterDirection.y, -characterDirection.z); - } - walkDirection.scl(3f * Gdx.graphics.getDeltaTime()); - // And update the character controller - characterController.setWalkDirection(walkDirection); - // Now we can update the world as normally - // And fetch the new transformation of the character (this will make the model - // be rendered correctly) - ghostObject.getWorldTransform(characterTransform); - } - }else{ - if(touchpadPressed) { + if (Gdx.input.isKeyPressed(kdown) || Gdx.input.isKeyPressed(kup) || Gdx.input.isKeyPressed(ksx) + || Gdx.input.isKeyPressed(kdx)) { + walkDirection.set(0, 0, 0); + walkDirection.add(characterDirection); + walkDirection.scl(speed * Gdx.graphics.getDeltaTime()); + characterController.setWalkDirection(walkDirection); + ghostObject.getWorldTransform(characterTransform); - //characterTransform.rotate(0, 1, 0, angle-oldAngle); - //ghostObject.setWorldTransform(characterTransform); + pressed = true; + } else { + walkDirection.set(0, 0, 0); + characterController.setWalkDirection(walkDirection); + } - // Fetch which direction the character is facing now - characterDirection.set(-1, 0, 0).rotate(angle, 0, 1, 0).nor(); + if (Gdx.input.isKeyJustPressed(kpup)) + usePowerUp(); + } -// characterDirection.set(-1, 0, 0).rot(characterTransform).nor(); + public void inputTouchscreen() { + if (touchpadPressed) { + touchpadPowerUp.setText("No object to use"); + if(currentPowerUp != null) touchpadPowerUp.setText(currentPowerUp.name.toUpperCase() + "!"); + // characterTransform.rotate(0, 1, 0, angle-oldAngle); + // ghostObject.setWorldTransform(characterTransform); + // Fetch which direction the character is facing now + characterDirection.set(-1, 0, 0).rotate(angle, 0, 1, 0).nor(); - // Set the walking direction accordingly (either forward or backward) - walkDirection.set(0, 0, 0); - walkDirection.add(characterDirection); - walkDirection.scl(3f * Gdx.graphics.getDeltaTime()); - // And update the character controller - characterController.setWalkDirection(walkDirection); - // Now we can update the world as normally - // And fetch the new transformation of the character (this will make the model - // be rendered correctly) - ghostObject.getWorldTransform(characterTransform); +// characterDirection.set(-1, 0, 0).rot(characterTransform).nor(); + // Set the walking direction accordingly (either forward or backward) + walkDirection.set(0, 0, 0); + walkDirection.add(characterDirection); + walkDirection.scl(speed * Gdx.graphics.getDeltaTime()); + // And update the character controller + characterController.setWalkDirection(walkDirection); + // Now we can update the world as normally + // And fetch the new transformation of the character (this will make the model + // be rendered correctly) + ghostObject.getWorldTransform(characterTransform); - oldAngle = angle; - pressed = true; - } - } + oldAngle = angle; + pressed = true; + } else { + walkDirection.set(0, 0, 0); + characterController.setWalkDirection(walkDirection); + } + } - if (pressed) - main.client.updateLocalPlayer(this); + @Override + public void update() { + super.update(); + inputs(); + } - } + @Override + public Vector3 getPos() { + if (!disposing) { + return ghostObject.getWorldTransform().getTranslation(new Vector3()); + } + return null; + } - @Override - public void update() { - inputs(); - } + @Override + public void setPos(Vector3 v) { + this.setPos(v.x, v.y, v.z); + } - @Override - public Vector3 getPos() { - if (!disposing) { - return ghostObject.getWorldTransform().getTranslation(new Vector3()); - } - return null; - } + @Override + public void setPos(float x, float y, float z) { + if (!disposing) + setTransform(x, y, z, 0, 0, 0, 0); + } - @Override - public void setPos(Vector3 v) { - this.setPos(v.x, v.y, v.z); - } + @Override + public void setTransform(float x, float y, float z, float i, float j, float k, float l) { + if (!disposing) { + characterTransform.set(x, y, z, i, j, k, l); + ghostObject.setWorldTransform(characterTransform); + } + } - @Override - public void setPos(float x, float y, float z) { - if (!disposing) - setTransform(x, y, z, 0, 0, 0, 0); - } - - @Override - public void setTransform(float x, float y, float z, float i, float j, float k, float l) { - if (!disposing) { - characterTransform.set(x, y, z, i, j, k, l); - ghostObject.setWorldTransform(characterTransform); - } - } - - @Override - public void dispose() { - super.dispose(); - disposing = true; - if (!isDisposed()) { - main.world.dynamicsWorld.removeAction(characterController); - main.world.dynamicsWorld.removeCollisionObject(ghostObject); - characterController.dispose(); - ghostObject.dispose(); - ghostShape.dispose(); - disposed = true; - } - disposing = false; - } + @Override + public void dispose() { + super.dispose(); + disposing = true; + if (!isDisposed()) { + main.world.dynamicsWorld.removeAction(characterController); + main.world.dynamicsWorld.removeCollisionObject(ghostObject); + characterController.dispose(); + ghostObject.dispose(); + ghostShape.dispose(); + disposed = true; + } + disposing = false; + } } diff --git a/core/src/com/emamaker/amazeing/player/PlayerUtils.java b/core/src/com/emamaker/amazeing/player/PlayerUtils.java index 0f54096..9f33a04 100644 --- a/core/src/com/emamaker/amazeing/player/PlayerUtils.java +++ b/core/src/com/emamaker/amazeing/player/PlayerUtils.java @@ -4,10 +4,27 @@ import java.util.ArrayList; import java.util.HashSet; import java.util.Set; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.Input.Keys; import com.badlogic.gdx.controllers.Controller; import com.emamaker.amazeing.maze.settings.MazeSettings; public class PlayerUtils { + + public static int[] WASDKEYS = {Keys.W, Keys.S, Keys.A, Keys.D, Keys.SPACE}; + public static int[] ARROWKEYS = {Keys.UP, Keys.DOWN, Keys.LEFT, Keys.RIGHT, Keys.SHIFT_RIGHT}; + + public static boolean wasdPressed() { + for(int i : WASDKEYS) + if(Gdx.input.isKeyJustPressed(i)) return true; + return false; + } + public static boolean arrowsPressed() { + for(int i : ARROWKEYS) + if(Gdx.input.isKeyJustPressed(i)) return true; + return false; + } + /*Utility function to add and remove players from arrays when organizing as game*/ diff --git a/core/src/com/emamaker/amazeing/player/powerups/PowerUp.java b/core/src/com/emamaker/amazeing/player/powerups/PowerUp.java new file mode 100644 index 0000000..f12e4a1 --- /dev/null +++ b/core/src/com/emamaker/amazeing/player/powerups/PowerUp.java @@ -0,0 +1,172 @@ +package com.emamaker.amazeing.player.powerups; + +import com.badlogic.gdx.graphics.GL20; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.VertexAttributes; +import com.badlogic.gdx.graphics.g3d.Environment; +import com.badlogic.gdx.graphics.g3d.Material; +import com.badlogic.gdx.graphics.g3d.Model; +import com.badlogic.gdx.graphics.g3d.ModelBatch; +import com.badlogic.gdx.graphics.g3d.ModelInstance; +import com.badlogic.gdx.graphics.g3d.attributes.BlendingAttribute; +import com.badlogic.gdx.graphics.g3d.attributes.TextureAttribute; +import com.badlogic.gdx.graphics.g3d.model.Node; +import com.badlogic.gdx.graphics.g3d.utils.ModelBuilder; +import com.badlogic.gdx.math.Vector3; +import com.emamaker.amazeing.AMazeIng; +import com.emamaker.amazeing.player.MazePlayer; + +public class PowerUp { + + public String name; + Texture texture; + + public boolean beingUsed, continousEffect; + + ModelBuilder modelBuilder = new ModelBuilder(); + ModelInstance instance; + Model quadModel; + static int meshAttr = VertexAttributes.Usage.Position | VertexAttributes.Usage.Normal + | VertexAttributes.Usage.TextureCoordinates; + BlendingAttribute blendingAttribute = new BlendingAttribute(); + + float scaleX, scaleZ; + + public PowerUp(String name_, Texture texture_, boolean cont) { + this(name_, texture_, cont, 1, 1); + } + + public PowerUp(String name_, Texture texture_, boolean cont, float scaleX, float scaleZ) { + this.name = name_; + this.texture = texture_; + this.scaleX = scaleX; + this.scaleZ = scaleZ; + this.continousEffect = cont; + + blendingAttribute.blended = true; + blendingAttribute.sourceFunction = GL20.GL_SRC_ALPHA; + blendingAttribute.destFunction = GL20.GL_ONE_MINUS_SRC_ALPHA; + + beingUsed = false; + + spawnQuad(); + setPosition(0, 3, 0); + } + + @SuppressWarnings("deprecation") + public void spawnQuad() { + modelBuilder.begin(); + Node n = modelBuilder.node(); + n.id = "Quad"; + modelBuilder + .part("Quad", GL20.GL_TRIANGLES, meshAttr, + new Material(TextureAttribute.createDiffuse(texture), blendingAttribute)) + .box(0.85f * scaleX, 0.000001f, 0.85f * scaleZ); + n.rotation.set(Vector3.Y, 90); + quadModel = modelBuilder.end(); + instance = new ModelInstance(quadModel); + } + + protected void setModelScale(float x, float y) { + instance.transform.scale(scaleX, 1, scaleZ); + } + + public void render(ModelBatch b, Environment e) { + b.render(instance, e); + } + + public void setPosition(float x, float y, float z) { + instance.transform.set(x, y, z, 0, 0, 0, 0); + } + + public void setPosition(Vector3 v) { + this.setPosition(v.x, v.y, v.z); + } + + public Vector3 getPosition() { + return instance.transform.getTranslation(new Vector3()); + } + + // Return true if the effect has been resolved + public boolean usePowerUp(MazePlayer player) { +// System.out.println(this.name + "!"); + return true; + } +} + +class PowerUpTemporized extends PowerUp { + + long time = 0, startTime = 0; + boolean used = false; + + + public PowerUpTemporized(String name_, Texture texture_, boolean cont, float secs_) { + this(name_, texture_, cont, secs_, 1, 1); + } + + public PowerUpTemporized(String name_, Texture texture_, boolean cont, float secs_, float scaleX, float scaleZ) { + super(name_, texture_, cont, scaleX, scaleZ); + this.time = (long) (secs_*1000); + startTime = 0; + } + + + @Override + public boolean usePowerUp(MazePlayer player) { + super.usePowerUp(player); + + if (!used) { + startTime = System.currentTimeMillis(); + used = true; + } + + if (System.currentTimeMillis() - startTime < time) { + temporizedEffect(player); + return false; + } else { + used = false; + temporizedEffectExpired(player); + return true; + } + } + + public void temporizedEffect(MazePlayer player) { + + } + + public void temporizedEffectExpired(MazePlayer player) { + + } + +} + +class PowerUpGiver extends PowerUp { + + PowerUp powerup; + MazePlayer p; + + public PowerUpGiver(PowerUp p, String name, Texture texture, boolean continuos) { + this(p, name, texture, continuos, 1f, 1f); + } + + public PowerUpGiver(PowerUp p, String name, Texture texture, boolean continuos, float scaleX, float scaleZ) { + super(name, texture, continuos, scaleX, scaleZ); + this.powerup = p; + } + + @Override + public boolean usePowerUp(MazePlayer player) { + super.usePowerUp(player); + + p = null; + if (AMazeIng.getMain().currentGameManager.players.size() > 1) { + while (p == player || p == null) + p = AMazeIng.getMain().currentGameManager.getRandomPlayer(); + p.currentPowerUp = new PowerUpBallAndChain(); + p.usePowerUp(); + } + + return true; + } + +} \ No newline at end of file diff --git a/core/src/com/emamaker/amazeing/player/powerups/PowerUpBallAndChain.java b/core/src/com/emamaker/amazeing/player/powerups/PowerUpBallAndChain.java new file mode 100644 index 0000000..535814b --- /dev/null +++ b/core/src/com/emamaker/amazeing/player/powerups/PowerUpBallAndChain.java @@ -0,0 +1,34 @@ +package com.emamaker.amazeing.player.powerups; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Texture; +import com.emamaker.amazeing.player.MazePlayer; + +public class PowerUpBallAndChain extends PowerUpTemporized { + + public PowerUpBallAndChain() { + super("BALL AND CHAIN", + new Texture(Gdx.files.internal("data/powerups/ball_and_chain.png")), true, + 10, 1f, 1f); + } + + @Override + public void temporizedEffect(MazePlayer player) { + player.speedMult = 0.5f; + } + + @Override + public void temporizedEffectExpired(MazePlayer player) { + player.speedMult = 1f; + } +} + +class PowerUpGiveBallAndChain extends PowerUpGiver { + + public PowerUpGiveBallAndChain() { + super(new PowerUpBallAndChain(), "BALL AND CHAIN GIVER", + new Texture(Gdx.files.internal("data/powerups/ball_and_chain.png")), false, + 1f, 1f); + } + +} diff --git a/core/src/com/emamaker/amazeing/player/powerups/PowerUpBomb.java b/core/src/com/emamaker/amazeing/player/powerups/PowerUpBomb.java new file mode 100644 index 0000000..ff0be44 --- /dev/null +++ b/core/src/com/emamaker/amazeing/player/powerups/PowerUpBomb.java @@ -0,0 +1,53 @@ +package com.emamaker.amazeing.player.powerups; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Texture; +import com.emamaker.amazeing.AMazeIng; +import com.emamaker.amazeing.maze.MazeGenerator; +import com.emamaker.amazeing.player.MazePlayer; + +public class PowerUpBomb extends PowerUp { + + int radius = 1; + + public PowerUpBomb() { + this("BOMB", new Texture(Gdx.files.internal("data/powerups/bomb.png")), false, 1f, 1f); + } + + public PowerUpBomb(String name, Texture texture, boolean cont, float sx, float sz) { + super(name, texture, cont, sx, sz); + } + + @Override + public boolean usePowerUp(MazePlayer player) { + super.usePowerUp(player); + + int px = (int) player.getPos().x; + int pz = (int) player.getPos().z; + + int tmptodraw[][] = new int[MazeGenerator.w][MazeGenerator.h]; + + for (int i = 0; i < MazeGenerator.w; i++) + for (int k = 0; k < MazeGenerator.h; k++) + tmptodraw[i][k] = MazeGenerator.todraw[i][k]; + + for (int i = px - radius; i < px + radius + 1; i++) { + for (int k = pz - radius; k < pz + radius + 1; k++) { + tmptodraw = MazeGenerator.changeMap(tmptodraw, i, k, 0); + } + } + + AMazeIng.getMain().currentGameManager.requestChangeToMap(tmptodraw); + + return true; + } +} + +class PowerUpBigBomb extends PowerUpBomb{ + + public PowerUpBigBomb() { + super("BIG BOMB", new Texture(Gdx.files.internal("data/powerups/bomb.png")), false, 1.5f, 1.5f); + radius = 2; + } + +} diff --git a/core/src/com/emamaker/amazeing/player/powerups/PowerUpFeather.java b/core/src/com/emamaker/amazeing/player/powerups/PowerUpFeather.java new file mode 100644 index 0000000..a5fc6fc --- /dev/null +++ b/core/src/com/emamaker/amazeing/player/powerups/PowerUpFeather.java @@ -0,0 +1,24 @@ +package com.emamaker.amazeing.player.powerups; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Texture; +import com.emamaker.amazeing.player.MazePlayer; + +public class PowerUpFeather extends PowerUpTemporized { + + public PowerUpFeather() { + super("FEATHER", new Texture(Gdx.files.internal("data/powerups/feather.png")), true, 10, + 1f, 1f); + } + + @Override + public void temporizedEffect(MazePlayer player) { + player.speedMult = 2f; + } + + @Override + public void temporizedEffectExpired(MazePlayer player) { + player.speedMult = 1f; + } + +} diff --git a/core/src/com/emamaker/amazeing/player/powerups/PowerUpSlug.java b/core/src/com/emamaker/amazeing/player/powerups/PowerUpSlug.java new file mode 100644 index 0000000..c7681f4 --- /dev/null +++ b/core/src/com/emamaker/amazeing/player/powerups/PowerUpSlug.java @@ -0,0 +1,33 @@ +package com.emamaker.amazeing.player.powerups; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Texture; +import com.emamaker.amazeing.player.MazePlayer; + +public class PowerUpSlug extends PowerUpTemporized { + + public PowerUpSlug() { + super("SLUG", new Texture(Gdx.files.internal("data/powerups/slug.png")), true, 20, + 1.3f, 1.3f); + } + + @Override + public void temporizedEffect(MazePlayer player) { + player.speedMult = 0.25f; + } + + @Override + public void temporizedEffectExpired(MazePlayer player) { + player.speedMult = 1f; + } + +} + +class PowerUpGiveSlug extends PowerUpGiver { + + public PowerUpGiveSlug() { + super(new PowerUpSlug(), "SLUG GIVER", + new Texture(Gdx.files.internal("data/powerups/slug.png")), false, 1f, 1f); + } + +} diff --git a/core/src/com/emamaker/amazeing/player/powerups/PowerUps.java b/core/src/com/emamaker/amazeing/player/powerups/PowerUps.java new file mode 100644 index 0000000..46a4d07 --- /dev/null +++ b/core/src/com/emamaker/amazeing/player/powerups/PowerUps.java @@ -0,0 +1,41 @@ +package com.emamaker.amazeing.player.powerups; + +import java.util.Random; + +public class PowerUps { + +// public static PowerUp bigBomb = new PowerUpBigBomb("BIG BOMB", new Texture(Gdx.files.internal("data/powerups/bomb_big.png")))); +// public static PowerUp speed = new PowerUpSpeed("SPEED", new Texture(Gdx.files.internal("data/powerups/speed.png")))); +// public static PowerUp bigSpeed = new PowerUpBigSpeed("FASTER SPEED", new Texture(Gdx.files.internal("data/powerups/big_speed.png")))); +// public static PowerUp createWall = new PowerUpCreateWall("CREATE WALL", new Texture(Gdx.files.internal("data/powerups/wall.png")))); +// public static PowerUp floorHole = new PowerUpFloorHole("FLOOR HOLE", new Texture(Gdx.files.internal("data/powerups/floor_hole.png")))); + + static Random rand = new Random(); + + public PowerUps() { + } + + public static PowerUp pickRandomPU() { + switch (Math.abs(rand.nextInt()) % 12) { + case 0: + case 1: + case 2: + case 3: + return new PowerUpBomb(); + case 4: + return new PowerUpBigBomb(); + case 5: + case 6: + case 7: + return new PowerUpGiveBallAndChain(); + case 8: + case 9: + return new PowerUpGiveSlug(); + case 10: + case 11: + return new PowerUpFeather(); + default: + return new PowerUpGiveBallAndChain(); + } + } +} diff --git a/core/src/com/emamaker/amazeing/ui/screens/PlayerChooseScreen.java b/core/src/com/emamaker/amazeing/ui/screens/PlayerChooseScreen.java index 1e035b0..7a7d1e3 100644 --- a/core/src/com/emamaker/amazeing/ui/screens/PlayerChooseScreen.java +++ b/core/src/com/emamaker/amazeing/ui/screens/PlayerChooseScreen.java @@ -3,8 +3,6 @@ package com.emamaker.amazeing.ui.screens; import java.util.ArrayList; import java.util.HashSet; -import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.Input.Keys; import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.InputListener; import com.badlogic.gdx.scenes.scene2d.ui.CheckBox; @@ -210,12 +208,10 @@ public class PlayerChooseScreen extends MyScreen { public void update() { // Consantly search for new players to be added // First search for keyboard players (WASD and ARROWS) - if (Gdx.input.isKeyJustPressed(Keys.W) || Gdx.input.isKeyJustPressed(Keys.A) - || Gdx.input.isKeyJustPressed(Keys.S) || Gdx.input.isKeyJustPressed(Keys.D)) - PlayerUtils.togglePlayerWithKeys(players, Keys.W, Keys.S, Keys.A, Keys.D); - if (Gdx.input.isKeyJustPressed(Keys.UP) || Gdx.input.isKeyJustPressed(Keys.LEFT) - || Gdx.input.isKeyJustPressed(Keys.DOWN) || Gdx.input.isKeyJustPressed(Keys.RIGHT)) - PlayerUtils.togglePlayerWithKeys(players, Keys.UP, Keys.DOWN, Keys.LEFT, Keys.RIGHT); + if (PlayerUtils.wasdPressed()) + PlayerUtils.togglePlayerWithKeys(players, PlayerUtils.WASDKEYS); + if (PlayerUtils.arrowsPressed()) + PlayerUtils.togglePlayerWithKeys(players, PlayerUtils.ARROWKEYS); // for (Controller c : Controllers.getControllers()) { // System.out.println(c.getButton(Xbox.A)); diff --git a/core/src/shaders/shader.txt b/core/src/shaders/shader.txt deleted file mode 100755 index 69870d6..0000000 --- a/core/src/shaders/shader.txt +++ /dev/null @@ -1,8 +0,0 @@ - attribute vec4 a_position; - - uniform mat4 u_projectionViewMatrix; - - void main() - { - gl_Position = u_projectionViewMatrix * a_position; - } \ No newline at end of file diff --git a/desktop/assets/data/Untitled.xcf b/desktop/assets/data/Untitled.xcf new file mode 100644 index 0000000..3b98945 Binary files /dev/null and b/desktop/assets/data/Untitled.xcf differ diff --git a/desktop/assets/data/default.fnt b/desktop/assets/data/default.fnt new file mode 100755 index 0000000..6152b0a --- /dev/null +++ b/desktop/assets/data/default.fnt @@ -0,0 +1,101 @@ +info face="Droid Sans" size=17 bold=0 italic=0 charset="" unicode=0 stretchH=100 smooth=1 aa=1 padding=0,0,0,0 spacing=1,1 +common lineHeight=20 base=18 scaleW=256 scaleH=128 pages=1 packed=0 +page id=0 file="default.png" +chars count=96 +char id=32 x=0 y=0 width=0 height=0 xoffset=0 yoffset=16 xadvance=4 page=0 chnl=0 +char id=124 x=0 y=0 width=6 height=20 xoffset=1 yoffset=3 xadvance=9 page=0 chnl=0 +char id=106 x=6 y=0 width=9 height=20 xoffset=-4 yoffset=3 xadvance=4 page=0 chnl=0 +char id=81 x=15 y=0 width=15 height=19 xoffset=-2 yoffset=3 xadvance=12 page=0 chnl=0 +char id=74 x=30 y=0 width=11 height=19 xoffset=-5 yoffset=3 xadvance=4 page=0 chnl=0 +char id=125 x=41 y=0 width=10 height=18 xoffset=-3 yoffset=3 xadvance=6 page=0 chnl=0 +char id=123 x=51 y=0 width=10 height=18 xoffset=-3 yoffset=3 xadvance=6 page=0 chnl=0 +char id=93 x=61 y=0 width=8 height=18 xoffset=-3 yoffset=3 xadvance=5 page=0 chnl=0 +char id=91 x=69 y=0 width=8 height=18 xoffset=-2 yoffset=3 xadvance=5 page=0 chnl=0 +char id=41 x=77 y=0 width=9 height=18 xoffset=-3 yoffset=3 xadvance=5 page=0 chnl=0 +char id=40 x=86 y=0 width=9 height=18 xoffset=-3 yoffset=3 xadvance=5 page=0 chnl=0 +char id=64 x=95 y=0 width=18 height=17 xoffset=-3 yoffset=3 xadvance=14 page=0 chnl=0 +char id=121 x=113 y=0 width=13 height=17 xoffset=-3 yoffset=6 xadvance=8 page=0 chnl=0 +char id=113 x=126 y=0 width=13 height=17 xoffset=-3 yoffset=6 xadvance=9 page=0 chnl=0 +char id=112 x=139 y=0 width=13 height=17 xoffset=-2 yoffset=6 xadvance=9 page=0 chnl=0 +char id=103 x=152 y=0 width=13 height=17 xoffset=-3 yoffset=6 xadvance=8 page=0 chnl=0 +char id=38 x=165 y=0 width=16 height=16 xoffset=-3 yoffset=3 xadvance=11 page=0 chnl=0 +char id=37 x=181 y=0 width=18 height=16 xoffset=-3 yoffset=3 xadvance=14 page=0 chnl=0 +char id=36 x=199 y=0 width=12 height=16 xoffset=-2 yoffset=3 xadvance=9 page=0 chnl=0 +char id=63 x=211 y=0 width=11 height=16 xoffset=-3 yoffset=3 xadvance=7 page=0 chnl=0 +char id=33 x=222 y=0 width=7 height=16 xoffset=-2 yoffset=3 xadvance=4 page=0 chnl=0 +char id=48 x=229 y=0 width=13 height=16 xoffset=-3 yoffset=3 xadvance=9 page=0 chnl=0 +char id=57 x=242 y=0 width=13 height=16 xoffset=-3 yoffset=3 xadvance=9 page=0 chnl=0 +char id=56 x=0 y=20 width=13 height=16 xoffset=-3 yoffset=3 xadvance=9 page=0 chnl=0 +char id=54 x=13 y=20 width=13 height=16 xoffset=-3 yoffset=3 xadvance=9 page=0 chnl=0 +char id=53 x=26 y=20 width=12 height=16 xoffset=-2 yoffset=3 xadvance=9 page=0 chnl=0 +char id=51 x=38 y=20 width=13 height=16 xoffset=-3 yoffset=3 xadvance=9 page=0 chnl=0 +char id=100 x=51 y=20 width=13 height=16 xoffset=-3 yoffset=3 xadvance=9 page=0 chnl=0 +char id=98 x=64 y=20 width=13 height=16 xoffset=-2 yoffset=3 xadvance=9 page=0 chnl=0 +char id=85 x=77 y=20 width=14 height=16 xoffset=-2 yoffset=3 xadvance=11 page=0 chnl=0 +char id=83 x=91 y=20 width=13 height=16 xoffset=-3 yoffset=3 xadvance=8 page=0 chnl=0 +char id=79 x=104 y=20 width=15 height=16 xoffset=-2 yoffset=3 xadvance=12 page=0 chnl=0 +char id=71 x=119 y=20 width=14 height=16 xoffset=-2 yoffset=3 xadvance=11 page=0 chnl=0 +char id=67 x=133 y=20 width=13 height=16 xoffset=-2 yoffset=3 xadvance=10 page=0 chnl=0 +char id=127 x=146 y=20 width=12 height=15 xoffset=-2 yoffset=3 xadvance=10 page=0 chnl=0 +char id=35 x=158 y=20 width=15 height=15 xoffset=-3 yoffset=3 xadvance=10 page=0 chnl=0 +char id=92 x=173 y=20 width=11 height=15 xoffset=-3 yoffset=3 xadvance=6 page=0 chnl=0 +char id=47 x=184 y=20 width=11 height=15 xoffset=-3 yoffset=3 xadvance=6 page=0 chnl=0 +char id=59 x=195 y=20 width=8 height=15 xoffset=-3 yoffset=6 xadvance=4 page=0 chnl=0 +char id=55 x=203 y=20 width=13 height=15 xoffset=-3 yoffset=3 xadvance=9 page=0 chnl=0 +char id=52 x=216 y=20 width=14 height=15 xoffset=-3 yoffset=3 xadvance=9 page=0 chnl=0 +char id=50 x=230 y=20 width=13 height=15 xoffset=-3 yoffset=3 xadvance=9 page=0 chnl=0 +char id=49 x=243 y=20 width=9 height=15 xoffset=-2 yoffset=3 xadvance=9 page=0 chnl=0 +char id=116 x=0 y=36 width=10 height=15 xoffset=-3 yoffset=4 xadvance=5 page=0 chnl=0 +char id=108 x=10 y=36 width=6 height=15 xoffset=-2 yoffset=3 xadvance=4 page=0 chnl=0 +char id=107 x=16 y=36 width=12 height=15 xoffset=-2 yoffset=3 xadvance=8 page=0 chnl=0 +char id=105 x=28 y=36 width=7 height=15 xoffset=-2 yoffset=3 xadvance=4 page=0 chnl=0 +char id=104 x=35 y=36 width=12 height=15 xoffset=-2 yoffset=3 xadvance=10 page=0 chnl=0 +char id=102 x=47 y=36 width=11 height=15 xoffset=-3 yoffset=3 xadvance=5 page=0 chnl=0 +char id=90 x=58 y=36 width=13 height=15 xoffset=-3 yoffset=3 xadvance=9 page=0 chnl=0 +char id=89 x=71 y=36 width=13 height=15 xoffset=-3 yoffset=3 xadvance=8 page=0 chnl=0 +char id=88 x=84 y=36 width=14 height=15 xoffset=-3 yoffset=3 xadvance=9 page=0 chnl=0 +char id=87 x=98 y=36 width=19 height=15 xoffset=-3 yoffset=3 xadvance=15 page=0 chnl=0 +char id=86 x=117 y=36 width=14 height=15 xoffset=-3 yoffset=3 xadvance=9 page=0 chnl=0 +char id=84 x=131 y=36 width=13 height=15 xoffset=-3 yoffset=3 xadvance=8 page=0 chnl=0 +char id=82 x=144 y=36 width=13 height=15 xoffset=-2 yoffset=3 xadvance=10 page=0 chnl=0 +char id=80 x=157 y=36 width=12 height=15 xoffset=-2 yoffset=3 xadvance=9 page=0 chnl=0 +char id=78 x=169 y=36 width=14 height=15 xoffset=-2 yoffset=3 xadvance=12 page=0 chnl=0 +char id=77 x=183 y=36 width=17 height=15 xoffset=-2 yoffset=3 xadvance=14 page=0 chnl=0 +char id=76 x=200 y=36 width=11 height=15 xoffset=-2 yoffset=3 xadvance=8 page=0 chnl=0 +char id=75 x=211 y=36 width=13 height=15 xoffset=-2 yoffset=3 xadvance=9 page=0 chnl=0 +char id=73 x=224 y=36 width=10 height=15 xoffset=-3 yoffset=3 xadvance=5 page=0 chnl=0 +char id=72 x=234 y=36 width=14 height=15 xoffset=-2 yoffset=3 xadvance=11 page=0 chnl=0 +char id=70 x=0 y=51 width=11 height=15 xoffset=-2 yoffset=3 xadvance=8 page=0 chnl=0 +char id=69 x=11 y=51 width=11 height=15 xoffset=-2 yoffset=3 xadvance=8 page=0 chnl=0 +char id=68 x=22 y=51 width=14 height=15 xoffset=-2 yoffset=3 xadvance=11 page=0 chnl=0 +char id=66 x=36 y=51 width=13 height=15 xoffset=-2 yoffset=3 xadvance=10 page=0 chnl=0 +char id=65 x=49 y=51 width=15 height=15 xoffset=-3 yoffset=3 xadvance=10 page=0 chnl=0 +char id=58 x=64 y=51 width=7 height=13 xoffset=-2 yoffset=6 xadvance=4 page=0 chnl=0 +char id=117 x=71 y=51 width=12 height=13 xoffset=-2 yoffset=6 xadvance=10 page=0 chnl=0 +char id=115 x=83 y=51 width=11 height=13 xoffset=-3 yoffset=6 xadvance=7 page=0 chnl=0 +char id=111 x=94 y=51 width=13 height=13 xoffset=-3 yoffset=6 xadvance=9 page=0 chnl=0 +char id=101 x=107 y=51 width=13 height=13 xoffset=-3 yoffset=6 xadvance=9 page=0 chnl=0 +char id=99 x=120 y=51 width=12 height=13 xoffset=-3 yoffset=6 xadvance=7 page=0 chnl=0 +char id=97 x=132 y=51 width=12 height=13 xoffset=-3 yoffset=6 xadvance=9 page=0 chnl=0 +char id=60 x=144 y=51 width=13 height=12 xoffset=-3 yoffset=5 xadvance=9 page=0 chnl=0 +char id=122 x=157 y=51 width=11 height=12 xoffset=-3 yoffset=6 xadvance=7 page=0 chnl=0 +char id=120 x=168 y=51 width=13 height=12 xoffset=-3 yoffset=6 xadvance=8 page=0 chnl=0 +char id=119 x=181 y=51 width=17 height=12 xoffset=-3 yoffset=6 xadvance=12 page=0 chnl=0 +char id=118 x=198 y=51 width=13 height=12 xoffset=-3 yoffset=6 xadvance=8 page=0 chnl=0 +char id=114 x=211 y=51 width=10 height=12 xoffset=-2 yoffset=6 xadvance=6 page=0 chnl=0 +char id=110 x=221 y=51 width=12 height=12 xoffset=-2 yoffset=6 xadvance=10 page=0 chnl=0 +char id=109 x=233 y=51 width=17 height=12 xoffset=-2 yoffset=6 xadvance=15 page=0 chnl=0 +char id=94 x=0 y=66 width=13 height=11 xoffset=-3 yoffset=3 xadvance=9 page=0 chnl=0 +char id=62 x=13 y=66 width=13 height=11 xoffset=-3 yoffset=5 xadvance=9 page=0 chnl=0 +char id=42 x=26 y=66 width=13 height=10 xoffset=-3 yoffset=3 xadvance=9 page=0 chnl=0 +char id=43 x=39 y=66 width=13 height=10 xoffset=-3 yoffset=6 xadvance=9 page=0 chnl=0 +char id=61 x=52 y=66 width=13 height=8 xoffset=-3 yoffset=7 xadvance=9 page=0 chnl=0 +char id=39 x=65 y=66 width=6 height=8 xoffset=-2 yoffset=3 xadvance=3 page=0 chnl=0 +char id=34 x=71 y=66 width=9 height=8 xoffset=-2 yoffset=3 xadvance=6 page=0 chnl=0 +char id=44 x=80 y=66 width=8 height=7 xoffset=-3 yoffset=14 xadvance=4 page=0 chnl=0 +char id=126 x=88 y=66 width=13 height=6 xoffset=-3 yoffset=8 xadvance=9 page=0 chnl=0 +char id=46 x=101 y=66 width=7 height=6 xoffset=-2 yoffset=13 xadvance=4 page=0 chnl=0 +char id=96 x=108 y=66 width=8 height=6 xoffset=0 yoffset=2 xadvance=9 page=0 chnl=0 +char id=45 x=116 y=66 width=9 height=5 xoffset=-3 yoffset=10 xadvance=5 page=0 chnl=0 +char id=95 x=125 y=66 width=13 height=4 xoffset=-4 yoffset=17 xadvance=6 page=0 chnl=0 +kernings count=-1 diff --git a/desktop/assets/data/powerups/Untitled.xcf b/desktop/assets/data/powerups/Untitled.xcf new file mode 100644 index 0000000..45f3b44 Binary files /dev/null and b/desktop/assets/data/powerups/Untitled.xcf differ diff --git a/desktop/assets/data/powerups/ball_and_chain.png b/desktop/assets/data/powerups/ball_and_chain.png new file mode 100644 index 0000000..3d4c598 Binary files /dev/null and b/desktop/assets/data/powerups/ball_and_chain.png differ diff --git a/desktop/assets/data/powerups/ball_and_chain.xcf b/desktop/assets/data/powerups/ball_and_chain.xcf new file mode 100644 index 0000000..435bd21 Binary files /dev/null and b/desktop/assets/data/powerups/ball_and_chain.xcf differ diff --git a/desktop/assets/data/powerups/bomb.png b/desktop/assets/data/powerups/bomb.png new file mode 100644 index 0000000..3993ae9 Binary files /dev/null and b/desktop/assets/data/powerups/bomb.png differ diff --git a/desktop/assets/data/powerups/bomb.xcf b/desktop/assets/data/powerups/bomb.xcf new file mode 100644 index 0000000..9150233 Binary files /dev/null and b/desktop/assets/data/powerups/bomb.xcf differ diff --git a/desktop/assets/data/powerups/feather.png b/desktop/assets/data/powerups/feather.png new file mode 100644 index 0000000..dfe93e3 Binary files /dev/null and b/desktop/assets/data/powerups/feather.png differ diff --git a/desktop/assets/data/powerups/slug.png b/desktop/assets/data/powerups/slug.png new file mode 100644 index 0000000..f4893af Binary files /dev/null and b/desktop/assets/data/powerups/slug.png differ diff --git a/desktop/assets/data/powerups/slug.xcf b/desktop/assets/data/powerups/slug.xcf new file mode 100644 index 0000000..367847a Binary files /dev/null and b/desktop/assets/data/powerups/slug.xcf differ diff --git a/desktop/assets/data/shaders/testshader_frag.glsl b/desktop/assets/data/shaders/testshader_frag.glsl new file mode 100644 index 0000000..6862ea6 --- /dev/null +++ b/desktop/assets/data/shaders/testshader_frag.glsl @@ -0,0 +1,10 @@ + +#ifdef GL_ES +precision mediump float; +#endif + +varying vec2 v_texCoord0; + +void main() { + gl_FragColor = vec4(v_texCoord0, 0.0, 1.0); +} \ No newline at end of file diff --git a/desktop/assets/data/shaders/testshader_vert.glsl b/desktop/assets/data/shaders/testshader_vert.glsl new file mode 100644 index 0000000..fdb4e81 --- /dev/null +++ b/desktop/assets/data/shaders/testshader_vert.glsl @@ -0,0 +1,13 @@ +attribute vec3 a_position; +attribute vec3 a_normal; +attribute vec2 a_texCoord0; + +uniform mat4 u_worldTrans; +uniform mat4 u_projViewTrans; + +varying vec2 v_texCoord0; + +void main() { + v_texCoord0 = a_texCoord0; + gl_Position = u_projViewTrans * u_worldTrans * vec4(a_position, 1.0); +} diff --git a/android/assets/badlogic.jpg b/desktop/assets/data/textures/badlogic.jpg old mode 100644 new mode 100755 similarity index 100% rename from android/assets/badlogic.jpg rename to desktop/assets/data/textures/badlogic.jpg diff --git a/desktop/assets/data/textures/dirt.png b/desktop/assets/data/textures/dirt.png new file mode 100755 index 0000000..29a20c3 Binary files /dev/null and b/desktop/assets/data/textures/dirt.png differ diff --git a/desktop/assets/data/textures/grass_side.png b/desktop/assets/data/textures/grass_side.png new file mode 100755 index 0000000..7df7c8f Binary files /dev/null and b/desktop/assets/data/textures/grass_side.png differ diff --git a/desktop/assets/data/textures/grass_top.png b/desktop/assets/data/textures/grass_top.png new file mode 100755 index 0000000..05c2f8a Binary files /dev/null and b/desktop/assets/data/textures/grass_top.png differ diff --git a/desktop/assets/data/textures/leaves.jpg b/desktop/assets/data/textures/leaves.jpg new file mode 100755 index 0000000..278bdc9 Binary files /dev/null and b/desktop/assets/data/textures/leaves.jpg differ diff --git a/desktop/assets/data/textures/stone.jpg b/desktop/assets/data/textures/stone.jpg new file mode 100755 index 0000000..91ac66a Binary files /dev/null and b/desktop/assets/data/textures/stone.jpg differ diff --git a/desktop/assets/data/textures/texture_atlas.png b/desktop/assets/data/textures/texture_atlas.png new file mode 100755 index 0000000..0c22621 Binary files /dev/null and b/desktop/assets/data/textures/texture_atlas.png differ diff --git a/desktop/assets/data/textures/wood_bottom_top.png b/desktop/assets/data/textures/wood_bottom_top.png new file mode 100755 index 0000000..c161de9 Binary files /dev/null and b/desktop/assets/data/textures/wood_bottom_top.png differ diff --git a/desktop/assets/data/textures/wood_side.png b/desktop/assets/data/textures/wood_side.png new file mode 100755 index 0000000..63ef62c Binary files /dev/null and b/desktop/assets/data/textures/wood_side.png differ diff --git a/desktop/assets/data/touchscreen_controller.png b/desktop/assets/data/touchscreen_controller.png new file mode 100644 index 0000000..74e0a3b Binary files /dev/null and b/desktop/assets/data/touchscreen_controller.png differ diff --git a/desktop/assets/data/uiskin.atlas b/desktop/assets/data/uiskin.atlas new file mode 100755 index 0000000..d1f3db6 --- /dev/null +++ b/desktop/assets/data/uiskin.atlas @@ -0,0 +1,200 @@ + +uiskin.png +size: 256,128 +format: RGBA8888 +filter: Linear,Linear +repeat: none +check-off + rotate: false + xy: 11, 5 + size: 14, 14 + orig: 14, 14 + offset: 0, 0 + index: -1 +textfield + rotate: false + xy: 11, 5 + size: 14, 14 + split: 3, 3, 3, 3 + orig: 14, 14 + offset: 0, 0 + index: -1 +check-on + rotate: false + xy: 125, 35 + size: 14, 14 + orig: 14, 14 + offset: 0, 0 + index: -1 +cursor + rotate: false + xy: 23, 1 + size: 3, 3 + split: 1, 1, 1, 1 + orig: 3, 3 + offset: 0, 0 + index: -1 +default + rotate: false + xy: 1, 50 + size: 254, 77 + orig: 254, 77 + offset: 0, 0 + index: -1 +default-pane + rotate: false + xy: 11, 1 + size: 5, 3 + split: 1, 1, 1, 1 + orig: 5, 3 + offset: 0, 0 + index: -1 +default-rect-pad + rotate: false + xy: 11, 1 + size: 5, 3 + split: 1, 1, 1, 1 + orig: 5, 3 + offset: 0, 0 + index: -1 +default-pane-noborder + rotate: false + xy: 170, 44 + size: 1, 1 + split: 0, 0, 0, 0 + orig: 1, 1 + offset: 0, 0 + index: -1 +default-rect + rotate: false + xy: 38, 25 + size: 3, 3 + split: 1, 1, 1, 1 + orig: 3, 3 + offset: 0, 0 + index: -1 +default-rect-down + rotate: false + xy: 170, 46 + size: 3, 3 + split: 1, 1, 1, 1 + orig: 3, 3 + offset: 0, 0 + index: -1 +default-round + rotate: false + xy: 112, 29 + size: 12, 20 + split: 5, 5, 5, 4 + pad: 4, 4, 1, 1 + orig: 12, 20 + offset: 0, 0 + index: -1 +default-round-down + rotate: false + xy: 99, 29 + size: 12, 20 + split: 5, 5, 5, 4 + pad: 4, 4, 1, 1 + orig: 12, 20 + offset: 0, 0 + index: -1 +default-round-large + rotate: false + xy: 57, 29 + size: 20, 20 + split: 5, 5, 5, 4 + orig: 20, 20 + offset: 0, 0 + index: -1 +default-scroll + rotate: false + xy: 78, 29 + size: 20, 20 + split: 2, 2, 2, 2 + orig: 20, 20 + offset: 0, 0 + index: -1 +default-select + rotate: false + xy: 29, 29 + size: 27, 20 + split: 4, 14, 4, 4 + orig: 27, 20 + offset: 0, 0 + index: -1 +default-select-selection + rotate: false + xy: 26, 16 + size: 3, 3 + split: 1, 1, 1, 1 + orig: 3, 3 + offset: 0, 0 + index: -1 +default-slider + rotate: false + xy: 29, 20 + size: 8, 8 + split: 2, 2, 2, 2 + orig: 8, 8 + offset: 0, 0 + index: -1 +default-slider-knob + rotate: false + xy: 1, 1 + size: 9, 18 + orig: 9, 18 + offset: 0, 0 + index: -1 +default-splitpane + rotate: false + xy: 17, 1 + size: 5, 3 + split: 0, 5, 0, 0 + orig: 5, 3 + offset: 0, 0 + index: -1 +default-splitpane-vertical + rotate: false + xy: 125, 29 + size: 3, 5 + split: 0, 0, 0, 5 + orig: 3, 5 + offset: 0, 0 + index: -1 +default-window + rotate: false + xy: 1, 20 + size: 27, 29 + split: 4, 3, 20, 3 + orig: 27, 29 + offset: 0, 0 + index: -1 +selection + rotate: false + xy: 174, 48 + size: 1, 1 + orig: 1, 1 + offset: 0, 0 + index: -1 +tree-minus + rotate: false + xy: 140, 35 + size: 14, 14 + orig: 14, 14 + offset: 0, 0 + index: -1 +tree-plus + rotate: false + xy: 155, 35 + size: 14, 14 + orig: 14, 14 + offset: 0, 0 + index: -1 +white + rotate: false + xy: 129, 31 + size: 3, 3 + orig: 3, 3 + offset: 0, 0 + index: -1 diff --git a/desktop/assets/data/uiskin.json b/desktop/assets/data/uiskin.json new file mode 100755 index 0000000..9b301b0 --- /dev/null +++ b/desktop/assets/data/uiskin.json @@ -0,0 +1,70 @@ +{ +BitmapFont: { default-font: { file: default.fnt } }, +Color: { + green: { a: 1, b: 0, g: 1, r: 0 }, + white: { a: 1, b: 1, g: 1, r: 1 }, + red: { a: 1, b: 0, g: 0, r: 1 }, + black: { a: 1, b: 0, g: 0, r: 0 }, +}, +TintedDrawable: { + dialogDim: { name: white, color: { r: 0, g: 0, b: 0, a: 0.45 } }, +}, +ButtonStyle: { + default: { down: default-round-down, up: default-round }, + toggle: { parent: default, checked: default-round-down } +}, +TextButtonStyle: { + default: { parent: default, font: default-font, fontColor: white }, + toggle: { parent: default, checked: default-round-down, downFontColor: red } +}, +ScrollPaneStyle: { + default: { vScroll: default-scroll, hScrollKnob: default-round-large, background: default-rect, hScroll: default-scroll, vScrollKnob: default-round-large } +}, +SelectBoxStyle: { + default: { + font: default-font, fontColor: white, background: default-select, + scrollStyle: default, + listStyle: { font: default-font, selection: default-select-selection } + } +}, +SplitPaneStyle: { + default-vertical: { handle: default-splitpane-vertical }, + default-horizontal: { handle: default-splitpane } +}, +WindowStyle: { + default: { titleFont: default-font, background: default-window, titleFontColor: white }, + dialog: { parent: default, stageBackground: dialogDim } +}, +ProgressBarStyle: { + default-horizontal: { background: default-slider, knob: default-slider-knob }, + default-vertical: { background: default-slider, knob: default-round-large } +}, +SliderStyle: { + default-horizontal: { parent: default-horizontal }, + default-vertical: { parent: default-vertical } +}, +LabelStyle: { + default: { font: default-font, fontColor: white } +}, +TextFieldStyle: { + default: { selection: selection, background: textfield, font: default-font, fontColor: white, cursor: cursor } +}, +CheckBoxStyle: { + default: { checkboxOn: check-on, checkboxOff: check-off, font: default-font, fontColor: white } +}, +ListStyle: { + default: { fontColorUnselected: white, selection: selection, fontColorSelected: white, font: default-font } +}, +TouchpadStyle: { + default: { background: default-pane, knob: default-round-large } +}, +TreeStyle: { + default: { minus: tree-minus, plus: tree-plus, selection: default-select-selection } +}, +TextTooltipStyle: { + default: { + label: { font: default-font, fontColor: white }, + background: default-pane, wrapWidth: 150 + } +}, +} diff --git a/desktop/assets/data/uiskin.png b/desktop/assets/data/uiskin.png new file mode 100755 index 0000000..c1e5f1a Binary files /dev/null and b/desktop/assets/data/uiskin.png differ diff --git a/ios/src/com/emamaker/amazeing/IOSLauncher.java b/ios/src/com/emamaker/amazeing/IOSLauncher.java index 8b022b0..8d545d5 100644 --- a/ios/src/com/emamaker/amazeing/IOSLauncher.java +++ b/ios/src/com/emamaker/amazeing/IOSLauncher.java @@ -5,13 +5,13 @@ import org.robovm.apple.uikit.UIApplication; import com.badlogic.gdx.backends.iosrobovm.IOSApplication; import com.badlogic.gdx.backends.iosrobovm.IOSApplicationConfiguration; -import com.emamaker.amazeing.AMazeIng; +import com.emamaker.amazeing.AMazeIng.Platform; public class IOSLauncher extends IOSApplication.Delegate { @Override protected IOSApplication createApplication() { IOSApplicationConfiguration config = new IOSApplicationConfiguration(); - return new IOSApplication(new AMazeIng(), config); + return new IOSApplication(new AMazeIng(Platform.IOS), config); } public static void main(String[] argv) {