mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-16 02:45:13 -04:00
Fix bugs with previous commit
This commit is contained in:
parent
38cdf8e1bb
commit
122eeaaf3a
@ -28,6 +28,7 @@ public class GameWindow {
|
||||
private static final Object waiter = new Object();
|
||||
private static final LinkedBlockingQueue<Runnable> queue = new LinkedBlockingQueue<>();
|
||||
private static Connection currentConnection;
|
||||
private static boolean running;
|
||||
|
||||
public static void prepare() {
|
||||
CountDownLatch latch = new CountDownLatch(1);
|
||||
@ -46,12 +47,21 @@ public class GameWindow {
|
||||
}
|
||||
|
||||
private static void mainLoop() {
|
||||
try {
|
||||
queue.take().run();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
while (!running) {
|
||||
try {
|
||||
queue.take().run();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
while (!glfwWindowShouldClose(openGLWindow.getWindowId())) {
|
||||
if (queue.size() > 0) {
|
||||
try {
|
||||
queue.take().run();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
glLoadIdentity();
|
||||
glfwPollEvents();
|
||||
@ -77,13 +87,12 @@ public class GameWindow {
|
||||
return openGLWindow;
|
||||
}
|
||||
|
||||
public static Connection getCurrentConnection() {
|
||||
return currentConnection;
|
||||
}
|
||||
|
||||
public static void setCurrentConnection(Connection currentConnection) {
|
||||
if (GameWindow.currentConnection == null) {
|
||||
queue.add(openGLWindow::start);
|
||||
queue.add(() -> {
|
||||
running = true;
|
||||
openGLWindow.start();
|
||||
});
|
||||
}
|
||||
openGLWindow.setCurrentConnection(currentConnection);
|
||||
GameWindow.currentConnection = currentConnection;
|
||||
@ -91,4 +100,8 @@ public class GameWindow {
|
||||
waiter.notifyAll();
|
||||
}
|
||||
}
|
||||
|
||||
public static void queue(Runnable runnable) {
|
||||
queue.add(runnable);
|
||||
}
|
||||
}
|
||||
|
@ -46,7 +46,7 @@ public class BlockModelLoader {
|
||||
|
||||
TextureLoader textureLoader = new TextureLoader(getTextures(blockModels), tints);
|
||||
|
||||
applyTextures( blockModels, textureLoader);
|
||||
applyTextures(blockModels, textureLoader);
|
||||
HashMap<String, BlockModelInterface> modelMap = loadBlocks(data, blockModels);
|
||||
return new Pair<>(modelMap, textureLoader.getTextureID());
|
||||
}
|
||||
@ -92,18 +92,15 @@ public class BlockModelLoader {
|
||||
}
|
||||
}
|
||||
|
||||
private static HashMap<String, float[]> readTints(JsonObject json) {
|
||||
private static HashMap<String, float[]> readTints(JsonObject textures) {
|
||||
HashMap<String, float[]> result = new HashMap<>();
|
||||
if (json.has("tinted_textures")) {
|
||||
JsonObject textures = json.get("tinted_textures").getAsJsonObject();
|
||||
for (String textureName : textures.keySet()) {
|
||||
ArrayFloatList colorValues = new ArrayFloatList();
|
||||
for (JsonElement colorValue : textures.get(textureName).getAsJsonArray()) {
|
||||
colorValues.add(colorValue.getAsFloat());
|
||||
}
|
||||
float[] color = colorValues.toArray();
|
||||
result.put(textureName, color);
|
||||
for (String textureName : textures.keySet()) {
|
||||
ArrayFloatList colorValues = new ArrayFloatList();
|
||||
for (JsonElement colorValue : textures.get(textureName).getAsJsonArray()) {
|
||||
colorValues.add(colorValue.getAsFloat());
|
||||
}
|
||||
float[] color = colorValues.toArray();
|
||||
result.put(textureName, color);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
@ -129,7 +129,7 @@ public class SubBlock {
|
||||
}
|
||||
|
||||
private ArrayFloatList prepareFace(FaceOrientation faceDirection, BlockPosition position) {
|
||||
if (! uv.get(faceDirection).exists()) {
|
||||
if (!uv.containsKey(faceDirection) || !uv.get(faceDirection).exists()) {
|
||||
return null;
|
||||
}
|
||||
ArrayFloatList result = new ArrayFloatList();
|
||||
|
@ -14,7 +14,6 @@
|
||||
package de.bixilon.minosoft.render.texture;
|
||||
|
||||
import com.google.gson.JsonArray;
|
||||
import de.bixilon.minosoft.render.blockModels.BlockModelLoader;
|
||||
import de.bixilon.minosoft.render.blockModels.Face.RenderConstants;
|
||||
import org.apache.commons.collections.primitives.ArrayFloatList;
|
||||
|
||||
@ -73,6 +72,6 @@ public class InFaceUV {
|
||||
}
|
||||
|
||||
public boolean exists() {
|
||||
return realU1 == -1;
|
||||
return realU1 >= 0;
|
||||
}
|
||||
}
|
||||
|
@ -16,6 +16,7 @@ package de.bixilon.minosoft.render.texture;
|
||||
import de.bixilon.minosoft.config.StaticConfiguration;
|
||||
import de.bixilon.minosoft.data.assets.AssetsManager;
|
||||
import de.bixilon.minosoft.logging.Log;
|
||||
import de.bixilon.minosoft.render.GameWindow;
|
||||
import de.bixilon.minosoft.render.blockModels.Face.RenderConstants;
|
||||
import de.matthiasmann.twl.utils.PNGDecoder;
|
||||
|
||||
@ -29,6 +30,7 @@ import java.nio.ByteBuffer;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
|
||||
import static org.lwjgl.opengl.GL11.*;
|
||||
import static org.lwjgl.opengl.GL30.glGenerateMipmap;
|
||||
@ -39,8 +41,10 @@ public class TextureLoader {
|
||||
private int textureID;
|
||||
private float step;
|
||||
private int totalTextures = 0;
|
||||
private final CountDownLatch countDownLatch;
|
||||
|
||||
public TextureLoader(HashSet<String> textures, HashMap<String, float[]> tints) {
|
||||
countDownLatch = new CountDownLatch(1);
|
||||
textureCoordinates = new HashMap<>();
|
||||
loadTextures(textures, tints);
|
||||
combineTextures();
|
||||
@ -48,7 +52,7 @@ public class TextureLoader {
|
||||
PNGDecoder decoder = new PNGDecoder(new FileInputStream(StaticConfiguration.HOME_DIRECTORY + "assets/allTextures.png"));
|
||||
ByteBuffer buf = ByteBuffer.allocateDirect(decoder.getWidth() * decoder.getHeight() * 4);
|
||||
decoder.decode(buf, decoder.getWidth() * 4, PNGDecoder.Format.RGBA);
|
||||
textureID = bindTexture(buf, decoder.getWidth(), decoder.getHeight());
|
||||
bindTexture(buf, decoder.getWidth(), decoder.getHeight());
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
System.exit(5);
|
||||
@ -116,17 +120,25 @@ public class TextureLoader {
|
||||
step = (float) 1 / (float) imageLength * RenderConstants.TEXTURE_PACK_RESOLUTION;
|
||||
}
|
||||
|
||||
private int bindTexture(ByteBuffer buf, int width, int height) {
|
||||
private void bindTexture(ByteBuffer buf, int width, int height) {
|
||||
buf.flip();
|
||||
int textureID = glGenTextures();
|
||||
glBindTexture(GL_TEXTURE_2D, textureID);
|
||||
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, buf);
|
||||
glGenerateMipmap(GL_TEXTURE_2D);
|
||||
//disable smoothing out of textures
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||
return textureID;
|
||||
GameWindow.queue(() -> {
|
||||
int textureID = glGenTextures();
|
||||
glBindTexture(GL_TEXTURE_2D, textureID);
|
||||
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, buf);
|
||||
glGenerateMipmap(GL_TEXTURE_2D);
|
||||
//disable smoothing out of textures
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||
this.textureID = textureID;
|
||||
countDownLatch.countDown();
|
||||
});
|
||||
try {
|
||||
countDownLatch.await();
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public float getTexture(String textureName) {
|
||||
|
47
util/.idea/workspace.xml
generated
47
util/.idea/workspace.xml
generated
@ -1,17 +1,26 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="BranchesTreeState">
|
||||
<expand>
|
||||
<path>
|
||||
<item name="ROOT" type="e8cecc67:BranchNodeDescriptor" />
|
||||
<item name="LOCAL_ROOT" type="e8cecc67:BranchNodeDescriptor" />
|
||||
</path>
|
||||
<path>
|
||||
<item name="ROOT" type="e8cecc67:BranchNodeDescriptor" />
|
||||
<item name="REMOTE_ROOT" type="e8cecc67:BranchNodeDescriptor" />
|
||||
</path>
|
||||
<path>
|
||||
<item name="ROOT" type="e8cecc67:BranchNodeDescriptor" />
|
||||
<item name="REMOTE_ROOT" type="e8cecc67:BranchNodeDescriptor" />
|
||||
<item name="GROUP_NODE:origin" type="e8cecc67:BranchNodeDescriptor" />
|
||||
</path>
|
||||
</expand>
|
||||
<select />
|
||||
</component>
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="34edf7e9-254a-4d39-b77b-418e1a3041e3" name="Default Changelist" comment="">
|
||||
<change beforePath="$PROJECT_DIR$/../src/main/java/de/bixilon/minosoft/data/mappings/versions/VersionMapping.java" beforeDir="false" afterPath="$PROJECT_DIR$/../src/main/java/de/bixilon/minosoft/data/mappings/versions/VersionMapping.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/../src/main/java/de/bixilon/minosoft/render/WorldRenderer.java" beforeDir="false" afterPath="$PROJECT_DIR$/../src/main/java/de/bixilon/minosoft/render/WorldRenderer.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/../src/main/java/de/bixilon/minosoft/render/blockModels/BlockModelLoader.java" beforeDir="false" afterPath="$PROJECT_DIR$/../src/main/java/de/bixilon/minosoft/render/blockModels/BlockModelLoader.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/../src/main/java/de/bixilon/minosoft/render/blockModels/subBlocks/SubBlock.java" beforeDir="false" afterPath="$PROJECT_DIR$/../src/main/java/de/bixilon/minosoft/render/blockModels/subBlocks/SubBlock.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/../src/main/java/de/bixilon/minosoft/render/movement/CollisionHandler.java" beforeDir="false" afterPath="$PROJECT_DIR$/../src/main/java/de/bixilon/minosoft/render/movement/CollisionHandler.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/../src/main/java/de/bixilon/minosoft/render/texture/InFaceUV.java" beforeDir="false" afterPath="$PROJECT_DIR$/../src/main/java/de/bixilon/minosoft/render/texture/InFaceUV.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/../src/main/java/de/bixilon/minosoft/render/utility/AdditionalMath.java" beforeDir="false" afterPath="$PROJECT_DIR$/../src/main/java/de/bixilon/minosoft/render/utility/AdditionalMath.java" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/blockModelCombinder.py" beforeDir="false" afterPath="$PROJECT_DIR$/blockModelGenerator.py" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/version_mappings_generator.py" beforeDir="false" afterPath="$PROJECT_DIR$/version_mappings_generator.py" afterDir="false" />
|
||||
</list>
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
@ -47,6 +56,7 @@
|
||||
<component name="PropertiesComponent">
|
||||
<property name="RunOnceActivity.OpenProjectViewOnStart" value="true" />
|
||||
<property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
|
||||
<property name="TERMINAL_CUSTOM_COMMANDS_GOT_IT" value="true" />
|
||||
<property name="WebServerToolWindowFactoryState" value="false" />
|
||||
<property name="android.sdk.path" value="/opt/AndroidSDK" />
|
||||
<property name="aspect.path.notification.shown" value="true" />
|
||||
@ -146,6 +156,7 @@
|
||||
</entry>
|
||||
</map>
|
||||
</option>
|
||||
<option name="oldMeFiltersMigrated" value="true" />
|
||||
</component>
|
||||
<component name="WindowStateProjectService">
|
||||
<state x="444" y="1168" key="#Project_Structure" timestamp="1605462076420">
|
||||
@ -156,25 +167,25 @@
|
||||
<screen x="0" y="1050" width="1920" height="1080" />
|
||||
</state>
|
||||
<state x="419" y="1248" key="#com.intellij.execution.impl.EditConfigurationsDialog/0.40.1680.1010/0.1050.1920.1080/1680.26.1280.1024@0.1050.1920.1080" timestamp="1605462499568" />
|
||||
<state width="1259" height="329" key="GridCell.Tab.0.bottom" timestamp="1605648137613">
|
||||
<state width="1259" height="267" key="GridCell.Tab.0.bottom" timestamp="1605907262411">
|
||||
<screen x="0" y="0" width="1280" height="994" />
|
||||
</state>
|
||||
<state width="1259" height="329" key="GridCell.Tab.0.bottom/-1360.107.1360.738/0.0.1280.994@0.0.1280.994" timestamp="1605648137613" />
|
||||
<state width="1259" height="267" key="GridCell.Tab.0.bottom/-1360.107.1360.738/0.0.1280.994@0.0.1280.994" timestamp="1605907262411" />
|
||||
<state width="1874" height="281" key="GridCell.Tab.0.bottom/0.40.1680.1010/0.1050.1920.1080/1680.26.1280.1024@0.1050.1920.1080" timestamp="1605462580595" />
|
||||
<state width="1259" height="329" key="GridCell.Tab.0.center" timestamp="1605648137613">
|
||||
<state width="1259" height="267" key="GridCell.Tab.0.center" timestamp="1605907262411">
|
||||
<screen x="0" y="0" width="1280" height="994" />
|
||||
</state>
|
||||
<state width="1259" height="329" key="GridCell.Tab.0.center/-1360.107.1360.738/0.0.1280.994@0.0.1280.994" timestamp="1605648137613" />
|
||||
<state width="1259" height="267" key="GridCell.Tab.0.center/-1360.107.1360.738/0.0.1280.994@0.0.1280.994" timestamp="1605907262411" />
|
||||
<state width="1874" height="281" key="GridCell.Tab.0.center/0.40.1680.1010/0.1050.1920.1080/1680.26.1280.1024@0.1050.1920.1080" timestamp="1605462580595" />
|
||||
<state width="1259" height="329" key="GridCell.Tab.0.left" timestamp="1605648137613">
|
||||
<state width="1259" height="267" key="GridCell.Tab.0.left" timestamp="1605907262410">
|
||||
<screen x="0" y="0" width="1280" height="994" />
|
||||
</state>
|
||||
<state width="1259" height="329" key="GridCell.Tab.0.left/-1360.107.1360.738/0.0.1280.994@0.0.1280.994" timestamp="1605648137613" />
|
||||
<state width="1259" height="267" key="GridCell.Tab.0.left/-1360.107.1360.738/0.0.1280.994@0.0.1280.994" timestamp="1605907262410" />
|
||||
<state width="1874" height="281" key="GridCell.Tab.0.left/0.40.1680.1010/0.1050.1920.1080/1680.26.1280.1024@0.1050.1920.1080" timestamp="1605462580595" />
|
||||
<state width="1259" height="329" key="GridCell.Tab.0.right" timestamp="1605648137613">
|
||||
<state width="1259" height="267" key="GridCell.Tab.0.right" timestamp="1605907262411">
|
||||
<screen x="0" y="0" width="1280" height="994" />
|
||||
</state>
|
||||
<state width="1259" height="329" key="GridCell.Tab.0.right/-1360.107.1360.738/0.0.1280.994@0.0.1280.994" timestamp="1605648137613" />
|
||||
<state width="1259" height="267" key="GridCell.Tab.0.right/-1360.107.1360.738/0.0.1280.994@0.0.1280.994" timestamp="1605907262411" />
|
||||
<state width="1874" height="281" key="GridCell.Tab.0.right/0.40.1680.1010/0.1050.1920.1080/1680.26.1280.1024@0.1050.1920.1080" timestamp="1605462580595" />
|
||||
<state width="1259" height="329" key="GridCell.Tab.1.bottom" timestamp="1605648130133">
|
||||
<screen x="0" y="0" width="1280" height="994" />
|
||||
@ -202,7 +213,7 @@
|
||||
<breakpoints>
|
||||
<line-breakpoint enabled="true" suspend="THREAD" type="python-line">
|
||||
<url>file://$PROJECT_DIR$/version_mappings_generator.py</url>
|
||||
<line>281</line>
|
||||
<line>305</line>
|
||||
<option name="timeStamp" value="1" />
|
||||
</line-breakpoint>
|
||||
</breakpoints>
|
||||
|
Loading…
x
Reference in New Issue
Block a user