From 74254a212e697875da4be5259e37e22a219defc7 Mon Sep 17 00:00:00 2001 From: jdrueckert Date: Thu, 24 Jun 2021 23:27:45 +0200 Subject: [PATCH] Revert "chore: remove finite check from LocalPlayer (#4662)" This reverts commit ac62052101030014aa3f6a42c80de370d96f92f7. --- .../engine/logic/players/LocalPlayer.java | 49 ++++++++++++++++--- .../layers/ingame/metrics/DebugOverlay.java | 3 -- 2 files changed, 42 insertions(+), 10 deletions(-) diff --git a/engine/src/main/java/org/terasology/engine/logic/players/LocalPlayer.java b/engine/src/main/java/org/terasology/engine/logic/players/LocalPlayer.java index 975be0d4b54..161dabf7841 100644 --- a/engine/src/main/java/org/terasology/engine/logic/players/LocalPlayer.java +++ b/engine/src/main/java/org/terasology/engine/logic/players/LocalPlayer.java @@ -9,10 +9,10 @@ import org.terasology.engine.logic.characters.CharacterComponent; import org.terasology.engine.logic.characters.CharacterMovementComponent; import org.terasology.engine.logic.characters.CharacterSystem; -import org.terasology.engine.logic.characters.events.ActivationPredicted; -import org.terasology.engine.logic.characters.events.ActivationRequest; import org.terasology.engine.logic.common.ActivateEvent; import org.terasology.engine.logic.location.LocationComponent; +import org.terasology.engine.logic.characters.events.ActivationPredicted; +import org.terasology.engine.logic.characters.events.ActivationRequest; import org.terasology.engine.math.Direction; import org.terasology.engine.network.ClientComponent; import org.terasology.engine.physics.HitResult; @@ -99,7 +99,13 @@ public boolean isValid() { */ public Vector3f getPosition(Vector3f dest) { LocationComponent location = getCharacterEntity().getComponent(LocationComponent.class); - return location.getWorldPosition(dest); + if (location != null) { + Vector3f result = location.getWorldPosition(new Vector3f()); + if (result.isFinite()) { //TODO: MP finite check seems to hide a larger underlying problem + dest.set(result); + } + } + return dest; } /** @@ -110,7 +116,13 @@ public Vector3f getPosition(Vector3f dest) { */ public Quaternionf getRotation(Quaternionf dest) { LocationComponent location = getCharacterEntity().getComponent(LocationComponent.class); - return location.getWorldRotation(dest); + if (location != null) { + Quaternionf result = location.getWorldRotation(new Quaternionf()); + if (result.isFinite()) { //TODO: MP finite check seems to hide a larger underlying problem + dest.set(result); + } + } + return dest; } /** @@ -121,8 +133,18 @@ public Quaternionf getRotation(Quaternionf dest) { */ public Vector3f getViewPosition(Vector3f dest) { ClientComponent clientComponent = getClientEntity().getComponent(ClientComponent.class); + if (clientComponent == null) { + return dest; + } LocationComponent location = clientComponent.camera.getComponent(LocationComponent.class); - return location.getWorldPosition(dest); + if (location != null) { + Vector3f result = location.getWorldPosition(new Vector3f()); + if (result.isFinite()) { //TODO: MP finite check seems to hide a larger underlying problem + dest.set(result); + return dest; + } + } + return getPosition(dest); } /** @@ -133,8 +155,18 @@ public Vector3f getViewPosition(Vector3f dest) { */ public Quaternionf getViewRotation(Quaternionf dest) { ClientComponent clientComponent = getClientEntity().getComponent(ClientComponent.class); + if (clientComponent == null) { + return new Quaternionf(); + } LocationComponent location = clientComponent.camera.getComponent(LocationComponent.class); - return location.getWorldRotation(dest); + if (location != null) { + Quaternionf result = location.getWorldRotation(new Quaternionf()); + if (result.isFinite()) { //TODO: MP finite check seems to hide a larger underlying problem + dest.set(result); + return dest; + } + } + return getRotation(dest); } /** @@ -150,7 +182,10 @@ public Vector3f getViewDirection(Vector3f dest) { public Vector3f getVelocity(Vector3f dest) { CharacterMovementComponent movement = getCharacterEntity().getComponent(CharacterMovementComponent.class); - return dest.set(movement.getVelocity()); + if (movement != null) { + return dest.set(movement.getVelocity()); + } + return dest; } diff --git a/engine/src/main/java/org/terasology/engine/rendering/nui/layers/ingame/metrics/DebugOverlay.java b/engine/src/main/java/org/terasology/engine/rendering/nui/layers/ingame/metrics/DebugOverlay.java index 17c4c84978c..ee95c19d313 100644 --- a/engine/src/main/java/org/terasology/engine/rendering/nui/layers/ingame/metrics/DebugOverlay.java +++ b/engine/src/main/java/org/terasology/engine/rendering/nui/layers/ingame/metrics/DebugOverlay.java @@ -99,9 +99,6 @@ public String get() { debugLine3.bindText(new ReadOnlyBinding() { @Override public String get() { - if (!localPlayer.isValid()) { - return ""; - } Vector3f pos = localPlayer.getPosition(new Vector3f()); Vector3i chunkPos = Chunks.toChunkPos(pos, new Vector3i()); Vector3f rotation = localPlayer.getViewDirection(new Vector3f());