diff options
-rw-r--r-- | source/gameengine/BlenderRoutines/KX_BlenderCanvas.cpp | 2 | ||||
-rw-r--r-- | source/gameengine/GameLogic/SCA_PythonKeyboard.cpp | 115 | ||||
-rw-r--r-- | source/gameengine/GameLogic/SCA_PythonKeyboard.h | 51 | ||||
-rw-r--r-- | source/gameengine/GameLogic/SCA_PythonMouse.cpp | 185 | ||||
-rw-r--r-- | source/gameengine/GameLogic/SCA_PythonMouse.h | 60 | ||||
-rw-r--r-- | source/gameengine/GamePlayer/ghost/GPG_Canvas.cpp | 2 | ||||
-rw-r--r-- | source/gameengine/Ketsji/KX_KetsjiEngine.h | 2 | ||||
-rw-r--r-- | source/gameengine/Ketsji/KX_PythonInit.cpp | 20 | ||||
-rw-r--r-- | source/gameengine/Ketsji/KX_PythonInitTypes.cpp | 4 | ||||
-rw-r--r-- | source/gameengine/PyDoc/GameKeys.py | 9 | ||||
-rw-r--r-- | source/gameengine/PyDoc/GameLogic.py | 3 | ||||
-rw-r--r-- | source/gameengine/PyDoc/GameTypes.py | 37 | ||||
-rw-r--r-- | source/gameengine/Rasterizer/RAS_ICanvas.h | 9 |
13 files changed, 498 insertions, 1 deletions
diff --git a/source/gameengine/BlenderRoutines/KX_BlenderCanvas.cpp b/source/gameengine/BlenderRoutines/KX_BlenderCanvas.cpp index 9139d6ea729..d563a17fe06 100644 --- a/source/gameengine/BlenderRoutines/KX_BlenderCanvas.cpp +++ b/source/gameengine/BlenderRoutines/KX_BlenderCanvas.cpp @@ -139,6 +139,8 @@ SetViewPort( void KX_BlenderCanvas::SetMouseState(RAS_MouseState mousestate) { + m_mousestate = mousestate; + switch (mousestate) { case MOUSE_INVISIBLE: diff --git a/source/gameengine/GameLogic/SCA_PythonKeyboard.cpp b/source/gameengine/GameLogic/SCA_PythonKeyboard.cpp new file mode 100644 index 00000000000..ef6d2ad8cab --- /dev/null +++ b/source/gameengine/GameLogic/SCA_PythonKeyboard.cpp @@ -0,0 +1,115 @@ +/** + * Python Keyboard Object + * + * $Id$ + * + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * All rights reserved. + * + * The Original Code is: all of this file. + * + * Contributor(s): none yet. + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include "SCA_PythonKeyboard.h" +#include "SCA_IInputDevice.h" + +/* ------------------------------------------------------------------------- */ +/* Native functions */ +/* ------------------------------------------------------------------------- */ + +SCA_PythonKeyboard::SCA_PythonKeyboard(SCA_IInputDevice* keyboard) +: PyObjectPlus(), +m_keyboard(keyboard) +{ +} + +SCA_PythonKeyboard::~SCA_PythonKeyboard() +{ + /* intentionally empty */ +} + +#ifndef DISABLE_PYTHON + +/* ------------------------------------------------------------------------- */ +/* Python functions */ +/* ------------------------------------------------------------------------- */ + +/* Integration hooks ------------------------------------------------------- */ +PyTypeObject SCA_PythonKeyboard::Type = { + PyVarObject_HEAD_INIT(NULL, 0) + "SCA_PythonKeyboard", + sizeof(PyObjectPlus_Proxy), + 0, + py_base_dealloc, + 0, + 0, + 0, + 0, + py_base_repr, + 0,0,0,0,0,0,0,0,0, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, + &PyObjectPlus::Type, + 0,0,0,0,0,0, + py_base_new +}; + +PyMethodDef SCA_PythonKeyboard::Methods[] = { + {NULL,NULL} //Sentinel +}; + +PyAttributeDef SCA_PythonKeyboard::Attributes[] = { + KX_PYATTRIBUTE_RO_FUNCTION("events", SCA_PythonKeyboard, pyattr_get_events), + { NULL } //Sentinel +}; + +PyObject* SCA_PythonKeyboard::pyattr_get_events(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) +{ + SCA_PythonKeyboard* self = static_cast<SCA_PythonKeyboard*>(self_v); + + PyObject* resultlist = PyList_New(0); + + for (int i=SCA_IInputDevice::KX_BEGINKEY; i<=SCA_IInputDevice::KX_ENDKEY; i++) + { + const SCA_InputEvent & inevent = self->m_keyboard->GetEventValue((SCA_IInputDevice::KX_EnumInputs)i); + + + if (inevent.m_status != SCA_InputEvent::KX_NO_INPUTSTATUS) + { + PyObject* keypair = PyList_New(2); + PyList_SET_ITEM(keypair, 0, PyLong_FromSsize_t(i)); + PyList_SET_ITEM(keypair, 1, PyLong_FromSsize_t(inevent.m_status)); + PyList_Append(resultlist, keypair); + } + } + + return resultlist; +} + +#endif diff --git a/source/gameengine/GameLogic/SCA_PythonKeyboard.h b/source/gameengine/GameLogic/SCA_PythonKeyboard.h new file mode 100644 index 00000000000..4c178d61cb0 --- /dev/null +++ b/source/gameengine/GameLogic/SCA_PythonKeyboard.h @@ -0,0 +1,51 @@ +/** + * SCA_PythonKeyboard.h + * + * $Id$ + * + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * All rights reserved. + * + * The Original Code is: all of this file. + * + * Contributor(s): none yet. + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#ifndef __KX_PYKEYBOARD +#define __KX_PYKEYBOARD + +#include "PyObjectPlus.h" + +class SCA_PythonKeyboard : public PyObjectPlus +{ + Py_Header; + class SCA_IInputDevice *m_keyboard; +public: + SCA_PythonKeyboard(class SCA_IInputDevice* keyboard); + virtual ~SCA_PythonKeyboard(); + +#ifndef DISABLE_PYTHON + static PyObject* pyattr_get_events(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef); +#endif +}; + +#endif //__KX_PYKEYBOARD + diff --git a/source/gameengine/GameLogic/SCA_PythonMouse.cpp b/source/gameengine/GameLogic/SCA_PythonMouse.cpp new file mode 100644 index 00000000000..405c4110301 --- /dev/null +++ b/source/gameengine/GameLogic/SCA_PythonMouse.cpp @@ -0,0 +1,185 @@ +/** + * Python Mouse Object + * + * $Id$ + * + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * All rights reserved. + * + * The Original Code is: all of this file. + * + * Contributor(s): none yet. + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include "SCA_PythonMouse.h" +#include "SCA_IInputDevice.h" +#include "RAS_ICanvas.h" + +/* ------------------------------------------------------------------------- */ +/* Native functions */ +/* ------------------------------------------------------------------------- */ + +SCA_PythonMouse::SCA_PythonMouse(SCA_IInputDevice* mouse, RAS_ICanvas* canvas) +: PyObjectPlus(), +m_canvas(canvas), +m_mouse(mouse) +{ +} + +SCA_PythonMouse::~SCA_PythonMouse() +{ + /* intentionally empty */ +} + +#ifndef DISABLE_PYTHON + +/* ------------------------------------------------------------------------- */ +/* Python functions */ +/* ------------------------------------------------------------------------- */ + +/* Integration hooks ------------------------------------------------------- */ +PyTypeObject SCA_PythonMouse::Type = { + PyVarObject_HEAD_INIT(NULL, 0) + "SCA_PythonMouse", + sizeof(PyObjectPlus_Proxy), + 0, + py_base_dealloc, + 0, + 0, + 0, + 0, + py_base_repr, + 0,0,0,0,0,0,0,0,0, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + 0,0,0,0,0,0,0, + Methods, + 0, + 0, + &PyObjectPlus::Type, + 0,0,0,0,0,0, + py_base_new +}; + +PyMethodDef SCA_PythonMouse::Methods[] = { +// KX_PYMETHODTABLE(SCA_PythonMouse, show), + {NULL,NULL} //Sentinel +}; + +PyAttributeDef SCA_PythonMouse::Attributes[] = { + KX_PYATTRIBUTE_RO_FUNCTION("events", SCA_PythonMouse, pyattr_get_events), + KX_PYATTRIBUTE_RW_FUNCTION("position", SCA_PythonMouse, pyattr_get_position, pyattr_set_position), + KX_PYATTRIBUTE_RW_FUNCTION("visible", SCA_PythonMouse, pyattr_get_visible, pyattr_set_visible), + { NULL } //Sentinel +}; + +PyObject* SCA_PythonMouse::pyattr_get_events(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) +{ + SCA_PythonMouse* self = static_cast<SCA_PythonMouse*>(self_v); + + PyObject* resultlist = PyList_New(0); + + for (int i=SCA_IInputDevice::KX_BEGINMOUSE; i<=SCA_IInputDevice::KX_ENDMOUSE; i++) + { + const SCA_InputEvent & inevent = self->m_mouse->GetEventValue((SCA_IInputDevice::KX_EnumInputs)i); + + + if (inevent.m_status != SCA_InputEvent::KX_NO_INPUTSTATUS) + { + PyObject* keypair = PyList_New(2); + PyList_SET_ITEM(keypair, 0, PyLong_FromSsize_t(i)); + PyList_SET_ITEM(keypair, 1, PyLong_FromSsize_t(inevent.m_status)); + PyList_Append(resultlist, keypair); + } + } + + return resultlist; +} + +PyObject* SCA_PythonMouse::pyattr_get_position(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) +{ + SCA_PythonMouse* self = static_cast<SCA_PythonMouse*>(self_v); + const SCA_InputEvent & xevent = self->m_mouse->GetEventValue(SCA_IInputDevice::KX_MOUSEX); + const SCA_InputEvent & yevent = self->m_mouse->GetEventValue(SCA_IInputDevice::KX_MOUSEY); + + PyObject* resultlist = PyList_New(2); + + PyList_SET_ITEM(resultlist, 0, PyFloat_FromDouble(float(xevent.m_eventval)/self->m_canvas->GetWidth())); + + PyList_SET_ITEM(resultlist, 1, PyFloat_FromDouble(float(yevent.m_eventval)/self->m_canvas->GetHeight())); + + return resultlist; +} + +int SCA_PythonMouse::pyattr_set_position(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value) +{ + SCA_PythonMouse* self = static_cast<SCA_PythonMouse*>(self_v); + int x, y; + float pyx, pyy; + if (!PyArg_ParseTuple(value, "ff:position", &pyx, &pyy)) + return PY_SET_ATTR_FAIL; + + x = (int)(pyx*self->m_canvas->GetWidth()); + y = (int)(pyy*self->m_canvas->GetHeight()); + + self->m_canvas->SetMousePosition(x, y); + + return PY_SET_ATTR_SUCCESS; +} + +PyObject* SCA_PythonMouse::pyattr_get_visible(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) +{ + SCA_PythonMouse* self = static_cast<SCA_PythonMouse*>(self_v); + + int visible; + + if (self->m_canvas->GetMouseState() == RAS_ICanvas::MOUSE_INVISIBLE) + visible = 0; + else + visible = 1; + + return PyBool_FromLong(visible); +} + +int SCA_PythonMouse::pyattr_set_visible(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value) +{ + SCA_PythonMouse* self = static_cast<SCA_PythonMouse*>(self_v); + + int visible = PyObject_IsTrue(value); + + if (visible == -1) + { + PyErr_SetString(PyExc_AttributeError, "SCA_PythonMouse.visible = bool: SCA_PythonMouse, expected True or False"); + return PY_SET_ATTR_FAIL; + } + + if (visible) + self->m_canvas->SetMouseState(RAS_ICanvas::MOUSE_NORMAL); + else + self->m_canvas->SetMouseState(RAS_ICanvas::MOUSE_INVISIBLE); + + return PY_SET_ATTR_SUCCESS; +} + +#endif diff --git a/source/gameengine/GameLogic/SCA_PythonMouse.h b/source/gameengine/GameLogic/SCA_PythonMouse.h new file mode 100644 index 00000000000..b3ce107995b --- /dev/null +++ b/source/gameengine/GameLogic/SCA_PythonMouse.h @@ -0,0 +1,60 @@ +/** + * SCA_PythonMouse.h + * + * $Id$ + * + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * All rights reserved. + * + * The Original Code is: all of this file. + * + * Contributor(s): none yet. + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#ifndef __KX_PYMOUSE +#define __KX_PYMOUSE + +#include "PyObjectPlus.h" + +class SCA_PythonMouse : public PyObjectPlus +{ + Py_Header; + class SCA_IInputDevice *m_mouse; + class RAS_ICanvas *m_canvas; +public: + SCA_PythonMouse(class SCA_IInputDevice* mouse, class RAS_ICanvas* canvas); + virtual ~SCA_PythonMouse(); + + void Show(bool visible); + +#ifndef DISABLE_PYTHON + KX_PYMETHOD_DOC(SCA_PythonMouse, show); + + static PyObject* pyattr_get_events(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef); + static PyObject* pyattr_get_position(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef); + static int pyattr_set_position(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject* value); + static PyObject* pyattr_get_visible(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef); + static int pyattr_set_visible(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject* value); +#endif +}; + +#endif //__KX_PYMOUSE + diff --git a/source/gameengine/GamePlayer/ghost/GPG_Canvas.cpp b/source/gameengine/GamePlayer/ghost/GPG_Canvas.cpp index 0a96fbbe503..4eb9a4cfcd7 100644 --- a/source/gameengine/GamePlayer/ghost/GPG_Canvas.cpp +++ b/source/gameengine/GamePlayer/ghost/GPG_Canvas.cpp @@ -79,6 +79,8 @@ void GPG_Canvas::SetMousePosition(int x, int y) void GPG_Canvas::SetMouseState(RAS_MouseState mousestate) { + m_mousestate = mousestate; + if (m_window) { switch (mousestate) diff --git a/source/gameengine/Ketsji/KX_KetsjiEngine.h b/source/gameengine/Ketsji/KX_KetsjiEngine.h index 36db8685afb..b3549c5fdab 100644 --- a/source/gameengine/Ketsji/KX_KetsjiEngine.h +++ b/source/gameengine/Ketsji/KX_KetsjiEngine.h @@ -213,6 +213,8 @@ public: RAS_IRasterizer* GetRasterizer(){return m_rasterizer;}; RAS_ICanvas* GetCanvas(){return m_canvas;}; RAS_IRenderTools* GetRenderTools(){return m_rendertools;}; + SCA_IInputDevice* GetKeyboardDevice(){return m_keyboarddevice;}; + SCA_IInputDevice* GetMouseDevice(){return m_mousedevice;}; /// Dome functions void InitDome(short res, short mode, short angle, float resbuf, short tilt, struct Text* text); diff --git a/source/gameengine/Ketsji/KX_PythonInit.cpp b/source/gameengine/Ketsji/KX_PythonInit.cpp index 082f802010d..675cf3c09f6 100644 --- a/source/gameengine/Ketsji/KX_PythonInit.cpp +++ b/source/gameengine/Ketsji/KX_PythonInit.cpp @@ -73,6 +73,8 @@ extern "C" { #include "SCA_PropertySensor.h" #include "SCA_RandomActuator.h" #include "SCA_KeyboardSensor.h" /* IsPrintable, ToCharacter */ +#include "SCA_PythonKeyboard.h" +#include "SCA_PythonMouse.h" #include "KX_ConstraintActuator.h" #include "KX_IpoActuator.h" #include "KX_SoundActuator.h" @@ -1280,6 +1282,13 @@ PyObject* initGameLogic(KX_KetsjiEngine *engine, KX_Scene* scene) // quick hack PyDict_SetItemString(d, "globalDict", item=PyDict_New()); Py_DECREF(item); + // Add keyboard and mouse attributes to this module + SCA_PythonKeyboard* pykeyb = new SCA_PythonKeyboard(gp_KetsjiEngine->GetKeyboardDevice()); + PyDict_SetItemString(d, "keyboard", pykeyb->NewProxy(true)); + + SCA_PythonMouse* pymouse = new SCA_PythonMouse(gp_KetsjiEngine->GetMouseDevice(), gp_Canvas); + PyDict_SetItemString(d, "mouse", pymouse->NewProxy(true)); + ErrorObject = PyUnicode_FromString("GameLogic.error"); PyDict_SetItemString(d, "error", ErrorObject); Py_DECREF(ErrorObject); @@ -1978,7 +1987,7 @@ void setupGamePython(KX_KetsjiEngine* ketsjiengine, KX_Scene* startscene, Main * #endif /* could be done a lot more nicely, but for now a quick way to get bge.* working */ - PyRun_SimpleString("__import__('sys').modules['bge']=[mod for mod in (type(__builtins__)('bge'), ) if mod.__dict__.update({'logic':__import__('GameLogic'), 'render':__import__('Rasterizer'), 'keys':__import__('GameKeys'), 'constraints':__import__('PhysicsConstraints'), 'types':__import__('GameTypes')}) is None][0]"); + PyRun_SimpleString("__import__('sys').modules['bge']=[mod for mod in (type(__builtins__)('bge'), ) if mod.__dict__.update({'logic':__import__('GameLogic'), 'render':__import__('Rasterizer'), 'events':__import__('GameKeys'), 'constraints':__import__('PhysicsConstraints'), 'types':__import__('GameTypes')}) is None][0]"); } static struct PyModuleDef Rasterizer_module_def = { @@ -2257,6 +2266,15 @@ PyObject* initGameKeys() KX_MACRO_addTypesToDict(d, PAGEDOWNKEY, SCA_IInputDevice::KX_PAGEDOWNKEY); KX_MACRO_addTypesToDict(d, ENDKEY, SCA_IInputDevice::KX_ENDKEY); + // MOUSE + KX_MACRO_addTypesToDict(d, LEFTMOUSE, SCA_IInputDevice::KX_LEFTMOUSE); + KX_MACRO_addTypesToDict(d, MIDDLEMOUSE, SCA_IInputDevice::KX_MIDDLEMOUSE); + KX_MACRO_addTypesToDict(d, RIGHTMOUSE, SCA_IInputDevice::KX_RIGHTMOUSE); + KX_MACRO_addTypesToDict(d, WHEELUPMOUSE, SCA_IInputDevice::KX_WHEELUPMOUSE); + KX_MACRO_addTypesToDict(d, WHEELDOWNMOUSE, SCA_IInputDevice::KX_WHEELDOWNMOUSE); + KX_MACRO_addTypesToDict(d, MOUSEX, SCA_IInputDevice::KX_MOUSEX); + KX_MACRO_addTypesToDict(d, MOUSEY, SCA_IInputDevice::KX_MOUSEY); + // Check for errors if (PyErr_Occurred()) { diff --git a/source/gameengine/Ketsji/KX_PythonInitTypes.cpp b/source/gameengine/Ketsji/KX_PythonInitTypes.cpp index 278e0236b2e..6b9d7a2cccf 100644 --- a/source/gameengine/Ketsji/KX_PythonInitTypes.cpp +++ b/source/gameengine/Ketsji/KX_PythonInitTypes.cpp @@ -79,6 +79,8 @@ #include "SCA_RandomSensor.h" #include "SCA_XNORController.h" #include "SCA_XORController.h" +#include "SCA_PythonKeyboard.h" +#include "SCA_PythonMouse.h" #include "KX_IpoActuator.h" #include "KX_NearSensor.h" #include "KX_RadarSensor.h" @@ -239,6 +241,8 @@ void initPyTypes(void) PyType_Ready_Attr(dict, SCA_XNORController, init_getset); PyType_Ready_Attr(dict, SCA_XORController, init_getset); PyType_Ready_Attr(dict, SCA_IController, init_getset); + PyType_Ready_Attr(dict, SCA_PythonKeyboard, init_getset); + PyType_Ready_Attr(dict, SCA_PythonMouse, init_getset); } diff --git a/source/gameengine/PyDoc/GameKeys.py b/source/gameengine/PyDoc/GameKeys.py index e798f6c901b..8e5c7d3ae24 100644 --- a/source/gameengine/PyDoc/GameKeys.py +++ b/source/gameengine/PyDoc/GameKeys.py @@ -150,6 +150,15 @@ Example:: @var SPACEKEY: @var TABKEY: +@group Mouse Events: LEFTMOUSE, MIDDLEMOUSE, RIGHTMOUSE, WHEELUPMOUSE, WHEELDOWNMOUSE, MOUSEX, MOUSEY +@var LEFTMOUSE: +@var MIDDLEMOUSE: +@var RIGHTMOUSE: +@var WHEELUPMOUSE: +@var WHEELDOWNMOUSE: +@var MOUSEX: +@var MOUSEY: + """ def EventToString(event): diff --git a/source/gameengine/PyDoc/GameLogic.py b/source/gameengine/PyDoc/GameLogic.py index 56a9ea0d4f4..4bef65e42b3 100644 --- a/source/gameengine/PyDoc/GameLogic.py +++ b/source/gameengine/PyDoc/GameLogic.py @@ -308,6 +308,9 @@ Documentation for the GameLogic Module. later on with the game load/save actuators. note: only python built in types such as int/string/bool/float/tuples/lists can be saved, GameObjects, Actuators etc will not work as expectred. + +@var keyboard: The current keyboard wrapped in an SCA_PythonKeyboard object. +@var mouse: The current mouse wrapped in an SCA_PythonMouse object. """ import GameTypes diff --git a/source/gameengine/PyDoc/GameTypes.py b/source/gameengine/PyDoc/GameTypes.py index 839f228c3d5..45d08d2e96a 100644 --- a/source/gameengine/PyDoc/GameTypes.py +++ b/source/gameengine/PyDoc/GameTypes.py @@ -108,6 +108,43 @@ class SCA_ILogicBrick(CValue): """ #} +class SCA_PythonKeyboard(PyObjectPlus) + """ + The current keyboard. + @ivar events: a list of pressed keys that have either been pressed, or just released, or are active this frame. (read-only). + + - 'keycode' matches the values in L{GameKeys}. + - 'status' uses... + - L{GameLogic.KX_INPUT_NONE} + - L{GameLogic.KX_INPUT_JUST_ACTIVATED} + - L{GameLogic.KX_INPUT_ACTIVE} + - L{GameLogic.KX_INPUT_JUST_RELEASED} + + @type events: list [[keycode, status], ...] + """ + pass + +class SCA_PythonMouse(PyObjectPlus) + """ + The current mouse. + + @ivar events: a list of pressed buttons that have either been pressed, or just released, or are active this frame. (read-only). + + - 'keycode' matches the values in L{GameKeys}. + - 'status' uses... + - L{GameLogic.KX_INPUT_NONE} + - L{GameLogic.KX_INPUT_JUST_ACTIVATED} + - L{GameLogic.KX_INPUT_ACTIVE} + - L{GameLogic.KX_INPUT_JUST_RELEASED} + + @type events: list [[keycode, status], ...] + @ivar position: The normalized x and y position of the mouse cursor. + @type position: list [x, y] + @ivar visible: The visibility of the mouse cursor + @type visible: boolean + """ + pass + class SCA_IObject(CValue): """ This class has no python functions diff --git a/source/gameengine/Rasterizer/RAS_ICanvas.h b/source/gameengine/Rasterizer/RAS_ICanvas.h index 2ab06be26e7..0821e369f75 100644 --- a/source/gameengine/Rasterizer/RAS_ICanvas.h +++ b/source/gameengine/Rasterizer/RAS_ICanvas.h @@ -172,12 +172,21 @@ public: int y )=0; + virtual + RAS_MouseState + GetMouseState() + { + return m_mousestate; + } + virtual void MakeScreenShot( const char* filename )=0; +protected: + RAS_MouseState m_mousestate; #ifdef WITH_CXX_GUARDEDALLOC public: |