Files
GTASource/game/frontend/BusySpinner.h
expvintl 419f2e4752 init
2025-02-23 17:40:52 +08:00

138 lines
3.4 KiB
C++

/////////////////////////////////////////////////////////////////////////////////
//
// FILE : BusySpinner.h
// PURPOSE : allows control of the busy spinner via multiple systems.
//
// See: url:bugstar:966421 for reference.
//
/////////////////////////////////////////////////////////////////////////////////
#ifndef BUSYSPINNER_H
#define BUSYSPINNER_H
// Rage headers
#include "atl/array.h"
#include "system/timer.h"
#define SPINNER_MAX_MESSAGE_LEN 64
#define SPINNER_SHOWING_NONE -1
#define SPINNER_BACKOFF_TIME 1000
#define SPINNER_ICON_LOADING 1
#define SPINNER_ICON_NONE -1
// matches what script and AS uses:
#define BUSYSPINNER_LOADING 5
#define BUSYSPINNER_SAVING 1
#define BUSYSPINNER_CLOUD 4
//#define USE_THEFEED_SAVING_MESSAGE
// The lower the value, the higher the priority.
enum
{
SPINNER_SOURCE_SAVEGAME=0, // Special case. ( Icon always has to show when active )
SPINNER_SOURCE_SCRIPT,
SPINNER_SOURCE_STORE_LOADING,
SPINNER_SOURCE_FACEBOOK,
SPINNER_SOURCE_INVITE_DETAILS,
SPINNER_SOURCE_VIDEO_EDITOR,
SPINNER_SOURCE_VIDEO_UPLOAD,
SPINNER_SOURCE_LOADING_SCREEN,
SPINNER_SOURCE_PROFANITY_CHECK,
SPINNER_SOURCE_MAX
};
enum eBS_STATE
{
BS_STATE_INACTIVE = 0,
BS_STATE_LOADING,
BS_STATE_SETUP,
BS_STATE_RESETUP,
BS_STATE_ACTIVE
};
class CBusySpinner
{
public:
static void Init(unsigned initMode);
static void Shutdown(unsigned shutdownMode);
static void Update();
static void Render();
static void Preload(bool waitForLoad = false);
static void On( const char* bodyText, int Icon, int sourceIndex );
static void Off( int sourceIndex );
static bool IsOn();
static bool IsDisplaying();
static bool CanRender();
static bool HasBodyText() {return ms_CurrentBodyTextActive[0] != '\0'; }
static void RegisterInstructionalButtonMovie(s32 iNewButtonMovieId);
static void UnregisterInstructionalButtonMovie(s32 iButtonMovieId);
static bool IsActive() { return ms_iSpinnerMovieState == BS_STATE_ACTIVE; }
static void SetInstantUpdate(bool value) { ms_bInstantUpdate = value; }
#if __BANK
static void InitWidgets();
#endif // __BANK
private:
struct sSpinner
{
int Icon;
char BodyText[SPINNER_MAX_MESSAGE_LEN];
};
static void UpdateSpinnerStates();
static void HideSpinner();
static void DisplaySpinnerOnAllMovies();
static void HideSpinnerOnAllMovies();
static void UpdateSpinnerDisplay();
static bool CanChangeSpinner();
static void CheckSaveGameSystemMessages();
static void SetSavingText(s32 iMovieId);
static void HideSavingText(s32 iMovieId);
static void CheckSpinnerMoviesAreStillActive();
static int ms_ShowingIndex;
static sSpinner ms_SpinnerList[SPINNER_SOURCE_MAX];
static u32 ms_BackoffTime;
static sysTimer ms_SysTimer;
static char ms_CurrentBodyText[SPINNER_MAX_MESSAGE_LEN];
static int ms_CurrentIcon;
static char ms_CurrentBodyTextActive[SPINNER_MAX_MESSAGE_LEN];
static int ms_CurrentIconActive;
static bool ms_IsBusySpinnerOn;
static bool ms_IsBusySpinnerDisplaying;
static s32 ms_iSpinnerMovie;
static eBS_STATE ms_iSpinnerMovieState;
static bool sm_bReinitSpinnerOnAllMovies;
static atArray<s32> sm_iInstructionalButtonMovies;
static bool ms_bInstantUpdate;
static sysTimer sm_time;
#if __BANK
static void DebugSpinnerPreload();
static void DebugSpinnerOn();
static void DebugSpinnerOff();
static void DebugCreateTheSpinnerBankWidgets();
static void ShutdownWidgets();
#endif
};
#endif // BUSYSPINNER_H