Pause an animation?
Blitz3D Forums/Blitz3D Programming/Pause an animation?
| ||
Hi, In my game I'm making, sometimes I need to open a menu. In this menu, it is necessary to still call updateworld because things can change, however all animations should be stopped because the game is paused when the menu is open. I think I can stop the animation with SetAnimTime entity,AnimTime(entity), but how do I restart it at the correct speed (because my entities animate at different speeds)? And can I loop trough all entities somehow? Or do I need to loop trough all my types that have entities? Maybe a "wrapper-type" would do the trick, PauseableEntity, that contains the entity and the speed it was moving at, but reprogramming my entire game to use this would take too long. Any ideas? Thanks. |
| ||
why should this take too long? simply wrap the Animate Command and use a custom function to store the Speed parameter. So you can use the Editors Replace tool and replace Animate by My_Animate or something, then create a function My_Animate: function My_Animate(mesh,speed,mode) ; store the speed etc. ; then start the animation as usual end function |
| ||
Thanks for the reply. I wrote this quick-and-dirty solution, maybe anyone is interested... When you call AnimStart or AnimStop, an instance of type Anim is searched for the entity, if it is not found it is created... The instance stores the speed and the mode. Use PauseAnims to pause all animations that were started with AnimStart, and use ResumeAnims to resume them. Ta da : Type Anim Field entity Field speed# Field mode% End Type Function AnimStart(entity,mode%,speed#) an.Anim=Null For a.Anim=Each Anim If a\entity=entity Then an=a Exit End If Next If an=Null Then an.Anim=New Anim an\entity=entity End If an\speed=speed an\mode=mode Animate entity,mode,speed End Function Function AnimStop(entity) an.Anim=Null For a.Anim=Each Anim If a\entity=entity Then an=a Exit End If Next If an=Null Then an.Anim=New Anim an\entity=entity End If an\mode=0 an\speed=0 Animate entity,0 End Function Function PauseAnims() For a.Anim=Each Anim SetAnimTime a\entity,AnimTime(a\entity) Next End Function Function ResumeAnims() For a.Anim=Each Anim If a\mode=0 Then Animate a\entity,0 Else Animate a\entity,a\mode,a\speed End If Next End Function |
| ||
ok, actually, this doesn't work, because when I restart the paused animation with animate, it is restarted... so I can easily pause an animation with setanimtime, I have no idea how to resume it. any suggestions? |
| ||
Use 'UpdateWorld(0)' if you don't want to update animation. |
| ||
Thank you! |