add dialogue and cutscene system
This commit is contained in:
1 parent
178f69967b
commit
7125674308
23 files changed
+1619
-2
No files matched your search
@@ -0,0 +1,51 @@
|
||||
#pragma once
|
||||
|
||||
#include "dialogue/DialogueOverlay.h"
|
||||
#include "dialogue/DialogueRuntime.h"
|
||||
#include <Eigen/Dense>
|
||||
#include <SDL.h>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
namespace ZL::Dialogue {
|
||||
|
||||
struct TriggerZone {
|
||||
std::string id;
|
||||
std::string dialogueId;
|
||||
Eigen::Vector3f center = Eigen::Vector3f::Zero();
|
||||
float radius = 1.5f;
|
||||
bool once = true;
|
||||
bool triggered = false;
|
||||
};
|
||||
|
||||
class DialogueSystem {
|
||||
public:
|
||||
bool init(Renderer& renderer, const std::string& zipFile = "");
|
||||
bool loadDatabase(const std::string& path);
|
||||
|
||||
void update(int deltaMs, const Eigen::Vector3f& playerPosition);
|
||||
void draw(Renderer& renderer);
|
||||
|
||||
bool handleKeyDown(SDL_Keycode key);
|
||||
bool handlePointerReleased(float x, float y);
|
||||
|
||||
bool startDialogue(const std::string& dialogueId);
|
||||
void stopDialogue();
|
||||
|
||||
bool isActive() const { return runtime.isActive(); }
|
||||
bool blocksGameplayInput() const { return runtime.isActive(); }
|
||||
|
||||
void setFlag(const std::string& name, int value) { runtime.setFlag(name, value); }
|
||||
int getFlag(const std::string& name) const { return runtime.getFlag(name); }
|
||||
|
||||
void addTriggerZone(const TriggerZone& zone);
|
||||
void clearTriggerZones();
|
||||
|
||||
private:
|
||||
DialogueDatabase database;
|
||||
DialogueRuntime runtime;
|
||||
DialogueOverlay overlay;
|
||||
std::vector<TriggerZone> triggerZones;
|
||||
};
|
||||
|
||||
} // namespace ZL::Dialogue
|
||||
Reference in new issue
Block a user