13 #include <unordered_map>
24 static constexpr uint32_t Nil =
static_cast<uint32_t
>(~0);
32 VM(
VM&&) noexcept = delete;
33 VM& operator=(const
VM&) = delete;
34 VM& operator=(
VM&&) noexcept = delete;
47 void RegisterMemberFunction(const std::
string& name, const std::shared_ptr<T>& instance,
void (T::*method)(const std::shared_ptr<
Actor>&));
49 void RegisterMemberFunction(const std::
string& name, const std::shared_ptr<T>& instance,
void (T::*method)(const std::shared_ptr<
Actor>&) const);
51 void RegisterMemberFunction(const std::
string& name, const std::weak_ptr<T>& instance,
void (T::*method)(const std::shared_ptr<
Actor>&));
53 void RegisterMemberFunction(const std::
string& name, const std::weak_ptr<T>& instance,
void (T::*method)(const std::shared_ptr<
Actor>&) 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);
84 [[nodiscard]] int8_t GetInt8FromMemory(const uint32_t address) const;
85 [[nodiscard]] uint8_t GetUint8FromMemory(const uint32_t address) const;
86 [[nodiscard]] int16_t GetInt16FromMemory(const uint32_t address) const;
87 [[nodiscard]] uint16_t GetUint16FromMemory(const uint32_t address) const;
88 [[nodiscard]] int32_t GetInt32FromMemory(const uint32_t address) const;
89 [[nodiscard]] uint32_t GetUint32FromMemory(const uint32_t address) const;
90 [[nodiscard]]
float GetFloatFromMemory(const uint32_t address) const;
91 [[nodiscard]] const
char* GetStringFromMemory(const uint32_t address) const;
93 [[nodiscard]] int32_t GetOpecode(const uint32_t address) const;
97 [[nodiscard]]
Buffer& GetGlobalVariables() noexcept;
98 [[nodiscard]] const
Buffer& GetGlobalVariables() const noexcept;
99 [[nodiscard]]
Buffer& GetStaticVariables() noexcept;
100 [[nodiscard]] const
Buffer& GetStaticVariables() const noexcept;
103 std::shared_ptr<
Plugin> mPlugin;
104 std::shared_ptr<const
void> mProgram;
106 const uint8_t* mInstructionPool =
nullptr;
107 const
char* mConstantPool =
nullptr;
110 std::unordered_map<std::string_view, std::shared_ptr<
Actor>> mActors;
111 std::unordered_map<std::string_view, const
ActorInfoHeader*> mPhantoms;
115 uint32_t mFrameCounter = 0;
120 InitializeActionRunning,
121 InitializeActionFinished,
126 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:373
void RequestAll(const int32_t level, const char *actionName, const std::shared_ptr< Actor > &sender) const
Definition: VM.inl:365
void Execute(const std::function< void()> &function)
Definition: VM.inl:357
std::shared_ptr< Actor > CloneActor(const std::shared_ptr< Actor > &actor, const char *newName)
Definition: VM.inl:415
bool IsFinishInitAction() const
Definition: VM.inl:560
std::shared_ptr< Actor > CreateActor(const char *name, const char *newName)
Definition: VM.inl:428
std::string_view GetActorName(const std::shared_ptr< Actor > &actor) const
Definition: VM.inl:402
void SetSystemRequest(const bool enable)
Definition: VM.inl:565
bool IsSystemRequestEnabled() const
Definition: VM.inl:573
uint32_t GetFrameCounter() const
Definition: VM.inl:578
void RegisterMemberFunction(const std::string &name, T *instance, void(T::*method)(const std::shared_ptr< Actor > &))
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:344
void Restart()
Definition: VM.inl:296
void UnloadProgram()
Definition: VM.inl:264
void LoadPlugins(const std::string &directoryName)
Definition: VM.inl:25
void LoadProgram(const std::string &path)
Definition: VM.inl:117
std::shared_ptr< Actor > CreateActorFromPhantom(const char *name, const char *newName)
Definition: VM.inl:433
bool Run()
Definition: VM.inl:307
float_t GetDeltaTime() const
VM(VM &&) noexcept=delete
bool IsInInitAction() const
Definition: VM.inl:555
std::function< void(const std::shared_ptr< Actor > &)> ExternalFunctionType
Definition: VM.h:27
void YieldAll() const
Definition: VM.inl:386
std::shared_ptr< Actor > FindActor(const char *name)
Definition: VM.inl:394
void LoadPlugin(const std::string &filename)
Definition: VM.inl:18
bool IsFrameChanged() const
Definition: VM.inl:583
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