This commit is contained in:
Campbell Barton 2009-07-31 00:42:10 +00:00
commit c371f49d9a
23 changed files with 82 additions and 55 deletions

@ -65,8 +65,7 @@ struct CollisionTree;
#elif defined (__sun) || defined (__sun__) #elif defined (__sun) || defined (__sun__)
# define DO_INLINE # define DO_INLINE
#else #else
# define DO_INLINE inline # define DO_INLINE static inline
# define LINUX
#endif #endif
#define CLOTH_MAX_THREAD 2 #define CLOTH_MAX_THREAD 2

@ -2134,7 +2134,10 @@ static short draw_actuatorbuttons(Object *ob, bActuator *act, uiBlock *block, sh
glRects(xco, yco-ysize, xco+width, yco); glRects(xco, yco-ysize, xco+width, yco);
uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1); uiEmboss((float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1);
uiDefIDPoinBut(block, test_meshpoin_but, ID_ME, 1, "ME:", xco+40, yco-44, (width-80), 19, &(eoa->me), "replace the existing mesh with this one"); uiDefIDPoinBut(block, test_meshpoin_but, ID_ME, 1, "ME:", xco+40, yco-44, (width-80)/2, 19, &(eoa->me), "replace the existing, when left blank 'Phys' will remake the existing physics mesh");
uiDefButBitS(block, TOGN, ACT_EDOB_REPLACE_MESH_NOGFX, 0, "Gfx", xco+40 + (width-80)/2, yco-44, (width-80)/4, 19, &eoa->flag, 0, 0, 0, 0, "Replace the display mesh");
uiDefButBitS(block, TOG, ACT_EDOB_REPLACE_MESH_PHYS, 0, "Phys", xco+40 + (width-80)/2 +(width-80)/4, yco-44, (width-80)/4, 19, &eoa->flag, 0, 0, 0, 0, "Replace the physics mesh (triangle bounds only. compound shapes not supported)");
} }
else if(eoa->type==ACT_EDOB_TRACK_TO) { else if(eoa->type==ACT_EDOB_TRACK_TO) {
ysize= 48; ysize= 48;

@ -405,6 +405,10 @@ typedef struct FreeCamera {
/* editObjectActuator->flag */ /* editObjectActuator->flag */
#define ACT_TRACK_3D 1 #define ACT_TRACK_3D 1
/* editObjectActuator->flag for replace mesh actuator */
#define ACT_EDOB_REPLACE_MESH_NOGFX 2 /* use for replace mesh actuator */
#define ACT_EDOB_REPLACE_MESH_PHYS 4
/* SceneActuator->type */ /* SceneActuator->type */
#define ACT_SCENE_RESTART 0 #define ACT_SCENE_RESTART 0
#define ACT_SCENE_SET 1 #define ACT_SCENE_SET 1

@ -404,7 +404,6 @@ extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, int alw
{ {
// convert and add scene // convert and add scene
sceneconverter->ConvertScene( sceneconverter->ConvertScene(
startscenename,
startscene, startscene,
dictionaryobject, dictionaryobject,
keyboarddevice, keyboarddevice,
@ -717,7 +716,6 @@ extern "C" void StartKetsjiShellSimulation(struct wmWindow *win,
{ {
// convert and add scene // convert and add scene
sceneconverter->ConvertScene( sceneconverter->ConvertScene(
startscenename,
startscene, startscene,
dictionaryobject, dictionaryobject,
keyboarddevice, keyboarddevice,

@ -325,7 +325,6 @@ bool ConvertMaterial(
MFace* mface, MFace* mface,
MCol* mmcol, MCol* mmcol,
int lightlayer, int lightlayer,
Object* blenderobj,
MTF_localLayer *layers, MTF_localLayer *layers,
bool glslmat) bool glslmat)
{ {
@ -751,11 +750,11 @@ RAS_MeshObject* BL_ConvertMesh(Mesh* mesh, Object* blenderobj, RAS_IRenderTools*
// Determine if we need to make a skinned mesh // Determine if we need to make a skinned mesh
if (mesh->dvert || mesh->key || ((blenderobj->gameflag & OB_SOFT_BODY) != 0) || BL_ModifierDeformer::HasCompatibleDeformer(blenderobj)) if (mesh->dvert || mesh->key || ((blenderobj->gameflag & OB_SOFT_BODY) != 0) || BL_ModifierDeformer::HasCompatibleDeformer(blenderobj))
{ {
meshobj = new BL_SkinMeshObject(mesh, lightlayer); meshobj = new BL_SkinMeshObject(mesh);
skinMesh = true; skinMesh = true;
} }
else else
meshobj = new RAS_MeshObject(mesh, lightlayer); meshobj = new RAS_MeshObject(mesh);
// Extract avaiable layers // Extract avaiable layers
MTF_localLayer *layers = new MTF_localLayer[MAX_MTFACE]; MTF_localLayer *layers = new MTF_localLayer[MAX_MTFACE];
@ -860,7 +859,7 @@ RAS_MeshObject* BL_ConvertMesh(Mesh* mesh, Object* blenderobj, RAS_IRenderTools*
if (!bl_mat) if (!bl_mat)
bl_mat = new BL_Material(); bl_mat = new BL_Material();
ConvertMaterial(bl_mat, ma, tface, tfaceName, mface, mcol, ConvertMaterial(bl_mat, ma, tface, tfaceName, mface, mcol,
lightlayer, blenderobj, layers, converter->GetGLSLMaterials()); lightlayer, layers, converter->GetGLSLMaterials());
visible = ((bl_mat->ras_mode & POLY_VIS)!=0); visible = ((bl_mat->ras_mode & POLY_VIS)!=0);
collider = ((bl_mat->ras_mode & COLLIDER)!=0); collider = ((bl_mat->ras_mode & COLLIDER)!=0);
@ -1686,8 +1685,7 @@ static KX_GameObject *gameobject_from_blenderobject(
Object *ob, Object *ob,
KX_Scene *kxscene, KX_Scene *kxscene,
RAS_IRenderTools *rendertools, RAS_IRenderTools *rendertools,
KX_BlenderSceneConverter *converter, KX_BlenderSceneConverter *converter)
Scene *blenderscene)
{ {
KX_GameObject *gameobj = NULL; KX_GameObject *gameobj = NULL;
@ -1747,7 +1745,7 @@ static KX_GameObject *gameobject_from_blenderobject(
if (bHasModifier) { if (bHasModifier) {
BL_ModifierDeformer *dcont = new BL_ModifierDeformer((BL_DeformableGameObject *)gameobj, BL_ModifierDeformer *dcont = new BL_ModifierDeformer((BL_DeformableGameObject *)gameobj,
blenderscene, ob, (BL_SkinMeshObject *)meshobj); kxscene->GetBlenderScene(), ob, (BL_SkinMeshObject *)meshobj);
((BL_DeformableGameObject*)gameobj)->SetDeformer(dcont); ((BL_DeformableGameObject*)gameobj)->SetDeformer(dcont);
if (bHasShapeKey && bHasArmature) if (bHasShapeKey && bHasArmature)
dcont->LoadShapeDrivers(ob->parent); dcont->LoadShapeDrivers(ob->parent);
@ -1786,7 +1784,7 @@ static KX_GameObject *gameobject_from_blenderobject(
kxscene, kxscene,
KX_Scene::m_callbacks, KX_Scene::m_callbacks,
ob, ob,
blenderscene // handle kxscene->GetBlenderScene() // handle
); );
/* Get the current pose from the armature object and apply it as the rest pose */ /* Get the current pose from the armature object and apply it as the rest pose */
break; break;
@ -1900,7 +1898,6 @@ KX_GameObject* getGameOb(STR_String busc,CListValue* sumolist){
// convert blender objects into ketsji gameobjects // convert blender objects into ketsji gameobjects
void BL_ConvertBlenderObjects(struct Main* maggie, void BL_ConvertBlenderObjects(struct Main* maggie,
const STR_String& scenename,
KX_Scene* kxscene, KX_Scene* kxscene,
KX_KetsjiEngine* ketsjiEngine, KX_KetsjiEngine* ketsjiEngine,
e_PhysicsEngine physics_engine, e_PhysicsEngine physics_engine,
@ -1913,7 +1910,7 @@ void BL_ConvertBlenderObjects(struct Main* maggie,
) )
{ {
Scene *blenderscene = converter->GetBlenderSceneForName(scenename); Scene *blenderscene = kxscene->GetBlenderScene();
// for SETLOOPER // for SETLOOPER
Scene *sce; Scene *sce;
Base *base; Base *base;
@ -2005,8 +2002,7 @@ void BL_ConvertBlenderObjects(struct Main* maggie,
base->object, base->object,
kxscene, kxscene,
rendertools, rendertools,
converter, converter);
blenderscene);
bool isInActiveLayer = (blenderobject->lay & activeLayerBitInfo) !=0; bool isInActiveLayer = (blenderobject->lay & activeLayerBitInfo) !=0;
bool addobj=true; bool addobj=true;
@ -2195,8 +2191,7 @@ void BL_ConvertBlenderObjects(struct Main* maggie,
blenderobject, blenderobject,
kxscene, kxscene,
rendertools, rendertools,
converter, converter);
blenderscene);
// this code is copied from above except that // this code is copied from above except that
// object from groups are never in active layer // object from groups are never in active layer

@ -37,7 +37,6 @@
class RAS_MeshObject* BL_ConvertMesh(struct Mesh* mesh,struct Object* lightobj,class RAS_IRenderTools* rendertools,class KX_Scene* scene, class KX_BlenderSceneConverter *converter); class RAS_MeshObject* BL_ConvertMesh(struct Mesh* mesh,struct Object* lightobj,class RAS_IRenderTools* rendertools,class KX_Scene* scene, class KX_BlenderSceneConverter *converter);
void BL_ConvertBlenderObjects(struct Main* maggie, void BL_ConvertBlenderObjects(struct Main* maggie,
const STR_String& scenename,
class KX_Scene* kxscene, class KX_Scene* kxscene,
class KX_KetsjiEngine* ketsjiEngine, class KX_KetsjiEngine* ketsjiEngine,
e_PhysicsEngine physics_engine, e_PhysicsEngine physics_engine,

@ -46,8 +46,8 @@
#include "BL_SkinMeshObject.h" #include "BL_SkinMeshObject.h"
#include "BL_DeformableGameObject.h" #include "BL_DeformableGameObject.h"
BL_SkinMeshObject::BL_SkinMeshObject(Mesh* mesh, int lightlayer) BL_SkinMeshObject::BL_SkinMeshObject(Mesh* mesh)
: RAS_MeshObject (mesh, lightlayer) : RAS_MeshObject (mesh)
{ {
m_bDeformed = true; m_bDeformed = true;

@ -46,7 +46,7 @@ protected:
vector<int> m_cacheWeightIndex; vector<int> m_cacheWeightIndex;
public: public:
BL_SkinMeshObject(Mesh* mesh, int lightlayer); BL_SkinMeshObject(Mesh* mesh);
~BL_SkinMeshObject(); ~BL_SkinMeshObject();
void UpdateBuckets(void* clientobj, double* oglmatrix, void UpdateBuckets(void* clientobj, double* oglmatrix,

@ -242,15 +242,14 @@ struct BlenderDebugDraw : public btIDebugDraw
#endif #endif
void KX_BlenderSceneConverter::ConvertScene(const STR_String& scenename, void KX_BlenderSceneConverter::ConvertScene(class KX_Scene* destinationscene,
class KX_Scene* destinationscene,
PyObject* dictobj, PyObject* dictobj,
class SCA_IInputDevice* keyinputdev, class SCA_IInputDevice* keyinputdev,
class RAS_IRenderTools* rendertools, class RAS_IRenderTools* rendertools,
class RAS_ICanvas* canvas) class RAS_ICanvas* canvas)
{ {
//find out which physics engine //find out which physics engine
Scene *blenderscene = GetBlenderSceneForName(scenename); Scene *blenderscene = destinationscene->GetBlenderScene();
e_PhysicsEngine physics_engine = UseBullet; e_PhysicsEngine physics_engine = UseBullet;
bool useDbvtCulling = false; bool useDbvtCulling = false;
@ -331,7 +330,6 @@ void KX_BlenderSceneConverter::ConvertScene(const STR_String& scenename,
} }
BL_ConvertBlenderObjects(m_maggie, BL_ConvertBlenderObjects(m_maggie,
scenename,
destinationscene, destinationscene,
m_ketsjiEngine, m_ketsjiEngine,
physics_engine, physics_engine,

@ -92,7 +92,6 @@ public:
* dictobj: python dictionary (for pythoncontrollers) * dictobj: python dictionary (for pythoncontrollers)
*/ */
virtual void ConvertScene( virtual void ConvertScene(
const STR_String& scenename,
class KX_Scene* destinationscene, class KX_Scene* destinationscene,
PyObject* dictobj, PyObject* dictobj,
class SCA_IInputDevice* keyinputdev, class SCA_IInputDevice* keyinputdev,

@ -638,7 +638,10 @@ void BL_ConvertActuators(char* maggiename,
= new KX_SCA_ReplaceMeshActuator( = new KX_SCA_ReplaceMeshActuator(
gameobj, gameobj,
tmpmesh, tmpmesh,
scene scene,
(editobact->flag & ACT_EDOB_REPLACE_MESH_NOGFX)==0,
(editobact->flag & ACT_EDOB_REPLACE_MESH_PHYS)!=0
); );
baseact = tmpreplaceact; baseact = tmpreplaceact;

@ -55,7 +55,7 @@ public:
//virtual void DelayedReleaseObject(class CValue* gameobj)=0; //virtual void DelayedReleaseObject(class CValue* gameobj)=0;
virtual void ReplaceMesh(class CValue* gameobj, virtual void ReplaceMesh(class CValue* gameobj,
void* meshobj)=0; void* meshobj, bool use_gfx, bool use_phys)=0;
std::vector<SCA_DebugProp*>& GetDebugProperties(); std::vector<SCA_DebugProp*>& GetDebugProperties();
void AddDebugProperty(class CValue* debugprop, void AddDebugProperty(class CValue* debugprop,
const STR_String &name); const STR_String &name);

@ -1388,7 +1388,7 @@ PyMethodDef KX_GameObject::Methods[] = {
{"getChildrenRecursive", (PyCFunction)KX_GameObject::sPyGetChildrenRecursive,METH_NOARGS}, {"getChildrenRecursive", (PyCFunction)KX_GameObject::sPyGetChildrenRecursive,METH_NOARGS},
{"getPhysicsId", (PyCFunction)KX_GameObject::sPyGetPhysicsId,METH_NOARGS}, {"getPhysicsId", (PyCFunction)KX_GameObject::sPyGetPhysicsId,METH_NOARGS},
{"getPropertyNames", (PyCFunction)KX_GameObject::sPyGetPropertyNames,METH_NOARGS}, {"getPropertyNames", (PyCFunction)KX_GameObject::sPyGetPropertyNames,METH_NOARGS},
{"replaceMesh",(PyCFunction) KX_GameObject::sPyReplaceMesh, METH_O}, {"replaceMesh",(PyCFunction) KX_GameObject::sPyReplaceMesh, METH_VARARGS},
{"endObject",(PyCFunction) KX_GameObject::sPyEndObject, METH_NOARGS}, {"endObject",(PyCFunction) KX_GameObject::sPyEndObject, METH_NOARGS},
{"reinstancePhysicsMesh", (PyCFunction)KX_GameObject::sPyReinstancePhysicsMesh,METH_VARARGS}, {"reinstancePhysicsMesh", (PyCFunction)KX_GameObject::sPyReinstancePhysicsMesh,METH_VARARGS},
@ -1466,15 +1466,21 @@ bool KX_GameObject::ConvertPythonVectorArgs(PyObject* args,
} }
*/ */
PyObject* KX_GameObject::PyReplaceMesh(PyObject* value) PyObject* KX_GameObject::PyReplaceMesh(PyObject* args)
{ {
KX_Scene *scene = KX_GetActiveScene(); KX_Scene *scene = KX_GetActiveScene();
RAS_MeshObject* new_mesh;
PyObject *value;
int use_gfx= 1, use_phys= 0;
RAS_MeshObject *new_mesh;
if (!PyArg_ParseTuple(args,"O|ii:replaceMesh", &value, &use_gfx, &use_phys))
return NULL;
if (!ConvertPythonToMesh(value, &new_mesh, false, "gameOb.replaceMesh(value): KX_GameObject")) if (!ConvertPythonToMesh(value, &new_mesh, false, "gameOb.replaceMesh(value): KX_GameObject"))
return NULL; return NULL;
scene->ReplaceMesh(this, new_mesh); scene->ReplaceMesh(this, new_mesh, (bool)use_gfx, (bool)use_phys);
Py_RETURN_NONE; Py_RETURN_NONE;
} }

@ -849,7 +849,7 @@ public:
KX_PYMETHOD_VARARGS(KX_GameObject,GetMesh); KX_PYMETHOD_VARARGS(KX_GameObject,GetMesh);
KX_PYMETHOD_NOARGS(KX_GameObject,GetPhysicsId); KX_PYMETHOD_NOARGS(KX_GameObject,GetPhysicsId);
KX_PYMETHOD_NOARGS(KX_GameObject,GetPropertyNames); KX_PYMETHOD_NOARGS(KX_GameObject,GetPropertyNames);
KX_PYMETHOD_O(KX_GameObject,ReplaceMesh); KX_PYMETHOD_VARARGS(KX_GameObject,ReplaceMesh);
KX_PYMETHOD_NOARGS(KX_GameObject,EndObject); KX_PYMETHOD_NOARGS(KX_GameObject,EndObject);
KX_PYMETHOD_DOC(KX_GameObject,rayCastTo); KX_PYMETHOD_DOC(KX_GameObject,rayCastTo);
KX_PYMETHOD_DOC(KX_GameObject,rayCast); KX_PYMETHOD_DOC(KX_GameObject,rayCast);

@ -47,7 +47,7 @@ public:
destinationscene: pass an empty scene, everything goes into this destinationscene: pass an empty scene, everything goes into this
dictobj: python dictionary (for pythoncontrollers) dictobj: python dictionary (for pythoncontrollers)
*/ */
virtual void ConvertScene(const STR_String& scenename, virtual void ConvertScene(
class KX_Scene* destinationscene, class KX_Scene* destinationscene,
PyObject* dictobj, PyObject* dictobj,
class SCA_IInputDevice* keyinputdev, class SCA_IInputDevice* keyinputdev,

@ -1599,8 +1599,7 @@ KX_Scene* KX_KetsjiEngine::CreateScene(const STR_String& scenename)
scenename, scenename,
scene); scene);
m_sceneconverter->ConvertScene(scenename, m_sceneconverter->ConvertScene(tmpscene,
tmpscene,
m_pythondictionary, m_pythondictionary,
m_keyboarddevice, m_keyboarddevice,
m_rendertools, m_rendertools,

@ -88,6 +88,8 @@ PyMethodDef KX_SCA_ReplaceMeshActuator::Methods[] = {
PyAttributeDef KX_SCA_ReplaceMeshActuator::Attributes[] = { PyAttributeDef KX_SCA_ReplaceMeshActuator::Attributes[] = {
KX_PYATTRIBUTE_RW_FUNCTION("mesh", KX_SCA_ReplaceMeshActuator, pyattr_get_mesh, pyattr_set_mesh), KX_PYATTRIBUTE_RW_FUNCTION("mesh", KX_SCA_ReplaceMeshActuator, pyattr_get_mesh, pyattr_set_mesh),
KX_PYATTRIBUTE_BOOL_RW ("useDisplayMesh", KX_SCA_ReplaceMeshActuator, m_use_gfx),
KX_PYATTRIBUTE_BOOL_RW ("usePhysicsMesh", KX_SCA_ReplaceMeshActuator, m_use_phys),
{ NULL } //Sentinel { NULL } //Sentinel
}; };
@ -156,11 +158,15 @@ KX_PYMETHODDEF_DOC(KX_SCA_ReplaceMeshActuator, instantReplaceMesh,
KX_SCA_ReplaceMeshActuator::KX_SCA_ReplaceMeshActuator(SCA_IObject *gameobj, KX_SCA_ReplaceMeshActuator::KX_SCA_ReplaceMeshActuator(SCA_IObject *gameobj,
class RAS_MeshObject *mesh, class RAS_MeshObject *mesh,
SCA_IScene* scene) : SCA_IScene* scene,
bool use_gfx,
bool use_phys) :
SCA_IActuator(gameobj), SCA_IActuator(gameobj),
m_mesh(mesh), m_mesh(mesh),
m_scene(scene) m_scene(scene),
m_use_gfx(use_gfx),
m_use_phys(use_phys)
{ {
} /* End of constructor */ } /* End of constructor */
@ -182,7 +188,8 @@ bool KX_SCA_ReplaceMeshActuator::Update()
if (bNegativeEvent) if (bNegativeEvent)
return false; // do nothing on negative events return false; // do nothing on negative events
if (m_mesh) m_scene->ReplaceMesh(GetParent(),m_mesh); if (m_mesh || m_use_phys) /* NULL mesh is ok if were updating physics */
m_scene->ReplaceMesh(GetParent(),m_mesh, m_use_gfx, m_use_phys);
return false; return false;
} }
@ -204,7 +211,7 @@ CValue* KX_SCA_ReplaceMeshActuator::GetReplica()
void KX_SCA_ReplaceMeshActuator::InstantReplaceMesh() void KX_SCA_ReplaceMeshActuator::InstantReplaceMesh()
{ {
if (m_mesh) m_scene->ReplaceMesh(GetParent(),m_mesh); if (m_mesh) m_scene->ReplaceMesh(GetParent(),m_mesh, m_use_gfx, m_use_phys);
} }
/* eof */ /* eof */

@ -50,12 +50,17 @@ class KX_SCA_ReplaceMeshActuator : public SCA_IActuator
// mesh reference (mesh to replace) // mesh reference (mesh to replace)
RAS_MeshObject* m_mesh; RAS_MeshObject* m_mesh;
SCA_IScene* m_scene; SCA_IScene* m_scene;
bool m_use_phys;
bool m_use_gfx;
public: public:
KX_SCA_ReplaceMeshActuator( KX_SCA_ReplaceMeshActuator(
SCA_IObject* gameobj, SCA_IObject* gameobj,
RAS_MeshObject *mesh, RAS_MeshObject *mesh,
SCA_IScene* scene); SCA_IScene* scene,
bool use_gfx,
bool use_phys
);
~KX_SCA_ReplaceMeshActuator( ~KX_SCA_ReplaceMeshActuator(
); );
@ -69,7 +74,6 @@ class KX_SCA_ReplaceMeshActuator : public SCA_IActuator
void InstantReplaceMesh(); void InstantReplaceMesh();
/* python api */
static PyObject* pyattr_get_mesh(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef); static PyObject* pyattr_get_mesh(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
static int pyattr_set_mesh(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value); static int pyattr_set_mesh(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);

@ -1017,17 +1017,18 @@ int KX_Scene::NewRemoveObject(class CValue* gameobj)
void KX_Scene::ReplaceMesh(class CValue* obj,void* meshobj) void KX_Scene::ReplaceMesh(class CValue* obj,void* meshobj, bool use_gfx, bool use_phys)
{ {
KX_GameObject* gameobj = static_cast<KX_GameObject*>(obj); KX_GameObject* gameobj = static_cast<KX_GameObject*>(obj);
RAS_MeshObject* mesh = static_cast<RAS_MeshObject*>(meshobj); RAS_MeshObject* mesh = static_cast<RAS_MeshObject*>(meshobj);
if(!gameobj || !mesh) if(!gameobj) {
{ std::cout << "KX_Scene::ReplaceMesh Warning: invalid object, doing nothing" << std::endl;
std::cout << "warning: invalid object, mesh will not be replaced" << std::endl;
return; return;
} }
if(use_gfx && mesh != NULL)
{
gameobj->RemoveMeshes(); gameobj->RemoveMeshes();
gameobj->AddMesh(mesh); gameobj->AddMesh(mesh);
@ -1156,6 +1157,11 @@ void KX_Scene::ReplaceMesh(class CValue* obj,void* meshobj)
} }
gameobj->AddMeshUser(); gameobj->AddMeshUser();
}
if(use_phys) { /* update the new assigned mesh with the physics mesh */
KX_ReInstanceBulletShapeFromMesh(gameobj, NULL, use_gfx?NULL:mesh);
}
} }
KX_Camera* KX_Scene::FindCamera(KX_Camera* cam) KX_Camera* KX_Scene::FindCamera(KX_Camera* cam)

@ -323,7 +323,7 @@ public:
int NewRemoveObject(CValue* gameobj); int NewRemoveObject(CValue* gameobj);
void ReplaceMesh(CValue* gameobj, void ReplaceMesh(CValue* gameobj,
void* meshobj); void* meshob, bool use_gfx, bool use_phys);
/** /**
* @section Logic stuff * @section Logic stuff
* Initiate an update of the logic system. * Initiate an update of the logic system.

@ -1642,10 +1642,14 @@ class KX_GameObject(SCA_IObject):
Delete this object, can be used inpace of the EndObject Actuator. Delete this object, can be used inpace of the EndObject Actuator.
The actual removal of the object from the scene is delayed. The actual removal of the object from the scene is delayed.
""" """
def replaceMesh(mesh): def replaceMesh(mesh, useDisplayMesh=True, usePhysicsMesh=False):
""" """
Replace the mesh of this object with a new mesh. This works the same was as the actuator. Replace the mesh of this object with a new mesh. This works the same was as the actuator.
@type mesh: L{KX_MeshProxy} or mesh name @type mesh: L{KX_MeshProxy} or mesh name
@type useDisplayMesh: bool
@param useDisplayMesh: when enabled the display mesh will be replaced (optional argument).
@type usePhysicsMesh: bool
@param usePhysicsMesh: when enabled the physics mesh will be replaced (optional argument).
""" """
def getVisible(): def getVisible():
""" """
@ -3791,6 +3795,11 @@ class KX_SCA_ReplaceMeshActuator(SCA_IActuator):
@ivar mesh: L{KX_MeshProxy} or the name of the mesh that will replace the current one @ivar mesh: L{KX_MeshProxy} or the name of the mesh that will replace the current one
Set to None to disable actuator Set to None to disable actuator
@type mesh: L{KX_MeshProxy} or None if no mesh is set @type mesh: L{KX_MeshProxy} or None if no mesh is set
@ivar useDisplayMesh: when true the displayed mesh is replaced.
@type useDisplayMesh: boolean
@ivar usePhysicsMesh: when true the physics mesh is replaced.
@type usePhysicsMesh: boolean
""" """
def setMesh(name): def setMesh(name):
""" """

@ -90,9 +90,8 @@ struct RAS_MeshObject::fronttoback
STR_String RAS_MeshObject::s_emptyname = ""; STR_String RAS_MeshObject::s_emptyname = "";
RAS_MeshObject::RAS_MeshObject(Mesh* mesh, int lightlayer) RAS_MeshObject::RAS_MeshObject(Mesh* mesh)
: //m_lightlayer(lightlayer), : m_bModified(true),
m_bModified(true),
m_bMeshModified(true), m_bMeshModified(true),
m_mesh(mesh), m_mesh(mesh),
m_bDeformed(false) m_bDeformed(false)

@ -55,7 +55,6 @@ class RAS_MeshObject
{ {
private: private:
unsigned int m_debugcolor; unsigned int m_debugcolor;
//int m_lightlayer;
bool m_bModified; bool m_bModified;
bool m_bMeshModified; bool m_bMeshModified;
@ -77,7 +76,7 @@ protected:
public: public:
// for now, meshes need to be in a certain layer (to avoid sorting on lights in realtime) // for now, meshes need to be in a certain layer (to avoid sorting on lights in realtime)
RAS_MeshObject(Mesh* mesh, int lightlayer); RAS_MeshObject(Mesh* mesh);
virtual ~RAS_MeshObject(); virtual ~RAS_MeshObject();