Started working on the worker for lighting
This commit is contained in:
parent
0098d22927
commit
878410abbf
|
|
@ -42,6 +42,7 @@ public class Main
|
|||
public static AudioEngine audio;
|
||||
public static Random rand = new Random();
|
||||
public static Menu menu;
|
||||
public static Worker worker;
|
||||
public static boolean game_paused = false;
|
||||
public static int tickrate = 10;
|
||||
|
||||
|
|
@ -61,7 +62,8 @@ public class Main
|
|||
|
||||
public static void main(String[] args) throws IOException
|
||||
{
|
||||
Worker worker = new Worker();
|
||||
worker = new Worker();
|
||||
worker.start();
|
||||
|
||||
// Initialize cheats, settings, and environment
|
||||
Environment.init(args);
|
||||
|
|
|
|||
|
|
@ -2,12 +2,16 @@ package projectzombie.display.lighting;
|
|||
|
||||
import static org.lwjgl.opengl.GL11.GL_RGBA;
|
||||
import static org.lwjgl.opengl.GL11.GL_UNSIGNED_BYTE;
|
||||
import static org.lwjgl.opengl.GL12.GL_TEXTURE_3D;
|
||||
import static org.lwjgl.opengl.GL12.glTexImage3D;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.Arrays;
|
||||
|
||||
import org.lwjgl.opengl.GL33;
|
||||
|
||||
import bdf.types.BdfNamedList;
|
||||
import bdf.types.BdfObject;
|
||||
import gl_engine.MathHelpers;
|
||||
import gl_engine.range.Range4i;
|
||||
import gl_engine.vec.Vec2i;
|
||||
|
|
@ -56,6 +60,66 @@ public class TileLighting
|
|||
return;
|
||||
}
|
||||
|
||||
int size = (Chunk.RENDER_DISTANCE * 2 + 1) * 16;
|
||||
float[] lights = new float[size * size * 3];
|
||||
|
||||
for(int cx=-Chunk.RENDER_DISTANCE;cx<=Chunk.RENDER_DISTANCE;cx++) {
|
||||
for(int cy=-Chunk.RENDER_DISTANCE;cy<=Chunk.RENDER_DISTANCE;cy++)
|
||||
{
|
||||
Vec2i cpos = new Vec2i(
|
||||
cx + MathHelpers.floor(player.pos.x / 16),
|
||||
cy + MathHelpers.floor(player.pos.y / 16));
|
||||
|
||||
Chunk chunk = layer.chunks.get(cpos);
|
||||
|
||||
for(int x=0;x<16;x++) {
|
||||
for(int y=0;y<16;y++)
|
||||
{
|
||||
Vec2i tpos = new Vec2i(x, y);
|
||||
int tid = tpos.getId(Chunk.CHUNK_SIZE);
|
||||
|
||||
TileState ft = chunk.getFrontTile(tid);
|
||||
TileState bt = chunk.getBackTile(tid);
|
||||
|
||||
float transparency = (float)MathHelpers.biggest(
|
||||
ft.tile.getLightDissipation(ft),
|
||||
bt.tile.getLightDissipation(bt));
|
||||
|
||||
float lightSrc = (float)MathHelpers.biggest(
|
||||
ft.tile.getLightLevel(ft, tpos),
|
||||
bt.tile.getLightLevel(bt, tpos));
|
||||
|
||||
float lightSun = ft.tile.passNaturalLight && bt.tile.passNaturalLight ? 1 : 0;
|
||||
|
||||
int id = ((cx * 16 + x + Chunk.RENDER_DISTANCE * 16) +
|
||||
(cy * 16 + y + Chunk.RENDER_DISTANCE * 16) * size) * 3;
|
||||
|
||||
lights[id+0] = lightSun;
|
||||
lights[id+1] = lightSrc;
|
||||
lights[id+2] = transparency;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Main.worker.processLighting(lights, size, size);
|
||||
}
|
||||
|
||||
public static void updateLighting(BdfObject bdf)
|
||||
{
|
||||
BdfNamedList nl = bdf.getNamedList();
|
||||
float[] light = nl.get("light").getFloatArray();
|
||||
int width = nl.get("w").getInteger();
|
||||
int height = nl.get("h").getInteger();
|
||||
|
||||
float[] pixels = new float[width*height*3];
|
||||
|
||||
for(int i=0;i<width*height;i++) {
|
||||
pixels[i*3+0] = light[i*2+0];
|
||||
pixels[i*3+1] = light[i*2+1];
|
||||
}
|
||||
|
||||
GL33.glBindTexture(GL33.GL_TEXTURE_2D, lightmap);
|
||||
GL33.glTexImage2D(GL33.GL_TEXTURE_2D, 0, GL33.GL_RGB, width, height, 0, GL33.GL_RGB, GL33.GL_FLOAT, light);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,8 +11,9 @@ import bdf.data.BdfDatabase;
|
|||
import bdf.types.BdfIndent;
|
||||
import bdf.types.BdfNamedList;
|
||||
import bdf.types.BdfObject;
|
||||
import projectzombie.display.lighting.TileLighting;
|
||||
|
||||
public class Worker
|
||||
public class Worker extends Thread
|
||||
{
|
||||
ProcessBuilder pb;
|
||||
Process process;
|
||||
|
|
@ -24,56 +25,78 @@ public class Worker
|
|||
{
|
||||
pb = new ProcessBuilder("java", "-jar", "worker.jar");
|
||||
pb.redirectError(Redirect.INHERIT);
|
||||
pb.redirectOutput(Redirect.PIPE);
|
||||
pb.redirectInput(Redirect.PIPE);
|
||||
|
||||
process = pb.start();
|
||||
|
||||
in = process.getInputStream();
|
||||
out = process.getOutputStream();
|
||||
}
|
||||
|
||||
byte[] lights = new byte[] {
|
||||
(byte)0, (byte)0, (byte)50,
|
||||
(byte)0, (byte)0, (byte)50,
|
||||
(byte)0, (byte)0, (byte)50,
|
||||
(byte)0, (byte)0, (byte)50,
|
||||
|
||||
(byte)0, (byte)0, (byte)50,
|
||||
(byte)255, (byte)0, (byte)50,
|
||||
(byte)0, (byte)0, (byte)50,
|
||||
(byte)0, (byte)0, (byte)50,
|
||||
|
||||
(byte)0, (byte)0, (byte)50,
|
||||
(byte)0, (byte)0, (byte)50,
|
||||
(byte)0, (byte)0, (byte)50,
|
||||
(byte)0, (byte)0, (byte)50,
|
||||
|
||||
(byte)0, (byte)0, (byte)50,
|
||||
(byte)0, (byte)0, (byte)50,
|
||||
(byte)0, (byte)0, (byte)50,
|
||||
(byte)0, (byte)255, (byte)50,
|
||||
};
|
||||
|
||||
public void processLighting(float[] lights, int width, int height)
|
||||
{
|
||||
BdfObject bdf = new BdfObject();
|
||||
BdfNamedList nl = bdf.getNamedList();
|
||||
nl.set("task", BdfObject.withString("light"));
|
||||
nl.set("light", BdfObject.withByteArray(lights));
|
||||
nl.set("w", BdfObject.withInteger(4));
|
||||
nl.set("h", BdfObject.withInteger(4));
|
||||
nl.set("light", BdfObject.withFloatArray(lights));
|
||||
nl.set("w", BdfObject.withInteger(width));
|
||||
nl.set("h", BdfObject.withInteger(height));
|
||||
|
||||
byte[] data = bdf.serialize().getBytes();
|
||||
|
||||
ByteBuffer size_buff = ByteBuffer.allocate(4);
|
||||
size_buff.putInt(0, data.length);
|
||||
|
||||
out.write(size_buff.array());
|
||||
out.write(data);
|
||||
out.write('\n');
|
||||
try
|
||||
{
|
||||
out.write(size_buff.array());
|
||||
out.write(data);
|
||||
out.write('\n');
|
||||
out.flush();
|
||||
}
|
||||
|
||||
in.read(size_buff.array());
|
||||
data = new byte[size_buff.getInt(0)];
|
||||
in.read(data);
|
||||
in.read(new byte[1]);
|
||||
catch(IOException e)
|
||||
{
|
||||
|
||||
bdf = new BdfObject(new BdfDatabase(data));
|
||||
System.out.println(bdf.serializeHumanReadable(new BdfIndent(" ", "\n")));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
super.run();
|
||||
|
||||
try
|
||||
{
|
||||
while(true)
|
||||
{
|
||||
ByteBuffer size_buff = ByteBuffer.allocate(4);
|
||||
byte[] data;
|
||||
|
||||
in.read(size_buff.array());
|
||||
data = new byte[size_buff.getInt(0)];
|
||||
in.read(data);
|
||||
in.read(new byte[1]);
|
||||
|
||||
BdfObject bdf = new BdfObject(new BdfDatabase(data));
|
||||
BdfNamedList nl = bdf.getNamedList();
|
||||
|
||||
switch(nl.get("task").getString())
|
||||
{
|
||||
case "light":
|
||||
TileLighting.updateLighting(bdf);
|
||||
break;
|
||||
}
|
||||
|
||||
System.out.println("Hello");
|
||||
}
|
||||
}
|
||||
|
||||
catch(IOException e)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
BIN
worker.jar
BIN
worker.jar
Binary file not shown.
Loading…
Reference in New Issue