From d2c0e3e241565f97817bc4a832d09b6e136abc8c Mon Sep 17 00:00:00 2001 From: fgenesis Date: Tue, 18 Apr 2023 01:54:12 +0200 Subject: [PATCH] Add Lua func bone_getCollisionMaskNormal() This repurposes the (now, after the prev commit) unused Bone::getCollisionMaskNormal() --- Aquaria/ScriptInterface.cpp | 10 ++++++++++ BBGE/SkeletalSprite.cpp | 25 +++++-------------------- BBGE/SkeletalSprite.h | 2 +- 3 files changed, 16 insertions(+), 21 deletions(-) diff --git a/Aquaria/ScriptInterface.cpp b/Aquaria/ScriptInterface.cpp index 4f51f58..8591cb5 100644 --- a/Aquaria/ScriptInterface.cpp +++ b/Aquaria/ScriptInterface.cpp @@ -6498,6 +6498,15 @@ luaFunc(bone_getName) luaReturnStr(n); } +luaFunc(bone_getCollisionMaskNormal) +{ + Vector n; + Bone *b = bone(L); + if(b) + n = b->getCollisionMaskNormal(Vector(lua_tonumber(L, 2), lua_tonumber(L, 3)), lua_tonumber(L, 4)); + luaReturnVec2(n.x, n.y); +} + luaFunc(bone_isName) { Bone *b = bone(L); @@ -10799,6 +10808,7 @@ static const struct { luaRegister(bone_getName), luaRegister(bone_isName), luaRegister(bone_getIndex), + luaRegister(bone_getCollisionMaskNormal), luaRegister(node_x), luaRegister(node_y), luaRegister(node_isEntityPast), diff --git a/BBGE/SkeletalSprite.cpp b/BBGE/SkeletalSprite.cpp index 0a85f53..0f7a300 100644 --- a/BBGE/SkeletalSprite.cpp +++ b/BBGE/SkeletalSprite.cpp @@ -340,31 +340,16 @@ void Bone::renderCollision(const RenderState& rs) const CollideQuad::renderCollision(rs); } -Vector Bone::getCollisionMaskNormal(size_t index) +Vector Bone::getCollisionMaskNormal(Vector pos, float dist) const { Vector sum; - size_t num=0; for (size_t i = 0; i < this->transformedCollisionMask.size(); i++) { - if (i != index) - { - Vector diff = transformedCollisionMask[index] - transformedCollisionMask[i]; - if (diff.isLength2DIn(128)) - { - sum += diff; - num++; - } - } + Vector diff = pos - transformedCollisionMask[i]; + if (diff.isLength2DIn(dist)) + sum += diff; } - if (!sum.isZero()) - { - sum /= num; - - sum.normalize2D(); - - - } - + sum.normalize2D(); return sum; } diff --git a/BBGE/SkeletalSprite.h b/BBGE/SkeletalSprite.h index a1d04ee..678f0b9 100644 --- a/BBGE/SkeletalSprite.h +++ b/BBGE/SkeletalSprite.h @@ -95,7 +95,7 @@ public: int originalRenderPass; // stores the render pass originally set in the XML file. For AC_RESET_PASS. void spawnParticlesFromCollisionMask(const char *p, unsigned intv, int layer, float rotz = 0); - Vector getCollisionMaskNormal(size_t index); + Vector getCollisionMaskNormal(Vector pos, float dist) const; virtual void renderCollision(const RenderState& rs) const OVERRIDE;