diff --git a/assets/Textures/color/transparent_green.png b/assets/Textures/color/transparent_green.png new file mode 100644 index 00000000..07411fe6 Binary files /dev/null and b/assets/Textures/color/transparent_green.png differ diff --git a/assets/Textures/color/transparent_magenta.png b/assets/Textures/color/transparent_magenta.png new file mode 100644 index 00000000..55dce331 Binary files /dev/null and b/assets/Textures/color/transparent_magenta.png differ diff --git a/assets/Textures/color/transparent_orange.png b/assets/Textures/color/transparent_orange.png new file mode 100644 index 00000000..38387ad6 Binary files /dev/null and b/assets/Textures/color/transparent_orange.png differ diff --git a/assets/Textures/color/transparent_teal.png b/assets/Textures/color/transparent_teal.png new file mode 100644 index 00000000..22d4db6e Binary files /dev/null and b/assets/Textures/color/transparent_teal.png differ diff --git a/assets/Textures/color/transparent_yellow.png b/assets/Textures/color/transparent_yellow.png new file mode 100644 index 00000000..62f70e14 Binary files /dev/null and b/assets/Textures/color/transparent_yellow.png differ diff --git a/src/main/java/electrosphere/engine/Globals.java b/src/main/java/electrosphere/engine/Globals.java index ceacaafd..4178f2d4 100644 --- a/src/main/java/electrosphere/engine/Globals.java +++ b/src/main/java/electrosphere/engine/Globals.java @@ -485,6 +485,11 @@ public class Globals { "Textures/ui/uiFrame2.png", "Textures/ui/circle.png", "Textures/ui/square.png", + "Textures/color/transparent_green.png", + "Textures/color/transparent_magenta.png", + "Textures/color/transparent_orange.png", + "Textures/color/transparent_teal.png", + "Textures/color/transparent_yellow.png", }; /** diff --git a/src/main/java/electrosphere/entity/state/hitbox/HitboxCollectionState.java b/src/main/java/electrosphere/entity/state/hitbox/HitboxCollectionState.java index b93b4b42..977d4d61 100644 --- a/src/main/java/electrosphere/entity/state/hitbox/HitboxCollectionState.java +++ b/src/main/java/electrosphere/entity/state/hitbox/HitboxCollectionState.java @@ -444,6 +444,10 @@ public class HitboxCollectionState { */ public void setActive(boolean state){ this.active = state; + for(DGeom geom : this.geoms){ + HitboxState shapeState = this.getShapeStatus(geom); + shapeState.setActive(state); + } } /** diff --git a/src/main/java/electrosphere/renderer/pipelines/DebugContentPipeline.java b/src/main/java/electrosphere/renderer/pipelines/DebugContentPipeline.java index e3dffb95..5ca9f041 100644 --- a/src/main/java/electrosphere/renderer/pipelines/DebugContentPipeline.java +++ b/src/main/java/electrosphere/renderer/pipelines/DebugContentPipeline.java @@ -20,6 +20,7 @@ import electrosphere.entity.state.hitbox.HitboxCollectionState; import electrosphere.entity.state.hitbox.HitboxCollectionState.HitboxState; import electrosphere.entity.types.camera.CameraEntityUtils; import electrosphere.game.data.collidable.CollidableTemplate; +import electrosphere.game.data.collidable.HitboxData; import electrosphere.renderer.OpenGLState; import electrosphere.renderer.RenderPipelineState; import electrosphere.renderer.RenderingEngine; @@ -75,12 +76,7 @@ public class DebugContentPipeline implements RenderPipeline { HitboxState shapeStatus = hitboxState.getShapeStatus(geom); if((hitboxModel = Globals.assetManager.fetchModel("Models/basic/geometry/unitsphere.glb")) != null){ //set color based on collision status, type, etc - Texture texture = null; - if(shapeStatus.getHadCollision()){ - texture = Globals.assetManager.fetchTexture("Textures/transparent_red.png"); - } else { - texture = Globals.assetManager.fetchTexture("Textures/transparent_grey.png"); - } + Texture texture = Globals.assetManager.fetchTexture(getHitboxColor(shapeStatus,shapeStatus.getHitboxData())); if(texture != null){ texture.bind(openGLState); } @@ -100,12 +96,7 @@ public class DebugContentPipeline implements RenderPipeline { HitboxState shapeStatus = hitboxState.getShapeStatus(geom); if((hitboxModel = Globals.assetManager.fetchModel("Models/basic/geometry/unitcapsule.glb")) != null){ //set color based on collision status, type, etc - Texture texture = null; - if(shapeStatus.getHadCollision()){ - texture = Globals.assetManager.fetchTexture("Textures/transparent_red.png"); - } else { - texture = Globals.assetManager.fetchTexture("Textures/transparent_grey.png"); - } + Texture texture = Globals.assetManager.fetchTexture(getHitboxColor(shapeStatus,shapeStatus.getHitboxData())); if(texture != null){ texture.bind(openGLState); } @@ -184,12 +175,7 @@ public class DebugContentPipeline implements RenderPipeline { HitboxState shapeStatus = hitboxState.getShapeStatus(geom); if((hitboxModel = Globals.assetManager.fetchModel("Models/basic/geometry/unitsphere.glb")) != null){ //set color based on collision status, type, etc - Texture texture = null; - if(shapeStatus.getHadCollision()){ - texture = Globals.assetManager.fetchTexture("Textures/transparent_red.png"); - } else { - texture = Globals.assetManager.fetchTexture("Textures/transparent_grey.png"); - } + Texture texture = Globals.assetManager.fetchTexture(getHitboxColor(shapeStatus,shapeStatus.getHitboxData())); if(texture != null){ texture.bind(openGLState); } @@ -209,12 +195,7 @@ public class DebugContentPipeline implements RenderPipeline { HitboxState shapeStatus = hitboxState.getShapeStatus(geom); if((hitboxModel = Globals.assetManager.fetchModel("Models/basic/geometry/unitcapsule.glb")) != null){ //set color based on collision status, type, etc - Texture texture = null; - if(shapeStatus.getHadCollision()){ - texture = Globals.assetManager.fetchTexture("Textures/transparent_red.png"); - } else { - texture = Globals.assetManager.fetchTexture("Textures/transparent_grey.png"); - } + Texture texture = Globals.assetManager.fetchTexture(getHitboxColor(shapeStatus,shapeStatus.getHitboxData())); if(texture != null){ texture.bind(openGLState); } @@ -347,5 +328,43 @@ public class DebugContentPipeline implements RenderPipeline { Globals.profiler.endCpuSample(); } + + /** + * Gets the color texture to use to draw a hitbox + * @param shapeStatus The hitbox status + * @param data The hitbox data + * @return The texture path to use + */ + private String getHitboxColor(HitboxState shapeStatus, HitboxData data){ + switch(data.getType()){ + case HitboxData.HITBOX_TYPE_BLOCK_CONNECTED: { + if(shapeStatus.getHadCollision()){ + return "Textures/color/transparent_yellow.png"; + } + if(shapeStatus.isActive()){ + return "Textures/transparent_blue.png"; + } + return "Textures/transparent_grey.png"; + } + case HitboxData.HITBOX_TYPE_HIT: + case HitboxData.HITBOX_TYPE_HIT_CONNECTED: { + if(shapeStatus.getHadCollision()){ + return "Textures/color/transparent_yellow.png"; + } + if(shapeStatus.isActive()){ + return "Textures/transparent_red.png"; + } + return "Textures/transparent_grey.png"; + } + case HitboxData.HITBOX_TYPE_HURT: + case HitboxData.HITBOX_TYPE_HURT_CONNECTED: { + if(shapeStatus.getHadCollision()){ + return "Textures/color/transparent_yellow.png"; + } + return "Textures/transparent_grey.png"; + } + } + return "Textures/transparent_grey.png"; + } }