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

254 lines
9.7 KiB
C++

//=====================================================================================================
// name: ReplayEditorParameters.h
// description: Parameters used for editing/manipulating a replay editor objects from a higher level
//=====================================================================================================
#include "control/replay/ReplaySettings.h"
#if GTA_REPLAY
#ifndef INC_REPLAY_EDITOR_PARAMETERS_H_
#define INC_REPLAY_EDITOR_PARAMETERS_H_
// rage
#include "atl/hashstring.h"
#include "system/bit.h"
//=====================================================================================================
#define THUMBNAIL_FILE_EXTENSION ".jpg"
#define RAW_CLIP_FILE_EXTENSION ".clip"
//=====================================================================================================
class CReplayEditorParameters
{
public:
//-------------------------------------------------------------------------------------------------
#define CLIP_TRANSITION_DEFAULT_DURATION_MS (1000)
static const u32 MAX_CLIP_NAME_LENGTH = 64;
static const u32 AUTO_GENERATION_SMALL_LENGTH = 600; //10 min
static const u32 AUTO_GENERATION_MEDIUM_LENGTH = 2700; //45 mins
static const u32 AUTO_GENERATION_LARGE_LENGTH = 5400; //90 mins
static const u32 AUTO_GENERATION_EXTRA_LARGE_LENGTH = 10800; //3 hours
//-------------------------------------------------------------------------------------------------
enum eAutoGenerationDuration
{
AUTO_GENERATION_SMALL,
AUTO_GENERATION_MEDIUM,
AUTO_GENERATION_LARGE,
AUTO_GENERATION_EXTRA_LARGE,
AUTO_GENERATION_MAX
};
enum eCLIP_LOAD_RESULT_FLAGS : rage::u64
{
CLIP_LOAD_RESULT_SUCCESS = 0,
CLIP_LOAD_RESULT_EARLY_EOF = BIT_64(0),
CLIP_LOAD_RESULT_OOM = BIT_64(1),
CLIP_LOAD_RESULT_BAD_VERSION = BIT_64(2),
CLIP_LOAD_RESULT_UNSUPPORTED_VERSION = BIT_64(3),
CLIP_LOAD_RESULT_HEADER_INVALID = BIT_64(4),
CLIP_LOAD_RESULT_BAD_MARKER_VERSION = BIT_64(5),
CLIP_LOAD_RESULT_UNSPPORTED_MARKER_VERSION = BIT_64(6),
CLIP_LOAD_RESULT_BAD_MARKER_SIZE = BIT_64(7),
CLIP_LOAD_RESULT_TOO_MANY_MARKERS = BIT_64(8),
CLIP_LOAD_RESULT_OVERLAPPING_MARKERS = BIT_64(9),
CLIP_LOAD_RESULT_BAD_THUMBNAIL_SIZE = BIT_64(10),
CLIP_LOAD_RESULT_BAD_TIME_DATA = BIT_64(11),
// Misc flags we may want to report on
CLIP_LOAD_RESULT_MARKER_VERSION_UPGRADED = BIT_64(12),
// Count of bitfields, for debug purposes
CLIP_LOAD_RESULT_USED_BITFIELDS = 13,
//! Common flag combinations
CLIP_LOAD_RESULT_UNSAFE_TO_CONTINUE = CLIP_LOAD_RESULT_EARLY_EOF | CLIP_LOAD_RESULT_OOM | CLIP_LOAD_RESULT_BAD_VERSION |
CLIP_LOAD_RESULT_BAD_MARKER_VERSION,
CLIP_LOAD_RESULT_FAILED = CLIP_LOAD_RESULT_UNSAFE_TO_CONTINUE,
CLIP_LOAD_RESULT_MARKERS_RESET = CLIP_LOAD_RESULT_UNSPPORTED_MARKER_VERSION | CLIP_LOAD_RESULT_BAD_MARKER_SIZE |
CLIP_LOAD_RESULT_OVERLAPPING_MARKERS,
CLIP_LOAD_RESULT_MARKERS_TRUNCATED = CLIP_LOAD_RESULT_TOO_MANY_MARKERS,
// Load failed, but we can try loading further clips
CLIP_LOAD_RESULT_CULL_FROM_PROJECT = CLIP_LOAD_RESULT_HEADER_INVALID,
};
enum eTEXT_LOAD_RESULT_FLAGS : rage::u64
{
TEXT_LOAD_RESULT_SUCCESS = 0,
TEXT_LOAD_RESULT_EARLY_EOF = BIT_64(0),
TEXT_LOAD_RESULT_OOM = BIT_64(1),
TEXT_LOAD_RESULT_BAD_VERSION = BIT_64(2),
TEXT_LOAD_RESULT_UNSUPPORTED_VERSION = BIT_64(3),
TEXT_LOAD_RESULT_BAD_SIZE = BIT_64(4),
TEXT_LOAD_RESULT_PROFANE = BIT_64(5),
// Misc flags we may want to report on
TEXT_LOAD_RESULT_VERSION_UPGRADED = BIT_64(6),
// Count of bitfields, for debug purposes
TEXT_LOAD_RESULT_USED_BITFIELDS = 7,
//! Common flag combinations
TEXT_LOAD_RESULT_UNSAFE_TO_CONTINUE = TEXT_LOAD_RESULT_EARLY_EOF | TEXT_LOAD_RESULT_OOM | TEXT_LOAD_RESULT_BAD_VERSION,
TEXT_LOAD_RESULT_FAILED = TEXT_LOAD_RESULT_UNSAFE_TO_CONTINUE,
TEXT_LOAD_RESULT_CULL_FROM_PROJECT = TEXT_LOAD_RESULT_UNSUPPORTED_VERSION | TEXT_LOAD_RESULT_PROFANE,
};
enum eMUSIC_LOAD_RESULT_FLAGS : rage::u64
{
MUSIC_LOAD_RESULT_SUCCESS = 0,
MUSIC_LOAD_RESULT_EARLY_EOF = BIT_64(0),
MUSIC_LOAD_RESULT_OOM = BIT_64(1),
MUSIC_LOAD_RESULT_BAD_VERSION = BIT_64(2),
MUSIC_LOAD_RESULT_UNSUPPORTED_VERSION = BIT_64(3),
MUSIC_LOAD_RESULT_BAD_SIZE = BIT_64(4),
MUSIC_LOAD_RESULT_INVALID_SOUNDHASH = BIT_64(5),
MUSIC_LOAD_RESULT_ALREADY_USED = BIT_64(6),
// Misc flags we may want to report on
MUSIC_LOAD_RESULT_VERSION_UPGRADED = BIT_64(7),
// Count of bitfields, for debug purposes
MUSIC_LOAD_RESULT_USED_BITFIELDS = 8,
//! Common flag combinations
MUSIC_LOAD_RESULT_UNSAFE_TO_CONTINUE = MUSIC_LOAD_RESULT_EARLY_EOF | MUSIC_LOAD_RESULT_OOM | MUSIC_LOAD_RESULT_BAD_VERSION,
MUSIC_LOAD_RESULT_FAILED = MUSIC_LOAD_RESULT_UNSAFE_TO_CONTINUE,
MUSIC_LOAD_RESULT_CULL_FROM_PROJECT = MUSIC_LOAD_RESULT_UNSUPPORTED_VERSION | MUSIC_LOAD_RESULT_INVALID_SOUNDHASH | MUSIC_LOAD_RESULT_ALREADY_USED,
};
enum ePROJECT_LOAD_RESULT_FLAGS : rage::u64
{
PROJECT_LOAD_RESULT_SUCCESS = 0,
PROJECT_LOAD_RESULT_INVALID_FILE = BIT_64(0),
PROJECT_LOAD_RESULT_EARLY_EOF = BIT_64(1),
PROJECT_LOAD_RESULT_OOM = BIT_64(2),
PROJECT_LOAD_RESULT_BAD_VERSION = BIT_64(3),
PROJECT_LOAD_RESULT_UNSUPPORTED_VERSION = BIT_64(4),
PROJECT_LOAD_RESULT_BAD_REPLAY_VERSION = BIT_64(5),
PROJECT_LOAD_RESULT_UNSUPPORTED_REPLAY_VERSION = BIT_64(6),
PROJECT_LOAD_RESULT_BAD_CACHED_DURATION = BIT_64(7),
PROJECT_LOAD_RESULT_BAD_CLIP_DATA = BIT_64(8),
PROJECT_LOAD_RESULT_CLIP_MARKERS_RESET = BIT_64(9),
PROJECT_LOAD_RESULT_CLIP_MARKERS_TRUNCATED = BIT_64(10),
PROJECT_LOAD_RESULT_CLIP_TIME_DATA_RESET = BIT_64(11),
PROJECT_LOAD_RESULT_CLIPS_TRUNCATED = BIT_64(12),
PROJECT_LOAD_RESULT_BAD_TEXT_DATA = BIT_64(13),
PROJECT_LOAD_RESULT_TEXT_RESET = BIT_64(14),
PROJECT_LOAD_RESULT_TEXT_HAD_PROFANITY = BIT_64(15),
PROJECT_LOAD_RESULT_TEXT_TRUNCATED = BIT_64(16),
PROJECT_LOAD_RESULT_BAD_MUSIC_DATA = BIT_64(17),
PROJECT_LOAD_RESULT_MUSIC_RESET = BIT_64(18),
PROJECT_LOAD_RESULT_MUSIC_INVALID_SOUNDHASH = BIT_64(19),
PROJECT_LOAD_RESULT_MUSIC_ALREADY_USED = BIT_64(20),
PROJECT_LOAD_RESULT_MUSIC_TRUNCATED = BIT_64(21),
// Misc flags we may want to report on
PROJECT_LOAD_RESULT_VERSION_UPGRADED = BIT_64(22),
// Count of bitfields, for debug purposes
PROJECT_LOAD_RESULT_USED_BITFIELDS = 23,
//! Common flag combinations
PROJECT_LOAD_RESULT_UNSAFE_TO_CONTINUE = PROJECT_LOAD_RESULT_INVALID_FILE | PROJECT_LOAD_RESULT_EARLY_EOF | PROJECT_LOAD_RESULT_OOM |
PROJECT_LOAD_RESULT_BAD_VERSION | PROJECT_LOAD_RESULT_BAD_REPLAY_VERSION |
PROJECT_LOAD_RESULT_BAD_CACHED_DURATION | PROJECT_LOAD_RESULT_BAD_CLIP_DATA,
PROJECT_LOAD_RESULT_FAILED = PROJECT_LOAD_RESULT_UNSAFE_TO_CONTINUE,
PROJECT_LOAD_RESULT_TEXT_REMOVED = PROJECT_LOAD_RESULT_TEXT_RESET | PROJECT_LOAD_RESULT_TEXT_HAD_PROFANITY |
PROJECT_LOAD_RESULT_TEXT_TRUNCATED,
PROJECT_LOAD_RESULT_MUSIC_REMOVED = PROJECT_LOAD_RESULT_MUSIC_RESET | PROJECT_LOAD_RESULT_MUSIC_ALREADY_USED |
PROJECT_LOAD_RESULT_MUSIC_INVALID_SOUNDHASH | PROJECT_LOAD_RESULT_MUSIC_TRUNCATED,
PROJECT_LOAD_RESULT_CONTENTS_REMOVED = PROJECT_LOAD_RESULT_CLIPS_TRUNCATED | PROJECT_LOAD_RESULT_CLIP_MARKERS_TRUNCATED |
PROJECT_LOAD_RESULT_TEXT_REMOVED | PROJECT_LOAD_RESULT_MUSIC_REMOVED,
PROJECT_LOAD_RESULT_CONTENTS_MODIFIED = PROJECT_LOAD_RESULT_CONTENTS_REMOVED | PROJECT_LOAD_RESULT_CLIP_MARKERS_RESET |
PROJECT_LOAD_RESULT_CLIP_TIME_DATA_RESET | PROJECT_LOAD_RESULT_TEXT_RESET |
PROJECT_LOAD_RESULT_MUSIC_RESET
};
enum ePROJECT_SAVE_RESULT_FLAGS : rage::u64
{
PROJECT_SAVE_RESULT_SUCCESS = 0,
PROJECT_SAVE_RESULT_BAD_NAME = BIT_64(0),
PROJECT_SAVE_RESULT_BAD_PATH = BIT_64(1),
PROJECT_SAVE_RESULT_NO_SPACE = BIT_64(2),
PROJECT_SAVE_RESULT_FILE_ACCESS_ERROR = BIT_64(3),
PROJECT_SAVE_RESULT_WRITE_FAIL = BIT_64(4),
PROJECT_SAVE_RESULT_CLOSE_FAIL = BIT_64(5),
PROJECT_SAVE_RESULT_NO_CLIPS = BIT_64(6),
PROJECT_SAVE_RESULT_BAD_TIME_DATA = BIT_64(7),
PROJECT_SAVE_RESULT_NOT_ENOUGH_MARKERS = BIT_64(8),
PROJECT_SAVE_RESULT_INVALID_MARKERS = BIT_64(9),
// Count of bitfields, for debug purposes
PROJECT_SAVE_RESULT_USED_BITFIELDS = 10,
PROJECT_SAVE_RESULT_FAILED_PATHS = PROJECT_SAVE_RESULT_BAD_PATH | PROJECT_SAVE_RESULT_BAD_PATH,
PROJECT_SAVE_RESULT_FAILED_FILE_ACCESS = PROJECT_SAVE_RESULT_FILE_ACCESS_ERROR | PROJECT_SAVE_RESULT_WRITE_FAIL | PROJECT_SAVE_RESULT_CLOSE_FAIL,
PROJECT_SAVE_RESULT_FAILED = PROJECT_SAVE_RESULT_FAILED_PATHS | PROJECT_SAVE_RESULT_NO_SPACE |
PROJECT_SAVE_RESULT_NO_CLIPS | PROJECT_SAVE_RESULT_FAILED_FILE_ACCESS | PROJECT_SAVE_RESULT_INVALID_MARKERS,
PROJECT_SAVE_RESULT_UNSAFE_TO_CONTINUE = PROJECT_SAVE_RESULT_FAILED,
};
static void PrintClipLoadResultStrings( u64 const resultFlags );
static void PrintTextLoadResultStrings( u64 const resultFlags );
static void PrintMusicLoadResultStrings( u64 const resultFlags );
static void PrintProjectLoadResultStrings( u64 const resultFlags );
static void PrintProjectSaveResultStrings( u64 const resultFlags );
static inline bool IsOnlyOneErrorSet( u64 const flags, u64 const mask )
{
u64 const c_flagsToCheck = flags & mask;
bool const c_result = c_flagsToCheck && !( c_flagsToCheck & (c_flagsToCheck-1) );
return c_result;
}
static u32 GetAutoGenerationDuration(eAutoGenerationDuration duration);
static atHashString const& GetAutogenDurationLngKey( eAutoGenerationDuration const eType );
private:
static atHashString const sc_autogenDurationLngKey[AUTO_GENERATION_MAX];
};
#endif // INC_REPLAY_EDITOR_PARAMETERS_H_
#endif // GTA_REPLAY