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

  1. """
  2. # EXAMPLE OF USE
  3. # make an ice aura (just using gradient 2) to last 5 minutes....
  4. aura= Auras.MakeAura ("Player1",5.0*60.0,(25,1.0,1.0,1,0,0), (),(),(2,  0.8,0.8,1.0, 1.0, 0.6  , 0.0,0.0,1.0, 0.0, 1.0))
  5. # interpolate to a fire aura over 1 second
  6. aura.Data.AddEvent(Bladex.GetTime()+1.0, (25,1.0,1.0,1,0,0), (),(),(2,  1.0,0.7,0.0, 1.0, 0.5  , 1.0,0.0,0.0, 0.0, 1.0))
  7. # interpolate back to ice aura over 0.1 seconds
  8. aura.Data.AddEvent(Bladex.GetTime()+0.1, (25,1.0,1.0,1,0,0), (),(),(2,  0.8,0.8,1.0, 1.0, 0.6  , 0.0,0.0,1.0, 0.0, 1.0))
  9.  
  10. # See the special damage functions in the file Damage.py for more examples...
  11.  
  12. """
  13. import Bladex
  14. Bladex.CreateTimer('Timer20',1.0/20.0)
  15.  
  16. class AnimateableAura:
  17.     def __init__(self, aura, time2live, AuraParams, AuraGradient0=(),AuraGradient1=(),AuraGradient2=(),Active=1,XtraParam=()):
  18.         self.EventList=[]
  19.         self.Name= aura.Name
  20.         self.TimerName= 'Timer20'
  21.         self.TimerFrequency= 1.0/20.0
  22.  
  23.         # set initial params
  24.         self.AuraParams= AuraParams
  25.         apply(aura.SetAuraParams, self.AuraParams)
  26.  
  27.         # set initial gradient 0
  28.         if AuraGradient0: self.AuraGradient0= AuraGradient0            
  29.         else: self.AuraGradient0= (0,  0.0,0.0,0.0, 0.0, 0.0  , 0.0,0.0,0.0, 0.0, 0.0)            
  30.         apply(aura.SetAuraGradient, self.AuraGradient0)        
  31.  
  32.         # set initial gradient 1
  33.         if AuraGradient1: self.AuraGradient1= AuraGradient1            
  34.         else: self.AuraGradient1= (1,  0.0,0.0,0.0, 0.0, 0.0  , 0.0,0.0,0.0, 0.0, 0.0)            
  35.         apply(aura.SetAuraGradient, self.AuraGradient1)
  36.  
  37.         # set initial gradient 2
  38.         if AuraGradient2: self.AuraGradient2= AuraGradient2
  39.         else: self.AuraGradient2= (2,  0.0,0.0,0.0, 0.0, 0.0  , 0.0,0.0,0.0, 0.0, 0.0)
  40.         apply(aura.SetAuraGradient, self.AuraGradient2)
  41.  
  42.         # set deathtime, & subscribe to timer...
  43.         if time2live>0.0: self.DeathTime= Bladex.GetTime()+time2live
  44.         else: self.DeathTime= -1.0
  45.         aura.TimerFunc= self.TimerFunc
  46.         aura.SubscribeToList(self.TimerName)
  47.  
  48.         # set active by default
  49.         self.Active= Active
  50.         aura.SetAuraActive(self.Active)
  51.  
  52.         # Establece el valor inicial del parametro extra
  53.         self.OldXtraParam=self.XtraParam=XtraParam
  54.         if XtraParam:
  55.             exec_string = XtraParam[0] + '=' + str(XtraParam[1])
  56.             exec(exec_string)
  57.             
  58.     # comparison function for time-based sort
  59.     def FirstTime(self, e1, e2):        
  60.         if e1[0]<e2[0]: return -1 #CHOOSE_FIRST            
  61.         elif e2[0]>e1[0]: return 1  #CHOOSE_SECOND            
  62.         else: return 0  #CHOOSE_EITHER                
  63.  
  64.     def AddEvent (self, time, AuraParams, AuraGradient0=(),AuraGradient1=(),AuraGradient2=(),Active=1,XtraParam=()):
  65.         self.EventList.append([time, AuraParams, AuraGradient0, AuraGradient1, AuraGradient2,Active,XtraParam])
  66.         # Sort the events into first event first order...
  67.         self.EventList.sort(self.FirstTime)
  68.         
  69.     def TimerFunc(self, obj_name, time):        
  70.         if self.DeathTime>=0.0 and time>self.DeathTime:
  71.             del self.EventList
  72.             self.Active=0
  73.             if self.OldXtraParam:
  74.                 exec_string = self.OldXtraParam[0] + '=' + str(self.OldXtraParam[1])
  75.                 exec(exec_string)
  76.             aura= Bladex.GetEntity(self.Name)
  77.             aura.SetAuraActive(0)            
  78.             aura.RemoveFromList(self.TimerName)
  79.             aura.SubscribeToList('Pin') # this should remove this class instance too            
  80.             return
  81.         elif len(self.EventList)<1:
  82.             # No events to process, return
  83.             return
  84.         else:
  85.             # Process using the first event
  86.             NextTime, AuraParams, AuraGradient0, AuraGradient1, AuraGradient2, Active, XtraParam= self.EventList[0]
  87.             if time>=NextTime:
  88.                 # We have reached an event                
  89.                 aura= Bladex.GetEntity(self.Name)
  90.                 
  91.                 # set params
  92.                 self.AuraParams= AuraParams
  93.                 apply(aura.SetAuraParams, self.AuraParams)
  94.                 
  95.                 # set gradient0
  96.                 if AuraGradient0:
  97.                     self.AuraGradient0= AuraGradient0
  98.                     apply(aura.SetAuraGradient, self.AuraGradient0)
  99.                 
  100.                 # set gradient1
  101.                 if AuraGradient1:
  102.                     self.AuraGradient1= AuraGradient1
  103.                     apply(aura.SetAuraGradient, self.AuraGradient1)
  104.                 
  105.                 # set gradient2
  106.                 if AuraGradient2:
  107.                     self.AuraGradient2= AuraGradient2
  108.                     apply(aura.SetAuraGradient, self.AuraGradient2)
  109.                                 
  110.                 if Active!=self.Active:
  111.                     self.active= Active
  112.                     aura.SetAuraActive(self.Active)
  113.  
  114.                 if XtraParam:
  115.                     self.XtraParam=XtraParam
  116.                     exec_string = XtraParam[0] + '=' + str(XtraParam[1])
  117.                     exec(exec_string)
  118.  
  119.                 # Comprueba si va a haber cambios en el intervalo actual, para no estar llamando al timer innecesariamente
  120.  
  121.                 nNextTime, nAuraParams, nAuraGradient0, nAuraGradient1, nAuraGradient2, nActive, nXtraParam= self.EventList[1]
  122.  
  123.                 if not ((AuraParams<>nAuraParams) or (AuraGradient2<>nAuraGradient2) or (XtraParam<>nXtraParam) or (AuraGradient0<>nAuraGradient0) or (AuraGradient1<>nAuraGradient1)):
  124.                     aura.RemoveFromList(self.TimerName)
  125.                     Bladex.AddScheduledFunc(nNextTime, aura.SubscribeToList, (self.TimerName,))
  126.  
  127.                 # remove the event, it is dealt with
  128.                 del self.EventList[0]
  129.             else:
  130.                 # interpolate towards the next event                                
  131.                 
  132.                 a= self.TimerFrequency/(self.TimerFrequency+NextTime-time)
  133.                 aura= Bladex.GetEntity(self.Name)
  134.                 
  135.                 # interpolate params
  136.                 fSize, fAlpha,fIntensity, iFrontFaceCulling, iBackFaceCulling, iAdditive= self.AuraParams
  137.                 fSize= fSize+(AuraParams[0]-fSize)*a
  138.                 fAlpha= fAlpha+(AuraParams[1]-fAlpha)*a
  139.                 fIntensity= fIntensity+(AuraParams[2]-fIntensity)*a
  140.                 self.AuraParams= fSize, fAlpha,fIntensity, iFrontFaceCulling, iBackFaceCulling, iAdditive
  141.                 apply(aura.SetAuraParams, self.AuraParams)
  142.                 
  143.                 # interpolate gradient0
  144.                 if AuraGradient0:
  145.                     iStage, fR0, fG0, fB0, fA0, fStart, fR1, fG1, fB1, fA1, fEnd= self.AuraGradient0
  146.                     fR0= fR0+(AuraGradient0[1]-fR0)*a
  147.                     fG0= fG0+(AuraGradient0[2]-fG0)*a
  148.                     fB0= fB0+(AuraGradient0[3]-fB0)*a
  149.                     fA0= fA0+(AuraGradient0[4]-fA0)*a
  150.                     fStart= fStart+(AuraGradient0[5]-fStart)*a
  151.                     fR1= fR1+(AuraGradient0[6]-fR1)*a
  152.                     fG1= fG1+(AuraGradient0[7]-fG1)*a
  153.                     fB1= fB1+(AuraGradient0[8]-fB1)*a
  154.                     fA1= fA1+(AuraGradient0[9]-fA1)*a
  155.                     fEnd= fEnd+(AuraGradient0[10]-fEnd)*a
  156.                     self.AuraGradient0= iStage, fR0, fG0, fB0, fA0, fStart, fR1, fG1, fB1, fA1, fEnd
  157.                     apply(aura.SetAuraGradient, self.AuraGradient0)
  158.                 
  159.                 # interpolate gradient1
  160.                 if AuraGradient1:
  161.                     iStage, fR0, fG0, fB0, fA0, fStart, fR1, fG1, fB1, fA1, fEnd= self.AuraGradient1
  162.                     fR0= fR0+(AuraGradient1[1]-fR0)*a
  163.                     fG0= fG0+(AuraGradient1[2]-fG0)*a
  164.                     fB0= fB0+(AuraGradient1[3]-fB0)*a
  165.                     fA0= fA0+(AuraGradient1[4]-fA0)*a
  166.                     fStart= fStart+(AuraGradient1[5]-fStart)*a
  167.                     fR1= fR1+(AuraGradient1[6]-fR1)*a
  168.                     fG1= fG1+(AuraGradient1[7]-fG1)*a
  169.                     fB1= fB1+(AuraGradient1[8]-fB1)*a
  170.                     fA1= fA1+(AuraGradient1[9]-fA1)*a
  171.                     fEnd= fEnd+(AuraGradient1[10]-fEnd)*a
  172.                     self.AuraGradient1= iStage, fR0, fG0, fB0, fA0, fStart, fR1, fG1, fB1, fA1, fEnd
  173.                     apply(aura.SetAuraGradient, self.AuraGradient1)
  174.                 
  175.                 # interpolate gradient2
  176.                 if AuraGradient2:
  177.                     iStage, fR0, fG0, fB0, fA0, fStart, fR1, fG1, fB1, fA1, fEnd= self.AuraGradient2
  178.                     fR0= fR0+(AuraGradient2[1]-fR0)*a
  179.                     fG0= fG0+(AuraGradient2[2]-fG0)*a
  180.                     fB0= fB0+(AuraGradient2[3]-fB0)*a
  181.                     fA0= fA0+(AuraGradient2[4]-fA0)*a
  182.                     fStart= fStart+(AuraGradient2[5]-fStart)*a
  183.                     fR1= fR1+(AuraGradient2[6]-fR1)*a
  184.                     fG1= fG1+(AuraGradient2[7]-fG1)*a
  185.                     fB1= fB1+(AuraGradient2[8]-fB1)*a
  186.                     fA1= fA1+(AuraGradient2[9]-fA1)*a
  187.                     fEnd= fEnd+(AuraGradient2[10]-fEnd)*a
  188.                     self.AuraGradient2= iStage, fR0, fG0, fB0, fA0, fStart, fR1, fG1, fB1, fA1, fEnd
  189.                     apply(aura.SetAuraGradient, self.AuraGradient2)
  190.  
  191.                 if XtraParam:
  192.                     Param, Value=self.XtraParam
  193.                     exec_string = Param + '=' + Param + '+' + '(' + str(XtraParam[1]) + '-' + Param + ')*' + str(a)
  194.                     exec(exec_string)
  195.                     exec_string2 = 'Value=' + Param
  196.                     exec(exec_string2)
  197.                     self.XtraParam=Param, Value
  198.  
  199.  
  200.  
  201. def MakeAura (EntityName,time2live,StartAuraParams,StartAuraGradient0=(),StartAuraGradient1=(),StartAuraGradient2=(),StartActive=1,XtraParam=()):
  202.     # EntityName is the entity to link to
  203.     # give time2live as -1 to last forever
  204.     me= Bladex.GetEntity(EntityName)
  205.     pos= me.Position    
  206.     aura= Bladex.CreateEntity(EntityName+"_Aura","Entity Aura",pos[0],pos[1],pos[2])    
  207.     me.Link(aura)
  208.     aura.Data= AnimateableAura(aura,time2live,StartAuraParams, StartAuraGradient0,StartAuraGradient1,StartAuraGradient2,StartActive,XtraParam)
  209.     return aura
  210.