61 lines
1.6 KiB
C++
61 lines
1.6 KiB
C++
#pragma once
|
|
|
|
#include "cutscene/CutsceneDatabase.h"
|
|
#include "dialogue/DialogueTypes.h"
|
|
#include <functional>
|
|
#include <string>
|
|
|
|
namespace ZL::Cutscene {
|
|
|
|
class CutsceneRuntime {
|
|
public:
|
|
void setDatabase(const CutsceneDatabase* value);
|
|
|
|
void setOnFinished(std::function<void(const std::string&)> cb);
|
|
void setOnLineStarted(std::function<void(const std::string&)> cb);
|
|
void setOnFadeInComplete(std::function<void(const std::string&)> cb);
|
|
|
|
bool start(const std::string& cutsceneId);
|
|
void stop();
|
|
void update(int deltaMs);
|
|
|
|
bool isActive() const { return active; }
|
|
bool canSkip() const;
|
|
void skip();
|
|
|
|
const ZL::Dialogue::PresentationModel& getPresentation() const { return presentation; }
|
|
|
|
private:
|
|
const CutsceneDatabase* database = nullptr;
|
|
|
|
const StaticCutsceneDefinition* activeCutscene = nullptr;
|
|
std::string activeCutsceneId;
|
|
bool active = false;
|
|
bool fadeInCallbackFired = false;
|
|
bool skipPending = false;
|
|
|
|
int currentCutsceneLine = -1;
|
|
int cutsceneTimerMs = 0;
|
|
int cutsceneElapsedMs = 0;
|
|
int cutsceneTotalDurationMs = 0;
|
|
int cutsceneContentDurationMs = 0;
|
|
|
|
ZL::Dialogue::PresentationModel presentation;
|
|
|
|
std::function<void(const std::string&)> onFinished;
|
|
std::function<void(const std::string&)> onLineStarted;
|
|
std::function<void(const std::string&)> onFadeInComplete;
|
|
|
|
void finish();
|
|
void syncLineToElapsedTime();
|
|
void advanceLine();
|
|
void refreshPresentation();
|
|
|
|
std::vector<PresentedCutsceneImage> evaluateImages() const;
|
|
|
|
static float applyEasing(EasingType easing, float t);
|
|
static int computeFallbackDurationMs(const std::string& text);
|
|
};
|
|
|
|
} // namespace ZL::Cutscene
|