diff options
author | Mitchell Stokes <mogurijin@gmail.com> | 2012-12-26 05:25:53 +0400 |
---|---|---|
committer | Mitchell Stokes <mogurijin@gmail.com> | 2012-12-26 05:25:53 +0400 |
commit | 13f49f31017f40c137f16183780e1c706598ab2a (patch) | |
tree | a0dad2a6de4649f86aa876c773018ec250d00d23 /source/gameengine/Ketsji | |
parent | 2c38c32661427b48e548f27f538a15ff2543b84a (diff) |
BGE: Adding a maxJumps to the character controller to adjust how many jumps a character can perform before having to touch the ground. By default this is set to 1, which means a character can only jump once before having to touch the ground again. Setting this to 2 allows for double jumping.
Diffstat (limited to 'source/gameengine/Ketsji')
-rw-r--r-- | source/gameengine/Ketsji/KX_CharacterWrapper.cpp | 22 | ||||
-rw-r--r-- | source/gameengine/Ketsji/KX_CharacterWrapper.h | 2 |
2 files changed, 24 insertions, 0 deletions
diff --git a/source/gameengine/Ketsji/KX_CharacterWrapper.cpp b/source/gameengine/Ketsji/KX_CharacterWrapper.cpp index ce208f3a75f..dfd19a0d2bd 100644 --- a/source/gameengine/Ketsji/KX_CharacterWrapper.cpp +++ b/source/gameengine/Ketsji/KX_CharacterWrapper.cpp @@ -45,6 +45,7 @@ PyTypeObject KX_CharacterWrapper::Type = { PyAttributeDef KX_CharacterWrapper::Attributes[] = { KX_PYATTRIBUTE_RO_FUNCTION("onGround", KX_CharacterWrapper, pyattr_get_onground), KX_PYATTRIBUTE_RW_FUNCTION("gravity", KX_CharacterWrapper, pyattr_get_gravity, pyattr_set_gravity), + KX_PYATTRIBUTE_RW_FUNCTION("maxJumps", KX_CharacterWrapper, pyattr_get_max_jumps, pyattr_set_max_jumps), { NULL } //Sentinel }; @@ -77,6 +78,27 @@ int KX_CharacterWrapper::pyattr_set_gravity(void *self_v, const KX_PYATTRIBUTE_D return PY_SET_ATTR_SUCCESS; } +PyObject *KX_CharacterWrapper::pyattr_get_max_jumps(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) +{ + KX_CharacterWrapper* self = static_cast<KX_CharacterWrapper*>(self_v); + + return PyLong_FromLong(self->m_character->GetMaxJumps()); +} + +int KX_CharacterWrapper::pyattr_set_max_jumps(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value) +{ + KX_CharacterWrapper* self = static_cast<KX_CharacterWrapper*>(self_v); + long param = PyLong_AsLong(value); + + if (param == -1) + { + PyErr_SetString(PyExc_ValueError, "KX_CharacterWrapper.maxJumps: expected an integer"); + return PY_SET_ATTR_FAIL; + } + + self->m_character->SetMaxJumps((int)param); + return PY_SET_ATTR_SUCCESS; +} PyMethodDef KX_CharacterWrapper::Methods[] = { KX_PYMETHODTABLE_NOARGS(KX_CharacterWrapper, jump), {NULL,NULL} //Sentinel diff --git a/source/gameengine/Ketsji/KX_CharacterWrapper.h b/source/gameengine/Ketsji/KX_CharacterWrapper.h index 3b0058aca6f..1161be2c611 100644 --- a/source/gameengine/Ketsji/KX_CharacterWrapper.h +++ b/source/gameengine/Ketsji/KX_CharacterWrapper.h @@ -26,6 +26,8 @@ public: static PyObject* pyattr_get_gravity(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef); static int pyattr_set_gravity(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value); + static PyObject* pyattr_get_max_jumps(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef); + static int pyattr_set_max_jumps(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value); #endif // WITH_PYTHON private: |