better dragging build thing
parent
fe95f750c2
commit
f576907ec1
|
|
@ -28,7 +28,7 @@ public class HadeanGame extends Game {
|
|||
Drawing.setLayer(0);
|
||||
super.render();
|
||||
Drawing.setLayer(99);
|
||||
renderDebugInfo();
|
||||
// renderDebugInfo();
|
||||
}
|
||||
|
||||
private Runtime runtime = Runtime.getRuntime();
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package xyz.valnet.hadean.gameobjects;
|
|||
import xyz.valnet.engine.graphics.Drawing;
|
||||
import xyz.valnet.engine.graphics.Sprite;
|
||||
import xyz.valnet.engine.math.Vector2f;
|
||||
import xyz.valnet.engine.math.Vector2i;
|
||||
import xyz.valnet.engine.math.Vector4f;
|
||||
import xyz.valnet.engine.scenegraph.GameObject;
|
||||
import xyz.valnet.hadean.interfaces.IWorldBoundsAdapter;
|
||||
|
|
@ -38,6 +39,10 @@ public class Camera extends GameObject {
|
|||
return new Vector2f((x - screenWidth / 2 + focus.x * tileWidth) / tileWidth, (y - screenHeight / 2 + focus.y * tileWidth) / tileWidth);
|
||||
}
|
||||
|
||||
public Vector2i screen2worldI(float x, float y) {
|
||||
return new Vector2i((int)Math.floor((x - screenWidth / 2 + focus.x * tileWidth) / tileWidth), (int)Math.floor((y - screenHeight / 2 + focus.y * tileWidth) / tileWidth));
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public void draw(Sprite sprite, float x, float y) {
|
||||
Vector2f screenPos = world2screen(x, y);
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package xyz.valnet.hadean.gameobjects.inputlayer;
|
|||
|
||||
import xyz.valnet.engine.App;
|
||||
import xyz.valnet.engine.math.Vector2f;
|
||||
import xyz.valnet.engine.math.Vector2i;
|
||||
import xyz.valnet.engine.math.Vector4f;
|
||||
import xyz.valnet.engine.scenegraph.GameObject;
|
||||
import xyz.valnet.engine.scenegraph.IMouseCaptureArea;
|
||||
|
|
@ -46,7 +47,12 @@ public class BuildLayer extends GameObject implements IMouseCaptureArea {
|
|||
}
|
||||
|
||||
private void broadcastWorldCoords() {
|
||||
Vector2f worldcoords = camera.screen2world(App.mouseX, App.mouseY);
|
||||
Vector2i worldcoords = camera.screen2worldI(App.mouseX, App.mouseY);
|
||||
if(mouseDown) {
|
||||
Vector2i[] ords = orderCoords(new Vector2i(x, y), worldcoords);
|
||||
listener.update(ords[0].x, ords[0].y, ords[2].x + 1, ords[2].y + 1);
|
||||
return;
|
||||
}
|
||||
listener.update(worldcoords.x, worldcoords.y, 1, 1);
|
||||
}
|
||||
|
||||
|
|
@ -65,7 +71,7 @@ public class BuildLayer extends GameObject implements IMouseCaptureArea {
|
|||
hovered = false;
|
||||
}
|
||||
|
||||
private float x, y;
|
||||
private int x, y;
|
||||
private int screenX, screenY;
|
||||
private boolean mouseDown = false;
|
||||
|
||||
|
|
@ -75,7 +81,7 @@ public class BuildLayer extends GameObject implements IMouseCaptureArea {
|
|||
listener.cancel();
|
||||
deactiveate();
|
||||
} else if(button == 0 && active && hovered) {
|
||||
Vector2f worldcoords = camera.screen2world(App.mouseX, App.mouseY);
|
||||
Vector2i worldcoords = camera.screen2worldI(App.mouseX, App.mouseY);
|
||||
mouseDown = true;
|
||||
screenX = App.mouseX;
|
||||
screenY = App.mouseY;
|
||||
|
|
@ -87,20 +93,30 @@ public class BuildLayer extends GameObject implements IMouseCaptureArea {
|
|||
@Override
|
||||
public void mouseUp(int button) {
|
||||
if(button == 0 && active && mouseDown) {
|
||||
Vector2f worldcoords = camera.screen2world(App.mouseX, App.mouseY);
|
||||
Vector2i worldcoords = camera.screen2worldI(App.mouseX, App.mouseY);
|
||||
mouseDown = false;
|
||||
float x1 = x;
|
||||
float y1 = y;
|
||||
float x2 = worldcoords.x;
|
||||
float y2 = worldcoords.y;
|
||||
float minX = Math.min(x1, x2);
|
||||
float minY = Math.min(y1, y2);
|
||||
float maxX = Math.max(x1, x2);
|
||||
float maxY = Math.max(y1, y2);
|
||||
int x1 = x;
|
||||
int y1 = y;
|
||||
int x2 = worldcoords.x;
|
||||
int y2 = worldcoords.y;
|
||||
int minX = Math.min(x1, x2);
|
||||
int minY = Math.min(y1, y2);
|
||||
int maxX = Math.max(x1, x2);
|
||||
int maxY = Math.max(y1, y2);
|
||||
listener.select(minX, minY, maxX, maxY);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
private Vector2i[] orderCoords(Vector2i a, Vector2i b) {
|
||||
return new Vector2i[] {
|
||||
new Vector2i(Math.min(a.x, b.x), Math.min(a.y, b.y)),
|
||||
new Vector2i(Math.max(a.x, b.x), Math.max(a.y, b.y)),
|
||||
new Vector2i(Math.max(a.x, b.x) - Math.min(a.x, b.x), Math.max(a.y, b.y) - Math.min(a.y, b.y))
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public Vector4f getBox() {
|
||||
return active ? new Vector4f(0, 0, 1024, 576) : Vector4f.zero;
|
||||
|
|
|
|||
|
|
@ -36,6 +36,7 @@ public class BuildTab extends Tab implements ISelectionChangeListener, IMouseCap
|
|||
private int padding = 10;
|
||||
|
||||
private int x, y;
|
||||
private int w, h;
|
||||
|
||||
@Override
|
||||
public void render() {
|
||||
|
|
@ -46,7 +47,9 @@ public class BuildTab extends Tab implements ISelectionChangeListener, IMouseCap
|
|||
if(opened.value()) {
|
||||
// draw the currently selected build item
|
||||
Assets.flat.pushColor(new Vector4f(1f, 1f, 1f, 0.8f));
|
||||
camera.draw(Layers.BUILD_INTERACTABLE, Assets.stockpile, x, y);
|
||||
for(int i = 0; i < w; i ++) for(int j = 0; j < h; j ++) {{
|
||||
camera.draw(Layers.BUILD_INTERACTABLE, Assets.stockpile, x + i, y + j);
|
||||
}}
|
||||
Assets.flat.popColor();
|
||||
}
|
||||
}
|
||||
|
|
@ -61,17 +64,19 @@ public class BuildTab extends Tab implements ISelectionChangeListener, IMouseCap
|
|||
|
||||
IBuildLayerListener buildListener = new IBuildLayerListener() {
|
||||
@Override
|
||||
public void update(float nx, float ny, float nw, float nh) {
|
||||
x = (int)Math.floor(nx);
|
||||
y = (int)Math.floor(ny);
|
||||
public void update(int nx, int ny, int nw, int nh) {
|
||||
x = nx;
|
||||
y = ny;
|
||||
w = nw;
|
||||
h = nh;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void select(float x1, float y1, float x2, float y2) {
|
||||
int ix1 = (int)Math.floor(x1);
|
||||
int iy1 = (int)Math.floor(y1);
|
||||
int ix2 = (int)Math.floor(x2);
|
||||
int iy2 = (int)Math.floor(y2);
|
||||
public void select(int x1, int y1, int x2, int y2) {
|
||||
int ix1 = x1;
|
||||
int iy1 = y1;
|
||||
int ix2 = x2;
|
||||
int iy2 = y2;
|
||||
for(int x = ix1; x <= ix2; x ++) {
|
||||
for(int y = iy1; y <= iy2; y ++) {
|
||||
ITileThing thing = new FarmPlot(x, y);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,5 @@
|
|||
package xyz.valnet.hadean.gameobjects.worldobjects;
|
||||
|
||||
public class Item {
|
||||
|
||||
}
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
package xyz.valnet.hadean.gameobjects.worldobjects;
|
||||
|
||||
import xyz.valnet.engine.math.Vector2f;
|
||||
import xyz.valnet.engine.math.Vector4f;
|
||||
import xyz.valnet.hadean.gameobjects.JobBoard;
|
||||
import xyz.valnet.hadean.interfaces.ISelectable;
|
||||
|
|
@ -41,6 +42,11 @@ public class Rice extends WorldObject implements ITileThing, ISelectable {
|
|||
@Override
|
||||
public void render() {
|
||||
camera.draw(Layers.AIR, Assets.riceBag, x, y);
|
||||
|
||||
Assets.flat.pushColor(Vector4f.black);
|
||||
Vector2f screeCoords = camera.world2screen(x, y);
|
||||
Assets.miniFont.drawString("123", (int)screeCoords.x, (int)screeCoords.y);
|
||||
Assets.flat.popColor();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
package xyz.valnet.hadean.interfaces;
|
||||
|
||||
public interface IBuildLayerListener {
|
||||
public void update(float x, float y, float w, float h);
|
||||
public void select(float x, float y, float w, float h);
|
||||
public void update(int x, int y, int w, int h);
|
||||
public void select(int x, int y, int w, int h);
|
||||
public void cancel();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ public class Assets {
|
|||
|
||||
public static final Texture atlas;
|
||||
public static final Font font;
|
||||
public static final Font miniFont;
|
||||
public static final Tile9 redFrame;
|
||||
public static final Tile9 frame;
|
||||
public static final Tile9 fireFrame;
|
||||
|
|
@ -165,6 +166,19 @@ public class Assets {
|
|||
charset.put('|', new Sprite(atlas, new Vector4i(224, 32, 8, 16)));
|
||||
font = new Font(charset, 8, 16);
|
||||
|
||||
Map<Character, Sprite> miniCharset = new HashMap<Character, Sprite>();
|
||||
miniCharset.put('1', new Sprite(atlas, new Vector4i(0, 112, 4, 5)));
|
||||
miniCharset.put('2', new Sprite(atlas, new Vector4i(4, 112, 4, 5)));
|
||||
miniCharset.put('3', new Sprite(atlas, new Vector4i(8, 112, 4, 5)));
|
||||
miniCharset.put('4', new Sprite(atlas, new Vector4i(12, 112, 4, 5)));
|
||||
miniCharset.put('5', new Sprite(atlas, new Vector4i(16, 112, 4, 5)));
|
||||
miniCharset.put('6', new Sprite(atlas, new Vector4i(20, 112, 4, 5)));
|
||||
miniCharset.put('7', new Sprite(atlas, new Vector4i(24, 112, 4, 5)));
|
||||
miniCharset.put('8', new Sprite(atlas, new Vector4i(28, 112, 4, 5)));
|
||||
miniCharset.put('9', new Sprite(atlas, new Vector4i(32, 112, 4, 5)));
|
||||
miniCharset.put('0', new Sprite(atlas, new Vector4i(36, 112, 4, 5)));
|
||||
miniFont = new Font(miniCharset, 4, 5);
|
||||
|
||||
frame = new Tile9(
|
||||
new Sprite(atlas, new Vector4i(24, 88, 8, 8)),
|
||||
new Sprite(atlas, new Vector4i(32, 88, 8, 8)),
|
||||
|
|
|
|||
Loading…
Reference in New Issue