Module GameTypes :: Class KX_SCA_ReplaceMeshActuator
[frames] | no frames]

Class KX_SCA_ReplaceMeshActuator

PyObjectPlus --+            
               |            
          CValue --+        
                   |        
     SCA_ILogicBrick --+    
                       |    
           SCA_IActuator --+
                           |
                          KX_SCA_ReplaceMeshActuator

Edit Object actuator, in Replace Mesh mode.

Example:

       # Level-of-detail
       # Switch a game object's mesh based on its depth in the camera view.
       # +----------+     +-----------+     +-------------------------------------+
       # | Always   +-----+ Python    +-----+ Edit Object (Replace Mesh) LOD.Mesh |
       # +----------+     +-----------+     +-------------------------------------+
       import GameLogic

       # List detail meshes here
       # Mesh (name, near, far)
       # Meshes overlap so that they don't 'pop' when on the edge of the distance.
       meshes = ((".Hi", 0.0, -20.0),
                         (".Med", -15.0, -50.0),
                         (".Lo", -40.0, -100.0)
                       )
       
       co = GameLogic.getCurrentController()
       obj = co.owner
       act = co.actuators["LOD." + obj.name]
       cam = GameLogic.getCurrentScene().active_camera
       
       def Depth(pos, plane):
               return pos[0]*plane[0] + pos[1]*plane[1] + pos[2]*plane[2] + plane[3]
       
       # Depth is negative and decreasing further from the camera
       depth = Depth(obj.position, cam.world_to_camera[2])
       
       newmesh = None
       curmesh = None
       # Find the lowest detail mesh for depth
       for mesh in meshes:
               if depth < mesh[1] and depth > mesh[2]:
                       newmesh = mesh
               if "ME" + obj.name + mesh[0] == act.getMesh():
                       curmesh = mesh
       
       if newmesh != None and "ME" + obj.name + newmesh[0] != act.getMesh():
               # The mesh is a different mesh - switch it.
               # Check the current mesh is not a better fit.
               if curmesh == None or curmesh[1] < depth or curmesh[2] > depth:
                       act.mesh = obj.getName() + newmesh[0]
                       GameLogic.addActiveActuator(act, True)

Warning: Replace mesh actuators will be ignored if at game start, the named mesh doesn't exist.

This will generate a warning in the console:

ERROR: GameObject OBName ReplaceMeshActuator ActuatorName without object

Instance Methods
 
setMesh(name)
Sets the name of the mesh that will replace the current one.
string or None
getMesh()
Returns the name of the mesh that will replace the current one.
None
instantReplaceMesh()
Immediately replace mesh without delay.
bool
isA(game_type)
Check if this is a type or a subtype game_type. (Inherited from GameTypes.PyObjectPlus)
    Deprecated
integer
getExecutePriority()
Gets the execution priority of this logic brick. (Inherited from GameTypes.SCA_ILogicBrick)
string
getName()
Returns the name of the CValue. (Inherited from GameTypes.CValue)
KX_GameObject
getOwner()
Gets the game object associated with this logic brick. (Inherited from GameTypes.SCA_ILogicBrick)
 
setExecutePriority(priority)
Sets the priority of this logic brick. (Inherited from GameTypes.SCA_ILogicBrick)
Instance Variables
int executePriority
This determines the order controllers are evaluated, and actuators are activated (lower priority is executed first). (Inherited from GameTypes.SCA_ILogicBrick)
bool invalid
Test if the object has been freed by the game engine and is no longer valid. (Inherited from GameTypes.PyObjectPlus)
KX_MeshProxy or None if no mesh is set mesh
KX_MeshProxy or the name of the mesh that will replace the current one Set to None to disable actuator
string name
The name of this CValue derived object (read-only). (Inherited from GameTypes.SCA_ILogicBrick)
KX_GameObject or None in exceptional cases. owner
The game object this logic brick is attached to (read-only). (Inherited from GameTypes.SCA_ILogicBrick)
boolean useDisplayMesh
when true the displayed mesh is replaced.
boolean usePhysicsMesh
when true the physics mesh is replaced.
Method Details

setMesh(name)

 

Sets the name of the mesh that will replace the current one. When the name is None it will unset the mesh value so no action is taken.

Parameters:
  • name (string or None)

Deprecated: Use the mesh attribute instead.

getMesh()

 

Returns the name of the mesh that will replace the current one.

Returns None if no mesh has been scheduled to be added.

Returns: string or None

Deprecated: Use the mesh attribute instead.