Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKester Maddock <Christopher.Maddock.1@uni.massey.ac.nz>2004-09-19 05:33:08 +0400
committerKester Maddock <Christopher.Maddock.1@uni.massey.ac.nz>2004-09-19 05:33:08 +0400
commitfd5f3e13d2f86f0f344422c773df85d0c3e6df32 (patch)
tree8f55d1124aa01fcdfb847dedd1396e941060dae5 /source/gameengine
parentd70197262b3bf22388673b5b8fc96af969875d50 (diff)
Convert and use actuators with no target object set.
Certain actuators (Add Object/Replace Mesh/Scene/Track To) used to always require a target, or they would not influence the scene. If the actuator target is always set from Python, this could be annoying.
Diffstat (limited to 'source/gameengine')
-rw-r--r--source/gameengine/Converter/KX_ConvertActuators.cpp92
-rw-r--r--source/gameengine/Ketsji/KX_SCA_AddObjectActuator.cpp3
-rw-r--r--source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.cpp5
-rw-r--r--source/gameengine/Ketsji/KX_SceneActuator.cpp21
-rw-r--r--source/gameengine/Ketsji/KX_TrackToActuator.cpp3
-rw-r--r--source/gameengine/PyDoc/KX_SCA_AddObjectActuator.py2
-rw-r--r--source/gameengine/PyDoc/KX_SCA_ReplaceMeshActuator.py2
-rw-r--r--source/gameengine/PyDoc/KX_SceneActuator.py2
-rw-r--r--source/gameengine/PyDoc/KX_TrackToActuator.py2
9 files changed, 59 insertions, 73 deletions
diff --git a/source/gameengine/Converter/KX_ConvertActuators.cpp b/source/gameengine/Converter/KX_ConvertActuators.cpp
index 1b65158e8c0..ec9a70fccb1 100644
--- a/source/gameengine/Converter/KX_ConvertActuators.cpp
+++ b/source/gameengine/Converter/KX_ConvertActuators.cpp
@@ -405,6 +405,8 @@ void BL_ConvertActuators(char* maggiename,
tmpsoundact->SetName(bact->name);
baseact = tmpsoundact;
soundscene->AddObject(sndobj);
+ } else {
+ std::cout << "WARNING: Sound actuator " << bact->name << " failed to load sample." << std::endl;
}
}
}
@@ -515,41 +517,26 @@ void BL_ConvertActuators(char* maggiename,
// does the 'original' for replication exists, and
// is it in a non-active layer ?
+ CValue* originalval = NULL;
if (editobact->ob && !(editobact->ob->lay & activeLayerBitInfo))
- {
- CValue* originalval = converter->FindGameObject(editobact->ob);
+ originalval = converter->FindGameObject(editobact->ob);
+
+ MT_Vector3 linvelvec ( KX_BLENDERTRUNC(editobact->linVelocity[0]),
+ KX_BLENDERTRUNC(editobact->linVelocity[1]),
+ KX_BLENDERTRUNC(editobact->linVelocity[2]));
- if (originalval)
- {
- MT_Vector3 linvelvec ( KX_BLENDERTRUNC(editobact->linVelocity[0]),
- KX_BLENDERTRUNC(editobact->linVelocity[1]),
- KX_BLENDERTRUNC(editobact->linVelocity[2]));
- KX_SCA_AddObjectActuator* tmpaddact =
- new KX_SCA_AddObjectActuator(
-
- gameobj,
- originalval,
- editobact->time,
- scene,
- linvelvec.getValue(),
- editobact->localflag!=0
-
- );
+ KX_SCA_AddObjectActuator* tmpaddact =
+ new KX_SCA_AddObjectActuator(
+ gameobj,
+ originalval,
+ editobact->time,
+ scene,
+ linvelvec.getValue(),
+ editobact->localflag!=0
+ );
//editobact->ob to gameobj
baseact = tmpaddact;
- }
- else
- {
- // let's pretend this never happened
- exit(0);
- }
- } else
- {
- printf ("ERROR: GameObject %s has a AddObjectActuator %s without object (in 'nonactive' layer)\n",
- objectname.ReadPtr(),
- uniquename.ReadPtr() );
- }
}
break;
case ACT_EDOB_END_OBJECT:
@@ -561,8 +548,8 @@ void BL_ConvertActuators(char* maggiename,
break;
case ACT_EDOB_REPLACE_MESH:
{
+ RAS_MeshObject *tmpmesh = NULL;
if (editobact->me)
- {
RAS_MeshObject *tmpmesh = BL_ConvertMesh(
editobact->me,
blenderobject,
@@ -570,31 +557,25 @@ void BL_ConvertActuators(char* maggiename,
scene,
converter
);
- KX_SCA_ReplaceMeshActuator* tmpreplaceact
- = new KX_SCA_ReplaceMeshActuator(
+
+ KX_SCA_ReplaceMeshActuator* tmpreplaceact
+ = new KX_SCA_ReplaceMeshActuator(
gameobj,
tmpmesh,
scene
);
baseact = tmpreplaceact;
- }
- else
- {
- printf ("ERROR: GameObject %s ReplaceMeshActuator %s without object\n",
- objectname.ReadPtr(),
- uniquename.ReadPtr());
- }
}
break;
case ACT_EDOB_TRACK_TO:
{
+ SCA_IObject* originalval = NULL;
if (editobact->ob)
- {
SCA_IObject* originalval = converter->FindGameObject(editobact->ob);
- KX_TrackToActuator* tmptrackact
- = new KX_TrackToActuator(gameobj,
+ KX_TrackToActuator* tmptrackact
+ = new KX_TrackToActuator(gameobj,
originalval,
editobact->time,
editobact->flag,
@@ -602,15 +583,6 @@ void BL_ConvertActuators(char* maggiename,
blenderobject->upflag
);
baseact = tmptrackact;
- }
- else
- {
- printf("ERROR: GameObject %s no object in EditObjectActuator %s\n",
- objectname.ReadPtr(),
- uniquename.ReadPtr() );
-
-
- }
}
}
break;
@@ -674,8 +646,7 @@ void BL_ConvertActuators(char* maggiename,
case ACT_SCENE:
{
bSceneActuator *sceneact = (bSceneActuator *) bact->data;
- bool scenevalid = true;
- STR_String nextSceneName;
+ STR_String nextSceneName("");
KX_SceneActuator* tmpsceneact;
int mode = KX_SceneActuator::KX_SCENE_NODEF;
@@ -718,14 +689,6 @@ void BL_ConvertActuators(char* maggiename,
nextSceneName = sceneact->scene->id.name + 2; // this '2' is necessary to remove prefix 'SC'
}
- if (!nextSceneName.Length())
- {
- printf ("ERROR: GameObject %s has a SceneActuator %s (SetScene) without scene\n",
- objectname.ReadPtr(),
- uniquename.ReadPtr());
- scenevalid = false;
-
- }
break;
}
case ACT_SCENE_CAMERA:
@@ -748,16 +711,13 @@ void BL_ConvertActuators(char* maggiename,
default:
; /* flag error */
}
- if (scenevalid )
- {
- tmpsceneact = new KX_SceneActuator(gameobj,
+ tmpsceneact = new KX_SceneActuator(gameobj,
mode,
scene,
ketsjiEngine,
nextSceneName,
cam);
baseact = tmpsceneact;
- }
break;
}
case ACT_GAME:
diff --git a/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.cpp b/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.cpp
index feaf24f5e5b..d972d880070 100644
--- a/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.cpp
+++ b/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.cpp
@@ -263,6 +263,9 @@ PyObject* KX_SCA_AddObjectActuator::PyGetObject(PyObject* self,
PyObject* args,
PyObject* kwds)
{
+ if (!m_OriginalObject)
+ Py_Return;
+
return PyString_FromString(m_OriginalObject->GetName());
}
diff --git a/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.cpp b/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.cpp
index f26e9873863..84e12ac86af 100644
--- a/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.cpp
+++ b/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.cpp
@@ -116,7 +116,7 @@ PyObject* KX_SCA_ReplaceMeshActuator::PySetMesh(PyObject* self,
void* mesh = SCA_ILogicBrick::m_sCurrentLogicManager->GetMeshByName(STR_String(meshname));
- if (m_mesh) {
+ if (mesh) {
m_mesh= (class RAS_MeshObject*)mesh;
Py_Return;
}
@@ -129,6 +129,9 @@ KX_PYMETHODDEF_DOC(KX_SCA_ReplaceMeshActuator, getMesh,
"Returns the name of the mesh to be substituted.\n"
)
{
+ if (!m_mesh)
+ Py_Return;
+
return PyString_FromString(const_cast<char *>(m_mesh->GetName().ReadPtr()));
}
diff --git a/source/gameengine/Ketsji/KX_SceneActuator.cpp b/source/gameengine/Ketsji/KX_SceneActuator.cpp
index 3ef49680f1f..ddd0672b2fe 100644
--- a/source/gameengine/Ketsji/KX_SceneActuator.cpp
+++ b/source/gameengine/Ketsji/KX_SceneActuator.cpp
@@ -100,6 +100,21 @@ bool KX_SceneActuator::Update(double curtime,double deltatime)
m_KetsjiEngine->ReplaceScene(m_scene->GetName(),m_scene->GetName());
break;
}
+ case KX_SCENE_SET_CAMERA:
+ if (m_camera)
+ {
+ m_scene->SetActiveCamera(m_camera);
+ }
+ break;
+ default:
+ break;
+ }
+
+ if (!m_nextSceneName.Length())
+ return false;
+
+ switch (m_mode)
+ {
case KX_SCENE_SET_SCENE:
{
m_KetsjiEngine->ReplaceScene(m_scene->GetName(),m_nextSceneName);
@@ -132,12 +147,6 @@ bool KX_SceneActuator::Update(double curtime,double deltatime)
m_KetsjiEngine->ResumeScene(m_nextSceneName);
break;
}
- case KX_SCENE_SET_CAMERA:
- if (m_camera)
- {
- m_scene->SetActiveCamera(m_camera);
- }
- break;
default:
; /* do nothing? this is an internal error !!! */
}
diff --git a/source/gameengine/Ketsji/KX_TrackToActuator.cpp b/source/gameengine/Ketsji/KX_TrackToActuator.cpp
index 7a0d0ad630f..6880ac5d683 100644
--- a/source/gameengine/Ketsji/KX_TrackToActuator.cpp
+++ b/source/gameengine/Ketsji/KX_TrackToActuator.cpp
@@ -427,6 +427,9 @@ char KX_TrackToActuator::GetObject_doc[] =
"\tReturns the object to track with the parent of this actuator.\n";
PyObject* KX_TrackToActuator::PyGetObject(PyObject* self, PyObject* args, PyObject* kwds)
{
+ if (!m_object)
+ Py_Return;
+
return PyString_FromString(m_object->GetName());
}
diff --git a/source/gameengine/PyDoc/KX_SCA_AddObjectActuator.py b/source/gameengine/PyDoc/KX_SCA_AddObjectActuator.py
index ef216aed55c..7d6d1ee60df 100644
--- a/source/gameengine/PyDoc/KX_SCA_AddObjectActuator.py
+++ b/source/gameengine/PyDoc/KX_SCA_AddObjectActuator.py
@@ -29,6 +29,8 @@ class KX_SCA_AddObjectActuator(SCA_IActuator):
"""
Returns the name of the game object to be added.
+ Returns None if no game object has been assigned to be added.
+
@rtype: string
"""
def setTime(time):
diff --git a/source/gameengine/PyDoc/KX_SCA_ReplaceMeshActuator.py b/source/gameengine/PyDoc/KX_SCA_ReplaceMeshActuator.py
index 63100e40532..eb00a91a4ce 100644
--- a/source/gameengine/PyDoc/KX_SCA_ReplaceMeshActuator.py
+++ b/source/gameengine/PyDoc/KX_SCA_ReplaceMeshActuator.py
@@ -66,6 +66,8 @@ class KX_SCA_ReplaceMeshActuator(SCA_IActuator):
"""
Returns the name of the mesh that will replace the current one.
+ Returns None if no mesh has been scheduled to be added.
+
@rtype: string
"""
diff --git a/source/gameengine/PyDoc/KX_SceneActuator.py b/source/gameengine/PyDoc/KX_SceneActuator.py
index eba899bd322..cfb40ae072f 100644
--- a/source/gameengine/PyDoc/KX_SceneActuator.py
+++ b/source/gameengine/PyDoc/KX_SceneActuator.py
@@ -43,6 +43,8 @@ class KX_SceneActuator(SCA_IActuator):
"""
Returns the name of the scene to change to/overlay/underlay/remove/suspend/resume.
+ Returns an empty string ("") if no scene has been set.
+
@rtype: string
"""
def getCamera():
diff --git a/source/gameengine/PyDoc/KX_TrackToActuator.py b/source/gameengine/PyDoc/KX_TrackToActuator.py
index 8b93a82dada..39fb99ec2e2 100644
--- a/source/gameengine/PyDoc/KX_TrackToActuator.py
+++ b/source/gameengine/PyDoc/KX_TrackToActuator.py
@@ -25,6 +25,8 @@ class KX_TrackToActuator(SCA_IActuator):
"""
Returns the name of the object to track.
+ Returns None if no object has been set to track.
+
@rtype: string
"""
def setTime(time):