From 339e11d3ac96e9a7d69299bc5937913d9c35ab4d Mon Sep 17 00:00:00 2001 From: OLEGSHA Date: Wed, 6 Jan 2021 21:44:54 +0300 Subject: [PATCH] Fixed several miscellaneous bugs - Recolored Test:Stones to better match granite textures - Selection box restored - Controls no longer get stuck after player entity is reloaded - Moved test spawn location a little down so chunks would load conveniently - Moved test spawn variable into TestContent --- .../client/graphics/world/LayerWorld.java | 2 +- .../progressia/server/PlayerManager.java | 6 +----- .../windcorp/progressia/test/TestContent.java | 2 ++ .../progressia/test/TestPlayerControls.java | 18 +++++++++++++----- .../assets/textures/tiles/stones.png | Bin 7979 -> 8457 bytes 5 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/world/LayerWorld.java b/src/main/java/ru/windcorp/progressia/client/graphics/world/LayerWorld.java index 22e1b9a..49e3585 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/world/LayerWorld.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/world/LayerWorld.java @@ -158,7 +158,7 @@ public class LayerWorld extends Layer { final float f = 1e-2f; final float scale = 1 - f/2; - final Vec4 color = new Vec4(1, 1, 1, 1).mul(0); + final Vec4 color = new Vec4(0, 0, 0, 1); for (float phi = 0; phi < 2*FloatMathUtils.PI_F; phi += FloatMathUtils.PI_F/2) { Mat4 rot = new Mat4().identity().rotateZ(phi).scale(scale); diff --git a/src/main/java/ru/windcorp/progressia/server/PlayerManager.java b/src/main/java/ru/windcorp/progressia/server/PlayerManager.java index 86e14ce..ec352b1 100644 --- a/src/main/java/ru/windcorp/progressia/server/PlayerManager.java +++ b/src/main/java/ru/windcorp/progressia/server/PlayerManager.java @@ -5,8 +5,6 @@ import java.util.Collection; import java.util.Collections; import glm.vec._2.Vec2; -import glm.vec._3.Vec3; -import glm.vec._3.i.Vec3i; import ru.windcorp.progressia.common.util.crash.CrashReports; import ru.windcorp.progressia.common.world.entity.EntityData; import ru.windcorp.progressia.common.world.entity.EntityDataRegistry; @@ -30,8 +28,6 @@ public class PlayerManager { this.players.add(player); } - private static final Vec3i SPAWN = new Vec3i(8, 8, 900); - public EntityData conjurePlayerEntity(String login) { // TODO Live up to the name if (TestContent.PLAYER_LOGIN.equals(login)) { @@ -46,7 +42,7 @@ public class PlayerManager { EntityData player = EntityDataRegistry.getInstance().create("Test:Player"); player.setEntityId(TestContent.PLAYER_ENTITY_ID); - player.setPosition(new Vec3(SPAWN.x, SPAWN.y, SPAWN.z)); + player.setPosition(TestContent.SPAWN); player.setDirection(new Vec2( Math.toRadians(40), Math.toRadians(10) )); diff --git a/src/main/java/ru/windcorp/progressia/test/TestContent.java b/src/main/java/ru/windcorp/progressia/test/TestContent.java index b29905b..9aff4f4 100644 --- a/src/main/java/ru/windcorp/progressia/test/TestContent.java +++ b/src/main/java/ru/windcorp/progressia/test/TestContent.java @@ -7,6 +7,7 @@ import java.util.function.Consumer; import org.lwjgl.glfw.GLFW; +import glm.vec._3.Vec3; import glm.vec._3.i.Vec3i; import ru.windcorp.progressia.client.ClientState; import ru.windcorp.progressia.client.audio.SoundEffect; @@ -36,6 +37,7 @@ public class TestContent { public static final String PLAYER_LOGIN = "Sasha"; public static final long PLAYER_ENTITY_ID = 0x42; public static final long STATIE_ENTITY_ID = 0xDEADBEEF; + public static final Vec3 SPAWN = new Vec3(8, 8, 880); public static void registerContent() { registerWorldContent(); diff --git a/src/main/java/ru/windcorp/progressia/test/TestPlayerControls.java b/src/main/java/ru/windcorp/progressia/test/TestPlayerControls.java index 8aea90f..58dcadb 100644 --- a/src/main/java/ru/windcorp/progressia/test/TestPlayerControls.java +++ b/src/main/java/ru/windcorp/progressia/test/TestPlayerControls.java @@ -30,7 +30,7 @@ public class TestPlayerControls { private TestPlayerControls() {} private static final double MODE_SWITCH_MAX_DELAY = 300 * Units.MILLISECONDS; - private static final double MIN_JUMP_DELAY = 400 * Units.MILLISECONDS; + private static final double MIN_JUMP_DELAY = 300 * Units.MILLISECONDS; // Horizontal and vertical max control speed when flying private static final float FLYING_SPEED = 6.0f * Units.METERS_PER_SECOND; @@ -107,10 +107,6 @@ public class TestPlayerControls { } public void handleInput(Input input) { - if (ClientState.getInstance() == null || !ClientState.getInstance().isReady()) { - return; - } - InputEvent event = input.getEvent(); if (event instanceof KeyEvent) { @@ -193,6 +189,10 @@ public class TestPlayerControls { } private void jump() { + if (ClientState.getInstance() == null || !ClientState.getInstance().isReady()) { + return; + } + getEntity().getVelocity().add(0, 0, JUMP_VELOCITY * (useMinecraftGravity ? 2 : 1)); } @@ -214,6 +214,10 @@ public class TestPlayerControls { } private void handleCameraMode() { + if (ClientState.getInstance() == null || !ClientState.getInstance().isReady()) { + return; + } + if (ClientState.getInstance().getCamera().hasAnchor()) { ClientState.getInstance().getCamera().selectNextMode(); updateGUI(); @@ -227,6 +231,10 @@ public class TestPlayerControls { private void onMouseMoved(CursorMoveEvent event) { if (!captureMouse) return; + + if (ClientState.getInstance() == null || !ClientState.getInstance().isReady()) { + return; + } final float yawScale = -0.002f; final float pitchScale = yawScale; diff --git a/src/main/resources/assets/textures/tiles/stones.png b/src/main/resources/assets/textures/tiles/stones.png index 29e5a8f1a17dce2012515ad5127fd08925ab218c..7ed0008f662b361667b045cba5554dd09dc3e0e1 100644 GIT binary patch delta 8377 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