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!)
This commit is contained in:
Kester Maddock 2004-06-26 09:15:41 +00:00
parent f69cc652e2
commit 4c53f38756
14 changed files with 199 additions and 133 deletions

@ -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;
}
}

@ -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;
}

@ -34,6 +34,19 @@
#include <config.h>
#endif
#ifdef WIN32
#include <windows.h>
#endif // WIN32
#ifdef __APPLE__
#include <OpenGL/gl.h>
#include <OpenGL/glu.h>
#else
#include <GL/gl.h>
#include <GL/glu.h>
#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 <windows.h>
#endif // WIN32
#ifdef __APPLE__
#include <OpenGL/gl.h>
#include <OpenGL/glu.h>
#else
#include <GL/gl.h>
#include <GL/glu.h>
#endif
static Image *fCurpage=0;
static int fCurtile=0, fCurmode=0, fCurTileXRep=0, fCurTileYRep=0;
static short fTexWindx, fTexWindy, fTexWinsx, fTexWinsy;

@ -37,6 +37,15 @@
#ifdef WIN32
#pragma warning (disable:4786) // suppress stl-MSVC debug info warning
#include <windows.h>
#endif
#ifdef __APPLE__
#include <OpenGL/gl.h>
#include <OpenGL/glu.h>
#else
#include <GL/gl.h>
#include <GL/glu.h>
#endif
#include "GPG_Application.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:

@ -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;
}

@ -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;
}

@ -101,28 +101,66 @@ Function Keys
Other Keys
----------
- ESCKEY
- TABKEY
- RETKEY
- SPACEKEY
- LINEFEEDKEY
- BACKSPACEKEY
- DELKEY
- SEMICOLONKEY
- PERIODKEY
- COMMAKEY
- QUOTEKEY
- ACCENTGRAVEKEY
- MINUSKEY
- SLASHKEY
- BACKSLASHKEY
- EQUALKEY
- LEFTBRACKETKEY
- RIGHTBRACKETKEY
- PAUSEKEY
- INSERTKEY
- HOMEKEY
- PAGEUPKEY
- PAGEDOWNKEY
- BACKSPACEKEY
- COMMAKEY
- DELKEY
- ENDKEY
- EQUALKEY
- ESCKEY
- HOMEKEY
- INSERTKEY
- LEFTBRACKETKEY
- LINEFEEDKEY
- MINUSKEY
- PAGEDOWNKEY
- 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!
"""

@ -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.
@group Constants: KX_TRUE, KX_FALSE
@var KX_TRUE: True value used by some modules.
@var KX_FALSE: False value used by some modules.
Constants
=========
- KX_TRUE: True value used by some modules
- KX_FALSE: False value used by some modules.
@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
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 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}
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 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}
IPO Actuator
------------
IPO Types. See L{KX_IpoActuator}
- KX_IPOACT_PLAY
- KX_IPOACT_PINGPONG
- KX_IPOACT_FLIPPER
- KX_IPOACT_LOOPSTOP
- KX_IPOACT_LOOPEND
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}
"""

@ -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 !

@ -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

@ -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():

@ -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;

@ -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<KX_IndexArray*> *indexcache = &GetArrayOptimizer((*it)->GetPolyMaterial())->m_IndexArrayCache1;
@ -600,8 +601,6 @@ void RAS_MeshObject::SortPolygons(const MT_Transform &transform)
(*iit)->clear();
}
//ClearArrayData();
std::multiset<polygonSlot, fronttoback>::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);
}