home *** CD-ROM | disk | FTP | other *** search
/ PC PowerPlay 56 / CDPowerplay56Disc2.iso / demos / blade / data1.cab / Program_Executable_Files / Lib / Doors.py < prev    next >
Encoding:
Text File  |  2000-10-27  |  12.0 KB  |  452 lines

  1. import Bladex
  2. import InitDataField
  3. import AuxFuncs
  4. import GameStateAux
  5. import ObjStore
  6. import Scorer
  7.  
  8. CLOSED=0
  9. OPENED=1
  10. AC=2
  11. UNIF=3
  12. AC_UNIF_DEC=4
  13. UNIF_DEC=5
  14. AC_UNIF=6
  15. AC_DEC=7
  16. DEC=8
  17.  
  18.  
  19. Bladex.CreateTimer("DoorTimer",0.1)
  20.  
  21.  
  22. def DisplaceSound(sld_name, time):
  23.  
  24.     sld_area=Bladex.GetEntity(sld_name)
  25.     door=sld_area.Data.doordata
  26.     door.currdispl=sld_area.Displacement
  27.     displ_var=door.prevdispl-door.currdispl
  28.     v=door.surface[0]*displ_var, door.surface[1]*displ_var, door.surface[2]*displ_var
  29.     door.soundpos=door.soundpos[0]-v[0], door.soundpos[1]-v[1], door.soundpos[2]-v[2]
  30.     door.prevdispl=door.currdispl
  31.     if (door.WhileOpenSound):
  32.         door.WhileOpenSound.Position=door.soundpos
  33.     if (door.WhileCloseSound):
  34.         door.WhileCloseSound.Position=door.soundpos
  35.  
  36.  
  37. def EndOpenFunc(sld_name):
  38.  
  39.     sld_area=Bladex.GetEntity(sld_name)
  40.     sld_area.RemoveFromList("DoorTimer")
  41.     door=sld_area.Data.doordata
  42.     door.currdispl=sld_area.Displacement
  43.     displ_var=door.prevdispl-door.currdispl
  44.     v=door.surface[0]*displ_var, door.surface[1]*displ_var, door.surface[2]*displ_var
  45.     door.soundpos=door.soundpos[0]-v[0], door.soundpos[1]-v[1], door.soundpos[2]-v[2]
  46.     door.prevdispl=door.currdispl
  47.     if (door.WhileOpenSound):
  48.         door.WhileOpenSound.StopSound()
  49.     if (door.EndOpenSound):
  50.         door.EndOpenSound.Position=door.soundpos
  51.         door.EndOpenSound.PlaySound(0)
  52.     door.status=OPENED
  53.     if (door.OnEndOpenFunc):
  54.         apply(door.OnEndOpenFunc, door.OnEndOpenArgs)
  55.  
  56.  
  57. def EndCloseFunc(sld_name):
  58.  
  59.     sld_area=Bladex.GetEntity(sld_name)
  60.     sld_area.RemoveFromList("DoorTimer")
  61.     door=sld_area.Data.doordata
  62.     door.currdispl=sld_area.Displacement
  63.     displ_var=door.prevdispl-door.currdispl
  64.     v=door.surface[0]*displ_var, door.surface[1]*displ_var, door.surface[2]*displ_var
  65.     door.soundpos=door.soundpos[0]-v[0], door.soundpos[1]-v[1], door.soundpos[2]-v[2]
  66.     door.prevdispl=door.currdispl
  67.     if (door.WhileCloseSound):
  68.         door.WhileCloseSound.StopSound()
  69.     if (door.EndCloseSound):
  70.         door.EndCloseSound.Position=door.soundpos
  71.         door.EndCloseSound.PlaySound(0)
  72.     door.status=CLOSED
  73.     if (door.OnEndCloseFunc):
  74.         apply(door.OnEndCloseFunc, door.OnEndCloseArgs)
  75.  
  76.  
  77. def EndOpen(sld_name):
  78.  
  79.     sld_area=Bladex.GetEntity(sld_name)
  80.     door=sld_area.Data.doordata
  81.     dec=((door.o_end_vel**2-door.o_med_vel**2)/(2*door.o_end_displ))
  82.     if (door.o_med_vel<0):
  83.         dec=-dec
  84.     sld_area.SlideTo(door.closed_displ-door.o_init_displ-door.o_med_displ-door.o_end_displ, door.o_med_vel, dec)
  85.     sld_area.OnStopFunc=EndOpenFunc
  86.  
  87.  
  88. def MedOpen(sld_name):
  89.  
  90.     sld_area=Bladex.GetEntity(sld_name)
  91.     door=sld_area.Data.doordata
  92.     sld_area.SlideTo(door.closed_displ-door.o_init_displ-door.o_med_displ, door.o_med_vel, 0)
  93.     if (door.opentype==AC_UNIF_DEC):
  94.         sld_area.OnStopFunc=EndOpen
  95.     else:
  96.         sld_area.OnStopFunc=EndOpenFunc
  97.  
  98.  
  99. def EndClose(sld_name):
  100.  
  101.     sld_area=Bladex.GetEntity(sld_name)
  102.     door=sld_area.Data.doordata
  103.     dec=((door.c_end_vel**2-door.c_med_vel**2)/(2*door.c_end_displ))
  104.     if (door.c_med_vel<0):
  105.         dec=-dec
  106.     sld_area.SlideTo(door.opened_displ+door.c_init_displ+door.c_med_displ+door.c_end_displ, door.c_med_vel, dec)
  107.     sld_area.OnStopFunc=EndCloseFunc
  108.  
  109.  
  110. def MedClose(sld_name):
  111.  
  112.     sld_area=Bladex.GetEntity(sld_name)
  113.     door=sld_area.Data.doordata
  114.     sld_area.SlideTo(door.opened_displ+door.c_init_displ+door.c_med_displ, door.c_med_vel, 0)
  115.     if (door.closetype==AC_UNIF_DEC):
  116.         sld_area.OnStopFunc=EndClose
  117.     else:
  118.         sld_area.OnStopFunc=EndCloseFunc
  119.  
  120.  
  121.  
  122. ##class Door(GameStateAux.PersistentObject):
  123. class Door:
  124.  
  125.     ObjId=""
  126.     Name= None
  127.     opentype=UNIF
  128.     o_init_vel=0
  129.     o_med_vel=0
  130.     o_end_vel=0
  131.     o_init_displ=0
  132.     o_med_displ=0
  133.     o_end_displ=0
  134.  
  135.     closetype=UNIF
  136.     c_init_vel=0
  137.     c_med_vel=0
  138.     c_end_vel=0
  139.     c_init_displ=0
  140.     c_med_displ=0
  141.     c_end_displ=0
  142.  
  143.     OnEndOpenFunc=""
  144.     OnEndCloseFunc=""
  145.  
  146.     OnEndOpenArgs=()
  147.     OnEndCloseArgs=()
  148.  
  149.     InitOpenSound=""
  150.     WhileOpenSound=""
  151.     EndOpenSound=""
  152.  
  153.     InitCloseSound=""
  154.     WhileCloseSound=""
  155.     EndCloseSound=""
  156.  
  157.     surface=(0,1,0)
  158.     closed_displ=0
  159.     opened_displ=0
  160.     currdispl=0
  161.     prevdispl=0
  162.     soundpos=(0,0,0)
  163.     Squezze=1
  164.     status=0
  165.  
  166.  
  167.  
  168.     def __init__(self, Name):
  169.         self.ObjId=ObjStore.GetNewId() # Para identificarlo al grabar/guardar
  170. ##        GameStateAux.PersistentObject.__init__(self)
  171.         self.Name= Name
  172.  
  173.         ObjStore.ObjectsStore[self.ObjId]=self
  174.  
  175.     def __del__(self):
  176.         del ObjStore.ObjectsStore[self.ObjId]
  177.  
  178.     def sld_area(self):
  179.         return Bladex.GetEntity(self.Name)
  180.  
  181.  
  182.     def OpenDoor(self):
  183.  
  184.         if (self.status==OPENED):
  185.             return
  186.  
  187.         sld_area= Bladex.GetEntity(self.Name)
  188.         self.prevdispl=sld_area.Displacement
  189.         if self.Squezze:
  190.             sld_area= Bladex.GetEntity(self.Name)
  191.             sld_area.HitFunc = None
  192.  
  193.         if (self.InitOpenSound):
  194.             self.InitOpenSound.Position=self.soundpos
  195.             self.InitOpenSound.PlaySound(0)
  196.  
  197.         if (self.WhileOpenSound):
  198.             self.WhileOpenSound.Position=self.soundpos
  199.             self.WhileOpenSound.PlaySound(-1)
  200.         
  201.         sld_area.TimerFunc=DisplaceSound
  202.         sld_area.SubscribeToList("DoorTimer")
  203.  
  204.         if (self.opentype==AC or self.opentype==AC_UNIF_DEC or self.opentype==AC_UNIF or self.opentype==AC_DEC):
  205.             ac=((self.o_med_vel**2-self.o_init_vel**2)/(2*self.o_init_displ))
  206.             if (self.o_med_vel<0):
  207.                 ac=-ac
  208.             sld_area.SlideTo(self.closed_displ-self.o_init_displ, self.o_init_vel, ac)
  209.             if (self.opentype==AC_UNIF_DEC or self.opentype==AC_UNIF):
  210.                 sld_area.OnStopFunc=MedOpen
  211.             elif (self.opentype==AC_DEC):
  212.                 sld_area.OnStopFunc=EndOpen
  213.             else:
  214.                 sld_area.OnStopFunc=EndOpenFunc
  215.             return
  216.  
  217.         if (self.opentype==UNIF or self.opentype==UNIF_DEC):
  218.             sld_area.SlideTo(self.closed_displ-self.o_med_displ, self.o_med_vel, 0)
  219.             if (self.opentype==UNIF_DEC):
  220.                 sld_area.OnStopFunc=EndOpen
  221.             else:
  222.                 sld_area.OnStopFunc=EndOpenFunc
  223.             return
  224.  
  225.         if (self.opentype==DEC):
  226.             dec=((self.o_end_vel**2-self.o_med_vel**2)/(2*self.o_end_displ))
  227.             if (self.o_med_vel<0):
  228.                 dec=-dec
  229.             sld_area.SlideTo(self.closed_displ-self.o_end_displ, self.o_med_vel, dec)
  230.             sld_area.OnStopFunc=EndOpenFunc
  231.  
  232.  
  233.     def CloseDoor(self):
  234.  
  235.         if (self.status==CLOSED):
  236.             return
  237.         sld_area= Bladex.GetEntity(self.Name)
  238.         self.prevdispl=sld_area.Displacement
  239.         if self.Squezze:
  240.             sld_area.HitFunc = DoorHit
  241.  
  242.         if (self.InitCloseSound):
  243.             self.InitCloseSound.Position=self.soundpos
  244.             self.InitCloseSound.PlaySound(0)
  245.  
  246.         if (self.WhileCloseSound):
  247.             self.WhileCloseSound.Position=self.soundpos
  248.             self.WhileCloseSound.PlaySound(-1)
  249.  
  250.         sld_area.TimerFunc=DisplaceSound
  251.         sld_area.SubscribeToList("DoorTimer")
  252.  
  253.         if (self.closetype==AC or self.closetype==AC_UNIF_DEC or self.closetype==AC_UNIF or self.closetype==AC_DEC):
  254.             ac=((self.c_med_vel**2-self.c_init_vel**2)/(2*self.c_init_displ))
  255.             if (self.c_med_vel<0):
  256.                 ac=-ac
  257.             sld_area.SlideTo(self.opened_displ+self.c_init_displ, self.c_init_vel, ac)
  258.             if (self.closetype==AC_UNIF_DEC or self.closetype==AC_UNIF):
  259.                 sld_area.OnStopFunc=MedClose
  260.             elif (self.closetype==AC_DEC):
  261.                 sld_area.OnStopFunc=EndClose
  262.             else:
  263.                 sld_area.OnStopFunc=EndCloseFunc
  264.             return
  265.  
  266.         if (self.closetype==UNIF or self.closetype==UNIF_DEC):
  267.             sld_area.SlideTo(self.opened_displ+self.c_med_displ, self.c_med_vel, 0)
  268.             if (self.closetype==UNIF_DEC):
  269.                 sld_area.OnStopFunc=EndClose
  270.             else:
  271.                 sld_area.OnStopFunc=EndCloseFunc
  272.             return
  273.  
  274.         if (self.closetype==DEC):
  275.             dec=((self.c_end_vel**2-self.c_med_vel**2)/(2*self.c_end_displ))
  276.             if (self.c_med_vel<0):
  277.                 dec=-dec
  278.             sld_area.SlideTo(self.opened_displ+self.c_end_displ, self.c_med_vel, dec)
  279.             sld_area.OnStopFunc=EndCloseFunc
  280.  
  281.  
  282.     def SetInitOpenSound(self, sound):
  283.         self.InitOpenSound=sound
  284.  
  285.     def SetWhileOpenSound(self, sound):
  286.         self.WhileOpenSound=sound
  287.  
  288.     def SetEndOpenSound(self, sound):
  289.         self.EndOpenSound=sound
  290.  
  291.     def SetInitCloseSound(self, sound):
  292.         self.InitCloseSound=sound
  293.  
  294.     def SetWhileCloseSound(self, sound):
  295.         self.WhileCloseSound=sound
  296.  
  297.     def SetEndCloseSound(self, sound):
  298.         self.EndCloseSound=sound
  299.  
  300.     def persistent_id(self):
  301.         return self.ObjId
  302.  
  303.     def __getstate__(self):
  304.         # Tiene que devolver c≤mo poder guardar el estado de la clase
  305.         return (1,
  306.                     self.ObjId, # De GameStateAux.PersistentObject
  307.                     self.Name,
  308.                     self.opentype,
  309.                     self.o_init_vel,
  310.                     self.o_med_vel,
  311.                     self.o_end_vel,
  312.                     self.o_init_displ,
  313.                     self.o_med_displ,
  314.                     self.o_end_displ,
  315.  
  316.                     self.closetype,
  317.                     self.c_init_vel,
  318.                     self.c_med_vel,
  319.                     self.c_end_vel,
  320.                     self.c_init_displ,
  321.                     self.c_med_displ,
  322.                     self.c_end_displ,
  323.  
  324.                     GameStateAux.SaveFunctionAux(self.OnEndOpenFunc),
  325.                     GameStateAux.SaveFunctionAux(self.OnEndCloseFunc),
  326.  
  327.                     self.OnEndOpenArgs,
  328.                     self.OnEndCloseArgs,
  329.  
  330.                     self.InitOpenSound,
  331.                     self.WhileOpenSound,
  332.                     self.EndOpenSound,
  333.  
  334.                     self.InitCloseSound,
  335.                     self.WhileCloseSound,
  336.                     self.EndCloseSound,
  337.                     self.status,
  338.                     self.Squezze,
  339.                     self.closed_displ,
  340.                     self.opened_displ,
  341.                     self.surface,
  342.                     self.soundpos,
  343.                     self.prevdispl,
  344.                     GameStateAux.SaveNewMembers(self)
  345.                 )
  346.  
  347.  
  348.     def __setstate__(self,parm):
  349.         # Toma como parßmetro lo que devuelve __getstate__() y debe recrear la clase
  350.         if parm[0]==1:
  351.             #self.ObjId=parm[1] En GameStateAux.PersistentObject()
  352. ##            GameStateAux.PersistentObject.__setstate__(self,parm)
  353.             self.ObjId=parm[1]
  354.             ObjStore.ObjectsStore[self.ObjId]=self
  355.  
  356.             self.Name=parm[2]
  357.             self.opentype=parm[3]
  358.             self.o_init_vel=parm[4]
  359.             self.o_med_vel=parm[5]
  360.             self.o_end_vel=parm[6]
  361.             self.o_init_displ=parm[7]
  362.             self.o_med_displ=parm[8]
  363.             self.o_end_displ=parm[9]
  364.  
  365.             self.closetype=parm[10]
  366.             self.c_init_vel=parm[11]
  367.             self.c_med_vel=parm[12]
  368.             self.c_end_vel=parm[13]
  369.             self.c_init_displ=parm[14]
  370.             self.c_med_displ=parm[15]
  371.             self.c_end_displ=parm[16]
  372.  
  373.             GameStateAux.LoadFunctionAux(parm[17],self,"OnEndOpenFunc")
  374.             GameStateAux.LoadFunctionAux(parm[18],self,"OnEndCloseFunc")
  375.  
  376.             self.OnEndOpenArgs=parm[19]
  377.             self.OnEndCloseArgs=parm[20]
  378.  
  379.             self.InitOpenSound=parm[21]
  380.             self.WhileOpenSound=parm[22]
  381.             self.EndOpenSound=parm[23]
  382.  
  383.             self.InitCloseSound=parm[24]
  384.             self.WhileCloseSound=parm[25]
  385.             self.EndCloseSound=parm[26]
  386.             self.status = parm[27]
  387.             self.Squezze = parm[28]
  388.             self.closed_displ = parm[29]
  389.             self.opened_displ = parm[30]
  390.             self.surface = parm[31]
  391.             self.soundpos = parm[32]
  392.             self.prevdispl= parm[33]
  393.             GameStateAux.LoadNewMembers(self,parm[34])
  394.  
  395.         else:
  396.             print "Door.__setstate__() -> Version mismatch"
  397.             # Valores por si valen para algo.
  398.             self.Name= "Error loading"
  399.             self.ObjId=ObjStore.GetNewId()
  400.             ObjStore.ObjectsStore[self.ObjId]=self
  401.  
  402. # Funcion de muerte por aplastamiento
  403. def DoorHit(sld,per,x,y,z,dx,dy,dz,wcx,wcy,wcz,wdx,wdy,wdz):
  404.     print sld,per,x,y,z,dx,dy,dz
  405.     p = Bladex.GetEntity(per)
  406.     if dy!=0:
  407.         p.LaunchAnmType("dth_rock")
  408.     p.Life = -1
  409.     if per == "Player1":
  410.         cam = Bladex.GetEntity("Camera")
  411.         cam.SType=0
  412.         cam.TType=0
  413.         AuxFuncs.FadeTo(3.0,60.0,32,0,0)
  414.         Scorer.SetVisible(0)
  415.         
  416. def Restore():
  417.     cam = Bladex.GetEntity("Camera")
  418.     cam.SetPersonView("Player1")
  419.     cam.Cut()
  420.     AuxFuncs.FadeFrom(3.0,0.0,255,0,0)
  421.     char          = Bladex.GetEntity("Player1")
  422.     char.UnFreeze()
  423.     char.Alpha    = 1
  424.     char.SelfIlum = 0
  425.     char.LaunchAnmType("rlx")
  426.     Scorer.SetVisible(1)
  427.     char.Data.ReSpawn("Player1")
  428.  
  429.     
  430.  
  431. def CreateDoor(sld_name, sector, sld_surface, opened_displ, closed_displ, init_status=CLOSED):
  432.     door=Door(sld_name)
  433.     sld_area=Bladex.CreateEntity(sld_name, "Entity Sliding Area", sector[0], sector[1], sector[2])
  434.     sld_area.SlidingSurface=sld_surface
  435.     door.surface=sld_surface
  436.     if (init_status==OPENED):
  437.         door.status=OPENED
  438.         v=sld_surface[0]*closed_displ, sld_surface[1]*closed_displ, sld_surface[2]*closed_displ
  439.         door.soundpos=sector[0]-v[0], sector[1]-v[1], sector[2]-v[2]
  440.         door.prevdispl=door.currdispl=sld_area.Displacement=opened_displ
  441.     else:
  442.         door.status=CLOSED
  443.         door.soundpos=sector
  444.         door.prevdispl=door.currdispl=sld_area.Displacement=closed_displ
  445.     door.opened_displ=opened_displ
  446.     door.closed_displ=closed_displ
  447.     InitDataField.Initialise(sld_area)
  448.     sld_area.Data.doordata=door
  449.     door.Squezze = 0
  450.     #sld_area.HitFunc = DoorHit
  451.     return door
  452.