|
@@ -2,47 +2,112 @@ package xyz.tbvns;
|
|
|
|
|
|
import com.badlogic.gdx.ApplicationAdapter;
|
|
|
import com.badlogic.gdx.Gdx;
|
|
|
-import com.badlogic.gdx.InputProcessor;
|
|
|
-import com.badlogic.gdx.backends.headless.HeadlessFiles;
|
|
|
-import com.badlogic.gdx.backends.headless.HeadlessNativesLoader;
|
|
|
-import com.badlogic.gdx.backends.headless.mock.graphics.MockGraphics;
|
|
|
-import com.badlogic.gdx.backends.lwjgl3.Lwjgl3Graphics;
|
|
|
+import com.badlogic.gdx.Input;
|
|
|
+import com.badlogic.gdx.graphics.Camera;
|
|
|
import com.badlogic.gdx.graphics.GL20;
|
|
|
+import com.badlogic.gdx.graphics.PerspectiveCamera;
|
|
|
import com.badlogic.gdx.graphics.Texture;
|
|
|
-import com.badlogic.gdx.graphics.g2d.SpriteBatch;
|
|
|
-import com.badlogic.gdx.utils.ScreenUtils;
|
|
|
-import imgui.ImGui;
|
|
|
-import imgui.ImGuiIO;
|
|
|
-import imgui.gl3.ImGuiImplGl3;
|
|
|
-import imgui.glfw.ImGuiImplGlfw;
|
|
|
+import com.badlogic.gdx.graphics.g3d.*;
|
|
|
+import com.badlogic.gdx.graphics.g3d.attributes.ColorAttribute;
|
|
|
+import com.badlogic.gdx.graphics.g3d.utils.CameraInputController;
|
|
|
+import com.badlogic.gdx.graphics.g3d.utils.ModelBuilder;
|
|
|
+import com.badlogic.gdx.math.Vector3;
|
|
|
+import com.badlogic.gdx.utils.viewport.Viewport;
|
|
|
+import xyz.tbvns.Inputs.Shortcut;
|
|
|
+import xyz.tbvns.LWJGL3.CustomViewport;
|
|
|
import xyz.tbvns.ui.Ui;
|
|
|
|
|
|
+import static org.lwjgl.opengl.GL11.GL_CULL_FACE;
|
|
|
+
|
|
|
/** {@link com.badlogic.gdx.ApplicationListener} implementation shared by all platforms. */
|
|
|
public class Main extends ApplicationAdapter {
|
|
|
- private SpriteBatch batch;
|
|
|
+ private ModelBatch batch;
|
|
|
+ private Camera camera;
|
|
|
private Texture image;
|
|
|
+ private Model worldGrid;
|
|
|
+ private Model levelGrid;
|
|
|
+ private ModelInstance worldGridInstance;
|
|
|
+ private ModelInstance levelGridInstance;
|
|
|
+ private CameraInputController cameraInputController;
|
|
|
+ private Viewport viewport;
|
|
|
+ public static ModelCache modelCache;
|
|
|
|
|
|
@Override
|
|
|
public void create() {
|
|
|
Ui.initImGui();
|
|
|
- batch = new SpriteBatch();
|
|
|
+ batch = new ModelBatch();
|
|
|
+ camera = new PerspectiveCamera(80, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
|
|
|
+ camera.far = Integer.MAX_VALUE;
|
|
|
+ camera.near = 0.000000000001f;
|
|
|
+ viewport = new CustomViewport(camera);
|
|
|
+
|
|
|
image = new Texture("libgdx.png");
|
|
|
+
|
|
|
+ ModelBuilder builder = new ModelBuilder();
|
|
|
+
|
|
|
+ //TODO: Make the grids configurable
|
|
|
+ worldGrid = builder.createLineGrid(100, 100, 1, 1, new Material(ColorAttribute.createDiffuse(0.2f, 0.2f, 0.2f, 1)), 1);
|
|
|
+ levelGrid = builder.createLineGrid(35, 35, 1, 1, new Material(ColorAttribute.createDiffuse(0.3f, 0.3f, 0.3f, 1)), 1);
|
|
|
+ worldGridInstance = new ModelInstance(worldGrid);
|
|
|
+ levelGridInstance = new ModelInstance(levelGrid);
|
|
|
+ levelGridInstance.transform.setToRotation(new Vector3(1, 0, 0), 90);
|
|
|
+ levelGridInstance.transform.setTranslation(new Vector3(0, 50, 0));
|
|
|
+
|
|
|
+ cameraInputController = new CameraInputController(camera);
|
|
|
+ cameraInputController.forwardKey = Input.Keys.W;
|
|
|
+ cameraInputController.backwardKey = Input.Keys.S;
|
|
|
+ cameraInputController.rotateRightKey = -1;
|
|
|
+ cameraInputController.rotateLeftKey = -1;
|
|
|
+ Gdx.input.setInputProcessor(cameraInputController);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public void render() {
|
|
|
- ScreenUtils.clear(0.15f, 0.15f, 0.2f, 1f);
|
|
|
- batch.begin();
|
|
|
- batch.draw(image, 140, 210);
|
|
|
- batch.end();
|
|
|
+ Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
|
|
|
+ Gdx.gl.glClearColor(0.1f, 0.1f, 0.1f, 1);
|
|
|
+ Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);
|
|
|
+ Gdx.gl.glDisable(GL_CULL_FACE);
|
|
|
+
|
|
|
+ viewport.setScreenPosition(200, 200);
|
|
|
+ viewport.update(Gdx.graphics.getWidth() - 200, Gdx.graphics.getHeight(), false);
|
|
|
+
|
|
|
+ Vector3 gridPos = new Vector3(camera.position);
|
|
|
+ gridPos.x = Math.round(gridPos.x);
|
|
|
+ gridPos.y = 0;
|
|
|
+ gridPos.z = Math.round(gridPos.z);
|
|
|
|
|
|
+ worldGridInstance.transform.setTranslation(gridPos);
|
|
|
+
|
|
|
+ gridPos = new Vector3(camera.position);
|
|
|
+ gridPos.x = Math.round(gridPos.x);
|
|
|
+ gridPos.y = Math.round(gridPos.y);
|
|
|
+ gridPos.z = 0;
|
|
|
+
|
|
|
+ levelGridInstance.transform.setTranslation(gridPos);
|
|
|
+
|
|
|
+ cameraInputController.update();
|
|
|
+ batch.begin(camera);
|
|
|
+ batch.render(worldGridInstance);
|
|
|
+ batch.render(levelGridInstance);
|
|
|
+ if (modelCache != null) {
|
|
|
+ batch.render(modelCache);
|
|
|
+ }
|
|
|
+ batch.end();
|
|
|
Ui.render();
|
|
|
+ Shortcut.check();
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public void dispose() {
|
|
|
batch.dispose();
|
|
|
image.dispose();
|
|
|
+ worldGrid.dispose();
|
|
|
+ levelGrid.dispose();
|
|
|
Ui.dispose();
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void resize(int width, int height) {
|
|
|
+
|
|
|
+ }
|
|
|
}
|