Goodbye Litecraft!
parent
4b36a78a4d
commit
5a0825115a
|
@ -2,6 +2,7 @@ package com.github.halotroop.litecraft;
|
||||||
|
|
||||||
import org.joml.*;
|
import org.joml.*;
|
||||||
|
|
||||||
|
import com.github.halotroop.litecraft.render.BlockRenderer;
|
||||||
import com.github.halotroop.litecraft.save.LitecraftSave;
|
import com.github.halotroop.litecraft.save.LitecraftSave;
|
||||||
import com.github.halotroop.litecraft.screens.*;
|
import com.github.halotroop.litecraft.screens.*;
|
||||||
import com.github.halotroop.litecraft.types.block.Blocks;
|
import com.github.halotroop.litecraft.types.block.Blocks;
|
||||||
|
@ -19,7 +20,7 @@ import com.github.hydos.ginger.engine.common.io.Window;
|
||||||
import com.github.hydos.ginger.engine.common.obj.ModelLoader;
|
import com.github.hydos.ginger.engine.common.obj.ModelLoader;
|
||||||
import com.github.hydos.ginger.engine.opengl.api.GingerGL;
|
import com.github.hydos.ginger.engine.opengl.api.GingerGL;
|
||||||
import com.github.hydos.ginger.engine.opengl.postprocessing.PostProcessing;
|
import com.github.hydos.ginger.engine.opengl.postprocessing.PostProcessing;
|
||||||
import com.github.hydos.ginger.engine.opengl.render.GLRenderManager;
|
import com.github.hydos.ginger.engine.opengl.render.*;
|
||||||
import com.github.hydos.ginger.engine.opengl.render.models.GLTexturedModel;
|
import com.github.hydos.ginger.engine.opengl.render.models.GLTexturedModel;
|
||||||
import com.github.hydos.ginger.engine.opengl.utils.*;
|
import com.github.hydos.ginger.engine.opengl.utils.*;
|
||||||
|
|
||||||
|
@ -35,6 +36,7 @@ public class Litecraft extends Game
|
||||||
public int fps, ups, tps;
|
public int fps, ups, tps;
|
||||||
public Vector4i dbgStats = new Vector4i();
|
public Vector4i dbgStats = new Vector4i();
|
||||||
private long frameTimer;
|
private long frameTimer;
|
||||||
|
private BlockRenderer blockRenderer;
|
||||||
|
|
||||||
public Litecraft(int windowWidth, int windowHeight, float frameLimit)
|
public Litecraft(int windowWidth, int windowHeight, float frameLimit)
|
||||||
{
|
{
|
||||||
|
@ -141,6 +143,7 @@ public class Litecraft extends Game
|
||||||
//Set the player model
|
//Set the player model
|
||||||
GLTexturedModel playerModel = ModelLoader.loadGenericCube("block/cubes/stone/brick/stonebrick.png");
|
GLTexturedModel playerModel = ModelLoader.loadGenericCube("block/cubes/stone/brick/stonebrick.png");
|
||||||
FontType font = new FontType(GLLoader.loadFontAtlas("candara.png"), "candara.fnt");
|
FontType font = new FontType(GLLoader.loadFontAtlas("candara.png"), "candara.fnt");
|
||||||
|
this.blockRenderer = new BlockRenderer(GingerRegister.getInstance().masterRenderer.getEntityShader(), GingerRegister.getInstance().masterRenderer.getProjectionMatrix());
|
||||||
this.player = new PlayerEntity(playerModel, new Vector3f(0, 0, -3), 0, 180f, 0, new Vector3f(0.2f, 0.2f, 0.2f));
|
this.player = new PlayerEntity(playerModel, new Vector3f(0, 0, -3), 0, 180f, 0, new Vector3f(0.2f, 0.2f, 0.2f));
|
||||||
this.camera = new FirstPersonCamera(player);
|
this.camera = new FirstPersonCamera(player);
|
||||||
this.data = new GameData(this.player, this.camera, 20);
|
this.data = new GameData(this.player, this.camera, 20);
|
||||||
|
@ -210,5 +213,5 @@ public class Litecraft extends Game
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void renderScene()
|
public void renderScene()
|
||||||
{ world.render(GingerRegister.getInstance().masterRenderer.blockRenderer); }
|
{ world.render(this.blockRenderer); }
|
||||||
}
|
}
|
|
@ -12,7 +12,6 @@ import com.github.hydos.ginger.engine.common.math.Maths;
|
||||||
import com.github.hydos.ginger.engine.opengl.render.Renderer;
|
import com.github.hydos.ginger.engine.opengl.render.Renderer;
|
||||||
import com.github.hydos.ginger.engine.opengl.render.models.GLTexturedModel;
|
import com.github.hydos.ginger.engine.opengl.render.models.GLTexturedModel;
|
||||||
import com.github.hydos.ginger.engine.opengl.render.shaders.StaticShader;
|
import com.github.hydos.ginger.engine.opengl.render.shaders.StaticShader;
|
||||||
import com.github.hydos.ginger.engine.opengl.utils.GLLoader;
|
|
||||||
|
|
||||||
public class BlockRenderer extends Renderer implements WorldGenConstants
|
public class BlockRenderer extends Renderer implements WorldGenConstants
|
||||||
{
|
{
|
||||||
|
@ -25,7 +24,7 @@ public class BlockRenderer extends Renderer implements WorldGenConstants
|
||||||
shader.start();
|
shader.start();
|
||||||
shader.loadProjectionMatrix(projectionMatrix);
|
shader.loadProjectionMatrix(projectionMatrix);
|
||||||
shader.stop();
|
shader.stop();
|
||||||
this.atlasID = GLLoader.createBlockAtlas();
|
this.atlasID = VoxelLoader.createBlockAtlas();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void prepBlockInstance(RenderObject entity)
|
private void prepBlockInstance(RenderObject entity)
|
||||||
|
|
|
@ -1406,6 +1406,7 @@ public class VulkanExample
|
||||||
return indices.isComplete() && extensionsSupported && swapChainAdequate && anisotropySupported;
|
return indices.isComplete() && extensionsSupported && swapChainAdequate && anisotropySupported;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unlikely-arg-type")
|
||||||
private boolean checkDeviceExtensionSupport(VkPhysicalDevice device)
|
private boolean checkDeviceExtensionSupport(VkPhysicalDevice device)
|
||||||
{
|
{
|
||||||
try (MemoryStack stack = stackPush())
|
try (MemoryStack stack = stackPush())
|
||||||
|
|
|
@ -1,100 +0,0 @@
|
||||||
package com.github.hydos.ginger.engine.common.elements.objects;
|
|
||||||
|
|
||||||
import org.joml.Vector3f;
|
|
||||||
|
|
||||||
import com.github.halotroop.litecraft.Litecraft;
|
|
||||||
import com.github.halotroop.litecraft.util.RelativeDirection;
|
|
||||||
import com.github.halotroop.litecraft.world.gen.WorldGenConstants;
|
|
||||||
import com.github.hydos.ginger.engine.common.Constants;
|
|
||||||
import com.github.hydos.ginger.engine.common.api.GingerRegister;
|
|
||||||
import com.github.hydos.ginger.engine.common.io.Window;
|
|
||||||
import com.github.hydos.ginger.engine.opengl.render.models.GLTexturedModel;
|
|
||||||
|
|
||||||
public class Player extends RenderObject implements WorldGenConstants
|
|
||||||
{
|
|
||||||
private boolean isInAir = false;
|
|
||||||
private double upwardsSpeed;
|
|
||||||
private boolean noWeight = true; // because the force of gravity on an object's mass is called WEIGHT, not gravity
|
|
||||||
private int chunkX, chunkY, chunkZ;
|
|
||||||
|
|
||||||
public Player(GLTexturedModel model, Vector3f position, float rotX, float rotY, float rotZ, Vector3f scale)
|
|
||||||
{
|
|
||||||
super(model, position, rotX, rotY, rotZ, scale);
|
|
||||||
this.chunkX = (int) position.x >> POS_SHIFT;
|
|
||||||
this.chunkY = (int) position.y >> POS_SHIFT;
|
|
||||||
this.chunkZ = (int) position.z >> POS_SHIFT;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void move(RelativeDirection direction)
|
|
||||||
{
|
|
||||||
float ry = (float) Math.toRadians(GingerRegister.getInstance().game.data.camera.getYaw());
|
|
||||||
switch (direction)
|
|
||||||
{
|
|
||||||
case FORWARD:
|
|
||||||
default:
|
|
||||||
position.z -= Math.cos(ry) * Constants.movementSpeed;
|
|
||||||
position.x += Math.sin(ry) * Constants.movementSpeed;
|
|
||||||
break;
|
|
||||||
case BACKWARD:
|
|
||||||
position.z += Math.cos(ry) * Constants.movementSpeed;
|
|
||||||
position.x -= Math.sin(ry) * Constants.movementSpeed;
|
|
||||||
break;
|
|
||||||
case LEFT:
|
|
||||||
ry -= RIGHT_ANGLE;
|
|
||||||
position.z -= Math.cos(ry) * Constants.movementSpeed;
|
|
||||||
position.x += Math.sin(ry) * Constants.movementSpeed;
|
|
||||||
break;
|
|
||||||
case RIGHT:
|
|
||||||
ry += RIGHT_ANGLE;
|
|
||||||
position.z -= Math.cos(ry) * Constants.movementSpeed;
|
|
||||||
position.x += Math.sin(ry) * Constants.movementSpeed;
|
|
||||||
break;
|
|
||||||
case UP:
|
|
||||||
if (this.noWeight)
|
|
||||||
position.y += Constants.movementSpeed;
|
|
||||||
else this.jump();
|
|
||||||
break;
|
|
||||||
case DOWN:
|
|
||||||
position.y -= Constants.movementSpeed;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static final float RIGHT_ANGLE = (float) (Math.PI / 2f);
|
|
||||||
|
|
||||||
private void jump()
|
|
||||||
{
|
|
||||||
if (!isInAir)
|
|
||||||
{
|
|
||||||
isInAir = true;
|
|
||||||
this.upwardsSpeed = Constants.jumpPower;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getChunkX()
|
|
||||||
{ return this.chunkX; }
|
|
||||||
|
|
||||||
public int getChunkY()
|
|
||||||
{ return this.chunkY; }
|
|
||||||
|
|
||||||
public int getChunkZ()
|
|
||||||
{ return this.chunkZ; }
|
|
||||||
|
|
||||||
public void updateMovement()
|
|
||||||
{
|
|
||||||
super.increasePosition(0, (float) (upwardsSpeed * (Window.getTime())), 0);
|
|
||||||
upwardsSpeed += Constants.gravity.y() * Window.getTime(); // TODO: Implement 3D gravity
|
|
||||||
isInAir = false;
|
|
||||||
upwardsSpeed = 0;
|
|
||||||
int newChunkX = (int) position.x >> POS_SHIFT;
|
|
||||||
int newChunkY = (int) position.y >> POS_SHIFT;
|
|
||||||
int newChunkZ = (int) position.z >> POS_SHIFT;
|
|
||||||
if (newChunkX != this.chunkX || newChunkY != this.chunkY || newChunkZ != this.chunkZ)
|
|
||||||
{
|
|
||||||
Litecraft.getInstance().getWorld().updateLoadedChunks(newChunkX, newChunkY, newChunkZ);
|
|
||||||
this.chunkX = newChunkX;
|
|
||||||
this.chunkY = newChunkY;
|
|
||||||
this.chunkZ = newChunkZ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -6,7 +6,6 @@ import java.util.*;
|
||||||
import org.joml.*;
|
import org.joml.*;
|
||||||
import org.lwjgl.opengl.*;
|
import org.lwjgl.opengl.*;
|
||||||
|
|
||||||
import com.github.halotroop.litecraft.render.BlockRenderer;
|
|
||||||
import com.github.hydos.ginger.engine.common.api.GingerRegister;
|
import com.github.hydos.ginger.engine.common.api.GingerRegister;
|
||||||
import com.github.hydos.ginger.engine.common.cameras.Camera;
|
import com.github.hydos.ginger.engine.common.cameras.Camera;
|
||||||
import com.github.hydos.ginger.engine.common.elements.GuiTexture;
|
import com.github.hydos.ginger.engine.common.elements.GuiTexture;
|
||||||
|
@ -32,7 +31,6 @@ public class GLRenderManager
|
||||||
// GL11.glCullFace(GL11.GL_BACK);
|
// GL11.glCullFace(GL11.GL_BACK);
|
||||||
}
|
}
|
||||||
|
|
||||||
public BlockRenderer blockRenderer;
|
|
||||||
private StaticShader entityShader;
|
private StaticShader entityShader;
|
||||||
public GLObjectRenderer entityRenderer;
|
public GLObjectRenderer entityRenderer;
|
||||||
private GuiShader guiShader;
|
private GuiShader guiShader;
|
||||||
|
@ -48,8 +46,7 @@ public class GLRenderManager
|
||||||
{
|
{
|
||||||
createProjectionMatrix();
|
createProjectionMatrix();
|
||||||
entityShader = new StaticShader();
|
entityShader = new StaticShader();
|
||||||
blockRenderer = new BlockRenderer(entityShader, projectionMatrix);
|
entityRenderer = new GLObjectRenderer(getEntityShader(), projectionMatrix);
|
||||||
entityRenderer = new GLObjectRenderer(entityShader, projectionMatrix);
|
|
||||||
guiShader = new GuiShader();
|
guiShader = new GuiShader();
|
||||||
guiRenderer = new GLGuiRenderer(guiShader);
|
guiRenderer = new GLGuiRenderer(guiShader);
|
||||||
normalRenderer = new GLNormalMappingRenderer(projectionMatrix);
|
normalRenderer = new GLNormalMappingRenderer(projectionMatrix);
|
||||||
|
@ -58,7 +55,7 @@ public class GLRenderManager
|
||||||
|
|
||||||
public void cleanUp()
|
public void cleanUp()
|
||||||
{
|
{
|
||||||
entityShader.cleanUp();
|
getEntityShader().cleanUp();
|
||||||
guiRenderer.cleanUp();
|
guiRenderer.cleanUp();
|
||||||
shadowMapRenderer.cleanUp();
|
shadowMapRenderer.cleanUp();
|
||||||
normalRenderer.cleanUp();
|
normalRenderer.cleanUp();
|
||||||
|
@ -130,12 +127,12 @@ public class GLRenderManager
|
||||||
for (RenderObject entity : entities)
|
for (RenderObject entity : entities)
|
||||||
{ processEntity(entity); }
|
{ processEntity(entity); }
|
||||||
entityRenderer.prepare();
|
entityRenderer.prepare();
|
||||||
entityShader.start();
|
getEntityShader().start();
|
||||||
entityShader.loadSkyColour(Window.getColour());
|
getEntityShader().loadSkyColour(Window.getColour());
|
||||||
entityShader.loadLights(lights);
|
getEntityShader().loadLights(lights);
|
||||||
entityShader.loadViewMatrix(camera);
|
getEntityShader().loadViewMatrix(camera);
|
||||||
entityRenderer.render(this.entities);
|
entityRenderer.render(this.entities);
|
||||||
entityShader.stop();
|
getEntityShader().stop();
|
||||||
this.entities.clear();
|
this.entities.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -172,4 +169,9 @@ public class GLRenderManager
|
||||||
shadowMapRenderer.render(entities, sun);
|
shadowMapRenderer.render(entities, sun);
|
||||||
entities.clear();
|
entities.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public StaticShader getEntityShader()
|
||||||
|
{
|
||||||
|
return entityShader;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,6 @@ import java.util.*;
|
||||||
import org.joml.Matrix4f;
|
import org.joml.Matrix4f;
|
||||||
import org.lwjgl.opengl.*;
|
import org.lwjgl.opengl.*;
|
||||||
|
|
||||||
import com.github.halotroop.litecraft.types.block.BlockInstance;
|
|
||||||
import com.github.hydos.ginger.engine.common.api.GingerRegister;
|
import com.github.hydos.ginger.engine.common.api.GingerRegister;
|
||||||
import com.github.hydos.ginger.engine.common.elements.objects.RenderObject;
|
import com.github.hydos.ginger.engine.common.elements.objects.RenderObject;
|
||||||
import com.github.hydos.ginger.engine.common.io.Window;
|
import com.github.hydos.ginger.engine.common.io.Window;
|
||||||
|
@ -84,7 +83,7 @@ public class GLObjectRenderer extends Renderer
|
||||||
GL30.glBindVertexArray(0);
|
GL30.glBindVertexArray(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void render(List<BlockInstance> renderList)
|
public void render(List<RenderObject> renderList)
|
||||||
{
|
{
|
||||||
prepare();
|
prepare();
|
||||||
shader.start();
|
shader.start();
|
||||||
|
|
|
@ -6,7 +6,6 @@ import java.util.*;
|
||||||
import org.lwjgl.BufferUtils;
|
import org.lwjgl.BufferUtils;
|
||||||
import org.lwjgl.opengl.*;
|
import org.lwjgl.opengl.*;
|
||||||
|
|
||||||
import com.github.halotroop.litecraft.types.block.*;
|
|
||||||
import com.github.hydos.ginger.engine.common.io.Window;
|
import com.github.hydos.ginger.engine.common.io.Window;
|
||||||
import com.github.hydos.ginger.engine.opengl.render.models.RawModel;
|
import com.github.hydos.ginger.engine.opengl.render.models.RawModel;
|
||||||
import com.github.hydos.ginger.engine.opengl.render.texture.Image;
|
import com.github.hydos.ginger.engine.opengl.render.texture.Image;
|
||||||
|
@ -105,45 +104,6 @@ public class GLLoader
|
||||||
public static int loadTexture(String path)
|
public static int loadTexture(String path)
|
||||||
{ return loadTextureDirectly("/textures/" + path); }
|
{ return loadTextureDirectly("/textures/" + path); }
|
||||||
|
|
||||||
public static int createBlockAtlas()
|
|
||||||
{
|
|
||||||
int width = 16;
|
|
||||||
int height = 16;
|
|
||||||
//Prepare the atlas texture and gen it
|
|
||||||
int atlasId = GL11.glGenTextures();
|
|
||||||
//Bind it to openGL
|
|
||||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, atlasId);
|
|
||||||
//Apply the settings for the texture
|
|
||||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST);
|
|
||||||
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST);
|
|
||||||
//Fill the image with blank image data
|
|
||||||
GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGBA, width * 2, height * 2, 0, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, (ByteBuffer) null);
|
|
||||||
long maxX = Math.round(Math.sqrt(Blocks.blocks.size()));
|
|
||||||
int currentX = 0;
|
|
||||||
int currentY = 0;
|
|
||||||
for (Block block : Blocks.blocks)
|
|
||||||
{
|
|
||||||
//just in case
|
|
||||||
if (!block.texture.equals("DONTLOAD"))
|
|
||||||
{
|
|
||||||
System.out.println(block.texture);
|
|
||||||
block.updateBlockModelData();
|
|
||||||
if (currentX > maxX)
|
|
||||||
{
|
|
||||||
currentX = 0;
|
|
||||||
currentY--;
|
|
||||||
}
|
|
||||||
GL11.glTexSubImage2D(GL11.GL_TEXTURE_2D, 0,
|
|
||||||
currentX * width, currentY * height,
|
|
||||||
width, height,
|
|
||||||
GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE,
|
|
||||||
block.model.getTexture().getTexture().getImage());
|
|
||||||
currentX++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return atlasId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static int loadTextureDirectly(String path)
|
public static int loadTextureDirectly(String path)
|
||||||
{
|
{
|
||||||
int textureID = GL11.glGenTextures();
|
int textureID = GL11.glGenTextures();
|
||||||
|
|
Loading…
Reference in New Issue