Fixed issue with crosshair being missing. Also moved crosshair logic into WorldRenderer

This commit is contained in:
2020-04-12 01:53:48 -06:00
parent 0a53564650
commit 5c33baca08
5 changed files with 48 additions and 54 deletions

View File

@@ -1,5 +1,6 @@
package Collector.Character;
import Collector.Main;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input;
import com.badlogic.gdx.graphics.g2d.Animation;
@@ -9,16 +10,16 @@ import Collector.Restrictions;
import java.util.HashMap;
import static Collector.Main.cam;
public class InputController implements Restrictions {
private final Player player;
int i = 0;
private final HashMap<String, Animation<com.badlogic.gdx.graphics.g2d.TextureAtlas.AtlasRegion>> animations;
private Mouse mouse;
public InputController(Player player) {
public InputController(Player player, Mouse mouse) {
this.player = player;
this.mouse = mouse;
animations = new HashMap<>();
animations.put("Up", new Animation<>(1 / 4f, player.textureAtlas.findRegions(player.getSpriteName() + "_" + "Up")));
animations.put("UpRight", new Animation<>(1 / 4f, player.textureAtlas.findRegions(player.getSpriteName() + "_" + "UpRight")));
@@ -33,16 +34,16 @@ public class InputController implements Restrictions {
public void handleInput() {
i++;
if (Gdx.input.isKeyPressed(Input.Keys.Q)) {
cam.zoom += 5;
Main.cam.zoom += 5;
}
if (Gdx.input.isKeyPressed(Input.Keys.E)) {
cam.zoom -= 5;
Main.cam.zoom -= 5;
}
if ((Gdx.input.isButtonJustPressed(Input.Buttons.LEFT) || Gdx.input.isButtonJustPressed(Input.Buttons.RIGHT) )&& i > KEY_DELAY) {
Vector3 mousePos = new Vector3(Gdx.input.getX(), Gdx.input.getY(), 0);
cam.unproject(mousePos);
int x = Mouse.getSelectedX(mousePos) >> TILE_SHIFT;
int y = Mouse.getSelectedY(mousePos) >> TILE_SHIFT;
Main.cam.unproject(mousePos);
int x = mouse.getSelectedX(mousePos) >> TILE_SHIFT;
int y = mouse.getSelectedY(mousePos) >> TILE_SHIFT;
if(Gdx.input.isButtonJustPressed(Input.Buttons.LEFT)) {
i = 0;
Chunks.placeBlock(x, y, "wood");
@@ -58,21 +59,21 @@ public class InputController implements Restrictions {
player.setAnimation(animations.get("UpLeft"));
Player.addX(-MOVEMENT_SPEED);
Player.addY(MOVEMENT_SPEED);
cam.translate(-MOVEMENT_SPEED, MOVEMENT_SPEED);
Main.cam.translate(-MOVEMENT_SPEED, MOVEMENT_SPEED);
}
else if (Gdx.input.isKeyPressed(Input.Keys.W) && Gdx.input.isKeyPressed(Input.Keys.D) && i > KEY_DELAY) {
i = 0;
player.setAnimation(animations.get("UpRight"));
Player.addX(MOVEMENT_SPEED);
Player.addY(MOVEMENT_SPEED);
cam.translate(MOVEMENT_SPEED, MOVEMENT_SPEED);
Main.cam.translate(MOVEMENT_SPEED, MOVEMENT_SPEED);
}
else if (Gdx.input.isKeyPressed(Input.Keys.S) && Gdx.input.isKeyPressed(Input.Keys.A) && i > KEY_DELAY) {
i = 0;
player.setAnimation(animations.get("DownLeft"));
Player.addX(-MOVEMENT_SPEED);
Player.addY(-MOVEMENT_SPEED);
cam.translate(-MOVEMENT_SPEED, -MOVEMENT_SPEED);
Main.cam.translate(-MOVEMENT_SPEED, -MOVEMENT_SPEED);
}
else if (Gdx.input.isKeyPressed(Input.Keys.S) && Gdx.input.isKeyPressed(Input.Keys.D) && i > KEY_DELAY) {
i = 0;
@@ -80,33 +81,32 @@ public class InputController implements Restrictions {
Player.addX(MOVEMENT_SPEED);
Player.addY(-MOVEMENT_SPEED);
cam.translate(MOVEMENT_SPEED, -MOVEMENT_SPEED);
Main.cam.translate(MOVEMENT_SPEED, -MOVEMENT_SPEED);
}
else if (Gdx.input.isKeyPressed(Input.Keys.A) && i > KEY_DELAY) {
i = 0;
player.setAnimation(animations.get("Left"));
Player.addX(-MOVEMENT_SPEED);
cam.translate(-MOVEMENT_SPEED, 0);
Main.cam.translate(-MOVEMENT_SPEED, 0);
}
else if (Gdx.input.isKeyPressed(Input.Keys.D) && i > KEY_DELAY) {
i = 0;
player.setAnimation(animations.get("Right"));
Player.addX(MOVEMENT_SPEED);
cam.translate(MOVEMENT_SPEED, 0);
Main.cam.translate(MOVEMENT_SPEED, 0);
}
else if (Gdx.input.isKeyPressed(Input.Keys.S) && i > KEY_DELAY) {
i = 0;
player.setAnimation(animations.get("Down"));
Player.addY(-MOVEMENT_SPEED);
cam.translate(0, -MOVEMENT_SPEED);
Main.cam.translate(0, -MOVEMENT_SPEED);
}
if (Gdx.input.isKeyPressed(Input.Keys.W) && i > KEY_DELAY) {
i = 0;
player.setAnimation(animations.get("Up"));
Player.addY(MOVEMENT_SPEED);
cam.translate(0, MOVEMENT_SPEED);
Main.cam.translate(0, MOVEMENT_SPEED);
}
cam.update();
Main.cam.update();
}
}

View File

@@ -1,10 +1,7 @@
package Collector.Character;
import Collector.Main;
import Collector.Restrictions;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.math.Vector3;
public class Mouse implements Restrictions {
@@ -14,25 +11,15 @@ public class Mouse implements Restrictions {
this.crosshair = new Texture("assets/crosshair.png");
}
public void selectedTile(SpriteBatch batch) {
Vector3 mousePos = new Vector3(Gdx.input.getX(), Gdx.input.getY(), 0);
Main.cam.unproject(mousePos);
int x = getSelectedX(mousePos);
int y = getSelectedY(mousePos);
batch.draw(crosshair, x, y);
public Texture getCrosshair() {
return crosshair;
}
public static int getSelectedX(Vector3 mousePos) {
public int getSelectedX(Vector3 mousePos) {
return ((int)(mousePos.x)>>4)<<4;
}
public static int getSelectedY(Vector3 mousePos) {
public int getSelectedY(Vector3 mousePos) {
return ((int)(mousePos.y)>>4)<<4;
}
public void render(SpriteBatch batch) {
selectedTile(batch);
//System.out.println("X = " + getTileX(cam) + " Y = "+ getTileY(cam));
}
}

View File

@@ -1,9 +1,5 @@
package Collector.Dimension;
import com.badlogic.gdx.graphics.Texture;
import java.util.HashMap;
public class Block {
private final String name;

View File

@@ -2,24 +2,29 @@ package Collector.Dimension;
import Collector.Character.Player;
import Collector.Main;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.g2d.Batch;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.math.Vector3;
import com.github.czyzby.kiwi.util.tuple.immutable.Triple;
import Collector.Character.InputController;
import Collector.Character.Mouse;
import Collector.Restrictions;
import java.util.Iterator;
public class WorldRenderer implements Restrictions {
private final Mouse mouse;
private final InputController inputController;
public WorldRenderer(Mouse mouse, InputController inputController) {
this.mouse = mouse;
public WorldRenderer(InputController inputController, Mouse mouse) {
this.inputController = inputController;
this.mouse = mouse;
}
public void drawWorld(Batch batch, int layer) {
for (Triple<Integer, Integer, Integer> chunkpair : Chunks.blocks.keySet()) {
for (Iterator<Triple<Integer, Integer, Integer>> iterator = Chunks.blocks.keySet().iterator(); iterator.hasNext(); ) {
Triple<Integer, Integer, Integer> chunkpair = iterator.next();
if (chunkpair.getThird() == layer) {
batch.draw(
BlockMaterials.textures.get(Chunks.blocks.get(chunkpair).getName()),
@@ -30,13 +35,21 @@ public class WorldRenderer implements Restrictions {
}
}
private void mouseCrosshair(SpriteBatch batch) {
Vector3 mousePos = new Vector3(Gdx.input.getX(), Gdx.input.getY(), 0);
Main.cam.unproject(mousePos);
int x = mouse.getSelectedX(mousePos);
int y = mouse.getSelectedY(mousePos);
batch.draw(mouse.getCrosshair(), x, y);
}
public void render(SpriteBatch batch, float timeSinceLastUpdate) {
inputController.handleInput();
//Higher means draws in a lower layer
drawWorld(batch,0);
drawWorld(batch,1);
batch.setProjectionMatrix(Main.cam.combined);
Main.cam.update();
batch.draw(Player.getAnimation().getKeyFrame(timeSinceLastUpdate, true), Player.x, Player.y,TILE_SIZE,TILE_SIZE);
mouse.render(batch);
drawWorld(batch,1);
mouseCrosshair(batch);
inputController.handleInput();
batch.setProjectionMatrix(Main.cam.combined);
}
}

View File

@@ -37,14 +37,14 @@ public class Main extends ApplicationAdapter {
mouse = new Mouse();
gui = new GUI(fitViewport);
player = new Player(cam, 0, 0);
inputController = new InputController(player);
worldRenderer = new WorldRenderer(mouse, inputController);
inputController = new InputController(player,mouse);
worldRenderer = new WorldRenderer(inputController,mouse);
batch = new SpriteBatch();
BlockMaterials.create();
Chunks.create();
cam.translate(TILE_SIZE >> 1, TILE_SIZE >> 1);
//cam.translate(TILE_SIZE, TILE_SIZE);
cam.zoom = 25f;
}
@@ -54,9 +54,7 @@ public class Main extends ApplicationAdapter {
timeSinceLastUpdate += Gdx.graphics.getDeltaTime(); //Accumulate delta time
batch.begin();
if(timeSinceLastUpdate > 1/10f){
worldRenderer.render(batch,timeSinceLastUpdate);
}
worldRenderer.render(batch,timeSinceLastUpdate);
delta += Gdx.graphics.getDeltaTime();
if (delta > RENDER_TIME) {
@@ -64,7 +62,7 @@ public class Main extends ApplicationAdapter {
World.loadChunks();
World.unloadChunks();
}
cam.update();
gui.render();
batch.end();
}