13 #include <unordered_map>
24 static constexpr uint32_t Nil =
static_cast<uint32_t
>(~0);
27 using ExternalFunctionType = std::function<void(
const std::shared_ptr<Actor>& actor,
void* structPointer)>;
32 VM(
VM&&) noexcept = delete;
33 VM& operator=(const
VM&) = delete;
34 VM& operator=(
VM&&) noexcept = delete;
45 void RegisterMemberFunction(const std::
string& name, const T* instance,
void (T::*method)(const std::shared_ptr<
Actor>&,
void*) const);
47 void RegisterMemberFunction(const std::
string& name, const std::shared_ptr<T>& instance,
void (T::*method)(const std::shared_ptr<
Actor>&,
void*));
49 void RegisterMemberFunction(const std::
string& name, const std::shared_ptr<T>& instance,
void (T::*method)(const std::shared_ptr<
Actor>&,
void*) const);
51 void RegisterMemberFunction(const std::
string& name, const std::weak_ptr<T>& instance,
void (T::*method)(const std::shared_ptr<
Actor>&,
void*));
53 void RegisterMemberFunction(const std::
string& name, const std::weak_ptr<T>& instance,
void (T::*method)(const std::shared_ptr<
Actor>&,
void*) const);
56 void LoadProgram(const std::shared_ptr<const
void>& program);
63 void Execute(const std::function<
void()>& function);
65 void RequestAll(const int32_t level, const
char* actionName, const std::shared_ptr<
Actor>& sender) const;
66 bool Request(const int32_t level, const
char* actorName, const
char* actionName, const std::shared_ptr<
Actor>& sender);
69 [[nodiscard]] std::string_view
GetActorName(const std::shared_ptr<
Actor>& actor) const;
70 [[nodiscard]] std::shared_ptr<
Actor>
CloneActor(const std::shared_ptr<
Actor>& actor, const
char* newName);
71 [[nodiscard]] std::shared_ptr<
Actor>
CreateActor(const
char* name, const
char* newName);
83 [[nodiscard]] int8_t GetInt8FromMemory(const uint32_t address) const;
84 [[nodiscard]] uint8_t GetUint8FromMemory(const uint32_t address) const;
85 [[nodiscard]] int16_t GetInt16FromMemory(const uint32_t address) const;
86 [[nodiscard]] uint16_t GetUint16FromMemory(const uint32_t address) const;
87 [[nodiscard]] int32_t GetInt32FromMemory(const uint32_t address) const;
88 [[nodiscard]] uint32_t GetUint32FromMemory(const uint32_t address) const;
89 [[nodiscard]]
float GetFloatFromMemory(const uint32_t address) const;
90 [[nodiscard]] const
char* GetStringFromMemory(const uint32_t address) const;
92 [[nodiscard]] int32_t GetOpecode(const uint32_t address) const;
96 [[nodiscard]]
Buffer& GetGlobalVariables() noexcept;
97 [[nodiscard]] const
Buffer& GetGlobalVariables() const noexcept;
98 [[nodiscard]]
Buffer& GetStaticVariables() noexcept;
99 [[nodiscard]] const
Buffer& GetStaticVariables() const noexcept;
102 std::shared_ptr<
Plugin> mPlugin;
103 std::shared_ptr<const
void> mProgram;
105 const uint8_t* mInstructionPool =
nullptr;
106 const
char* mConstantPool =
nullptr;
109 std::unordered_map<std::string_view, std::shared_ptr<
Actor>> mActors;
110 std::unordered_map<std::string_view, const
ActorInfoHeader*> mPhantoms;
114 uint32_t mFrameCounter = 0;
119 InitializeActionRunning,
120 InitializeActionFinished,
125 std::bitset<8> mFlag;
bool Request(const int32_t level, const char *actorName, const char *actionName, const std::shared_ptr< Actor > &sender)
Definition: VM.inl:374
void RequestAll(const int32_t level, const char *actionName, const std::shared_ptr< Actor > &sender) const
Definition: VM.inl:366
void Execute(const std::function< void()> &function)
Definition: VM.inl:358
std::shared_ptr< Actor > CloneActor(const std::shared_ptr< Actor > &actor, const char *newName)
Definition: VM.inl:416
bool IsFinishInitAction() const
Definition: VM.inl:561
std::shared_ptr< Actor > CreateActor(const char *name, const char *newName)
Definition: VM.inl:429
std::string_view GetActorName(const std::shared_ptr< Actor > &actor) const
Definition: VM.inl:403
void SetSystemRequest(const bool enable)
Definition: VM.inl:566
bool IsSystemRequestEnabled() const
Definition: VM.inl:574
uint32_t GetFrameCounter() const
Definition: VM.inl:579
void RegisterMemberFunction(const std::string &name, T *instance, void(T::*method)(const std::shared_ptr< Actor > &, void *))
Register C++ member functions without writing a manual wrapper. The method signature must match Exter...
Definition: VM.inl:38
bool IsRunning() const
Definition: VM.inl:345
void Restart()
Definition: VM.inl:297
std::function< void(const std::shared_ptr< Actor > &actor, void *structPointer)> ExternalFunctionType
Definition: VM.h:27
void UnloadProgram()
Definition: VM.inl:265
void LoadPlugins(const std::string &directoryName)
Definition: VM.inl:25
void LoadProgram(const std::string &path)
Definition: VM.inl:118
std::shared_ptr< Actor > CreateActorFromPhantom(const char *name, const char *newName)
Definition: VM.inl:434
bool Run()
Definition: VM.inl:308
float_t GetDeltaTime() const
VM(VM &&) noexcept=delete
bool IsInInitAction() const
Definition: VM.inl:556
void YieldAll() const
Definition: VM.inl:387
std::shared_ptr< Actor > FindActor(const char *name)
Definition: VM.inl:395
void LoadPlugin(const std::string &filename)
Definition: VM.inl:18
bool IsFrameChanged() const
Definition: VM.inl:584
void RegisterFunction(const std::string &name, const ExternalFunctionType &function)
Definition: VM.inl:32
Definition: CodeBuffer.cpp:12
float float_t
Definition: Type.h:27
Definition: Noncopyable.h:18