diff --git a/docs/src/progress/renderertodo.md b/docs/src/progress/renderertodo.md index 5504416a..285ea923 100644 --- a/docs/src/progress/renderertodo.md +++ b/docs/src/progress/renderertodo.md @@ -266,6 +266,13 @@ Clean up data - Tree Model Paths +(05/07/2024) +Ground Texture Atlas system + - Refactor to block main thread only when creating the actual texture object (load buffered image separately) + +First Person Camera + + # TODO Character movement in particular feels off @@ -292,9 +299,6 @@ Data Cleanup Clean up Material class - fix storing textures in the mat class ( pain :c ) -Ground Texture Atlas system - - Refactor to block main thread only when creating the actual texture object (load buffered image separately) - More Debug menus - Screen that shows the overall status of draw cell manager - Screen that shows the overall status of fluid cell manager diff --git a/src/main/java/electrosphere/collision/RayCastCallback.java b/src/main/java/electrosphere/collision/RayCastCallback.java index a8a5745e..6cf8d67e 100644 --- a/src/main/java/electrosphere/collision/RayCastCallback.java +++ b/src/main/java/electrosphere/collision/RayCastCallback.java @@ -19,6 +19,7 @@ import org.ode4j.ode.DRay; import org.ode4j.ode.OdeHelper; import electrosphere.collision.collidable.Collidable; +import electrosphere.engine.Globals; import electrosphere.entity.Entity; public class RayCastCallback implements DNearCallback { @@ -82,7 +83,8 @@ void RayCallback(void *Data, dGeomID Geometry1, dGeomID Geometry2) { (o2 instanceof DRay && rayCastData.collidableTypeMask.contains(collidable1.getType())) ) ) || - rayCastData.collidableTypeMask == null + rayCastData.collidableTypeMask == null && + collidable2 != null && collidable2.getParent() != Globals.playerEntity //don't self cast -- should work on both server and client ){ //calculate collisions int numc = OdeHelper.collide(o1,o2,MAX_CONTACTS,contacts.getGeomBuffer()); diff --git a/src/main/java/electrosphere/controls/ControlHandler.java b/src/main/java/electrosphere/controls/ControlHandler.java index da42d8a1..c16f6ba2 100644 --- a/src/main/java/electrosphere/controls/ControlHandler.java +++ b/src/main/java/electrosphere/controls/ControlHandler.java @@ -221,6 +221,9 @@ public class ControlHandler { boolean shouldRecaptureScreen = false; + //controls whether the camera is first or third person + boolean cameraIsThirdPerson = false; + /* Mouse event parsing related stuff @@ -1641,6 +1644,14 @@ public class ControlHandler { public boolean shouldRecapture(){ return this.shouldRecaptureScreen; } + + /** + * Checks if the camera is third person + * @return true if third person, false if first person + */ + public boolean cameraIsThirdPerson(){ + return cameraIsThirdPerson; + } } diff --git a/src/main/java/electrosphere/engine/loadingthreads/ClientLoading.java b/src/main/java/electrosphere/engine/loadingthreads/ClientLoading.java index 0cbb40ec..31d07b81 100644 --- a/src/main/java/electrosphere/engine/loadingthreads/ClientLoading.java +++ b/src/main/java/electrosphere/engine/loadingthreads/ClientLoading.java @@ -176,7 +176,11 @@ public class ClientLoading { Player Camera */ - Globals.playerCamera = CameraEntityUtils.spawnPlayerEntityTrackingCameraEntity(new Vector3f(1,0,1), new Vector3f(0,0,1)); + if(Globals.controlHandler.cameraIsThirdPerson()){ + Globals.playerCamera = CameraEntityUtils.spawnPlayerEntityTrackingCameraEntity(new Vector3f(1,0,1), new Vector3f(0,0,1)); + } else { + Globals.playerCamera = CameraEntityUtils.spawnPlayerEntityTrackingCameraFirstPersonEntity(new Vector3f(1,0,1), new Vector3f(0,0,1)); + } diff --git a/src/main/java/electrosphere/net/client/protocol/EntityProtocol.java b/src/main/java/electrosphere/net/client/protocol/EntityProtocol.java index 8afd5ab7..e4efb82e 100644 --- a/src/main/java/electrosphere/net/client/protocol/EntityProtocol.java +++ b/src/main/java/electrosphere/net/client/protocol/EntityProtocol.java @@ -6,6 +6,7 @@ import org.joml.Vector3d; import electrosphere.engine.Globals; import electrosphere.entity.ClientEntityUtils; import electrosphere.entity.Entity; +import electrosphere.entity.EntityDataStrings; import electrosphere.entity.EntityUtils; import electrosphere.entity.state.attack.ClientAttackTree; import electrosphere.entity.state.attack.ServerAttackTree; @@ -106,6 +107,11 @@ public class EntityProtocol { if(Globals.clientPlayer != null && message.getpropertyValue() == Globals.clientPlayer.getId()){ Globals.clientCharacterID = message.getentityID(); Globals.playerEntity = target; + if(Globals.controlHandler.cameraIsThirdPerson()){ + Globals.playerEntity.putData(EntityDataStrings.DATA_STRING_DRAW, true); + } else { + Globals.playerEntity.putData(EntityDataStrings.DATA_STRING_DRAW, false); + } } } }