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

  1. import Bladex
  2. import EnemyTypes
  3. import Actions
  4. import math
  5. import B3DLib
  6. import PickInit
  7. import GameStateAux
  8. import darfuncs
  9. import ItemTypes
  10. import ObjStore
  11.  
  12.  
  13.  
  14. def GeneratorReady(ent_name):
  15.     enm=Bladex.GetEntity(ent_name)
  16.     enmgen=enm.Data.enmgendata
  17.     enmgen.Ready=1
  18.     enm.Data.OldImDeadFunc(ent_name)
  19.  
  20. def EnemyReady(ent_name):
  21.     o = Bladex.GetEntity(ent_name + "quad")
  22.     if o:
  23.         o.SubscribeToList("Pin")
  24.     enm=Bladex.GetEntity(ent_name)
  25.     enm.InitPos=enm.Position
  26.     alfa=B3DLib.GetEntity2EntityAngle(ent_name, "Player1")
  27.     enm.Face(alfa)
  28.     enm.Blind=0
  29.     enm.Deaf=0
  30.     Bladex.AddScheduledFunc(Bladex.GetTime(),enm.SetOnFloor,())
  31.     if enm.Data.CallBackGen != "":
  32.         enm.Data.CallBackGen(enm)
  33.     
  34. def TryToGenerateEnemy(trsector, ent_name):
  35.     enmgen=Bladex.GetTriggerSectorData(trsector)
  36.     darfuncs.ValidAppear(enmgen.Position,GenerateEnemy,(trsector, ent_name))
  37.  
  38. def GenerateEnemy(trsector, ent_name):
  39.     enmgen=Bladex.GetTriggerSectorData(trsector)
  40.     if ent_name=="Player1":
  41.         if enmgen.Ready:
  42.             enmgen.Ready=0
  43.             enm=Bladex.GetEntity(enmgen.RootName+`enmgen.NextEnemy`)
  44.             enm.UnFreeze()
  45.             enmgen.NextEnemy=enmgen.NextEnemy+1
  46.             if enmgen.NextEnemy>enmgen.NEnemies:
  47.                 enmgen.Deactivate()
  48.             if enmgen.Animation:
  49.                 char=Bladex.GetEntity("Player1")
  50.                 enm.SetTmpAnmFlags(1,1,1,0,5,1,0)
  51.                 enm.LaunchAnimation(enmgen.Animation)
  52.                 enm.Position=enmgen.Position
  53.                 alfa=B3DLib.GetEntity2EntityAngle(enm.Name, "Player1")
  54.                 enm.Angle=alfa
  55.                 enm.AnmEndedFunc=EnemyReady
  56.                 darfuncs.CreateFalseCube(enmgen.Position,-1.0,enm.Name)
  57.             else:
  58.                 EnemyReady(enm.Name)
  59.             if enmgen.InitGenFunc:
  60.                 apply(enmgen.InitGenFunc, enmgen.InitGenArgs)
  61.  
  62.  
  63. class EnmGen:
  64.  
  65.     def __init__(self):
  66.         self.ObjId=ObjStore.GetNewId() # Para identificarlo al grabar/guardar
  67.         ObjStore.ObjectsStore[self.ObjId]=self
  68.  
  69.         self.Active=0
  70.         self.Ready=0
  71.         self.Position=0.0, 0.0, 0.0
  72.         self.TrSector=""
  73.         self.NEnemies=4
  74.         self.NextEnemy=1
  75.         self.RootName="Skl"
  76.         self.EnemyType="Skeleton"
  77.         self.WeaponType=""
  78.         self.ShieldType=""
  79.         self.Animation=""
  80.         self.InitGenFunc=""
  81.         self.InitGenArgs=()
  82.  
  83.     def __del__(self):
  84.         del ObjStore.ObjectsStore[self.ObjId]
  85.  
  86.     def Activate(self):
  87.         if self.NextEnemy<=self.NEnemies:
  88.             self.Active=1
  89.             self.Ready=1
  90.             Bladex.SetTriggerSectorFunc(self.TrSector, "OnEnter", TryToGenerateEnemy)
  91.         else:
  92.             print "Generador agotado!"
  93.  
  94.     def Deactivate(self):
  95.         self.Active=0
  96.         self.Ready=0
  97.         Bladex.RemoveTriggerSectorFunc(self.TrSector, "OnEnter")
  98.  
  99.     def persistent_id(self):
  100.         return self.ObjId
  101.  
  102.     def __getstate__(self):
  103.         # Tiene que devolver c≤mo poder guardar el estado de la clase
  104.         return (1,
  105.                 self.ObjId,
  106.                 self.Active,
  107.                 self.Ready,
  108.                 self.Position,
  109.                 self.TrSector,
  110.                 self.NEnemies,
  111.                 self.NextEnemy,
  112.                 self.RootName,
  113.                 self.EnemyType,
  114.                 self.WeaponType,
  115.                 self.ShieldType,
  116.                 self.Animation,
  117.                 GameStateAux.SaveFunctionAux(self.InitGenFunc),
  118.                 self.InitGenArgs,
  119.                 )
  120.         
  121.  
  122.     def __setstate__(self,parm):
  123.         # Toma como parßmetro lo que devuelve __getstate__() y debe recrear la clase
  124.         if parm[0]==1:
  125.             self.ObjId=parm[1]
  126.             ObjStore.ObjectsStore[self.ObjId]=self
  127.             
  128.             self.Active=parm[2]
  129.             self.Ready=parm[3]
  130.             self.Position=parm[4]
  131.             self.TrSector=parm[5]
  132.             self.NEnemies=parm[6]
  133.             self.NextEnemy=parm[7]
  134.             self.RootName=parm[8]
  135.             self.EnemyType=parm[9]
  136.             self.WeaponType=parm[10]
  137.             self.ShieldType=parm[11]
  138.             self.Animation=parm[12]
  139.             GameStateAux.LoadFunctionAux(parm[13],self,"InitGenFunc")
  140.             self.InitGenArgs=parm[14]
  141.         else:
  142.             print "EnmGen.__setstate__() -> Version mismatch"
  143.             # Valores de creaci≤n por si valen para algo.
  144.             self.ObjId=ObjStore.GetNewId() # Para identificarlo al grabar/guardar
  145.             ObjStore.ObjectsStore[self.ObjId]=self
  146.  
  147.             self.Active=0
  148.             self.Ready=0
  149.             self.Position=0.0, 0.0, 0.0
  150.             self.TrSector=""
  151.             self.NEnemies=4
  152.             self.NextEnemy=1
  153.             self.RootName="Skl"
  154.             self.EnemyType="Skeleton"
  155.             self.WeaponType=""
  156.             self.ShieldType=""
  157.             self.Animation=""
  158.             self.InitGenFunc=""
  159.             self.InitGenArgs=()
  160.  
  161.  
  162.  
  163. def CreateEnemiesGenerator(x=0.0, y=0.0, z=0.0, trsector="", nenemies=4, enemydscr=("Skl", "Skeleton", "", 0, "", 0), animation="", CallBack = ""):
  164.     enmgen=EnmGen()
  165.     enmgen.Position=x, y, z
  166.     enmgen.TrSector=trsector
  167.     enmgen.NEnemies=nenemies
  168.     enmgen.RootName=rootname=enemydscr[0]
  169.     enmgen.EnemyType=enemytype=enemydscr[1]
  170.     enmgen.WeaponType=weapontype=enemydscr[2]
  171.     enmgen.ShieldType=shieldtype=enemydscr[4]
  172.     enmgen.Animation=animation
  173.     Bladex.SetTriggerSectorData(trsector, enmgen)
  174.     for n in range(nenemies):
  175.         enm=Bladex.CreateEntity(rootname+`n+1`, enemytype, x, y, z,"Person")
  176.         enm.Angle=0.0
  177.         if weapontype:
  178.             weapon=Bladex.CreateEntity("Weapon"+rootname+`n+1`, weapontype, 0.0, 0.0, 0.0,"Weapon")
  179.             ItemTypes.ItemDefaultFuncs(weapon)
  180.             Actions.TakeObject(enm.Name, weapon.Name)
  181. #            if enemydscr[3]:
  182. #                Breakings.SetBreakableWS(weapon.Name)
  183.         if shieldtype:
  184.             shield=Bladex.CreateEntity("Shield"+rootname+`n+1`, shieldtype, 0.0, 0.0, 0.0)
  185.             ItemTypes.ItemDefaultFuncs(shield)
  186.             Actions.TakeObject(enm.Name, shield.Name)
  187. #            if enemydscr[5]:
  188. #                Breakings.SetBreakableWS(shield.Name)
  189.         if len(enemydscr)==7:
  190.             enm.Level=enemydscr[6]
  191.         EnemyTypes.EnemyDefaultFuncs(enm)
  192.         enm.Blind=1
  193.         enm.Deaf=1
  194.         if n<nenemies-1:
  195.             enm.Data.OldImDeadFunc=enm.ImDeadFunc
  196.             enm.ImDeadFunc=GeneratorReady
  197.         enm.Data.enmgendata=enmgen
  198.         enm.Data.CallBackGen=CallBack
  199.         enm.Freeze()
  200.         enm.RemoveFromWorldWithChilds()
  201.     return enmgen
  202.