Files
gtav-src/script/dev_ng/shared/include/public/degenatron_games_animation.sch
T
2025-09-29 00:52:08 +02:00

142 lines
6.8 KiB
Scheme
Executable File

USING "net_arcade_cabinet.sch"
// ------------------------------ ANIMATION ------------------------------
ENUM DEGENATRON_GAMES_ANIMATION_STATE
DEGENATRON_GAMES_ANIMATION_STATE_IDLE,
DEGENATRON_GAMES_ANIMATION_STATE_PLAYING,
DEGENATRON_GAMES_ANIMATION_STATE_NOT_PLAYING,
DEGENATRON_GAMES_ANIMATION_STATE_DEAD,
DEGENATRON_GAMES_ANIMATION_STATE_GAMEOVER,
DEGENATRON_GAMES_ANIMATION_STATE_LEVEL_COMPLETE,
DEGENATRON_GAMES_ANIMATION_STATE_WIN,
DEGENATRON_GAMES_ANIMATION_STATE_WIN_BIG,
DEGENATRON_GAMES_ANIMATION_STATE_END
ENDENUM
STRUCT DEGENATRON_GAMES_ANIMATION_DATA
DEGENATRON_GAMES_ANIMATION_STATE eState
ARCADE_CABINET_ANIM_EVENT_STRUCT sArcadeCabinetAnimEvent
ENDSTRUCT
DEGENATRON_GAMES_ANIMATION_DATA sDGAnimationData
/// PURPOSE:
/// Updates the player's global state
PROC DEGENATRON_GAMES_ANIMATION_SET_STATE(DEGENATRON_GAMES_ANIMATION_STATE eState)
IF sDGAnimationData.eState != eState
CDEBUG1LN(DEBUG_MINIGAME, "[DEGENATRON_GAMES] DEGENATRON_GAMES_ANIMATION_SET_STATE - eState ",eState)
sDGAnimationData.eState = eState
sDGAnimationData.sArcadeCabinetAnimEvent.enToPlayAnim = PLAYER_ID()
ENDIF
ENDPROC
PROC DEGENATRON_GAMES_ANIMATION_UPDATE
INT iDisplaySlot
SWITCH sDGAnimationData.eState
CASE DEGENATRON_GAMES_ANIMATION_STATE_IDLE
iDisplaySlot = GET_ARCADE_CABINET_LOCATE_DISPLAY_SLOT_PLAYER_IS_IN(PLAYER_ID())
IF iDisplaySlot != -1
IF !DOES_ARCADE_CABINET_SYNCHED_SCENE_RUNNING()
AND sDGAnimationData.sArcadeCabinetAnimEvent.ePreviousAnimClip != ARCADE_CABINET_ANIM_CLIP_IDLE
sDGAnimationData.sArcadeCabinetAnimEvent.bHoldLastFrame = FALSE
sDGAnimationData.sArcadeCabinetAnimEvent.bLoopAnim = TRUE
PLAY_ARCADE_CABINET_ANIMATION(sDGAnimationData.sArcadeCabinetAnimEvent, ARCADE_CABINET_ANIM_CLIP_IDLE)
ENDIF
ENDIF
BREAK
CASE DEGENATRON_GAMES_ANIMATION_STATE_PLAYING
iDisplaySlot = GET_ARCADE_CABINET_LOCATE_DISPLAY_SLOT_PLAYER_IS_IN(PLAYER_ID())
IF iDisplaySlot != -1
IF !DOES_ARCADE_CABINET_SYNCHED_SCENE_RUNNING()
AND sDGAnimationData.sArcadeCabinetAnimEvent.ePreviousAnimClip != ARCADE_CABINET_ANIM_CLIP_PLAY_IDLE
AND sDGAnimationData.sArcadeCabinetAnimEvent.ePreviousAnimClip != ARCADE_CABINET_ANIM_CLIP_PLAY_IDLE_V2
sDGAnimationData.sArcadeCabinetAnimEvent.bHoldLastFrame = FALSE
sDGAnimationData.sArcadeCabinetAnimEvent.bLoopAnim = TRUE
IF GET_RANDOM_BOOL()
PLAY_ARCADE_CABINET_ANIMATION(sDGAnimationData.sArcadeCabinetAnimEvent, ARCADE_CABINET_ANIM_CLIP_PLAY_IDLE)
ELSE
PLAY_ARCADE_CABINET_ANIMATION(sDGAnimationData.sArcadeCabinetAnimEvent, ARCADE_CABINET_ANIM_CLIP_PLAY_IDLE_V2)
ENDIF
ENDIF
ENDIF
BREAK
CASE DEGENATRON_GAMES_ANIMATION_STATE_NOT_PLAYING
IF HAS_ARCADE_CABINET_ANIMATION_CLIP_FINISHED(ARCADE_CABINET_ANIM_CLIP_ENTRY)
sDGAnimationData.sArcadeCabinetAnimEvent.bHoldLastFrame = FALSE
sDGAnimationData.sArcadeCabinetAnimEvent.bLoopAnim = FALSE
PLAY_ARCADE_CABINET_ANIMATION(sDGAnimationData.sArcadeCabinetAnimEvent, ARCADE_CABINET_ANIM_CLIP_EXIT)
ENDIF
BREAK
CASE DEGENATRON_GAMES_ANIMATION_STATE_GAMEOVER
IF sDGAnimationData.sArcadeCabinetAnimEvent.ePreviousAnimClip != ARCADE_CABINET_ANIM_CLIP_LOSE_BIG
sDGAnimationData.sArcadeCabinetAnimEvent.bHoldLastFrame = FALSE
sDGAnimationData.sArcadeCabinetAnimEvent.bLoopAnim = FALSE
PLAY_ARCADE_CABINET_ANIMATION(sDGAnimationData.sArcadeCabinetAnimEvent, ARCADE_CABINET_ANIM_CLIP_LOSE_BIG)
ELSE
IF IS_PLAYER_PLAYING_THIS_ARCADE_CABINET_ANIMATION_CLIP(ARCADE_CABINET_ANIM_CLIP_LOSE_BIG)
AND HAS_ARCADE_CABINET_ANIMATION_CLIP_FINISHED(ARCADE_CABINET_ANIM_CLIP_LOSE_BIG)
sDGAnimationData.eState = DEGENATRON_GAMES_ANIMATION_STATE_IDLE
ENDIF
ENDIF
BREAK
CASE DEGENATRON_GAMES_ANIMATION_STATE_DEAD
IF sDGAnimationData.sArcadeCabinetAnimEvent.ePreviousAnimClip != ARCADE_CABINET_ANIM_CLIP_LOSE
sDGAnimationData.sArcadeCabinetAnimEvent.bHoldLastFrame = FALSE
sDGAnimationData.sArcadeCabinetAnimEvent.bLoopAnim = FALSE
PLAY_ARCADE_CABINET_ANIMATION(sDGAnimationData.sArcadeCabinetAnimEvent, ARCADE_CABINET_ANIM_CLIP_LOSE)
ELSE
IF IS_PLAYER_PLAYING_THIS_ARCADE_CABINET_ANIMATION_CLIP(ARCADE_CABINET_ANIM_CLIP_LOSE)
AND HAS_ARCADE_CABINET_ANIMATION_CLIP_FINISHED(ARCADE_CABINET_ANIM_CLIP_LOSE)
sDGAnimationData.eState = DEGENATRON_GAMES_ANIMATION_STATE_PLAYING
ENDIF
ENDIF
BREAK
CASE DEGENATRON_GAMES_ANIMATION_STATE_LEVEL_COMPLETE
IF sDGAnimationData.sArcadeCabinetAnimEvent.ePreviousAnimClip != ARCADE_CABINET_ANIM_CLIP_WIN
AND sDGAnimationData.sArcadeCabinetAnimEvent.ePreviousAnimClip != ARCADE_CABINET_ANIM_CLIP_WIN_BIG
sDGAnimationData.sArcadeCabinetAnimEvent.bHoldLastFrame = FALSE
sDGAnimationData.sArcadeCabinetAnimEvent.bLoopAnim = FALSE
IF GET_RANDOM_BOOL()
PLAY_ARCADE_CABINET_ANIMATION(sDGAnimationData.sArcadeCabinetAnimEvent, ARCADE_CABINET_ANIM_CLIP_WIN)
ELSE
PLAY_ARCADE_CABINET_ANIMATION(sDGAnimationData.sArcadeCabinetAnimEvent, ARCADE_CABINET_ANIM_CLIP_WIN_BIG)
ENDIF
ELSE
IF (IS_PLAYER_PLAYING_THIS_ARCADE_CABINET_ANIMATION_CLIP(ARCADE_CABINET_ANIM_CLIP_WIN)
AND HAS_ARCADE_CABINET_ANIMATION_CLIP_FINISHED(ARCADE_CABINET_ANIM_CLIP_WIN))
OR (IS_PLAYER_PLAYING_THIS_ARCADE_CABINET_ANIMATION_CLIP(ARCADE_CABINET_ANIM_CLIP_WIN_BIG)
AND HAS_ARCADE_CABINET_ANIMATION_CLIP_FINISHED(ARCADE_CABINET_ANIM_CLIP_WIN_BIG))
sDGAnimationData.eState = DEGENATRON_GAMES_ANIMATION_STATE_PLAYING
ENDIF
ENDIF
BREAK
CASE DEGENATRON_GAMES_ANIMATION_STATE_WIN
IF sDGAnimationData.sArcadeCabinetAnimEvent.ePreviousAnimClip != ARCADE_CABINET_ANIM_CLIP_WIN
sDGAnimationData.sArcadeCabinetAnimEvent.bHoldLastFrame = FALSE
sDGAnimationData.sArcadeCabinetAnimEvent.bLoopAnim = FALSE
PLAY_ARCADE_CABINET_ANIMATION(sDGAnimationData.sArcadeCabinetAnimEvent, ARCADE_CABINET_ANIM_CLIP_WIN)
ELSE
IF IS_PLAYER_PLAYING_THIS_ARCADE_CABINET_ANIMATION_CLIP(ARCADE_CABINET_ANIM_CLIP_WIN)
AND HAS_ARCADE_CABINET_ANIMATION_CLIP_FINISHED(ARCADE_CABINET_ANIM_CLIP_WIN)
sDGAnimationData.eState = DEGENATRON_GAMES_ANIMATION_STATE_PLAYING
ENDIF
ENDIF
BREAK
CASE DEGENATRON_GAMES_ANIMATION_STATE_WIN_BIG
IF sDGAnimationData.sArcadeCabinetAnimEvent.ePreviousAnimClip != ARCADE_CABINET_ANIM_CLIP_WIN_BIG
sDGAnimationData.sArcadeCabinetAnimEvent.bHoldLastFrame = FALSE
sDGAnimationData.sArcadeCabinetAnimEvent.bLoopAnim = FALSE
PLAY_ARCADE_CABINET_ANIMATION(sDGAnimationData.sArcadeCabinetAnimEvent, ARCADE_CABINET_ANIM_CLIP_WIN_BIG)
ELSE
IF IS_PLAYER_PLAYING_THIS_ARCADE_CABINET_ANIMATION_CLIP(ARCADE_CABINET_ANIM_CLIP_WIN_BIG)
AND HAS_ARCADE_CABINET_ANIMATION_CLIP_FINISHED(ARCADE_CABINET_ANIM_CLIP_WIN_BIG)
sDGAnimationData.eState = DEGENATRON_GAMES_ANIMATION_STATE_PLAYING
ENDIF
ENDIF
BREAK
ENDSWITCH
ENDPROC