From 83721682bb12a5b3c277e832241e0752fdb2df2e Mon Sep 17 00:00:00 2001 From: Thomas Szepe Date: Sun, 11 Oct 2015 15:41:40 +0200 Subject: BGE: Change character jumping to char * Change the character jumping variables and methods from int to char. * Limit the maxJumps integer value from 0 to 255. * Allow to set the minimum jump amount to 0. Reviewers: panzergame, lordloki, moguri Reviewed By: lordloki, moguri Subscribers: agoose77 Projects: #game_engine Differential Revision: https://developer.blender.org/D1305 --- .../rst/bge_types/bge.types.KX_CharacterWrapper.rst | 2 +- source/gameengine/Ketsji/KX_CharacterWrapper.cpp | 5 ++++- .../gameengine/Physics/Bullet/CcdPhysicsController.cpp | 8 ++++---- source/gameengine/Physics/Bullet/CcdPhysicsController.h | 16 ++++++++-------- source/gameengine/Physics/common/PHY_ICharacter.h | 6 +++--- 5 files changed, 20 insertions(+), 17 deletions(-) diff --git a/doc/python_api/rst/bge_types/bge.types.KX_CharacterWrapper.rst b/doc/python_api/rst/bge_types/bge.types.KX_CharacterWrapper.rst index e326892a824..adff6e0a2ad 100644 --- a/doc/python_api/rst/bge_types/bge.types.KX_CharacterWrapper.rst +++ b/doc/python_api/rst/bge_types/bge.types.KX_CharacterWrapper.rst @@ -25,7 +25,7 @@ base class --- :class:`PyObjectPlus` The maximum number of jumps a character can perform before having to touch the ground. By default this is set to 1. 2 allows for a double jump, etc. - :type: int + :type: int in [0, 255], default 1 .. attribute:: jumpCount diff --git a/source/gameengine/Ketsji/KX_CharacterWrapper.cpp b/source/gameengine/Ketsji/KX_CharacterWrapper.cpp index fdf4fa01b03..d777ae7ec80 100644 --- a/source/gameengine/Ketsji/KX_CharacterWrapper.cpp +++ b/source/gameengine/Ketsji/KX_CharacterWrapper.cpp @@ -25,6 +25,7 @@ #include "KX_CharacterWrapper.h" #include "PHY_ICharacter.h" #include "KX_PyMath.h" +#include "BLI_utildefines.h" KX_CharacterWrapper::KX_CharacterWrapper(PHY_ICharacter* character) : PyObjectPlus(), @@ -116,7 +117,9 @@ int KX_CharacterWrapper::pyattr_set_max_jumps(void *self_v, const KX_PYATTRIBUTE return PY_SET_ATTR_FAIL; } - self->m_character->SetMaxJumps((int)param); + CLAMP(param, 0, 255); + + self->m_character->SetMaxJumps((unsigned char)param); return PY_SET_ATTR_SUCCESS; } diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp b/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp index ab7097b19ca..6a1e52c9263 100644 --- a/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp +++ b/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp @@ -81,24 +81,24 @@ void BlenderBulletCharacterController::updateAction(btCollisionWorld *collisionW m_motionState->setWorldTransform(getGhostObject()->getWorldTransform()); } -int BlenderBulletCharacterController::getMaxJumps() const +unsigned char BlenderBulletCharacterController::getMaxJumps() const { return m_maxJumps; } -void BlenderBulletCharacterController::setMaxJumps(int maxJumps) +void BlenderBulletCharacterController::setMaxJumps(unsigned char maxJumps) { m_maxJumps = maxJumps; } -int BlenderBulletCharacterController::getJumpCount() const +unsigned char BlenderBulletCharacterController::getJumpCount() const { return m_jumps; } bool BlenderBulletCharacterController::canJump() const { - return onGround() || m_jumps < m_maxJumps; + return (onGround() && m_maxJumps > 0) || m_jumps < m_maxJumps; } void BlenderBulletCharacterController::jump() diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsController.h b/source/gameengine/Physics/Bullet/CcdPhysicsController.h index c49ae8d20e1..2ae1ff8f25a 100644 --- a/source/gameengine/Physics/Bullet/CcdPhysicsController.h +++ b/source/gameengine/Physics/Bullet/CcdPhysicsController.h @@ -407,19 +407,19 @@ class BlenderBulletCharacterController : public btKinematicCharacterController, { private: btMotionState* m_motionState; - int m_jumps; - int m_maxJumps; + unsigned char m_jumps; + unsigned char m_maxJumps; public: BlenderBulletCharacterController(btMotionState *motionState, btPairCachingGhostObject *ghost, btConvexShape* shape, float stepHeight); virtual void updateAction(btCollisionWorld *collisionWorld, btScalar dt); - int getMaxJumps() const; + unsigned char getMaxJumps() const; - void setMaxJumps(int maxJumps); + void setMaxJumps(unsigned char maxJumps); - int getJumpCount() const; + unsigned char getJumpCount() const; virtual bool canJump() const; @@ -432,9 +432,9 @@ public: virtual bool OnGround(){ return onGround(); } virtual float GetGravity() { return getGravity(); } virtual void SetGravity(float gravity) { setGravity(gravity); } - virtual int GetMaxJumps() { return getMaxJumps(); } - virtual void SetMaxJumps(int maxJumps) { setMaxJumps(maxJumps); } - virtual int GetJumpCount() { return getJumpCount(); } + virtual unsigned char GetMaxJumps() { return getMaxJumps(); } + virtual void SetMaxJumps(unsigned char maxJumps) { setMaxJumps(maxJumps); } + virtual unsigned char GetJumpCount() { return getJumpCount(); } virtual void SetWalkDirection(const MT_Vector3& dir) { btVector3 vec = btVector3(dir[0], dir[1], dir[2]); diff --git a/source/gameengine/Physics/common/PHY_ICharacter.h b/source/gameengine/Physics/common/PHY_ICharacter.h index a3d3000a143..81c567ef08a 100644 --- a/source/gameengine/Physics/common/PHY_ICharacter.h +++ b/source/gameengine/Physics/common/PHY_ICharacter.h @@ -23,10 +23,10 @@ public: virtual float GetGravity()= 0; virtual void SetGravity(float gravity)= 0; - virtual int GetMaxJumps()= 0; - virtual void SetMaxJumps(int maxJumps)= 0; + virtual unsigned char GetMaxJumps() = 0; + virtual void SetMaxJumps(unsigned char maxJumps) = 0; - virtual int GetJumpCount()= 0; + virtual unsigned char GetJumpCount() = 0; virtual void SetWalkDirection(const class MT_Vector3& dir)=0; virtual MT_Vector3 GetWalkDirection()=0; -- cgit v1.2.3