BGE Py API
scene.active_camera can now be set so you can more easily set the current camera from python scripts without using an actuator. ConvertPythonToCamera utility function to get a camera from a python string or KX_Camera type.
This commit is contained in:
		@@ -933,3 +933,57 @@ PyObject* KX_Camera::pyattr_get_OUTSIDE(void *self_v, const KX_PYATTRIBUTE_DEF *
 | 
			
		||||
PyObject* KX_Camera::pyattr_get_INTERSECT(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
 | 
			
		||||
{	return PyInt_FromLong(INTERSECT); }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
bool ConvertPythonToCamera(PyObject * value, KX_Camera **object, bool py_none_ok, const char *error_prefix)
 | 
			
		||||
{
 | 
			
		||||
	if (value==NULL) {
 | 
			
		||||
		PyErr_Format(PyExc_TypeError, "%s, python pointer NULL, should never happen", error_prefix);
 | 
			
		||||
		*object = NULL;
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
		
 | 
			
		||||
	if (value==Py_None) {
 | 
			
		||||
		*object = NULL;
 | 
			
		||||
		
 | 
			
		||||
		if (py_none_ok) {
 | 
			
		||||
			return true;
 | 
			
		||||
		} else {
 | 
			
		||||
			PyErr_Format(PyExc_TypeError, "%s, expected KX_Camera or a KX_Camera name, None is invalid", error_prefix);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	if (PyString_Check(value)) {
 | 
			
		||||
		STR_String value_str = PyString_AsString(value);
 | 
			
		||||
		*object = KX_GetActiveScene()->FindCamera(value_str);
 | 
			
		||||
		
 | 
			
		||||
		if (*object) {
 | 
			
		||||
			return true;
 | 
			
		||||
		} else {
 | 
			
		||||
			PyErr_Format(PyExc_ValueError, "%s, requested name \"%s\" did not match any KX_Camera in this scene", error_prefix, PyString_AsString(value));
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	if (PyObject_TypeCheck(value, &KX_Camera::Type)) {
 | 
			
		||||
		*object = static_cast<KX_Camera*>BGE_PROXY_REF(value);
 | 
			
		||||
		
 | 
			
		||||
		/* sets the error */
 | 
			
		||||
		if (*object==NULL) {
 | 
			
		||||
			PyErr_Format(PyExc_SystemError, "%s, " BGE_PROXY_ERROR_MSG, error_prefix);
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	*object = NULL;
 | 
			
		||||
	
 | 
			
		||||
	if (py_none_ok) {
 | 
			
		||||
		PyErr_Format(PyExc_TypeError, "%s, expect a KX_Camera, a string or None", error_prefix);
 | 
			
		||||
	} else {
 | 
			
		||||
		PyErr_Format(PyExc_TypeError, "%s, expect a KX_Camera or a string", error_prefix);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	return false;
 | 
			
		||||
}
 | 
			
		||||
@@ -41,6 +41,9 @@
 | 
			
		||||
#include "IntValue.h"
 | 
			
		||||
#include "RAS_CameraData.h"
 | 
			
		||||
 | 
			
		||||
/* utility conversion function */
 | 
			
		||||
bool ConvertPythonToCamera(PyObject * value, KX_Camera **object, bool py_none_ok, const char *error_prefix);
 | 
			
		||||
 | 
			
		||||
class KX_Camera : public KX_GameObject
 | 
			
		||||
{
 | 
			
		||||
	Py_Header;
 | 
			
		||||
 
 | 
			
		||||
@@ -1819,9 +1819,7 @@ PyObject* KX_GameObject::py_getattro_dict() {
 | 
			
		||||
 | 
			
		||||
int KX_GameObject::py_setattro(PyObject *attr, PyObject *value)	// py_setattro method
 | 
			
		||||
{
 | 
			
		||||
	int ret;
 | 
			
		||||
	
 | 
			
		||||
	ret= py_setattro__internal(attr, value);
 | 
			
		||||
	int ret= py_setattro__internal(attr, value);
 | 
			
		||||
	
 | 
			
		||||
	if (ret==PY_SET_ATTR_SUCCESS) {
 | 
			
		||||
		/* remove attribute in our own dict to avoid double ups */
 | 
			
		||||
 
 | 
			
		||||
@@ -1703,13 +1703,27 @@ PyObject* KX_Scene::pyattr_get_active_camera(void *self_v, const KX_PYATTRIBUTE_
 | 
			
		||||
	return self->GetActiveCamera()->GetProxy();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int KX_Scene::pyattr_set_active_camera(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
 | 
			
		||||
{
 | 
			
		||||
	KX_Scene* self= static_cast<KX_Scene*>(self_v);
 | 
			
		||||
	KX_Camera *camOb;
 | 
			
		||||
	
 | 
			
		||||
	if (!ConvertPythonToCamera(value, &camOb, false, "scene.active_camera = value: KX_Scene"))
 | 
			
		||||
		return PY_SET_ATTR_FAIL;
 | 
			
		||||
	
 | 
			
		||||
	self->SetActiveCamera(camOb);
 | 
			
		||||
	return PY_SET_ATTR_SUCCESS;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
PyAttributeDef KX_Scene::Attributes[] = {
 | 
			
		||||
	KX_PYATTRIBUTE_RO_FUNCTION("name",				KX_Scene, pyattr_get_name),
 | 
			
		||||
	KX_PYATTRIBUTE_RO_FUNCTION("objects",			KX_Scene, pyattr_get_objects),
 | 
			
		||||
	KX_PYATTRIBUTE_RO_FUNCTION("objects_inactive",	KX_Scene, pyattr_get_objects_inactive),	KX_PYATTRIBUTE_RO_FUNCTION("lights",			KX_Scene, pyattr_get_lights),
 | 
			
		||||
	KX_PYATTRIBUTE_RO_FUNCTION("cameras",			KX_Scene, pyattr_get_cameras),
 | 
			
		||||
	KX_PYATTRIBUTE_RO_FUNCTION("lights",			KX_Scene, pyattr_get_lights),
 | 
			
		||||
	KX_PYATTRIBUTE_RO_FUNCTION("active_camera",		KX_Scene, pyattr_get_active_camera),
 | 
			
		||||
	KX_PYATTRIBUTE_RW_FUNCTION("active_camera",		KX_Scene, pyattr_get_active_camera, pyattr_set_active_camera),
 | 
			
		||||
	KX_PYATTRIBUTE_BOOL_RO("suspended",				KX_Scene, m_suspend),
 | 
			
		||||
	KX_PYATTRIBUTE_BOOL_RO("activity_culling",		KX_Scene, m_activity_culling),
 | 
			
		||||
	KX_PYATTRIBUTE_FLOAT_RW("activity_culling_radius", 0.5f, FLT_MAX, KX_Scene, m_activity_box_radius),
 | 
			
		||||
@@ -1717,15 +1731,14 @@ PyAttributeDef KX_Scene::Attributes[] = {
 | 
			
		||||
	{ NULL }	//Sentinel
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
PyObject* KX_Scene::py_getattro__internal(PyObject *attr)
 | 
			
		||||
{	
 | 
			
		||||
	py_getattro_up(PyObjectPlus);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int KX_Scene::py_setattro__internal(PyObject *attr, PyObject *pyvalue)
 | 
			
		||||
int KX_Scene::py_setattro__internal(PyObject *attr, PyObject *value)
 | 
			
		||||
{
 | 
			
		||||
	return PyObjectPlus::py_setattro(attr, pyvalue);
 | 
			
		||||
	py_setattro_up(PyObjectPlus);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
PyObject* KX_Scene::py_getattro(PyObject *attr)
 | 
			
		||||
 
 | 
			
		||||
@@ -566,11 +566,12 @@ public:
 | 
			
		||||
	static PyObject*	pyattr_get_lights(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef);
 | 
			
		||||
	static PyObject*	pyattr_get_cameras(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef);
 | 
			
		||||
	static PyObject*	pyattr_get_active_camera(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef);
 | 
			
		||||
	static int			pyattr_set_active_camera(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
 | 
			
		||||
 | 
			
		||||
	virtual PyObject* py_getattro(PyObject *attr); /* name, active_camera, gravity, suspended, viewport, framing, activity_culling, activity_culling_radius */
 | 
			
		||||
	virtual PyObject* py_getattro_dict();
 | 
			
		||||
	
 | 
			
		||||
	virtual int py_setattro(PyObject *attr, PyObject *pyvalue);
 | 
			
		||||
	virtual int py_setattro(PyObject *attr, PyObject *value);
 | 
			
		||||
	virtual int py_delattro(PyObject *attr);
 | 
			
		||||
	virtual PyObject* py_repr(void) { return PyString_FromString(GetName().ReadPtr()); }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -264,7 +264,7 @@ PyMethodDef KX_SceneActuator::Methods[] =
 | 
			
		||||
	//Deprecated functions ------>
 | 
			
		||||
	{"setUseRestart", (PyCFunction) KX_SceneActuator::sPySetUseRestart, METH_VARARGS, (PY_METHODCHAR)SetUseRestart_doc},
 | 
			
		||||
	{"setScene",      (PyCFunction) KX_SceneActuator::sPySetScene, METH_VARARGS, (PY_METHODCHAR)SetScene_doc},
 | 
			
		||||
	{"setCamera",     (PyCFunction) KX_SceneActuator::sPySetCamera, METH_VARARGS, (PY_METHODCHAR)SetCamera_doc},
 | 
			
		||||
	{"setCamera",     (PyCFunction) KX_SceneActuator::sPySetCamera, METH_O, (PY_METHODCHAR)SetCamera_doc},
 | 
			
		||||
	{"getUseRestart", (PyCFunction) KX_SceneActuator::sPyGetUseRestart, METH_NOARGS, (PY_METHODCHAR)GetUseRestart_doc},
 | 
			
		||||
	{"getScene",      (PyCFunction) KX_SceneActuator::sPyGetScene, METH_NOARGS, (PY_METHODCHAR)GetScene_doc},
 | 
			
		||||
	{"getCamera",     (PyCFunction) KX_SceneActuator::sPyGetCamera, METH_NOARGS, (PY_METHODCHAR)GetCamera_doc},
 | 
			
		||||
@@ -308,51 +308,21 @@ int KX_SceneActuator::pyattr_set_camera(void *self, const struct KX_PYATTRIBUTE_
 | 
			
		||||
	KX_SceneActuator* actuator = static_cast<KX_SceneActuator*>(self);
 | 
			
		||||
	KX_Camera *camOb;
 | 
			
		||||
	
 | 
			
		||||
	if(value==Py_None)
 | 
			
		||||
	{
 | 
			
		||||
		if (actuator->m_camera)
 | 
			
		||||
			actuator->m_camera->UnregisterActuator(actuator);
 | 
			
		||||
	if (!ConvertPythonToCamera(value, &camOb, true, "actu.camera = value: KX_SceneActuator"))
 | 
			
		||||
		return PY_SET_ATTR_FAIL;
 | 
			
		||||
	
 | 
			
		||||
	if (actuator->m_camera)
 | 
			
		||||
		actuator->m_camera->UnregisterActuator(actuator);
 | 
			
		||||
	
 | 
			
		||||
	if(camOb==NULL) {
 | 
			
		||||
		actuator->m_camera= NULL;
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	if (PyObject_TypeCheck(value, &KX_Camera::Type)) 
 | 
			
		||||
	{
 | 
			
		||||
		KX_Camera *camOb= static_cast<KX_Camera*>BGE_PROXY_REF(value);
 | 
			
		||||
		
 | 
			
		||||
		if(camOb==NULL)
 | 
			
		||||
		{
 | 
			
		||||
			PyErr_SetString(PyExc_SystemError, BGE_PROXY_ERROR_MSG);
 | 
			
		||||
			return 1;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		if (actuator->m_camera)
 | 
			
		||||
			actuator->m_camera->UnregisterActuator(actuator);
 | 
			
		||||
		
 | 
			
		||||
	else {	
 | 
			
		||||
		actuator->m_camera = camOb;
 | 
			
		||||
		actuator->m_camera->RegisterActuator(actuator);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	if (PyString_Check(value))
 | 
			
		||||
	{
 | 
			
		||||
		char *camName = PyString_AsString(value);
 | 
			
		||||
 | 
			
		||||
		camOb = actuator->FindCamera(camName);
 | 
			
		||||
		if (camOb) 
 | 
			
		||||
		{
 | 
			
		||||
			if (actuator->m_camera)
 | 
			
		||||
				actuator->m_camera->UnregisterActuator(actuator);
 | 
			
		||||
			actuator->m_camera = camOb;
 | 
			
		||||
			actuator->m_camera->RegisterActuator(actuator);
 | 
			
		||||
			return 0;
 | 
			
		||||
		}
 | 
			
		||||
		PyErr_SetString(PyExc_TypeError, "not a valid camera name");
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
	PyErr_SetString(PyExc_TypeError, "expected a string or a camera object reference");
 | 
			
		||||
	return 1;
 | 
			
		||||
	return PY_SET_ATTR_SUCCESS;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -431,47 +401,24 @@ const char KX_SceneActuator::SetCamera_doc[] =
 | 
			
		||||
"setCamera(camera)\n"
 | 
			
		||||
"\t- camera: string\n"
 | 
			
		||||
"\tSet the camera to switch to.\n" ;
 | 
			
		||||
PyObject* KX_SceneActuator::PySetCamera(PyObject* args)
 | 
			
		||||
PyObject* KX_SceneActuator::PySetCamera(PyObject* value)
 | 
			
		||||
{
 | 
			
		||||
	ShowDeprecationWarning("setCamera()", "the camera property");
 | 
			
		||||
	PyObject *cam;
 | 
			
		||||
	if (PyArg_ParseTuple(args, "O!:setCamera", &KX_Camera::Type, &cam))
 | 
			
		||||
	{
 | 
			
		||||
		KX_Camera *new_camera;
 | 
			
		||||
	KX_Camera *camOb;
 | 
			
		||||
	
 | 
			
		||||
		new_camera = static_cast<KX_Camera*>BGE_PROXY_REF(cam);
 | 
			
		||||
		if(new_camera==NULL)
 | 
			
		||||
		{
 | 
			
		||||
			PyErr_SetString(PyExc_SystemError, BGE_PROXY_ERROR_MSG);
 | 
			
		||||
			return NULL;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		if (m_camera)
 | 
			
		||||
			m_camera->UnregisterActuator(this);
 | 
			
		||||
		
 | 
			
		||||
		m_camera= new_camera;
 | 
			
		||||
		
 | 
			
		||||
		m_camera->RegisterActuator(this);
 | 
			
		||||
		Py_RETURN_NONE;
 | 
			
		||||
	}
 | 
			
		||||
	PyErr_Clear();
 | 
			
		||||
 | 
			
		||||
	/* one argument: a scene, ignore the rest */
 | 
			
		||||
	char *camName;
 | 
			
		||||
	if(!PyArg_ParseTuple(args, "s:setCamera", &camName))
 | 
			
		||||
	{
 | 
			
		||||
	if (!ConvertPythonToCamera(value, &camOb, true, "actu.setCamera(value): KX_SceneActuator"))
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	KX_Camera *camOb = FindCamera(camName);
 | 
			
		||||
	if (camOb) 
 | 
			
		||||
	{
 | 
			
		||||
		if (m_camera)
 | 
			
		||||
			m_camera->UnregisterActuator(this);
 | 
			
		||||
	if (m_camera)
 | 
			
		||||
		m_camera->UnregisterActuator(this);
 | 
			
		||||
	
 | 
			
		||||
	if(camOb==NULL) {
 | 
			
		||||
		m_camera= NULL;
 | 
			
		||||
	}
 | 
			
		||||
	else {	
 | 
			
		||||
		m_camera = camOb;
 | 
			
		||||
		m_camera->RegisterActuator(this);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	Py_RETURN_NONE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -108,7 +108,7 @@ class KX_SceneActuator : public SCA_IActuator
 | 
			
		||||
	/* 5. getScene:                                                          */
 | 
			
		||||
	KX_PYMETHOD_DOC_NOARGS(KX_SceneActuator,GetScene);
 | 
			
		||||
	/* 6. setCamera:                                                          */
 | 
			
		||||
	KX_PYMETHOD_DOC_VARARGS(KX_SceneActuator,SetCamera);
 | 
			
		||||
	KX_PYMETHOD_DOC_O(KX_SceneActuator,SetCamera);
 | 
			
		||||
	/* 7. getCamera:                                                          */
 | 
			
		||||
	KX_PYMETHOD_DOC_NOARGS(KX_SceneActuator,GetCamera);
 | 
			
		||||
	
 | 
			
		||||
 
 | 
			
		||||
@@ -235,7 +235,7 @@ class SCA_IController(SCA_ILogicBrick):
 | 
			
		||||
		"""
 | 
			
		||||
		Get the controllers state bitmask, this can be used with the GameObject's state to test if the the controller is active.
 | 
			
		||||
		This for instance will always be true however you could compare with a previous state to see when the state was activated.
 | 
			
		||||
		GameLogic.getCurrentController().getState() & GameLogic.getCurrentController().getOwner().getState()
 | 
			
		||||
		GameLogic.getCurrentController().state & GameLogic.getCurrentController().owner.state
 | 
			
		||||
		@deprecated: Use the L{state} property
 | 
			
		||||
		@rtype: int
 | 
			
		||||
		"""
 | 
			
		||||
@@ -2126,7 +2126,7 @@ class KX_LightObject(KX_GameObject):
 | 
			
		||||
	import GameLogic
 | 
			
		||||
	
 | 
			
		||||
	co = GameLogic.getCurrentController()
 | 
			
		||||
	light = co.getOwner()
 | 
			
		||||
	light = co.owner
 | 
			
		||||
	
 | 
			
		||||
	light.energy = 1.0
 | 
			
		||||
	light.colour = [1.0, 0.0, 0.0]
 | 
			
		||||
@@ -2187,8 +2187,8 @@ class KX_MeshProxy(SCA_IObject):
 | 
			
		||||
	The correct method of iterating over every L{KX_VertexProxy} in a game object::
 | 
			
		||||
		import GameLogic
 | 
			
		||||
		
 | 
			
		||||
		co = GameLogic.getcurrentController()
 | 
			
		||||
		obj = co.getOwner()
 | 
			
		||||
		co = GameLogic.getCurrentController()
 | 
			
		||||
		obj = co.owner
 | 
			
		||||
		
 | 
			
		||||
		m_i = 0
 | 
			
		||||
		mesh = obj.getMesh(m_i) # There can be more than one mesh...
 | 
			
		||||
@@ -3177,9 +3177,9 @@ class KX_PolygonMaterial:
 | 
			
		||||
				self.pass_no = 0	
 | 
			
		||||
				return False
 | 
			
		||||
		
 | 
			
		||||
		obj = GameLogic.getCurrentController().getOwner()
 | 
			
		||||
		obj = GameLogic.getCurrentController().owner
 | 
			
		||||
		
 | 
			
		||||
		mesh = obj.getMesh(0)
 | 
			
		||||
		mesh = obj.meshes[0]
 | 
			
		||||
		
 | 
			
		||||
		for mat in mesh.materials:
 | 
			
		||||
			mat.setCustomMaterial(MyMaterial())
 | 
			
		||||
@@ -3596,8 +3596,8 @@ class KX_SCA_ReplaceMeshActuator(SCA_IActuator):
 | 
			
		||||
				)
 | 
			
		||||
		
 | 
			
		||||
		co = GameLogic.getCurrentController()
 | 
			
		||||
		obj = co.getOwner()
 | 
			
		||||
		act = co.getActuator("LOD." + obj.name)
 | 
			
		||||
		obj = co.owner
 | 
			
		||||
		act = co.actuators["LOD." + obj.name]
 | 
			
		||||
		cam = GameLogic.getCurrentScene().active_camera
 | 
			
		||||
		
 | 
			
		||||
		def Depth(pos, plane):
 | 
			
		||||
@@ -3684,7 +3684,7 @@ class KX_Scene(PyObjectPlus):
 | 
			
		||||
		# Get the depth of an object in the camera view.
 | 
			
		||||
		import GameLogic
 | 
			
		||||
		
 | 
			
		||||
		obj = GameLogic.getCurrentController().getOwner()
 | 
			
		||||
		obj = GameLogic.getCurrentController().owner
 | 
			
		||||
		cam = GameLogic.getCurrentScene().active_camera
 | 
			
		||||
		
 | 
			
		||||
		# Depth is negative and decreasing further from the camera
 | 
			
		||||
@@ -3692,19 +3692,20 @@ class KX_Scene(PyObjectPlus):
 | 
			
		||||
	
 | 
			
		||||
	@bug: All attributes are read only at the moment.
 | 
			
		||||
		
 | 
			
		||||
	@ivar name: The scene's name
 | 
			
		||||
	@ivar name: The scene's name, (read-only).
 | 
			
		||||
	@type name: string
 | 
			
		||||
	@ivar objects: A list of objects in the scene.
 | 
			
		||||
	@ivar objects: A list of objects in the scene, (read-only).
 | 
			
		||||
	@type objects: L{CListValue} of L{KX_GameObject}
 | 
			
		||||
	@ivar objects_inactive: A list of objects on background layers (used for the addObject actuator).
 | 
			
		||||
	@ivar objects_inactive: A list of objects on background layers (used for the addObject actuator), (read-only).
 | 
			
		||||
	@type objects_inactive: L{CListValue} of L{KX_GameObject}
 | 
			
		||||
	@ivar lights: A list of lights in the scene.
 | 
			
		||||
	@ivar lights: A list of lights in the scene, (read-only).
 | 
			
		||||
	@type lights: L{CListValue} of L{KX_LightObject}
 | 
			
		||||
	@ivar cameras: A list of cameras in the scene.
 | 
			
		||||
	@ivar cameras: A list of cameras in the scene, (read-only).
 | 
			
		||||
	@type cameras: L{CListValue} of L{KX_Camera}
 | 
			
		||||
	@ivar active_camera: The current active camera
 | 
			
		||||
	@ivar active_camera: The current active camera.
 | 
			
		||||
						 @note: this can be set directly from python to avoid using the L{KX_SceneActuator}
 | 
			
		||||
	@type active_camera: L{KX_Camera}
 | 
			
		||||
	@ivar suspended: True if the scene is suspended.
 | 
			
		||||
	@ivar suspended: True if the scene is suspended, (read-only).
 | 
			
		||||
	@type suspended: boolean
 | 
			
		||||
	@ivar activity_culling: True if the scene is activity culling
 | 
			
		||||
	@type activity_culling: boolean
 | 
			
		||||
@@ -5328,7 +5329,7 @@ class KX_Camera(KX_GameObject):
 | 
			
		||||
		Example::
 | 
			
		||||
			import GameLogic
 | 
			
		||||
			co = GameLogic.getCurrentController()
 | 
			
		||||
			cam = co.GetOwner()
 | 
			
		||||
			cam = co.owner
 | 
			
		||||
			
 | 
			
		||||
			# A sphere of radius 4.0 located at [x, y, z] = [1.0, 1.0, 1.0]
 | 
			
		||||
			if (cam.sphereInsideFrustum([1.0, 1.0, 1.0], 4) != cam.OUTSIDE):
 | 
			
		||||
@@ -5344,7 +5345,7 @@ class KX_Camera(KX_GameObject):
 | 
			
		||||
		Example::
 | 
			
		||||
			import GameLogic
 | 
			
		||||
			co = GameLogic.getCurrentController()
 | 
			
		||||
			cam = co.GetOwner()
 | 
			
		||||
			cam = co.owner
 | 
			
		||||
			
 | 
			
		||||
			# Box to test...
 | 
			
		||||
			box = []
 | 
			
		||||
@@ -5374,7 +5375,7 @@ class KX_Camera(KX_GameObject):
 | 
			
		||||
		Example::
 | 
			
		||||
			import GameLogic
 | 
			
		||||
			co = GameLogic.getCurrentController()
 | 
			
		||||
			cam = co.GetOwner()
 | 
			
		||||
			cam = co.owner
 | 
			
		||||
	
 | 
			
		||||
			# Test point [0.0, 0.0, 0.0]
 | 
			
		||||
			if (cam.pointInsideFrustum([0.0, 0.0, 0.0])):
 | 
			
		||||
@@ -5451,7 +5452,7 @@ class KX_Camera(KX_GameObject):
 | 
			
		||||
					      [1.0/cam.scaling[0], 1.0/cam.scaling[1], 1.0/cam.scaling[2], 1.0])
 | 
			
		||||
			
 | 
			
		||||
			co = GameLogic.getCurrentController()
 | 
			
		||||
			cam = co.getOwner()
 | 
			
		||||
			cam = co.owner
 | 
			
		||||
			cam.setProjectionMatrix(Perspective(cam)))
 | 
			
		||||
		
 | 
			
		||||
		@type matrix: 4x4 matrix.
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user