// Animation Skrit: basic_fidget // // History: // VERSION 1.0: Initial implementation // VERSION 2.0: Converted to WorldMessages // Added SFX event tests // Uses owner, rather than ASPECT arg // // Notes: This chore assumes we have the following // animations to work with: (from the template GAS file) // // 00 = dff; // 01 = dff-2; // property int MAJORVERSION$ = 2; property int MINORVERSION$ = 0; owner = Aspect; Goid m_Goid$; bool m_Revived$; ///////////////////////////////////////////////////////////////////////////// // Per Skrit Object storage ///////////////////////////////////////////////////////////////////////////// // Utilities //void debug$(string msg$) { // if (Server.ScreenHero.Goid == m_Goid$) { // report.screenf("select_fidget - %s", msg$); // } //} RestartChore$ ( int newanim$ ) { //debug$("RestartChore$"); int override$ = GoDb.GetQuestInt( m_Goid$, "chore", "fidget", 0 ); if ( override$ < 0 ) { //random animation override range specified int override_min$ = GoDb.GetQuestInt( m_Goid$, "chore", "fidget_min", 0 ); if ( override$ < -1 ) { int override_max$ = GoDb.GetQuestInt( m_Goid$, "chore", "fidget_max", 0 ); newanim$ = ( override_min$ >= override_max$ ? override_min$ : GoMath.RandomInt( override_min$, override_max$ ) ); //debug$(MakeStringF("random animation override (range) %d", newanim$)); } else { //debug$("override_min fidget"); newanim$ = override_min$; } } else if ( m_Revived$ ) { if ( m_Goid$.Go.HasInventory() ) { Go weapon$ = m_Goid$.Go.Inventory.SelectedItem; if ( weapon$ != NULL ) { if ( weapon$.HasComponent("subanim") && ( newanim$ == 0 ) ) { newanim$ = Math.RandomInt(2,3); } } } } else if ( newanim$ > 1 ) { //selects randomly between two fidget animations (00, 01) //it is assumed that any other anims are special cases newanim$ = GoMath.RandomInt(1); //debug$(MakeStringF("regular fidget anim: %d",newanim$)); } if (owner.Blender.GetNumSubAnims() <= newanim$) { //sanity check newanim$ = 0; } owner.blender.ResetTimeWarp(); int bg$ = owner.blender.OpenBlendGroup(); owner.blender.AddAnimToBlendGroup(newanim$,1); owner.blender.CloseBlendGroup(); owner.blender.SetBlendGroupWeight(bg$,1); owner.UpdateBlender(0); } ///////////////////////////////////////////////////////////////////////////// // States //---------------------------- startup state InitialState$ { event OnEnterState$ { m_Revived$ = ( UIShell.FindUIWindow( "rollover_bg2", "rollover_help" ) != NULL ); } event OnStartChore$ ( int subanim$, int /*flags$*/ ) { m_Goid$ = owner.Goid; RestartChore$ ( subanim$ ); SetState FidgetOnce$; } } state FidgetOnce$ { event OnUpdate$( float delta_t$ ) { int events$ = owner.UpdateBlender(delta_t$); if (AnimEventBitTest(events$,ANIMEVENT_SFX_1)) { PostWorldMessage( WE_ANIM_SFX, m_Goid$, m_Goid$, 1, 0 ); } if (AnimEventBitTest(events$,ANIMEVENT_SFX_2)) { PostWorldMessage( WE_ANIM_SFX, m_Goid$, m_Goid$, 2, 0 ); } if (AnimEventBitTest(events$,ANIMEVENT_SFX_3)) { PostWorldMessage( WE_ANIM_SFX, m_Goid$, m_Goid$, 3, 0 ); } if (AnimEventBitTest(events$,ANIMEVENT_SFX_4)) { PostWorldMessage( WE_ANIM_SFX, m_Goid$, m_Goid$, 4, 0 ); } if (AnimEventBitTest(events$,ANIMEVENT_ATTACH_AMMO)) { PostWorldMessage( WE_ANIM_ATTACH_AMMO, m_Goid$, m_Goid$, owner.CurrentReqBlock, 0 ); } if (AnimEventBitTest(events$,ANIMEVENT_HIDE_MESH)) { owner.SetHideMeshFlag(true); } if (AnimEventBitTest(events$,ANIMEVENT_SHOW_MESH)) { owner.SetHideMeshFlag(false); } if (AnimEventBitTest(events$,ANIMEVENT_FINISH)) { PostWorldMessage( WE_ANIM_DONE, m_Goid$, m_Goid$, owner.CurrentReqBlock, 0 ); SetState (InitialState$); } } event OnStartChore$ ( int subanim$, int /*flags$*/ ) { RestartChore$ ( subanim$ ); } }