#pragma once #include #include #include "entities/pult.hpp" #include "utils/globals.hpp" namespace Nimbin { namespace Goal { struct ReachPlate { std::string tag; }; struct PressButton { PultAction action; }; struct CollectWord { std::string text; }; struct DroppedWord {}; struct ShotWord {}; struct CompilePattern{ std::string pattern; }; struct AiWordDefeated{ std::string text; }; struct AnyOf; struct AllOf; using Type = std::variant< ReachPlate, PressButton, CollectWord, DroppedWord, ShotWord, AiWordDefeated, CompilePattern, AnyOf, AllOf >; struct AnyOf { DynArray options; }; struct AllOf { DynArray options; }; struct Context { DynArray active_plate_tags; DynArray buttons_pressed_this_step; DynArray picked_up_this_step; DynArray ai_words_defeated_this_step; bool dropped_this_step {false}; bool shot_this_step {false}; bool compile_ok_this_step {false}; std::string editor_normalized; }; bool is_Satisfied(const Type& g, const Context& ctx); } // namespace Goal } // namespace Nimbin