11# Copyright (c) advancedfx.org
22#
33# Last changes:
4- # 2017-09-14 dominik.matrixstorm.com
4+ # 2017-09-16 dominik.matrixstorm.com
55#
66# First changes:
77# 2016-07-13 dominik.matrixstorm.com
@@ -264,17 +264,20 @@ def __init__(self,objNr,modelName):
264264
265265class AgrTimeConverter :
266266 def __init__ (self ):
267- self .firstTime = None
267+ self .time = 0
268+ self .frameTime = 0
269+ self .newTime = 0
268270
269- def Convert (self ,time , channelsClip ):
270- if self .firstTime is None :
271- self .firstTime = time
271+ def Frame (self ,frameTime ):
272+ self .time = self . newTime
273+ self .frameTime = frameTime
272274
273- time = time - self .firstTime
274275
275- time = vs .DmeTime_t (time ) - channelsClip .timeFrame .start .GetValue ()
276+ def FrameEnd (self ):
277+ self .newTime = self .time + self .frameTime
276278
277- return time
279+ def GetTime (self ,channelsClip ):
280+ return vs .DmeTime_t (self .time ) - channelsClip .timeFrame .start .GetValue ()
278281
279282def ReadFile (fileName ):
280283 file = None
@@ -292,7 +295,7 @@ def ReadFile(fileName):
292295 SetError ('Invalid file format.' )
293296 return False
294297
295- if 3 != version :
298+ if 4 != version :
296299 SetError ('Version ' + str (version )+ ' is not supported!' )
297300 return False
298301
@@ -327,13 +330,16 @@ def ReadFile(fileName):
327330 if node0 is None :
328331 break
329332
330- elif 'afxHiddenOffset' == node0 :
331- offset = ReadInt (file )
332- if offset :
333+ elif 'afxFrame' == node0 :
334+ time = ReadFloat (file )
335+
336+ timeConverter .Frame (time )
337+
338+ afxHiddenOffset = ReadInt (file )
339+ if afxHiddenOffset :
333340 curOffset = file .tell ()
334- file .seek (offset - 4 , 1 )
341+ file .seek (afxHiddenOffset - 4 , 1 )
335342
336- time = ReadFloat (file )
337343 numHidden = ReadInt (file )
338344 for i in range (numHidden ):
339345 handle = ReadInt (file )
@@ -343,44 +349,41 @@ def ReadFile(fileName):
343349 dagAnimSet = modelHandle .modelData
344350 if dagAnimSet :
345351 # Make ent invisible:
346- rtime = timeConverter .Convert (time , sfmUtils .GetChannelsClipForAnimSet (dagAnimSet , shot ))
347- MakeKeyFrameValue (channelCache , dagAnimSet , 'visible_channel' , rtime , False )
352+ MakeKeyFrameValue (channelCache , dagAnimSet , 'visible_channel' , timeConverter .GetTime (sfmUtils .GetChannelsClipForAnimSet (dagAnimSet , shot )), False )
348353
349354 unusedModelHandles .append (modelHandle )
350355 #print("Marking %i (%s) as hidden/reusable." % (modelHandle.objNr,modelHandle.modelName))
351356
352357 file .seek (curOffset ,0 )
358+
359+ elif 'afxFrameEnd' == node0 :
360+ timeConverter .FrameEnd ()
353361
354362 elif 'afxHidden' == node0 :
355363 # skipped, because will be handled earlier by afxHiddenOffset
356364
357- time = ReadFloat (file )
358365 numHidden = ReadInt (file )
359366 for i in range (numHidden ):
360367 handle = ReadInt (file )
361368
362369 elif 'deleted' == node0 :
363370 handle = ReadInt (file )
364- time = ReadFloat (file )
365371
366372 modelHandle = handleToLastModelHandle .pop (handle , None )
367373 if modelHandle is not None :
368374 dagAnimSet = modelHandle .modelData
369375 if dagAnimSet :
370376 # Make removed ent invisible:
371- time = timeConverter .Convert (time , sfmUtils .GetChannelsClipForAnimSet (dagAnimSet , shot ))
372- MakeKeyFrameValue (channelCache , dagAnimSet , 'visible_channel' , time , False )
377+ MakeKeyFrameValue (channelCache , dagAnimSet , 'visible_channel' , timeConverter .GetTime (sfmUtils .GetChannelsClipForAnimSet (dagAnimSet , shot )), False )
373378
374379 unusedModelHandles .append (modelHandle )
375380 print ("Marking %i (%s) as hidden/reusable." % (modelHandle .objNr ,modelHandle .modelName ))
376381
377382 elif 'entity_state' == node0 :
378383 visible = None
379- time = None
380384 dagAnimSet = None
381385 handle = ReadInt (file )
382386 if dict .Peekaboo (file ,'baseentity' ):
383- time = ReadFloat (file )
384387
385388 modelName = dict .Read (file )
386389
@@ -395,8 +398,7 @@ def ReadFile(fileName):
395398 # Switched model, make old model invisible:
396399 dagAnimSet = modelHandle .modelData
397400 if dagAnimSet :
398- rtime = timeConverter .Convert (time , sfmUtils .GetChannelsClipForAnimSet (dagAnimSet , shot ))
399- MakeKeyFrameValue (channelCache , dagAnimSet , 'visible_channel' , rtime , False )
401+ MakeKeyFrameValue (channelCache , dagAnimSet , 'visible_channel' , timeConverter .GetTime (sfmUtils .GetChannelsClipForAnimSet (dagAnimSet , shot )), False )
400402
401403 modelHandle = None
402404
@@ -445,11 +447,9 @@ def ReadFile(fileName):
445447
446448 modelHandle .lastRenderOrigin = renderOrigin
447449
448- time = timeConverter .Convert (time , sfmUtils .GetChannelsClipForAnimSet (dagAnimSet , shot ))
449-
450- MakeKeyFrameValue (channelCache , dagAnimSet , 'visible_channel' , time , visible )
450+ MakeKeyFrameValue (channelCache , dagAnimSet , 'visible_channel' , timeConverter .GetTime (sfmUtils .GetChannelsClipForAnimSet (dagAnimSet , shot )), visible )
451451
452- MakeKeyFrameTransform (channelCache , dagAnimSet , "rootTransform" , time , renderOrigin , QuaternionFromQAngle (renderAngles ), True )
452+ MakeKeyFrameTransform (channelCache , dagAnimSet , "rootTransform" , timeConverter . GetTime ( sfmUtils . GetChannelsClipForAnimSet ( dagAnimSet , shot )) , renderOrigin , QuaternionFromQAngle (renderAngles ), True )
453453
454454 if dict .Peekaboo (file ,'baseanimating' ):
455455 #skin = ReadInt(file)
@@ -478,7 +478,7 @@ def ReadFile(fileName):
478478 name = name [:name .find (')' )]
479479 #print name
480480
481- MakeKeyFrameTransform (channelCache , dagAnimSet , name , time , vec , quat )
481+ MakeKeyFrameTransform (channelCache , dagAnimSet , name , timeConverter . GetTime ( sfmUtils . GetChannelsClipForAnimSet ( dagAnimSet , shot )) , vec , quat )
482482
483483 dict .Peekaboo (file ,'/' )
484484
@@ -496,17 +496,13 @@ def ReadFile(fileName):
496496 scaled_fieldOfView_channel .fromElement .hi = 180
497497 shot .scene .GetChild (shot .scene .FindChild ("Cameras" )).AddChild (dmeAfxCam )
498498
499- time = ReadFloat (file )
500-
501499 renderOrigin = ReadVector (file )
502500 renderAngles = ReadQAngle (file )
503501 fov = ReadFloat (file )
504502 fov = fov / 180.0
505503
506- time = timeConverter .Convert (time , sfmUtils .GetChannelsClipForAnimSet (afxCam , shot ))
507-
508- MakeKeyFrameValue (channelCache , afxCam , 'fieldOfView' , time , fov )
509- MakeKeyFrameTransform (channelCache , afxCam , 'transform' , time , renderOrigin , QuaternionFromQAngle (renderAngles ), False , '_pos' , '_rot' )
504+ MakeKeyFrameValue (channelCache , afxCam , 'fieldOfView' , timeConverter .GetTime (sfmUtils .GetChannelsClipForAnimSet (dagAnimSet , shot )), fov )
505+ MakeKeyFrameTransform (channelCache , afxCam , 'transform' , timeConverter .GetTime (sfmUtils .GetChannelsClipForAnimSet (dagAnimSet , shot )), renderOrigin , QuaternionFromQAngle (renderAngles ), True , '_pos' , '_rot' )
510506
511507 else :
512508 SetError ('Unknown packet: ' )
0 commit comments