ImmutableOctet / glare

Glare: Open Source Game Engine written in Modern C++
MIT License
0 stars 0 forks source link

Expand in-source script definition macros to allow for custom embedded scripts at global scope #89

Open ImmutableOctet opened 4 months ago

ImmutableOctet commented 4 months ago

We currently need scripts to be defined either as individual files (my_script_file.cpp) or as embedded lambdas/script expressions (SCRIPT_BEGIN, SCRIPT_END, on(...), etc.), but this isn't always the most natural way to define a script.

We should extend the macro API (found in engine:script's embedded_script.hpp file) to allow script definitions outside of the body of the current script.

This would look something like:

SCRIPT(my_custom_script)
    while (true)
    {
        const auto& button_event = co_await until<OnButtonPressed>();

        print("Button pressed: {}", button_event.button);
    }
END_SCRIPT()

auto my_script_file()
{
    co_await start_script<my_custom_script>();

    // ...
}

We could also optionally have a SCRIPT_CLASS macro to allow for extensions similar to the header-based approach.

SCRIPT_CLASS(my_custom_script)
    decltype(auto) some_fn(thid auto&& self, auto&& some_arg, auto&&... etc)
    {
        // ...
    }
END_SCRIPT_CLASS()

_NOTE: SCRIPT_CLASS may need to be defined above the SCRIPT(my_custom_script) section._

ImmutableOctet commented 4 months ago

Implemented the SCRIPT and END_SCRIPT macros. Going to put the SCRIPT_CLASS idea on hold for now.