From 4c53f38756976704bab11a3dd8c33c71d926e6b8 Mon Sep 17 00:00:00 2001 From: Kester Maddock Date: Sat, 26 Jun 2004 09:15:41 +0000 Subject: Minor Fixes: Better use of booleans for python #include fixes for Windows Python Doc fixes Use the farthest vertex as the face position when z sorting faces. (Camera is on -z axis!) --- source/gameengine/GameLogic/SCA_ILogicBrick.cpp | 5 +- source/gameengine/GameLogic/SCA_RandomActuator.cpp | 2 +- .../GamePlayer/common/GPC_PolygonMaterial.cpp | 24 ++-- .../GamePlayer/ghost/GPG_Application.cpp | 9 ++ source/gameengine/Ketsji/KX_Scene.h | 18 +-- source/gameengine/Ketsji/KX_SceneActuator.cpp | 13 +- source/gameengine/Ketsji/KX_TouchSensor.cpp | 18 +-- source/gameengine/PyDoc/GameKeys.py | 76 +++++++++--- source/gameengine/PyDoc/GameLogic.py | 137 ++++++++++++++------- source/gameengine/PyDoc/KX_Camera.py | 2 +- source/gameengine/PyDoc/KX_Scene.py | 2 + source/gameengine/PyDoc/SCA_KeyboardSensor.py | 4 +- source/gameengine/Rasterizer/RAS_MaterialBucket.h | 7 +- source/gameengine/Rasterizer/RAS_MeshObject.cpp | 9 +- 14 files changed, 196 insertions(+), 130 deletions(-) (limited to 'source/gameengine') diff --git a/source/gameengine/GameLogic/SCA_ILogicBrick.cpp b/source/gameengine/GameLogic/SCA_ILogicBrick.cpp index 422f6d9cf0d..1780458ba45 100644 --- a/source/gameengine/GameLogic/SCA_ILogicBrick.cpp +++ b/source/gameengine/GameLogic/SCA_ILogicBrick.cpp @@ -309,12 +309,9 @@ PyObject* SCA_ILogicBrick::PyGetExecutePriority(PyObject* self, /* Conversions for making life better. */ bool SCA_ILogicBrick::PyArgToBool(int boolArg) { - if (boolArg == KX_TRUE) { + if (boolArg) { return true; - } else if (boolArg == KX_FALSE){ - return false; } else { - ; /* error: bad conversion: how to catch this? */ return false; } } diff --git a/source/gameengine/GameLogic/SCA_RandomActuator.cpp b/source/gameengine/GameLogic/SCA_RandomActuator.cpp index d483f400064..b4a28291e66 100644 --- a/source/gameengine/GameLogic/SCA_RandomActuator.cpp +++ b/source/gameengine/GameLogic/SCA_RandomActuator.cpp @@ -464,7 +464,7 @@ PyObject* SCA_RandomActuator::PySetBoolConst(PyObject* self, } m_distribution = KX_RANDOMACT_BOOL_CONST; - if (paraArg == KX_TRUE) { + if (paraArg) { m_parameter1 = 1; } diff --git a/source/gameengine/GamePlayer/common/GPC_PolygonMaterial.cpp b/source/gameengine/GamePlayer/common/GPC_PolygonMaterial.cpp index 472d921dbe9..c4715c5f060 100644 --- a/source/gameengine/GamePlayer/common/GPC_PolygonMaterial.cpp +++ b/source/gameengine/GamePlayer/common/GPC_PolygonMaterial.cpp @@ -34,6 +34,19 @@ #include #endif +#ifdef WIN32 +#include +#endif // WIN32 +#ifdef __APPLE__ +#include +#include +#else +#include +#include +#endif + + + #include "GPC_PolygonMaterial.h" #include "MT_Vector3.h" #include "RAS_IRasterizer.h" @@ -66,17 +79,6 @@ #include "IMB_imbuf_types.h" /* end of blender include block */ -#ifdef WIN32 -#include -#endif // WIN32 -#ifdef __APPLE__ -#include -#include -#else -#include -#include -#endif - static Image *fCurpage=0; static int fCurtile=0, fCurmode=0, fCurTileXRep=0, fCurTileYRep=0; static short fTexWindx, fTexWindy, fTexWinsx, fTexWinsy; diff --git a/source/gameengine/GamePlayer/ghost/GPG_Application.cpp b/source/gameengine/GamePlayer/ghost/GPG_Application.cpp index 868f9f1ea40..48859392b54 100644 --- a/source/gameengine/GamePlayer/ghost/GPG_Application.cpp +++ b/source/gameengine/GamePlayer/ghost/GPG_Application.cpp @@ -37,6 +37,15 @@ #ifdef WIN32 #pragma warning (disable:4786) // suppress stl-MSVC debug info warning + #include +#endif + +#ifdef __APPLE__ +#include +#include +#else +#include +#include #endif #include "GPG_Application.h" diff --git a/source/gameengine/Ketsji/KX_Scene.h b/source/gameengine/Ketsji/KX_Scene.h index c32cd4182aa..1df126ce1b0 100644 --- a/source/gameengine/Ketsji/KX_Scene.h +++ b/source/gameengine/Ketsji/KX_Scene.h @@ -57,38 +57,38 @@ struct SM_MaterialProps; struct SM_ShapeProps; +class GEN_HashedPtr; class CListValue; -class RAS_BucketManager; -class KX_Camera; +class CValue; class SCA_LogicManager; class SCA_KeyboardManager; class SCA_TimeEventManager; class SCA_MouseManager; -class KX_WorldInfo; +class SCA_ISystem; +class SCA_IInputDevice; class SND_Scene; class SND_IAudioDevice; class NG_NetworkDeviceInterface; class NG_NetworkScene; +class SG_IObject; class SG_Node; class SG_Tree; +class KX_WorldInfo; class KX_Camera; -class GEN_HashedPtr; class KX_GameObject; -class SCA_ISystem; -class SCA_IInputDevice; +class KX_LightObject; +class RAS_BucketManager; class RAS_BucketManager; class RAS_MaterialBucket; class RAS_IPolyMaterial; class RAS_IRasterizer; class RAS_IRenderTools; -class CValue; -class SG_IObject; /** * The KX_Scene holds all data for an independent scene. It relates * KX_Objects to the specific objects in the modules. * */ -class KX_Scene : public SCA_IScene, public PyObjectPlus +class KX_Scene : public PyObjectPlus, public SCA_IScene { Py_Header; protected: diff --git a/source/gameengine/Ketsji/KX_SceneActuator.cpp b/source/gameengine/Ketsji/KX_SceneActuator.cpp index 996b671094a..721d01a3da3 100644 --- a/source/gameengine/Ketsji/KX_SceneActuator.cpp +++ b/source/gameengine/Ketsji/KX_SceneActuator.cpp @@ -247,18 +247,7 @@ PyObject* KX_SceneActuator::PySetUseRestart(PyObject* self, return NULL; } - if (boolArg == KX_TRUE) - { - m_restart = true; - } - else if (boolArg == KX_FALSE) - { - m_restart = false; - } - else - { - ; /* internal error */ - } + m_restart = boolArg != 0; Py_Return; } diff --git a/source/gameengine/Ketsji/KX_TouchSensor.cpp b/source/gameengine/Ketsji/KX_TouchSensor.cpp index 9baa9377f02..9091a41d054 100644 --- a/source/gameengine/Ketsji/KX_TouchSensor.cpp +++ b/source/gameengine/Ketsji/KX_TouchSensor.cpp @@ -369,15 +369,7 @@ PyObject* KX_TouchSensor::PyGetTouchMaterial(PyObject* self, PyObject* args, PyObject* kwds) { - int retval = 0; - - if (m_bFindMaterial) { - retval = KX_TRUE; - } else { - retval = KX_FALSE; - } - - return PyInt_FromLong(retval); + return PyInt_FromLong(m_bFindMaterial); } /* 6. setTouchMaterial */ @@ -394,13 +386,7 @@ PyObject* KX_TouchSensor::PySetTouchMaterial(PyObject* self, PyObject* args, PyO return NULL; } - if (pulseArg == KX_TRUE) { - m_bFindMaterial = true; - } else if (pulseArg == KX_FALSE){ - m_bFindMaterial = false; - } else { - ; /* internal error */ - } + m_bFindMaterial = pulseArg != 0; Py_Return; } diff --git a/source/gameengine/PyDoc/GameKeys.py b/source/gameengine/PyDoc/GameKeys.py index 8dbc040368b..268fb9cc172 100644 --- a/source/gameengine/PyDoc/GameKeys.py +++ b/source/gameengine/PyDoc/GameKeys.py @@ -101,28 +101,66 @@ Function Keys Other Keys ---------- - - ESCKEY - - TABKEY - - RETKEY - - SPACEKEY - - LINEFEEDKEY - - BACKSPACEKEY - - DELKEY - - SEMICOLONKEY - - PERIODKEY - - COMMAKEY - - QUOTEKEY - ACCENTGRAVEKEY - - MINUSKEY - - SLASHKEY - BACKSLASHKEY + - BACKSPACEKEY + - COMMAKEY + - DELKEY + - ENDKEY - EQUALKEY - - LEFTBRACKETKEY - - RIGHTBRACKETKEY - - PAUSEKEY - - INSERTKEY + - ESCKEY - HOMEKEY - - PAGEUPKEY + - INSERTKEY + - LEFTBRACKETKEY + - LINEFEEDKEY + - MINUSKEY - PAGEDOWNKEY - - ENDKEY + - PAGEUPKEY + - PAUSEKEY + - PERIODKEY + - QUOTEKEY + - RIGHTBRACKETKEY + - RETKEY + - SEMICOLONKEY + - SLASHKEY + - SPACEKEY + - TABKEY + +Example:: + # Set a connected keyboard sensor to accept F1 + import GameLogic + import GameKeys + + co = GameLogic.getCurrentController() + # 'Keyboard' is a keyboard sensor + sensor = co.getSensor('Keyboard') + sensor.setKey(GameKeys.F1KEY) + +Example:: + # Do the all keys thing + import GameLogic + import GameKeys + + # status: these should be added to a module somewhere + KX_NO_INPUTSTATUS = 0 + KX_JUSTACTIVATED = 1 + KX_ACTIVE = 2 + KX_JUSTRELEASED = 3 + + co = GameLogic.getCurrentController() + # 'Keyboard' is a keyboard sensor + sensor = co.getSensor('Keyboard') + keylist = sensor.getPressedKeys() + for key in keylist: + # key[0] == GameKeys.keycode, key[1] = status + if key[1] == KX_JUSTACTIVATED: + if key[0] == GameKeys.WKEY: + # Activate Forward! + if key[0] == GameKeys.SKEY: + # Activate Backward! + if key[0] == GameKeys.AKEY: + # Activate Left! + if key[0] == GameKeys.DKEY: + # Activate Right! + """ diff --git a/source/gameengine/PyDoc/GameLogic.py b/source/gameengine/PyDoc/GameLogic.py index 08f71e50f97..d4fccc7c3a0 100644 --- a/source/gameengine/PyDoc/GameLogic.py +++ b/source/gameengine/PyDoc/GameLogic.py @@ -17,65 +17,108 @@ Documentation for the GameLogic Module. # To get the game object associated with this controller: obj = co.getOwner() - L{KX_GameObject} and possibly L{KX_Camera} and L{KX_Light} methods are + L{KX_GameObject} and L{KX_Camera} or L{KX_Light} methods are available depending on the type of object:: # To get a sensor linked to this controller. # "sensorname" is the name of the sensor as defined in the Blender interface. + # +---------------------+ +--------+ + # | Sensor "sensorname" +--+ Python + + # +---------------------+ +--------+ sens = co.getSensor("sensorname") - L{KX_NetworkMessageSensor}, L{KX_RaySensor}, L{KX_TouchSensor}, L{SCA_KeyboardSensor}, - L{SCA_MouseSensor}, L{SCA_PropertySensor} and L{SCA_RandomSensor} methods are available, - depending on the type of sensor:: + # To get a list of all sensors: - sensors = co.B{getSensors}() + sensors = co.getSensors() + + See the sensor's reference for available methods: + - L{KX_NetworkMessageSensor} + - L{KX_RaySensor} + - L{KX_MouseFocusSensor} + - L{KX_NearSensor} + - L{KX_RadarSensor} + - L{KX_TouchSensor} + - L{SCA_KeyboardSensor} + - L{SCA_MouseSensor} + - L{SCA_PropertySensor} + - L{SCA_RandomSensor} + + You can also access actuators linked to the controller:: + # To get an actuator attached to the controller: + # +--------+ +-------------------------+ + # + Python +--+ Actuator "actuatorname" | + # +--------+ +-------------------------+ + actuator = co.getActuator("actuatorname") + + # Activate an actuator + GameLogic.addActiveActuator(actuator, True) + + See the actuator's reference for available methods: + - L{BL_ActionActuator} + - L{KX_CameraActuator} + - L{KX_CDActuator} + - L{KX_ConstraintActuator} + - L{KX_GameActuator} + - L{KX_IpoActuator} + - L{KX_NetworkMessageActuator} + - L{KX_ObjectActuator} + - L{KX_SCA_AddObjectActuator} + - L{KX_SCA_EndObjectActuator} + - L{KX_SCA_ReplaceMeshActuator} + - L{KX_SceneActuator} + - L{KX_SoundActuator} + - L{KX_TrackToActuator} + - L{KX_VisibilityActuator} + - L{SCA_PropertyActuator} + - L{SCA_RandomActuator} + + There are also methods to access the current L{KX_Scene}:: + # Get the current scene + scene = GameLogic.getCurrentScene() + + # Get the current camera + cam = scene.active_camera + Matricies as used by the game engine are B{row major}:: + matrix[row][col] = blah + L{KX_Camera} has some examples using matricies. -Constants -========= - - KX_TRUE: True value used by some modules - - KX_FALSE: False value used by some modules. +@group Constants: KX_TRUE, KX_FALSE +@var KX_TRUE: True value used by some modules. +@var KX_FALSE: False value used by some modules. -Property Sensor ---------------- - Tests that the property sensor is able to perform. See L{SCA_PropertySensor} - - KX_PROPSENSOR_EQUAL: Activate when the property is equal to the sensor value. - - KX_PROPSENSOR_NOTEQUAL: Activate when the property is not equal to the sensor value. - - KX_PROPSENSOR_INTERVAL: Activate when the property is between the specified limits. - - KX_PROPSENSOR_CHANGED: Activate when the property changes - - KX_PROPSENSOR_EXPRESSION: Activate when the expression matches +@group Property Sensor: KX_PROPSENSOR_EQUAL, KX_PROPSENSOR_NOTEQUAL, KX_PROPSENSOR_INTERVAL, KX_PROPSENSOR_CHANGED, KX_PROPSENSOR_EXPRESSION +@var KX_PROPSENSOR_EQUAL: Activate when the property is equal to the sensor value. +@var KX_PROPSENSOR_NOTEQUAL: Activate when the property is not equal to the sensor value. +@var KX_PROPSENSOR_INTERVAL: Activate when the property is between the specified limits. +@var KX_PROPSENSOR_CHANGED: Activate when the property changes +@var KX_PROPSENSOR_EXPRESSION: Activate when the expression matches -Constraint Actuator -------------------- - The axis and type (location/rotation) of constraint. See L{KX_ConstraintActuator} - - KX_CONSTRAINTACT_LOCX - - KX_CONSTRAINTACT_LOCY - - KX_CONSTRAINTACT_LOCZ - - KX_CONSTRAINTACT_ROTX - - KX_CONSTRAINTACT_ROTY - - KX_CONSTRAINTACT_ROTZ +@group Constraint Actuator: KX_CONSTRAINTACT_LOCX, KX_CONSTRAINTACT_LOCY, KX_CONSTRAINTACT_LOCZ, KX_CONSTRAINTACT_ROTX, KX_CONSTRAINTACT_ROTY, KX_CONSTRAINTACT_ROTZ +@var KX_CONSTRAINTACT_LOCX: See L{KX_ConstraintActuator} +@var KX_CONSTRAINTACT_LOCY: See L{KX_ConstraintActuator} +@var KX_CONSTRAINTACT_LOCZ: See L{KX_ConstraintActuator} +@var KX_CONSTRAINTACT_ROTX: See L{KX_ConstraintActuator} +@var KX_CONSTRAINTACT_ROTY: See L{KX_ConstraintActuator} +@var KX_CONSTRAINTACT_ROTZ: See L{KX_ConstraintActuator} -IPO Actuator ------------- - IPO Types. See L{KX_IpoActuator} - - KX_IPOACT_PLAY - - KX_IPOACT_PINGPONG - - KX_IPOACT_FLIPPER - - KX_IPOACT_LOOPSTOP - - KX_IPOACT_LOOPEND +@group IPO Actuator: KX_IPOACT_PLAY, KX_IPOACT_PINGPONG, KX_IPOACT_FLIPPER, KX_IPOACT_LOOPSTOP, KX_IPOACT_LOOPEND +@var KX_IPOACT_PLAY: See L{KX_IpoActuator} +@var KX_IPOACT_PINGPONG: See L{KX_IpoActuator} +@var KX_IPOACT_FLIPPER: See L{KX_IpoActuator} +@var KX_IPOACT_LOOPSTOP: See L{KX_IpoActuator} +@var KX_IPOACT_LOOPEND: See L{KX_IpoActuator} -Random Distributions --------------------- - See L{SCA_RandomActuator} - - KX_RANDOMACT_BOOL_CONST - - KX_RANDOMACT_BOOL_UNIFORM - - KX_RANDOMACT_BOOL_BERNOUILLI - - KX_RANDOMACT_INT_CONST - - KX_RANDOMACT_INT_UNIFORM - - KX_RANDOMACT_INT_POISSON - - KX_RANDOMACT_FLOAT_CONST - - KX_RANDOMACT_FLOAT_UNIFORM - - KX_RANDOMACT_FLOAT_NORMAL - - KX_RANDOMACT_FLOAT_NEGATIVE_EXPONENTIAL +@group Random Distributions: KX_RANDOMACT_BOOL_CONST, KX_RANDOMACT_BOOL_UNIFORM, KX_RANDOMACT_BOOL_BERNOUILLI, KX_RANDOMACT_INT_CONST, KX_RANDOMACT_INT_UNIFORM, KX_RANDOMACT_INT_POISSON, KX_RANDOMACT_FLOAT_CONST, KX_RANDOMACT_FLOAT_UNIFORM, KX_RANDOMACT_FLOAT_NORMAL, KX_RANDOMACT_FLOAT_NEGATIVE_EXPONENTIAL +@var KX_RANDOMACT_BOOL_CONST: See L{SCA_RandomActuator} +@var KX_RANDOMACT_BOOL_UNIFORM: See L{SCA_RandomActuator} +@var KX_RANDOMACT_BOOL_BERNOUILLI: See L{SCA_RandomActuator} +@var KX_RANDOMACT_INT_CONST: See L{SCA_RandomActuator} +@var KX_RANDOMACT_INT_UNIFORM: See L{SCA_RandomActuator} +@var KX_RANDOMACT_INT_POISSON: See L{SCA_RandomActuator} +@var KX_RANDOMACT_FLOAT_CONST: See L{SCA_RandomActuator} +@var KX_RANDOMACT_FLOAT_UNIFORM: See L{SCA_RandomActuator} +@var KX_RANDOMACT_FLOAT_NORMAL: See L{SCA_RandomActuator} +@var KX_RANDOMACT_FLOAT_NEGATIVE_EXPONENTIAL: See L{SCA_RandomActuator} """ diff --git a/source/gameengine/PyDoc/KX_Camera.py b/source/gameengine/PyDoc/KX_Camera.py index 1d1b7197977..939da3da591 100644 --- a/source/gameengine/PyDoc/KX_Camera.py +++ b/source/gameengine/PyDoc/KX_Camera.py @@ -94,7 +94,7 @@ class KX_Camera(KX_GameObject): co = GameLogic.getCurrentController() cam = co.GetOwner() - # Test point [0.0, 0.0, 0.0]" + # Test point [0.0, 0.0, 0.0] if (cam.pointInsideFrustum([0.0, 0.0, 0.0])): # Point is inside frustum ! # Do something useful ! diff --git a/source/gameengine/PyDoc/KX_Scene.py b/source/gameengine/PyDoc/KX_Scene.py index 2ba57dc9d78..4a0a7a9556d 100644 --- a/source/gameengine/PyDoc/KX_Scene.py +++ b/source/gameengine/PyDoc/KX_Scene.py @@ -34,6 +34,8 @@ class KX_Scene: # Depth is negative and decreasing further from the camera depth = obj.position[0]*cam.world_to_camera[2][0] + obj.position[1]*cam.world_to_camera[2][1] + obj.position[2]*cam.world_to_camera[2][2] + cam.world_to_camera[2][3] + + @bug: All attributes are read only at the moment. @ivar name: The scene's name @type name: string diff --git a/source/gameengine/PyDoc/SCA_KeyboardSensor.py b/source/gameengine/PyDoc/SCA_KeyboardSensor.py index e90fb9cc2f1..2f741f7d6a2 100644 --- a/source/gameengine/PyDoc/SCA_KeyboardSensor.py +++ b/source/gameengine/PyDoc/SCA_KeyboardSensor.py @@ -6,7 +6,7 @@ class SCA_KeyboardSensor(SCA_ISensor): """ A keyboard sensor detects player key presses. - See module GameKeys for keycode values. + See module L{GameKeys} for keycode values. """ def getKey(): @@ -18,7 +18,7 @@ class SCA_KeyboardSensor(SCA_ISensor): """ Set the key this sensor should listen for. - @type keycode: keycode from GameKeys module + @type keycode: keycode from L{GameKeys} module """ def getHold1(): diff --git a/source/gameengine/Rasterizer/RAS_MaterialBucket.h b/source/gameengine/Rasterizer/RAS_MaterialBucket.h index 28185dabca6..480bd9f1d11 100644 --- a/source/gameengine/Rasterizer/RAS_MaterialBucket.h +++ b/source/gameengine/Rasterizer/RAS_MaterialBucket.h @@ -70,10 +70,11 @@ public: class KX_MeshSlot { public: - void* m_clientObj; + void* m_clientObj; RAS_Deformer* m_pDeformer; // __NLA - double* m_OpenGLMatrix; - class RAS_MeshObject* m_mesh; + double* m_OpenGLMatrix; + class RAS_MeshObject* m_mesh; + mutable bool m_bVisible; // for visibility mutable bool m_bObjectColor; mutable MT_Vector4 m_RGBAcolor; diff --git a/source/gameengine/Rasterizer/RAS_MeshObject.cpp b/source/gameengine/Rasterizer/RAS_MeshObject.cpp index c048479a46e..ff5e674150b 100644 --- a/source/gameengine/Rasterizer/RAS_MeshObject.cpp +++ b/source/gameengine/Rasterizer/RAS_MeshObject.cpp @@ -564,14 +564,14 @@ RAS_MeshObject::polygonSlot::polygonSlot(const MT_Vector3 &pnorm, const MT_Scala { vert = mesh->GetVertex(base.m_vtxarray, base.m_indexarray[i], poly->GetMaterial()->GetPolyMaterial()); float z = MT_dot(pnorm, vert->getLocalXYZ()) + pval; - if (z > m_z) + if (z < m_z) m_z = z; } } void RAS_MeshObject::SortPolygons(const MT_Transform &transform) { - + // Extract camera Z plane... const MT_Vector3 pnorm(transform.getBasis()[2]); const MT_Scalar pval = transform.getOrigin()[2]; @@ -593,6 +593,7 @@ void RAS_MeshObject::SortPolygons(const MT_Transform &transform) } } + // Clear current array data. for (RAS_MaterialBucket::Set::iterator it = m_materials.begin();it!=m_materials.end();++it) { vector *indexcache = &GetArrayOptimizer((*it)->GetPolyMaterial())->m_IndexArrayCache1; @@ -600,8 +601,6 @@ void RAS_MeshObject::SortPolygons(const MT_Transform &transform) (*iit)->clear(); } - //ClearArrayData(); - std::multiset::iterator sit = solidpolyset.begin(); for (; sit != solidpolyset.end(); ++sit) SchedulePoly((*sit).m_poly->GetVertexIndexBase(), (*sit).m_poly->VertexCount(), (*sit).m_poly->GetMaterial()->GetPolyMaterial()); @@ -659,7 +658,7 @@ void RAS_MeshObject::SchedulePolygons(const MT_Transform &transform, int drawing m_bModified = false; } - if (m_zsort) + if (m_zsort && rasty->GetDrawingMode() >= RAS_IRasterizer::KX_SOLID) { SortPolygons(transform); } -- cgit v1.2.3