From d08e02737fb517e5485b41c0fbeb58fbff8da40b Mon Sep 17 00:00:00 2001 From: austin Date: Wed, 31 Jul 2024 21:21:44 -0400 Subject: [PATCH] hitbox debug rendering --- assets/Textures/color/transparent_green.png | Bin 0 -> 624 bytes assets/Textures/color/transparent_magenta.png | Bin 0 -> 623 bytes assets/Textures/color/transparent_orange.png | Bin 0 -> 623 bytes assets/Textures/color/transparent_teal.png | Bin 0 -> 624 bytes assets/Textures/color/transparent_yellow.png | Bin 0 -> 624 bytes .../java/electrosphere/engine/Globals.java | 5 ++ .../state/hitbox/HitboxCollectionState.java | 4 ++ .../pipelines/DebugContentPipeline.java | 67 +++++++++++------- 8 files changed, 52 insertions(+), 24 deletions(-) create mode 100644 assets/Textures/color/transparent_green.png create mode 100644 assets/Textures/color/transparent_magenta.png create mode 100644 assets/Textures/color/transparent_orange.png create mode 100644 assets/Textures/color/transparent_teal.png create mode 100644 assets/Textures/color/transparent_yellow.png diff --git a/assets/Textures/color/transparent_green.png b/assets/Textures/color/transparent_green.png new file mode 100644 index 0000000000000000000000000000000000000000..07411fe6c89c52db66731852efdbe7649315192a GIT binary patch literal 624 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2o;fFt%hmI|q0=J1Z0v<)>xlq%tsQ zOst(~>v1?hq}4xoX{Z)onSkKQfVpoLDfKPwa@`Pci)*dbj6GlYXPKyI>h(2cA3Qk! z=&I)K&FlEqH7WdHe)Q(Sk{3#<_ojx}*D(&ih^V*BgQiBp(QOCi|G{JmP(H)7Sg? z9)Fp%R8K`a^?4>M93Q!_JFU0BP|s55!HZ#UZCDe!U{XnY;R{f4Ixkcf}a( z)Jk{~;lQhVNf1$z#?k!T={?_K)UMqayKTk}iZ2el! zGqscMy~voToKPUWW5>IUPjUr2nR)DAPExd-G=E!w4%7SeFTRxtFT`HN7eBwY@AymR z2}>h&?=!HsA8_g1blvuz?3;PF_nW@``Io_TT~QzRlUcFAXkkn8c6VX;4}uH!E}sk( z;VkfoEM{QPQwCwiilz2tKtc8rPhVH|7aWWX^1QrHa!&w-BuiW)N}Tg^b5rw57@Uhz z6H8K46v{J8G8EiBeFMT9`NV;WJUm?-Lo)8YJ#Q$;V8Fq$VR`W1YyShqd14+Zlv?X^ i&(Tp-A_5paWxlq%tsQ zOst(~>v1?hq}4xoX{Z)onSkKQfVpoLDfKPwa@`Pci)*dbj6GlYXPKyI>h(2cA3Qk! z=&I)K&FlEqH7WdHe)Q(Sk{3#<_ojx}*D(&ih^V*BgQiBp(QOCi|G{JmP(H)7Sg? z9)Fp%R8K`a^?4>M93Q!_JFU0BP|s55!HZ#UZCDe!U{XnY;R{f4Ixkcf}a( z)Jk{~;lQhVNf1$z#?k!T={?_K)UMqayKTk}iZ2el! zGqscMy~voToKPUWW5>IUPjUr2nR)DAPExd-G=E!w4%7SeFTRxtFT`HN7eBwY@AymR z2}>h&?=!HsA8_g1blvuz?3;PF_nW@``Io_TT~QzRlUcFAXkkn8c6VX;4}uH!E}sk( z;VkfoEM{QPQwCwiilz2tKtc8rPhVH|7aWWX@@9M9x4Z!gNtU=qlsM<-=BDPAFgO>b zCYGe8D3oWGWGJ|M`UZqI@`(c#xqG@ehGg7(dw!!Jg8~Q3hU0JF-jUe8;K3x`pt-*{ h9XKhZL<}&tV>!fBb9?gUr9dMYJYD@<);T3K0RTEd|E2%{ literal 0 HcmV?d00001 diff --git a/assets/Textures/color/transparent_orange.png b/assets/Textures/color/transparent_orange.png new file mode 100644 index 0000000000000000000000000000000000000000..38387ad6bd69fb8a144cffc92f285e14caa32457 GIT binary patch literal 623 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=1|;R|J2o;fFt%hmI|q0=J1Z0v<)>xlq%tsQ zOst(~>v1?hq}4xoX{Z)onSkKQfVpoLDfKPwa@`Pci)*dbj6GlYXPKyI>h(2cA3Qk! z=&I)K&FlEqH7WdHe)Q(Sk{3#<_ojx}*D(&ih^V*BgQiBp(QOCi|G{JmP(H)7Sg? z9)Fp%R8K`a^?4>M93Q!_JFU0BP|s55!HZ#UZCDe!U{XnY;R{f4Ixkcf}a( z)Jk{~;lQhVNf1$z#?k!T={?_K)UMqayKTk}iZ2el! zGqscMy~voToKPUWW5>IUPjUr2nR)DAPExd-G=E!w4%7SeFTRxtFT`HN7eBwY@AymR z2}>h&?=!HsA8_g1blvuz?3;PF_nW@``Io_TT~QzRlUcFAXkkn8c6VX;4}uH!E}sk( z;VkfoEM{QPQwCwiilz2tKtc8rPhVH|7aWWX3Oq`-xlq%tsQ zOst(~>v1?hq}4xoX{Z)onSkKQfVpoLDfKPwa@`Pci)*dbj6GlYXPKyI>h(2cA3Qk! z=&I)K&FlEqH7WdHe)Q(Sk{3#<_ojx}*D(&ih^V*BgQiBp(QOCi|G{JmP(H)7Sg? z9)Fp%R8K`a^?4>M93Q!_JFU0BP|s55!HZ#UZCDe!U{XnY;R{f4Ixkcf}a( z)Jk{~;lQhVNf1$z#?k!T={?_K)UMqayKTk}iZ2el! zGqscMy~voToKPUWW5>IUPjUr2nR)DAPExd-G=E!w4%7SeFTRxtFT`HN7eBwY@AymR z2}>h&?=!HsA8_g1blvuz?3;PF_nW@``Io_TT~QzRlUcFAXkkn8c6VX;4}uH!E}sk( z;VkfoEM{QPQwCwiilz2tKtc8rPhVH|7aWWX3JL;Gr5k}lk|nMYCC>S|xv6<249-QV zi6yBi3gww484B*6z5(HleBwYw9-c0aAsP4Hp5G|QpuoYh;rL(f?^_S(YV1g94*7Lg ir(jb{2NB>z4}aYSrgw|$i*tcyGI+ZBxvXxlq%tsQ zOst(~>v1?hq}4xoX{Z)onSkKQfVpoLDfKPwa@`Pci)*dbj6GlYXPKyI>h(2cA3Qk! z=&I)K&FlEqH7WdHe)Q(Sk{3#<_ojx}*D(&ih^V*BgQiBp(QOCi|G{JmP(H)7Sg? z9)Fp%R8K`a^?4>M93Q!_JFU0BP|s55!HZ#UZCDe!U{XnY;R{f4Ixkcf}a( z)Jk{~;lQhVNf1$z#?k!T={?_K)UMqayKTk}iZ2el! zGqscMy~voToKPUWW5>IUPjUr2nR)DAPExd-G=E!w4%7SeFTRxtFT`HN7eBwY@AymR z2}>h&?=!HsA8_g1blvuz?3;PF_nW@``Io_TT~QzRlUcFAXkkn8c6VX;4}uH!E}sk( z;VkfoEM{QPQwCwiilz2tKtc8rPhVH|7aWWX@~RerM?ujlS>hT|;+&tGo0?a`;9QiN zSdyBeP@Y+mq2TW68xY>eCk|BP;pyTSl5y|t`Hg}M3LGpOj{oIu-+EkEV@FDJ$o@Mz h1)EwrhyW*g_;Y_VJ@1RoTLCna!PC{xWt~$(698ku3|#;K literal 0 HcmV?d00001 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"; + } }