home *** CD-ROM | disk | FTP | other *** search
/ PC PowerPlay 56 / CDPowerplay56Disc2.iso / demos / blade / data1.cab / Program_Executable_Files / Lib / Levers.py < prev    next >
Encoding:
Python Source  |  2000-10-27  |  7.0 KB  |  264 lines

  1. import Bladex
  2. import InitDataField
  3. import Actions
  4. import GameStateAux
  5. import ObjStore
  6. import B3DLib
  7.  
  8. LEVER_DISTANCE = 2000
  9.  
  10. LEVER_OFF      = 0
  11. LEVER_ON       = 1
  12. LEVER_OFF2ON   = 2
  13. LEVER_ON2OFF   = 3
  14.  
  15. class LeverType:
  16.     bod_name=""
  17.     stick_bod_name=""
  18.     stick_offset=(0,0,0)
  19.     center=(0,0,0)
  20.     axis=(0,0,0)
  21.     iang=0.0
  22.     on_time=0.0
  23.     off_time=0.0
  24.  
  25.  
  26.  
  27. def ActivateLever(pj_name,event):
  28.     pj=Bladex.GetEntity(pj_name)
  29.     lever=pj.Data.obj_used.Data.leverdata
  30.     if(lever.state==LEVER_ON):
  31.         lever.TurnOff()
  32.     elif(lever.state==LEVER_OFF):
  33.         lever.TurnOn()
  34.     pj.Data.obj_used=None
  35.     pj.DelAnmEventFunc("Activate")
  36.  
  37.  
  38. def LeverUseFunc(lever_name,use_from):
  39.     obj=Bladex.GetEntity(lever_name)
  40.     
  41.     # To avoid the telekinetic power of the jedi knight
  42.     if B3DLib.GetXZDistance('Player1', lever_name)< LEVER_DISTANCE:
  43.         lever=obj.Data.leverdata
  44.         if((lever.state==LEVER_ON and lever.mode!=2) or lever.state==LEVER_OFF):
  45.             pj=Bladex.GetEntity("Player1")
  46.             if(lever.state==LEVER_ON):
  47.                 pj.LaunchAnmType("lvr_u")
  48.             else:
  49.                 pj.LaunchAnmType("lvr_d")
  50.             pj.Data.obj_used=obj
  51.             Actions.QuickTurnToFaceEntity ("Player1", lever_name)
  52.             pj.AddAnmEventFunc("Activate",ActivateLever)
  53.  
  54. def MoveLeverFunc(lever_name,time):
  55.     stick_obj=Bladex.GetEntity(lever_name)
  56.     lever=stick_obj.Data.leverdata
  57.     if(time<lever.end_time):
  58.         c=lever.type.center
  59.         e=lever.type.axis
  60.         itime=time-lever.last_time;
  61.         stick_obj.RotateRel(c[0],c[1],c[2],e[0],e[1],e[2],lever.w*itime)
  62.         lever.last_time=time;
  63.     else:
  64.         c=lever.type.center
  65.         e=lever.type.axis
  66.         itime=lever.end_time-lever.last_time;
  67.         stick_obj.RotateRel(c[0],c[1],c[2],e[0],e[1],e[2],lever.w*itime)
  68.         stick_obj.RemoveFromList("Timer60")
  69.         stick_obj.TimerFunc=None
  70.         if(lever.state==LEVER_ON2OFF):
  71.             lever.state=LEVER_OFF
  72.         elif(lever.state==LEVER_OFF2ON):
  73.             lever.state=LEVER_ON
  74.             if(lever.mode==1):
  75.                 lever.TurnOff()
  76.     
  77.  
  78. ##class Lever(GameStateAux.PersistentObject):
  79. class Lever:
  80.  
  81.     ObjId=""
  82.     state=LEVER_OFF
  83.     mode=1
  84.     OnTurnOnFunc=None
  85.     OnTurnOnArgs=()
  86.     OnTurnOffFunc=None
  87.     OnTurnOffArgs=()
  88.     stick_obj=None
  89.     type=None
  90.     obj=None
  91.  
  92.  
  93.  
  94.     def __init__(self):
  95.         self.ObjId=ObjStore.GetNewId() # Para identificarlo al grabar/guardar
  96.         ObjStore.ObjectsStore[self.ObjId]=self
  97.  
  98.     def __del__(self):
  99.         del ObjStore.ObjectsStore[self.ObjId]
  100.  
  101.     def TurnOn(self):
  102.         if(self.state==LEVER_OFF):
  103.             self.stick_obj.TimerFunc=MoveLeverFunc
  104.             self.stick_obj.SubscribeToList("Timer60")
  105.             self.start_time=Bladex.GetTime()
  106.             self.last_time=Bladex.GetTime()
  107.             self.end_time=self.start_time+self.type.on_time
  108.             self.w=self.type.iang/self.type.on_time
  109.             self.state=LEVER_OFF2ON
  110.             if(self.OnTurnOnFunc):
  111.                 apply(self.OnTurnOnFunc,self.OnTurnOnArgs)
  112.  
  113.     def TurnOff(self):
  114.         if(self.state==LEVER_ON):
  115.             self.stick_obj.TimerFunc=MoveLeverFunc
  116.             self.stick_obj.SubscribeToList("Timer60")
  117.             self.start_time=Bladex.GetTime()
  118.             self.last_time=Bladex.GetTime()
  119.             self.end_time=self.start_time+self.type.off_time
  120.             self.w=-self.type.iang/self.type.off_time
  121.             self.state=LEVER_ON2OFF
  122.             if(self.OnTurnOffFunc):
  123.                 apply(self.OnTurnOffFunc,self.OnTurnOffArgs)
  124.  
  125.  
  126.     def persistent_id(self):
  127.         return self.ObjId
  128.  
  129.     def __getstate__(self):
  130.         # Tiene que devolver c≤mo poder guardar el estado de la clase
  131.  
  132.         stick_objId=None
  133.         if self.stick_obj:
  134.             stick_objId=self.stick_obj.Name
  135.         return (1,
  136.                 self.ObjId,
  137.                 self.state,
  138.                 self.mode,
  139.                 GameStateAux.SaveFunctionAux(self.OnTurnOnFunc),
  140.                 self.OnTurnOnArgs,
  141.                 GameStateAux.SaveFunctionAux(self.OnTurnOffFunc),
  142.                 self.OnTurnOffArgs,
  143.                 stick_objId,
  144.                 self.type,
  145.                 GameStateAux.SaveEntityAux(self.obj),
  146.                 GameStateAux.SaveNewMembers(self)
  147.                 )
  148.  
  149.     def __setstate__(self,parm):
  150.         # Toma como parßmetro lo que devuelve __getstate__() y debe recrear la clase
  151.  
  152.         if parm[0]==1:
  153.             #self.ObjId=parm[1] En GameStateAux.PersistentObject()
  154. ##            GameStateAux.PersistentObject.__setstate__(self,parm)
  155.             self.ObjId=parm[1]
  156.             ObjStore.ObjectsStore[self.ObjId]=self
  157.  
  158.             self.state=parm[2]
  159.             self.mode=parm[3]
  160.             GameStateAux.LoadFunctionAux(parm[4],self,"OnTurnOnFunc")
  161.             self.OnTurnOnArgs=parm[5]
  162.             GameStateAux.LoadFunctionAux(parm[6],self,"OnTurnOffFunc")
  163.             self.OnTurnOffArgs=parm[7]
  164.             stick_objId=parm[8]
  165.             self.type=parm[9]
  166.             self.obj=GameStateAux.LoadEntityAux(parm[10])
  167.             GameStateAux.LoadNewMembers(self,parm[11])
  168.             if stick_objId:
  169.                 self.stick_obj=Bladex.GetEntity(stick_objId)
  170.             else:
  171.                 self.stick_obj=None
  172.         else:
  173.             print "Lever.__setstate__() -> Version mismatch"
  174.             # Valores de creaci≤n por si valen para algo.
  175.             self.state=LEVER_OFF
  176.             self.mode=1
  177.             self.OnEndOpenFunc=None
  178.             self.OnTurnOnArgs=()
  179.             self.OnEndCloseFunc=None
  180.             self.OnTurnOffArgs=()
  181.             self.ObjId=ObjStore.GetNewId()
  182.             ObjStore.ObjectsStore[self.ObjId]=self
  183.  
  184.  
  185. LeverType1=LeverType()
  186.  
  187. LeverType1.bod_name="Zocalo1"
  188. LeverType1.stick_bod_name="Palanca1"
  189. LeverType1.stick_offset=(0.0,-99.0,131.0)
  190. LeverType1.center=0.0,225.0,-125.0
  191. LeverType1.axis=1.0,0.0,0.0
  192. LeverType1.iang=3.1416/2
  193. LeverType1.on_time=0.5
  194. LeverType1.off_time=0.5
  195.  
  196.  
  197. LeverType2=LeverType()
  198.  
  199. LeverType2.bod_name="Zocalo2"
  200. LeverType2.stick_bod_name="Palanca2"
  201. LeverType2.stick_offset=(83.0,-238.0,235.0)
  202. LeverType2.center=0.0,237.0,-237.0
  203. LeverType2.axis=1.0,0.0,0.0
  204. LeverType2.iang=-3.1416/2
  205. LeverType2.on_time=0.5
  206. LeverType2.off_time=0.5
  207.  
  208.  
  209. LeverType3=LeverType()
  210.  
  211. LeverType3.bod_name="Zocalo3"
  212. LeverType3.stick_bod_name="Palanca3"
  213. LeverType3.stick_offset=(0.0,-160.0,218.0)
  214. LeverType3.center=0.0,218.0,-218.0
  215. LeverType3.axis=1.0,0.0,0.0
  216. LeverType3.iang=3.1416/2
  217. LeverType3.on_time=0.5
  218. LeverType3.off_time=0.5
  219.  
  220.  
  221. LeverTypeFloor=LeverType()
  222.  
  223. LeverTypeFloor.bod_name="ZocaloSuelo"
  224. LeverTypeFloor.stick_bod_name="PalancaSuelo"
  225. LeverTypeFloor.stick_offset=(0.0,-297.0,467.0)
  226. LeverTypeFloor.center=0.0,297.0,-520.0
  227. LeverTypeFloor.axis=1.0,0.0,0.0
  228. LeverTypeFloor.iang=-3*(3.1416/4)
  229. LeverTypeFloor.on_time=0.5
  230. LeverTypeFloor.off_time=0.5
  231.  
  232.  
  233. LeverTypeSnake=LeverType()
  234.  
  235. LeverTypeSnake.bod_name="ZocaloSerpiente"
  236. LeverTypeSnake.stick_bod_name="MandibulaSerpiente"
  237. LeverTypeSnake.stick_offset=(0.0,-78.699,-118.771)
  238. LeverTypeSnake.center=0.0,91.753,65.783
  239. LeverTypeSnake.axis=1.0,0.0,0.0
  240. LeverTypeSnake.iang=-3.1416/5
  241. LeverTypeSnake.on_time=0.5
  242. LeverTypeSnake.off_time=0.5
  243.  
  244.  
  245.  
  246.  
  247. def PlaceLever(name,type,position,orientation,scale):
  248.     lever=Lever()
  249.     lever.type=type
  250.  
  251.     lever.obj=Bladex.CreateEntity(name,type.bod_name,position[0],position[1],position[2])
  252.     lever.obj.Orientation=orientation
  253.     abs_offset=lever.obj.Rel2AbsVector(lever.type.stick_offset[0],lever.type.stick_offset[1],lever.type.stick_offset[2])
  254.     InitDataField.Initialise(lever.obj)
  255.     lever.obj.Data.leverdata=lever
  256.     
  257.     lever.stick_obj=Bladex.CreateEntity(name+"Stick",type.stick_bod_name,position[0]+abs_offset[0],position[1]+abs_offset[1],position[2]+abs_offset[2])
  258.     lever.stick_obj.Orientation=orientation
  259.     InitDataField.Initialise(lever.stick_obj)
  260.     lever.stick_obj.Data.leverdata=lever
  261.     lever.stick_obj.UseFunc=LeverUseFunc
  262.     lever.stick_obj.Solid=0
  263.     return lever
  264.