/** * Copyright (c) 2025 Dominic Masters * * This software is released under the MIT License. * https://opensource.org/licenses/MIT */ #include "cutscenesystem.h" #include "util/memory.h" cutscenesystem_t CUTSCENE_SYSTEM; void cutsceneSystemInit() { memoryZero(&CUTSCENE_SYSTEM, sizeof(cutscenesystem_t)); } void cutsceneSystemStartCutscene(const cutscene_t *cutscene) { CUTSCENE_SYSTEM.scene = cutscene; CUTSCENE_SYSTEM.mode = CUTSCENE_MODE_INITIAL; CUTSCENE_SYSTEM.currentItem = 0xFF;// Set to 0xFF so start wraps. cutsceneSystemNext(); } void cutsceneSystemUpdate() { if(CUTSCENE_SYSTEM.scene == NULL) return; const cutsceneitem_t *item = cutsceneSystemGetCurrentItem(); cutsceneItemUpdate(item, &CUTSCENE_SYSTEM.data); } void cutsceneSystemNext() { if(CUTSCENE_SYSTEM.scene == NULL) return; CUTSCENE_SYSTEM.currentItem++; // End of the cutscene? if( CUTSCENE_SYSTEM.currentItem >= CUTSCENE_SYSTEM.scene->itemCount ) { CUTSCENE_SYSTEM.scene = NULL; CUTSCENE_SYSTEM.currentItem = 0xFF; CUTSCENE_SYSTEM.mode = CUTSCENE_MODE_NONE; return; } // Start item. const cutsceneitem_t *item = cutsceneSystemGetCurrentItem(); memset(&CUTSCENE_SYSTEM.data, 0, sizeof(CUTSCENE_SYSTEM.data)); cutsceneItemStart(item, &CUTSCENE_SYSTEM.data); } const cutsceneitem_t * cutsceneSystemGetCurrentItem() { if(CUTSCENE_SYSTEM.scene == NULL) return NULL; return &CUTSCENE_SYSTEM.scene->items[CUTSCENE_SYSTEM.currentItem]; }