2023-04-07 23:08:34 +02:00
|
|
|
#pragma once
|
|
|
|
#include "common.hpp"
|
|
|
|
|
|
|
|
namespace big
|
|
|
|
{
|
|
|
|
class script
|
|
|
|
{
|
|
|
|
std::string_view m_name;
|
|
|
|
bool m_enabled;
|
|
|
|
bool m_toggleable;
|
|
|
|
|
|
|
|
public:
|
2023-06-06 07:40:40 +00:00
|
|
|
using func_t = std::function<void(void)>;
|
2023-04-07 23:08:34 +02:00
|
|
|
|
|
|
|
public:
|
|
|
|
explicit script(const func_t func, const std::string_view name, const bool toggleable = true, const std::optional<std::size_t> stack_size = std::nullopt);
|
|
|
|
explicit script(const func_t func, const std::optional<std::size_t> stack_size = std::nullopt);
|
|
|
|
~script();
|
|
|
|
|
|
|
|
[[nodiscard]] const char* name() const;
|
|
|
|
[[nodiscard]] bool is_enabled() const;
|
|
|
|
void set_enabled(const bool toggle);
|
|
|
|
[[nodiscard]] bool* toggle_ptr();
|
|
|
|
|
|
|
|
[[nodiscard]] bool is_toggleable() const;
|
|
|
|
|
|
|
|
void tick();
|
|
|
|
void yield(std::optional<std::chrono::high_resolution_clock::duration> time = std::nullopt);
|
|
|
|
static script* get_current();
|
|
|
|
|
|
|
|
private:
|
|
|
|
void fiber_func();
|
|
|
|
|
|
|
|
private:
|
|
|
|
void* m_script_fiber;
|
|
|
|
void* m_main_fiber;
|
|
|
|
func_t m_func;
|
|
|
|
std::optional<std::chrono::high_resolution_clock::time_point> m_wake_time;
|
|
|
|
};
|
2022-06-27 20:12:45 +02:00
|
|
|
}
|