forked from bartvdbraak/blender
svn merge https://svn.blender.org/svnroot/bf-blender/trunk/blender -r21908:22075
This commit is contained in:
commit
c371f49d9a
@ -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();
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user