home *** CD-ROM | disk | FTP | other *** search
/ PC PowerPlay 56 / CDPowerplay56Disc2.iso / demos / blade / data1.cab / Program_Executable_Files / Lib / EnmGenRnd.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2000-10-27  |  15.3 KB  |  419 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 1.5)
  3.  
  4. import Bladex
  5. import B3DLib
  6. import EnemyTypes
  7. import Actions
  8. import ItemTypes
  9. import math
  10. import Sounds
  11. import darfuncs
  12. import GameStateAux
  13. import ObjStore
  14.  
  15. def EnemyReady(ent_name):
  16.     print "Borrando '" + ent_name + "quad'"
  17.     o = Bladex.GetEntity(ent_name + 'quad')
  18.     if o:
  19.         o.SubscribeToList('Pin')
  20.     
  21.     char = Bladex.GetEntity('Player1')
  22.     enm = Bladex.GetEntity(ent_name)
  23.     Bladex.AddScheduledFunc(Bladex.GetTime(), enm.SetOnFloor, ())
  24.     enm.InitPos = pos = enm.Position
  25.     v = (char.Position[0] - pos[0], 0.0, char.Position[2] - pos[2])
  26.     v = B3DLib.Normalize(v)
  27.     alfa = -(3.14159 / 2.0) * (v[0] / abs(v[0])) + math.atan(v[2] / v[0])
  28.     enm.Face(alfa)
  29.     enm.Blind = 0
  30.     enm.Deaf = 0
  31.  
  32.  
  33. class Point:
  34.     
  35.     def __init__(self):
  36.         self.Name = 'Skl'
  37.         self.EnemyType = 'Skeleton'
  38.         self.WeaponType = ''
  39.         self.WeaponBreak = 0
  40.         self.ShieldType = ''
  41.         self.ShieldBreak = 0
  42.         self.Animation = ''
  43.         self.Position = [
  44.             0,
  45.             0,
  46.             0]
  47.         self.Level = None
  48.  
  49.  
  50.  
  51. class EnmGenRnd:
  52.     ObjId = 0
  53.     Active = 0
  54.     Ready = 0
  55.     NEnemies = 4
  56.     NextEnemy = 0
  57.     InitGenFunc = ''
  58.     GenerateNotifyFunc = ''
  59.     FinishGenFunc = ''
  60.     InitGenArgs = ()
  61.     NPoints = 0
  62.     OnceEnm = 1
  63.     EnmActivates = 0
  64.     FinishGen = 0
  65.     Points = [
  66.         0]
  67.     Enemies = [
  68.         0]
  69.     p = 0
  70.     N_EnmGen = 0
  71.     DifTime = 0
  72.     VirGenPos = [
  73.         0,
  74.         0,
  75.         0]
  76.     Last_Point = 0
  77.     NumDeaths = 0
  78.     Level = 0
  79.     SonidoGen = None
  80.     
  81.     def __init__(self):
  82.         self.ObjId = ObjStore.GetNewId()
  83.         ObjStore.ObjectsStore[self.ObjId] = self
  84.         self.VirGenPos = [
  85.             0,
  86.             0,
  87.             0]
  88.         self.Points = [
  89.             0]
  90.         self.Enemies = [
  91.             0]
  92.  
  93.     
  94.     def GeneratorReady(self, ent_name):
  95.         print 'Enemigo muero'
  96.         self.NumDeaths = self.NumDeaths - 1
  97.         if self.NumDeaths == 0:
  98.             if self.OnEnd:
  99.                 self.OnEnd()
  100.             
  101.         else:
  102.             print 'Quedan ', self.NumDeaths, 'Enemigos'
  103.         enm = Bladex.GetEntity(ent_name)
  104.         enm.Data.ImDeadFuncX(ent_name)
  105.         self.Enemies[enm.Data.NEnemy] = 0
  106.         self.EnmActivates = self.EnmActivates - 1
  107.         self.GenerateEnemy()
  108.         if self.FinishGen and self.EnmActivates == 0:
  109.             if self.FinishGenFunc:
  110.                 apply(self.FinishGenFunc, (self,))
  111.             
  112.         
  113.  
  114.     
  115.     def ActivateEnemy(self, point):
  116.         enm = self.Enemies[self.NextEnemy]
  117.         if enm:
  118.             darfuncs.UnhideBadGuy(enm.Name)
  119.             enm.Blind = 1
  120.             enm.Deaf = 1
  121.             enm.Position = self.Points[point].Position
  122.             enm.Data.NEnemy = self.NextEnemy
  123.         
  124.         return enm
  125.  
  126.     
  127.     def GenerateEnemy(self):
  128.         enmgen = self
  129.         char = Bladex.GetEntity('Player1')
  130.         charpos = char.Position
  131.         lpt = self.Last_Point
  132.         point = self.GetBestGenerationPoint(charpos)
  133.         self.Last_Point = lpt
  134.         if not darfuncs.ValidAppear(self.Points[point].Position):
  135.             Bladex.AddScheduledFunc(Bladex.GetTime() + 5.0, self.GenerateEnemy, ())
  136.             return None
  137.         
  138.         if enmgen.Ready:
  139.             nenemies = enmgen.OnceEnm - enmgen.EnmActivates
  140.             if self.DifTime == 0:
  141.                 if nenemies > 1:
  142.                     if enmgen.NextEnemy + nenemies >= enmgen.NEnemies:
  143.                         nenemies = enmgen.NEnemies - enmgen.NextEnemy
  144.                         enmgen.Deactivate()
  145.                         enmgen.FinishGen = 1
  146.                     
  147.                 elif enmgen.NextEnemy + 1 >= enmgen.NEnemies:
  148.                     enmgen.Deactivate()
  149.                     enmgen.FinishGen = 1
  150.                 
  151.             elif nenemies > 1:
  152.                 if enmgen.NextEnemy + nenemies >= enmgen.NEnemies:
  153.                     nenemies = enmgen.NEnemies - enmgen.NextEnemy
  154.                     enmgen.Deactivate()
  155.                     enmgen.FinishGen = 1
  156.                 
  157.                 if nenemies > 1:
  158.                     Bladex.AddScheduledFunc(Bladex.GetTime() + self.DifTime, self.GenerateEnemy, ())
  159.                     nenemies = 1
  160.                 
  161.             elif enmgen.NextEnemy + 1 >= enmgen.NEnemies:
  162.                 enmgen.Deactivate()
  163.                 enmgen.FinishGen = 1
  164.             
  165.             enmgen.EnmActivates = enmgen.EnmActivates + nenemies
  166.             t = 0
  167.             for t in range(nenemies):
  168.                 point = self.GetBestGenerationPoint(charpos)
  169.                 enm = self.ActivateEnemy(point)
  170.                 pos = enm.Position
  171.                 enmgen.NextEnemy = enmgen.NextEnemy + 1
  172.                 v = (charpos[0] - pos[0], 0.0, charpos[2] - pos[2])
  173.                 v = B3DLib.Normalize(v)
  174.                 enm.Angle = alfa
  175.                 if enmgen.Points[point].Animation:
  176.                     enm.SetTmpAnmFlags(1, 1, 1, 0, 5, 1)
  177.                     enm.LaunchAnimation(enmgen.Points[point].Animation)
  178.                     enm.AnmEndedFunc = EnemyReady
  179.                     darfuncs.CreateFalseCube(enm.Position, -1, enm.Name)
  180.                 else:
  181.                     EnemyReady(enm.Name)
  182.                 Actions.TurnToFaceEntityNow(enm.Name, 'Player1')
  183.                 enm.Data.ImDeadFuncX = enm.ImDeadFunc
  184.                 enm.ImDeadFunc = self.GeneratorReady
  185.                 if enmgen.InitGenFunc:
  186.                     enmgen.SonidoGen.Position = pos
  187.                     enmgen.SonidoGen.PlaySound(0)
  188.                     apply(enmgen.InitGenFunc, (enm,))
  189.                 
  190.             
  191.         
  192.  
  193.     
  194.     def GetBestGenerationPoint(self, charpos):
  195.         point = self.p
  196.         if point + 1 >= self.NPoints:
  197.             self.p = 0
  198.         else:
  199.             self.p = self.p + 1
  200.         for i in range(self.NPoints):
  201.             if point != self.Last_Point:
  202.                 pos = self.Points[point].Position
  203.                 v = (charpos[0] - pos[0], 0.0, charpos[2] - pos[2])
  204.                 dist = v[0] * v[0] + v[2] * v[2]
  205.                 if dist > 3000000:
  206.                     self.Last_Point = point
  207.                     return point
  208.                 
  209.             
  210.             point = point + 1
  211.             if point >= self.NPoints:
  212.                 point = 0
  213.             
  214.         
  215.         self.Last_Point = point
  216.         return point
  217.  
  218.     
  219.     def AddPoint(self, pos, enemydscr = ('Skl', 'Skeleton', '', 0, '', 0), animation = '', Level = None):
  220.         point = Point()
  221.         point.Position = pos
  222.         point.Name = enemydscr[0]
  223.         point.EnemyType = enemydscr[1]
  224.         point.WeaponBreak = enemydscr[3]
  225.         point.WeaponType = enemydscr[2]
  226.         point.ShieldType = enemydscr[4]
  227.         point.ShieldBreak = enemydscr[5]
  228.         point.Animation = animation
  229.         point.Level = Level
  230.         self.Points[self.NPoints:self.NPoints] = [
  231.             point]
  232.         self.NPoints = self.NPoints + 1
  233.         self.NumDeaths = self.NumDeaths + 1
  234.  
  235.     
  236.     def CreateEnemy(self, i):
  237.         Rage = self.Points[i].EnemyType
  238.         Name = self.Points[0].Name + `self.N_EnmGen`
  239.         self.Points[i].Enm = enm = Bladex.CreateEntity(Name, Rage, self.VirGenPos[0], self.VirGenPos[1], self.VirGenPos[2], 'Person')
  240.         if self.Points[i].Level != None:
  241.             enm.Level = self.Points[i].Level
  242.         else:
  243.             enm.Level = self.Level
  244.         enm.Blind = 1
  245.         enm.Deaf = 1
  246.         if self.Points[i].WeaponType:
  247.             weapon = Bladex.CreateEntity('Weapon' + Name, self.Points[i].WeaponType, 0.0, 0.0, 0.0, 'Weapon')
  248.             ItemTypes.ItemDefaultFuncs(weapon)
  249.             Actions.TakeObject(Name, weapon.Name)
  250.             weapon.RemoveFromWorld()
  251.         
  252.         if self.Points[i].ShieldType:
  253.             shield = Bladex.CreateEntity('Shield' + Name, self.Points[i].ShieldType, 0.0, 0.0, 0.0, 'Weapon')
  254.             ItemTypes.ItemDefaultFuncs(shield)
  255.             Actions.TakeObject(Name, shield.Name)
  256.             shield.RemoveFromWorld()
  257.         
  258.         EnemyTypes.EnemyDefaultFuncs(enm)
  259.         enm.Data.enmgendata = self
  260.         darfuncs.HideBadGuy(enm.Name)
  261.         self.N_EnmGen = self.N_EnmGen + 1
  262.         return enm
  263.  
  264.     
  265.     def Activate(self):
  266.         if self.NextEnemy <= self.NEnemies:
  267.             self.Active = 1
  268.             self.Ready = 1
  269.             j = i = 0
  270.             for i in range(self.NEnemies):
  271.                 en = self.CreateEnemy(j)
  272.                 if self.CallBak:
  273.                     self.CallBak(en)
  274.                 
  275.                 self.Enemies[i:i] = [
  276.                     en]
  277.                 j = j + 1
  278.             
  279.         
  280.  
  281.     
  282.     def Deactivate(self):
  283.         self.Active = 0
  284.         self.Ready = 0
  285.  
  286.     
  287.     def persistent_id(self):
  288.         return self.ObjId
  289.  
  290.     
  291.     def __del__(self):
  292.         del ObjStore.ObjectsStore[self.ObjId]
  293.  
  294.     
  295.     def __GetNameEnemies__(self):
  296.         Names = []
  297.         for i in range(self.NEnemies):
  298.             pass
  299.         
  300.         return Names
  301.  
  302.     
  303.     def __GetPointsGeneration__(self):
  304.         Points = []
  305.         for i in range(self.NPoints):
  306.             Points.append((self.Points[i].Position, self.Points[i].Animation))
  307.         
  308.         return Points
  309.  
  310.     
  311.     def __SetEnemies__(self, enemies):
  312.         self.Enemies = []
  313.         for i in range(self.NEnemies):
  314.             pass
  315.         
  316.  
  317.     
  318.     def __SetPoints__(self, points):
  319.         self.Points = []
  320.         for i in range(self.NPoints):
  321.             p = Point()
  322.             p.Position = points[i][0]
  323.             p.Animation = points[i][1]
  324.             self.Points.append(p)
  325.         
  326.  
  327.     
  328.     def __getstate__(self):
  329.         stick_objId = None
  330.         return (1, self.ObjId, self.Ready, self.OnceEnm, self.EnmActivates, self.DifTime, self.NextEnemy, self.NEnemies, self.FinishGen, self.p, self.Active, self.NPoints, self.Last_Point, self.NumDeaths, GameStateAux.SaveFunctionAux(self.InitGenFunc), self.InitGenArgs, GameStateAux.SaveFunctionAux(self.GenerateNotifyFunc), GameStateAux.SaveFunctionAux(self.FinishGenFunc), self.__GetNameEnemies__(), self.__GetPointsGeneration__(), GameStateAux.SaveEntityAux(self.SonidoGen), GameStateAux.SaveNewMembers(self))
  331.  
  332.     
  333.     def __setstate__(self, parm):
  334.         if parm[0] == 1:
  335.             self.ObjId = parm[1]
  336.             ObjStore.ObjectsStore[self.ObjId] = self
  337.             self.Ready = parm[2]
  338.             self.OnceEnm = parm[3]
  339.             self.EnmActivates = parm[4]
  340.             self.DifTime = parm[5]
  341.             self.NextEnemy = parm[6]
  342.             self.NEnemies = parm[7]
  343.             self.FinishGen = parm[8]
  344.             self.p = parm[9]
  345.             self.Active = parm[10]
  346.             self.NPoints = parm[11]
  347.             self.Last_Point = parm[12]
  348.             self.NumDeaths = parm[13]
  349.             GameStateAux.LoadFunctionAux(parm[14], self, 'InitGenFunc')
  350.             self.InitGenArgs = parm[15]
  351.             GameStateAux.LoadFunctionAux(parm[16], self, 'GenerateNotifyFunc')
  352.             GameStateAux.LoadFunctionAux(parm[17], self, 'FinishGenFunc')
  353.             self.__SetEnemies__(parm[18])
  354.             self.__SetPoints__(parm[19])
  355.             self.SonidoGen = GameStateAux.LoadEntityAux(parm[20])
  356.             print 'EnmGenRnd.__setstate__ self.SonidoGen', self.SonidoGen
  357.             GameStateAux.LoadNewMembers(self, parm[21])
  358.         else:
  359.             print 'Warning -> Version mismatch in EnmGenRnd.'
  360.             self.Ready = 0
  361.             self.OnceEnm = 0
  362.             self.EnmActivates = 0
  363.             self.DifTime = 0
  364.             self.NextEnemy = 0
  365.             self.NEnemies = 0
  366.             self.FinisGen = 0
  367.             self.p = 0
  368.             self.Active = 0
  369.             self.NPoints = 0
  370.             self.Last_Point = 0
  371.             self.NumDeaths = 0
  372.             self.InitGenArgs = ()
  373.             self.InitGenFunc = None
  374.             self.GenerateNotifyFunc = None
  375.             self.FinishGenFunc = None
  376.             self.ObjId = ObjStore.GetNewId()
  377.             ObjStore.ObjectsStore[self.ObjId] = self
  378.  
  379.  
  380.  
  381. def CreateEnemiesGenerator(nenemies = 4, enmonce = 2, SonidoGen = '..\\..\\Sounds\\M-GENERADOR-ENTIERRA3.wav'):
  382.     enmgen = EnmGenRnd()
  383.     enmgen.NEnemies = nenemies
  384.     enmgen.OnceEnm = enmonce
  385.     enmgen.SonidoGen = Sounds.CreateEntitySound(SonidoGen, 'GenTierra')
  386.     enmgen.SonidoGen.Volume = 0.3
  387.     enmgen.SonidoGen.MinDistance = 5000
  388.     enmgen.SonidoGen.MaxDistance = 20000
  389.     enmgen.CallBak = None
  390.     enmgen.OnEnd = None
  391.     return enmgen
  392.  
  393.  
  394. def CreateEnemy(pos, Name, Rage, WeaponType, WeaponBreak, ShieldType, ShieldBreak, Level = 0):
  395.     enm = Bladex.CreateEntity(Name, Rage, pos[0], pos[1], pos[2], 'Person')
  396.     enm.Blind = 1
  397.     enm.Deaf = 1
  398.     enm.Level = Level
  399.     if WeaponType:
  400.         weapon = Bladex.CreateEntity('Weapon' + Name, WeaponType, pos[0], pos[1], pos[2], 'Weapon')
  401.         ItemTypes.ItemDefaultFuncs(weapon)
  402.         Actions.TakeObject(Name, weapon.Name)
  403.     
  404.     if ShieldType:
  405.         shield = Bladex.CreateEntity('Shield' + Name, ShieldType, 0.0, 0.0, 0.0)
  406.         ItemTypes.ItemDefaultFuncs(shield)
  407.         Actions.TakeObject(Name, shield.Name)
  408.     
  409.     EnemyTypes.EnemyDefaultFuncs(enm)
  410.     enm.Data.Position = pos
  411.     darfuncs.HideBadGuy(enm.Name)
  412.     return enm
  413.  
  414.  
  415. def ActivateEnemy(enm):
  416.     enm.Position = enm.Data.Position
  417.     darfuncs.UnhideBadGuy(enm.Name)
  418.  
  419.