From b17cc61839ee2df15e8d633c4c8c440682bf05e3 Mon Sep 17 00:00:00 2001 From: Recrown Date: Wed, 31 May 2017 23:55:44 -0500 Subject: [PATCH] successfully added debug spawning system and finished void circle enemy --- android/assets/uiskin.atlas | 7 ++ android/assets/uiskin.png | Bin 4454 -> 4483 bytes core/src/zero1hd/polyjet/Polyjet.java | 10 ++- .../polyjet/entity/CollisionDetector.java | 25 +++--- .../polyjet/entity/EntityController.java | 37 +++++---- .../zero1hd/polyjet/entity/ally/Laser.java | 6 +- .../polyjet/entity/enemies/VoidCircle.java | 44 +++++----- .../polyjet/screens/CreativeDebugScreen.java | 12 +-- .../zero1hd/polyjet/screens/GameScreen.java | 7 +- .../polyjet/ui/stages/CreativeStage.java | 5 +- .../polyjet/ui/stages/GamePlayArea.java | 27 +++--- .../polyjet/ui/windows/MusicController.java | 2 +- .../polyjet/ui/windows/MusicSelector.java | 6 +- .../polyjet/ui/windows/SpawnerWindow.java | 77 +++++++++++------- 14 files changed, 152 insertions(+), 113 deletions(-) diff --git a/android/assets/uiskin.atlas b/android/assets/uiskin.atlas index 4890d61..c11fac4 100755 --- a/android/assets/uiskin.atlas +++ b/android/assets/uiskin.atlas @@ -154,6 +154,13 @@ default-slider-knob orig: 9, 18 offset: 0, 0 index: -1 +vertical-slider-knob + rotate: false + xy: 27, 1 + size: 13, 5 + orig: 13, 5 + offset: 0, 0 + index: -1 default-splitpane rotate: false xy: 17, 1 diff --git a/android/assets/uiskin.png b/android/assets/uiskin.png index b89c81ad91e1e7a911c16aa6c8c97021a5420b05..218800023c38c12ea1e0716e08e79dfab3d0cad1 100755 GIT binary patch literal 4483 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 SPW`n*Y)1MfdZoIqasLC>+&H}e diff --git a/core/src/zero1hd/polyjet/Polyjet.java b/core/src/zero1hd/polyjet/Polyjet.java index 6e57a37..20c1ba0 100755 --- a/core/src/zero1hd/polyjet/Polyjet.java +++ b/core/src/zero1hd/polyjet/Polyjet.java @@ -194,6 +194,10 @@ public class Polyjet extends Game { SliderStyle defaultSlider = new SliderStyle(getDefaultSkin().getDrawable("default-slider"), getDefaultSkin().getDrawable("default-slider-knob")); getDefaultSkin().add("default-horizontal", defaultSlider); + SliderStyle vertSlider = new SliderStyle(defaultSlider); + vertSlider.knob = getDefaultSkin().getDrawable("vertical-slider-knob"); + getDefaultSkin().add("default-vertical", vertSlider); + ButtonStyle infoButton = new ButtonStyle(); infoButton.up = getDefaultSkin().getDrawable("holo-pane"); infoButton.down = getDefaultSkin().getDrawable("holo-pane-down"); @@ -207,6 +211,10 @@ public class Polyjet extends Game { TextFieldStyle defaultTextField = new TextFieldStyle(getDefaultSkin().getFont("sub-font"), getDefaultSkin().getColor("default"), getDefaultSkin().getDrawable("cursor"), getDefaultSkin().getDrawable("selection"), getDefaultSkin().getDrawable("textfield")); getDefaultSkin().add("default", defaultTextField); + TextFieldStyle uiTextField = new TextFieldStyle(defaultTextField); + uiTextField.font = getDefaultSkin().getFont("window-font"); + getDefaultSkin().add("ui", uiTextField); + WindowStyle defaultWindow = new WindowStyle(getDefaultSkin().getFont("window-font"), getDefaultSkin().getColor("default"), getDefaultSkin().getDrawable("default-window")); getDefaultSkin().add("default", defaultWindow); @@ -215,7 +223,7 @@ public class Polyjet extends Game { tintedWindow.background = getDefaultSkin().getDrawable("tinted-window"); getDefaultSkin().add("tinted", tintedWindow); - ListStyle defaultList = new ListStyle(getDefaultSkin().getFont("sub-font"), getDefaultSkin().getColor("inverse"), getDefaultSkin().getColor("default"), getDefaultSkin().getDrawable("selection")); + ListStyle defaultList = new ListStyle(getDefaultSkin().getFont("window-font"), getDefaultSkin().getColor("inverse"), getDefaultSkin().getColor("default"), getDefaultSkin().getDrawable("selection")); getDefaultSkin().add("default", defaultList); ScrollPaneStyle defaultScrollPane = new ScrollPaneStyle(); diff --git a/core/src/zero1hd/polyjet/entity/CollisionDetector.java b/core/src/zero1hd/polyjet/entity/CollisionDetector.java index 1c95f63..6ed03bc 100755 --- a/core/src/zero1hd/polyjet/entity/CollisionDetector.java +++ b/core/src/zero1hd/polyjet/entity/CollisionDetector.java @@ -7,25 +7,24 @@ public class CollisionDetector { Array firstGroup; Array secondGroup; - private boolean debug = true; - public CollisionDetector(Array firstGroup, Array secondGroup) { this.firstGroup = firstGroup; this.secondGroup = secondGroup; } public void collisionCheck() { - if (debug) { - Gdx.app.debug("collision check", "First group size: " + firstGroup.size); - Gdx.app.debug("collision check", "Second group size: " + secondGroup.size); - } - - - for (int firstEID = 0; firstEID < firstGroup.size; firstEID++) { - for (int secondEID = 0; secondEID < secondGroup.size; secondEID++) { - if (firstGroup.get(firstEID).getHitZone().overlaps(secondGroup.get(secondEID).getHitZone())) { - firstGroup.get(firstEID).collided(secondGroup.get(secondEID)); - secondGroup.get(secondEID).collided(firstGroup.get(firstEID)); + if ((firstGroup.size != 0) && (secondGroup.size != 0)) { + for (int f = 0; f < firstGroup.size; f++) { + Entity fe = firstGroup.get(f); + for (int s = 0; s < secondGroup.size; s++) { + Entity se = secondGroup.get(s); + + if (fe.getHitZone().overlaps(se.getHitZone())) { + Gdx.app.debug("Collision Detector", "Collision between entities: " + fe.getEntityType() + " and " + se.getEntityType()); + + fe.collided(se); + se.collided(fe); + } } } } diff --git a/core/src/zero1hd/polyjet/entity/EntityController.java b/core/src/zero1hd/polyjet/entity/EntityController.java index 9420d0a..a51f1e7 100755 --- a/core/src/zero1hd/polyjet/entity/EntityController.java +++ b/core/src/zero1hd/polyjet/entity/EntityController.java @@ -14,21 +14,23 @@ public class EntityController { AssetManager assets; ShapeRenderer shapes; - public final Array ACTIVE_ALLIES; - public final Array ACTIVE_ENEMIES; + public Array activeAllies; + public Array activeEnemies; //Enemy pool declaration; - private final Pool VOID_CIRCLE_POOL; + private Pool voidCirclePool; //Ally pool declaration; - private final Pool LASER_POOL; - public EntityController(ShapeRenderer shapeRenderer, AssetManager assetManager) { - ACTIVE_ALLIES = new Array(); - ACTIVE_ENEMIES = new Array(); + private Pool laserPool; + public EntityController(AssetManager assetManager, ShapeRenderer shapeRenderer) { + activeAllies = new Array(); + activeEnemies = new Array(); this.assets = assetManager; + this.shapes = shapeRenderer; + shapes.setAutoShapeType(true); //Enemy pool initialization; - VOID_CIRCLE_POOL = new Pool() { + voidCirclePool = new Pool() { @Override protected VoidCircle newObject() { return new VoidCircle(shapes); @@ -36,7 +38,7 @@ public class EntityController { }; //Ally pool initialization; - LASER_POOL = new Pool() { + laserPool = new Pool() { @Override protected Laser newObject() { return new Laser(assets.get("laser.png", Texture.class)); @@ -46,19 +48,18 @@ public class EntityController { } public Entity retrieveEntity(Entities entity) { - Gdx.app.debug("EntityController", "spawning entity " + entity.name()); switch (entity) { case VOID_CIRCLE: - VoidCircle voidCircle = VOID_CIRCLE_POOL.obtain(); - ACTIVE_ENEMIES.add(voidCircle); + VoidCircle voidCircle = voidCirclePool.obtain(); + activeEnemies.add(voidCircle); return voidCircle; case BAR_BEAT: return null; case SHARDS: return null; case LASER: - Laser laser = LASER_POOL.obtain(); - ACTIVE_ALLIES.add(laser); + Laser laser = laserPool.obtain(); + activeAllies.add(laser); return laser; default: return null; @@ -74,14 +75,14 @@ public class EntityController { case VOID_CIRCLE: VoidCircle voidCircle = (VoidCircle) entity; voidCircle.remove(); - ACTIVE_ENEMIES.removeValue(entity, true); - VOID_CIRCLE_POOL.free(voidCircle); + activeEnemies.removeValue(entity, true); + voidCirclePool.free(voidCircle); break; case LASER: Laser laser = (Laser) entity; laser.remove(); - ACTIVE_ALLIES.removeValue(entity, true); - LASER_POOL.free(laser); + activeAllies.removeValue(entity, true); + laserPool.free(laser); break; default: break; diff --git a/core/src/zero1hd/polyjet/entity/ally/Laser.java b/core/src/zero1hd/polyjet/entity/ally/Laser.java index f6efb5d..1deff6c 100755 --- a/core/src/zero1hd/polyjet/entity/ally/Laser.java +++ b/core/src/zero1hd/polyjet/entity/ally/Laser.java @@ -1,5 +1,6 @@ package zero1hd.polyjet.entity.ally; +import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.Batch; import com.badlogic.gdx.math.Rectangle; @@ -18,13 +19,15 @@ public class Laser extends Actor implements Entity, Poolable { public Laser(Texture laserTexture) { this.laserTexture = laserTexture; + setSize(0.25f, 1f); } public void init(float x, float y, float rate) { + Gdx.app.debug("Laser", "Pos: " + x + "," + y); + setX(x); setY(y); this.rate = rate; - setSize(0.25f, 1f); hitBox = new Rectangle(); hitBox.setSize(getWidth(), getHeight()); } @@ -51,7 +54,6 @@ public class Laser extends Actor implements Entity, Poolable { public void reset() { setX(0); setY(0); - setSize(0, 0); rate = 0; hitBox.set(0, 0, 0, 0); dead = false; diff --git a/core/src/zero1hd/polyjet/entity/enemies/VoidCircle.java b/core/src/zero1hd/polyjet/entity/enemies/VoidCircle.java index 4eafb99..8f29a7b 100755 --- a/core/src/zero1hd/polyjet/entity/enemies/VoidCircle.java +++ b/core/src/zero1hd/polyjet/entity/enemies/VoidCircle.java @@ -6,6 +6,7 @@ import com.badlogic.gdx.graphics.g2d.Batch; import com.badlogic.gdx.graphics.glutils.ShapeRenderer; import com.badlogic.gdx.graphics.glutils.ShapeRenderer.ShapeType; import com.badlogic.gdx.math.Rectangle; +import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.utils.Pool.Poolable; @@ -13,6 +14,7 @@ import zero1hd.polyjet.entity.Entities; import zero1hd.polyjet.entity.Entity; public class VoidCircle extends Actor implements Entity, Poolable { + private float warnTime; private float timer; private float endRadius; private float currentRadius; @@ -21,24 +23,29 @@ public class VoidCircle extends Actor implements Entity, Poolable { private float growthRate; private boolean done; private boolean begin; + private Vector2 center; public VoidCircle(ShapeRenderer shapeRenderer) { hitBox = new Rectangle(); this.shapeRenderer = shapeRenderer; + center = new Vector2(); } public void init(float endRadius, float x, float y, float growthRate, float warningTime) { - Gdx.app.debug("Void Circle", "Initiated."); timer = warningTime; + warnTime = warningTime; this.endRadius = endRadius; - setSize(2*endRadius, 2*endRadius); - setX(x); - setY(y); + setSize(2f*endRadius, 2f*endRadius); + setX(x - getWidth()/2f); + setY(y - getWidth()/2f); this.growthRate = growthRate; } @Override public void act(float delta) { - hitBox.setPosition(getX(), getY()); + center.x = getX()+getWidth()/2f; + center.y = getY()+getHeight()/2f; + hitBox.setCenter(center.x, center.y); + if (timer > 0) { timer -= delta; } else { @@ -57,6 +64,7 @@ public VoidCircle(ShapeRenderer shapeRenderer) { super.act(delta); } + @Override public void draw(Batch batch, float parentAlpha) { batch.end(); @@ -64,11 +72,12 @@ public VoidCircle(ShapeRenderer shapeRenderer) { if (begin) { shapeRenderer.set(ShapeType.Filled); shapeRenderer.setColor(Color.BLACK); - shapeRenderer.circle(getX(), getY(), currentRadius); + shapeRenderer.circle(center.x, center.y, currentRadius, 48); + } else { + shapeRenderer.set(ShapeType.Line); + shapeRenderer.setColor(1 - timer/warnTime, 1 - timer/warnTime, 1 - timer/warnTime, 1f); + shapeRenderer.circle(center.x, center.y, endRadius, 48); } - shapeRenderer.set(ShapeType.Line); - shapeRenderer.setColor(Color.RED); - shapeRenderer.circle(getX(), getY(), endRadius); shapeRenderer.end(); batch.begin(); @@ -85,18 +94,15 @@ public VoidCircle(ShapeRenderer shapeRenderer) { endRadius = 0; done = false; begin = false; + warnTime = 0; + center.set(0, 0); + setSize(0, 0); } - public void setCurrentRadius(float currentRadius) { - this.currentRadius = currentRadius; - hitBox.setSize(2*(currentRadius*currentRadius)); - hitBox.setCenter(getX(), getY()); - } - - public void growCurrentRadius(float currentRadius) { - this.currentRadius += currentRadius; - hitBox.setSize(2*(currentRadius*currentRadius)); - hitBox.setCenter(getX(), getY()); + public void growCurrentRadius(float radius) { + currentRadius += radius; + float length = (float) Math.sqrt(2*(currentRadius*currentRadius)); + hitBox.setSize(length, length); } @Override diff --git a/core/src/zero1hd/polyjet/screens/CreativeDebugScreen.java b/core/src/zero1hd/polyjet/screens/CreativeDebugScreen.java index e3e9fee..2a85cc1 100755 --- a/core/src/zero1hd/polyjet/screens/CreativeDebugScreen.java +++ b/core/src/zero1hd/polyjet/screens/CreativeDebugScreen.java @@ -4,7 +4,6 @@ import com.badlogic.gdx.Gdx; import com.badlogic.gdx.InputMultiplexer; import com.badlogic.gdx.ScreenAdapter; import com.badlogic.gdx.graphics.GL20; -import com.badlogic.gdx.graphics.glutils.ShapeRenderer; import zero1hd.polyjet.Polyjet; import zero1hd.polyjet.ui.stages.CreativeStage; @@ -15,15 +14,10 @@ public class CreativeDebugScreen extends ScreenAdapter { GamePlayArea gamePlayArea; InputMultiplexer inputs; - ShapeRenderer shapes; - public CreativeDebugScreen(Polyjet core, MainMenu mainMenu) { - gamePlayArea = new GamePlayArea(core.getAssetManager(), shapes); + gamePlayArea = new GamePlayArea(core.getAssetManager()); creative = new CreativeStage(core, mainMenu, gamePlayArea); - shapes = new ShapeRenderer(); - shapes.setAutoShapeType(true); - inputs = new InputMultiplexer(creative, gamePlayArea); } @@ -37,7 +31,8 @@ public class CreativeDebugScreen extends ScreenAdapter { public void render(float delta) { Gdx.gl.glClearColor(1f, 1f, 1f, 1f); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT); - + Gdx.gl.glLineWidth(1f); + gamePlayArea.getViewport().apply(); gamePlayArea.act(); gamePlayArea.draw(); @@ -55,7 +50,6 @@ public class CreativeDebugScreen extends ScreenAdapter { @Override public void dispose() { - shapes.dispose(); super.dispose(); } } diff --git a/core/src/zero1hd/polyjet/screens/GameScreen.java b/core/src/zero1hd/polyjet/screens/GameScreen.java index 99c1299..01198e2 100755 --- a/core/src/zero1hd/polyjet/screens/GameScreen.java +++ b/core/src/zero1hd/polyjet/screens/GameScreen.java @@ -7,7 +7,6 @@ import com.badlogic.gdx.InputProcessor; import com.badlogic.gdx.ScreenAdapter; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.GL20; -import com.badlogic.gdx.graphics.glutils.ShapeRenderer; import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.Stage; import com.badlogic.gdx.scenes.scene2d.ui.Image; @@ -38,11 +37,8 @@ public class GameScreen extends ScreenAdapter implements InputProcessor { private AudioData music; - private ShapeRenderer shapeRenderer; - public GameScreen(Polyjet polyJet) { core = polyJet; - shapeRenderer = new ShapeRenderer(); // Overlay stuff overlay = new Stage(); @@ -101,7 +97,7 @@ public class GameScreen extends ScreenAdapter implements InputProcessor { (Gdx.graphics.getHeight() - pauseMenu.getHeight()) / 2); // Continue to add things to input multiplexer - gameArea = new GamePlayArea(polyJet.getAssetManager(), shapeRenderer); + gameArea = new GamePlayArea(polyJet.getAssetManager()); inputs = new InputMultiplexer(); inputs.addProcessor(this); @@ -123,6 +119,7 @@ public class GameScreen extends ScreenAdapter implements InputProcessor { public void render(float delta) { Gdx.gl.glClearColor(1f, 1f, 1f, 1f); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT); + Gdx.gl.glLineWidth(1f); gameArea.getViewport().apply(); gameArea.draw(); diff --git a/core/src/zero1hd/polyjet/ui/stages/CreativeStage.java b/core/src/zero1hd/polyjet/ui/stages/CreativeStage.java index 06f5032..09000dc 100755 --- a/core/src/zero1hd/polyjet/ui/stages/CreativeStage.java +++ b/core/src/zero1hd/polyjet/ui/stages/CreativeStage.java @@ -56,7 +56,6 @@ public class CreativeStage extends Stage implements MiniListener { @Override public void changed(ChangeEvent event, Actor actor) { dispose(); - musicSelector.getSelectedMusic().reset(); core.setScreen(mainMenu); } }); @@ -200,7 +199,9 @@ public class CreativeStage extends Stage implements MiniListener { @Override public void dispose() { - musicSelector.getSelectedMusic().dispose(); + if (musicSelector.getSelectedMusic() != null) { + musicSelector.getSelectedMusic().dispose(); + } super.dispose(); } diff --git a/core/src/zero1hd/polyjet/ui/stages/GamePlayArea.java b/core/src/zero1hd/polyjet/ui/stages/GamePlayArea.java index 30e1d9d..edb2faa 100755 --- a/core/src/zero1hd/polyjet/ui/stages/GamePlayArea.java +++ b/core/src/zero1hd/polyjet/ui/stages/GamePlayArea.java @@ -10,7 +10,6 @@ import zero1hd.polyjet.Polyjet; import zero1hd.polyjet.controls.KeyMap; import zero1hd.polyjet.entity.CollisionDetector; import zero1hd.polyjet.entity.Entities; -import zero1hd.polyjet.entity.Entity; import zero1hd.polyjet.entity.EntityController; import zero1hd.polyjet.entity.ally.Laser; import zero1hd.polyjet.entity.ally.PolyJetEntity; @@ -19,6 +18,8 @@ import zero1hd.polyjet.entity.ally.PolyJetEntity; public class GamePlayArea extends Stage { public PolyJetEntity polyjet; + public ShapeRenderer shapes; + public EntityController entityController; private CollisionDetector collisionDetector; @@ -27,13 +28,15 @@ public class GamePlayArea extends Stage { private int score; Texture basicLaserTexture; - public GamePlayArea(AssetManager assetManager, ShapeRenderer shapeRenderer) { + public GamePlayArea(AssetManager assetManager) { super(new FitViewport(Polyjet.GAME_AREA_WIDTH, Polyjet.GAME_AREA_HEIGHT)); polyjet = new PolyJetEntity(assetManager, 48f, "standard"); - entityController = new EntityController(shapeRenderer, assetManager); - collisionDetector = new CollisionDetector(entityController.ACTIVE_ALLIES, entityController.ACTIVE_ENEMIES); + shapes = new ShapeRenderer(); + shapes.setProjectionMatrix(getCamera().combined); + entityController = new EntityController(assetManager, shapes); + collisionDetector = new CollisionDetector(entityController.activeAllies, entityController.activeEnemies); addActor(polyjet); } @@ -41,17 +44,15 @@ public class GamePlayArea extends Stage { public void act(float delta) { collisionDetector.collisionCheck(); - while (entityController.ACTIVE_ALLIES.iterator().hasNext()) { - Entity entity = entityController.ACTIVE_ALLIES.iterator().next(); - if (entity.isDead()) { - entityController.free(entity); + for (int i = 0; i < entityController.activeAllies.size; i ++) { + if (entityController.activeAllies.get(i).isDead()) { + entityController.free(entityController.activeAllies.get(i)); } } - while (entityController.ACTIVE_ENEMIES.iterator().hasNext()) { - Entity entity = entityController.ACTIVE_ENEMIES.iterator().next(); - if (entity.isDead()) { - entityController.free(entity); + for (int i = 0; i < entityController.activeEnemies.size; i++) { + if (entityController.activeEnemies.get(i).isDead()) { + entityController.free(entityController.activeEnemies.get(i)); } } @@ -120,7 +121,7 @@ public class GamePlayArea extends Stage { } if (keycode == KeyMap.shoot) { Laser laser = (Laser) entityController.retrieveEntity(Entities.LASER); - laser.init(polyjet.getX() + (polyjet.getWidth()-laser.getWidth())/2, polyjet.getY() + polyjet.getHeight()+0.25f, 30f); + laser.init(polyjet.getX() + (polyjet.getWidth()-laser.getWidth())/2f, polyjet.getY() + polyjet.getHeight()+0.25f, 30f); addActor(laser); } return false; diff --git a/core/src/zero1hd/polyjet/ui/windows/MusicController.java b/core/src/zero1hd/polyjet/ui/windows/MusicController.java index bb93b07..c9f3460 100755 --- a/core/src/zero1hd/polyjet/ui/windows/MusicController.java +++ b/core/src/zero1hd/polyjet/ui/windows/MusicController.java @@ -80,7 +80,7 @@ public class MusicController extends Window { add(fastForward); - info = new TextField(null, skin) { + info = new TextField(null, skin, "ui") { @Override public void act(float delta) { if (audiofile != null && audiofile.getPlaybackMusic().isPlaying()) { diff --git a/core/src/zero1hd/polyjet/ui/windows/MusicSelector.java b/core/src/zero1hd/polyjet/ui/windows/MusicSelector.java index f66425a..0aa904c 100755 --- a/core/src/zero1hd/polyjet/ui/windows/MusicSelector.java +++ b/core/src/zero1hd/polyjet/ui/windows/MusicSelector.java @@ -87,6 +87,10 @@ public class MusicSelector extends Window { } public AudioData getSelectedMusic() { - return Audio.getAudioData(selectedMusic); + if (selectedMusic != null) { + return Audio.getAudioData(selectedMusic); + } else { + return null; + } } } diff --git a/core/src/zero1hd/polyjet/ui/windows/SpawnerWindow.java b/core/src/zero1hd/polyjet/ui/windows/SpawnerWindow.java index 2265672..754d7ad 100755 --- a/core/src/zero1hd/polyjet/ui/windows/SpawnerWindow.java +++ b/core/src/zero1hd/polyjet/ui/windows/SpawnerWindow.java @@ -1,9 +1,13 @@ package zero1hd.polyjet.ui.windows; import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.Input.Keys; +import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.scenes.scene2d.Stage; +import com.badlogic.gdx.scenes.scene2d.ui.List; +import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane; import com.badlogic.gdx.scenes.scene2d.ui.Skin; -import com.badlogic.gdx.scenes.scene2d.ui.TextField; +import com.badlogic.gdx.scenes.scene2d.ui.Slider; import com.badlogic.gdx.scenes.scene2d.ui.Window; import zero1hd.polyjet.entity.Entities; @@ -13,52 +17,67 @@ import zero1hd.polyjet.entity.ally.Laser; import zero1hd.polyjet.entity.enemies.VoidCircle; public class SpawnerWindow extends Window { - private TextField spawnName; - private TextField modifier; private EntityController ec; private Stage stage; + private List listOfEntities; + private ScrollPane scroller; + + private Slider mod1; + private Slider mod2; + private Slider mod3; public SpawnerWindow(String title, Skin skin, EntityController ec, Stage stageForEntities) { super(title, skin); - spawnName = new TextField("", skin); - modifier = new TextField("0;0;0", skin); - - add(spawnName, modifier); this.ec = ec; stage = stageForEntities; - setWidth(spawnName.getWidth()+modifier.getWidth()+30f); - setHeight(spawnName.getHeight()+35f); + + mod1 = new Slider(0.1f, 50f, 0.01f, true, skin); + mod2 = new Slider(0.1f, 15f, 0.01f, true, skin); + mod3 = new Slider(0.1f, 15f, 0.01f, true, skin); + + listOfEntities = new List<>(skin); + listOfEntities.setItems(Entities.values()); + + scroller = new ScrollPane(listOfEntities); + add(scroller).expandY().fillY().spaceRight(15f); + add(mod1, mod2, mod3); + + setSize(300f, 375f); } @Override public boolean remove() { - spawnName.setText(""); return super.remove(); } + private Vector2 coords = new Vector2(); @Override public void act(float delta) { - if (Gdx.input.isTouched() && !spawnName.getText().isEmpty()) { - Entity entity = ec.retrieveEntity(Entities.valueOf(spawnName.getText())); - switch(entity.getEntityType()) { - case BAR_BEAT: - break; - case LASER: - Laser laser = (Laser) entity; - laser.init(Gdx.input.getX(), Gdx.input.getY(), Float.valueOf(modifier.getText().split(";")[0])); - stage.addActor(laser); - break; - case SHARDS: - break; - case VOID_CIRCLE: - VoidCircle voidCircle = (VoidCircle) entity; - voidCircle.init(Float.valueOf(modifier.getText().split(";")[0]), Gdx.input.getX(), Gdx.input.getY(), Float.valueOf(modifier.getText().split(";")[1]), Float.valueOf(modifier.getText().split(";")[2])); - stage.addActor(voidCircle); - break; - default: - break; + if (Gdx.input.justTouched() && Gdx.input.isKeyPressed(Keys.SHIFT_LEFT)) { + coords.set(Gdx.input.getX(), Gdx.input.getY()); + stage.screenToStageCoordinates(coords); + Entity entity; + if ((entity = ec.retrieveEntity(listOfEntities.getSelected())) != null) { + switch(entity.getEntityType()) { + case BAR_BEAT: + break; + case LASER: + Laser laser = (Laser) entity; + laser.init(coords.x, coords.y, mod1.getValue()); + stage.addActor(laser); + break; + case SHARDS: + break; + case VOID_CIRCLE: + VoidCircle voidCircle = (VoidCircle) entity; + voidCircle.init(mod3.getValue(), coords.x, coords.y, mod1.getValue(), mod2.getValue()); + stage.addActor(voidCircle); + break; + default: + break; + } } } super.act(delta);