feat: implement safe leave, profile reset, and full game reset semantics
This commit is contained in:
@@ -24,6 +24,9 @@ enum {
|
||||
LIFECYCLE_RESULT_GENERATION_FAILED,
|
||||
};
|
||||
|
||||
typedef uint8_t recovery_reason_t;
|
||||
enum { RECOVERY_REASON_NONE, RECOVERY_REASON_SESSION_LEFT, RECOVERY_REASON_PROFILE_RESET, RECOVERY_REASON_GAME_RESET };
|
||||
|
||||
typedef struct {
|
||||
game_engine_t game;
|
||||
session_manager_t sessions;
|
||||
@@ -34,6 +37,8 @@ typedef struct {
|
||||
bool bot_reserved;
|
||||
bool rematch_confirmed[kPlayerCapacity];
|
||||
uint32_t next_game_id;
|
||||
uint32_t recovery_generation;
|
||||
recovery_reason_t recovery_reason;
|
||||
} game_lifecycle_t;
|
||||
|
||||
void game_lifecycle_init(game_lifecycle_t *lifecycle, random_source_t random);
|
||||
@@ -44,6 +49,8 @@ lifecycle_result_t game_lifecycle_resume(game_lifecycle_t *lifecycle,
|
||||
const uint8_t token[kSessionTokenBytes], uint8_t *session_index);
|
||||
lifecycle_result_t game_lifecycle_disconnect(game_lifecycle_t *lifecycle, uint8_t session_index);
|
||||
lifecycle_result_t game_lifecycle_leave(game_lifecycle_t *lifecycle, uint8_t session_index);
|
||||
lifecycle_result_t game_lifecycle_reset(game_lifecycle_t *lifecycle, uint8_t session_index, uint32_t game_id);
|
||||
void game_lifecycle_set_recovery_reason(game_lifecycle_t *lifecycle, recovery_reason_t reason);
|
||||
lifecycle_result_t game_lifecycle_configure(game_lifecycle_t *lifecycle, uint8_t session_index,
|
||||
uint32_t game_id, game_mode_t mode);
|
||||
lifecycle_result_t game_lifecycle_start(game_lifecycle_t *lifecycle, uint8_t session_index, uint32_t game_id);
|
||||
|
||||
Reference in New Issue
Block a user