| Line 33: | Line 33: | ||
pyPcCommon.__init__(self,oreg) | pyPcCommon.__init__(self,oreg) | ||
PhysicalLayer.CallbackEveryFrame(self,CEL_EVENT_PRE) | PhysicalLayer.CallbackEveryFrame(self,CEL_EVENT_PRE) | ||
| - | + | def ReceiveMessage(self,msg, sender, ret, params): | |
| - | + | if msg == "cel.foo.bar": | |
| + | print "do something" | ||
| + | elif msg == "cel.foo.anotherbar": | ||
| + | print "do something else" | ||
return 0 | return 0 | ||
def TickEveryFrame(self): | def TickEveryFrame(self): | ||
Revision as of 13:17, 27 February 2008
Contents |
Introduction
This is documentation for the future python property class system.
A Simple Python Property Class
from pycel import * class RotatePropClass(pyPcCommon): def __init__(self,oreg): pyPcCommon.__init__(self,oreg) PhysicalLayer.CallbackEveryFrame(self,CEL_EVENT_PRE) def TickEveryFrame(self): mov = celMesh(self.GetEntity()).Mesh.GetMovable() rot = csYRotMatrix3(0.1) mov.Transform(rot) mov.UpdateMove() CEL_IMPLEMENT_FACTORY(RotatePropClass,"pcrotate")
Where "pcrotate" would be the actual name to use when creating such a property class.
Receiving Messages
class RotatePropClass(pyPcCommon,pyMessageReceiver): def __init__(self,oreg): pyPcCommon.__init__(self,oreg) PhysicalLayer.CallbackEveryFrame(self,CEL_EVENT_PRE) def ReceiveMessage(self,msg, sender, ret, params): if msg == "cel.foo.bar": print "do something" elif msg == "cel.foo.anotherbar": print "do something else" return 0 def TickEveryFrame(self): mov = celMesh(self.GetEntity()).Mesh.GetMovable() rot = csYRotMatrix3(0.1) mov.Transform(rot) mov.UpdateMove()
Sending Messages
entity.MessageChannel.CreateMessageDispatcher(self,"cel.foo.bar").SendMessage(pars) or entity.MessageChannel.SendMessage("cel.foo.bar",self,pars)
Properties
Python property classes support a mechanism to transparently treat python class attributes as cel properties, this means any property you set on the map or elsewhere (like quests) will directly translate to a python attribute change in your instance.
Loading your property classes
Usually you will place the .py file somewhere in pythonpath, and add some config options to celstart.cfg (or your own app).
CsPython.Module.1 = mypcclasses
(where the file would be mypcclasses.py in this case).
You can add as many files as you want using this mechanism.
