action_list

This commit is contained in:
NukeBird 2025-03-12 21:44:21 +03:00
parent 89925e286e
commit 30407477ea
2 changed files with 94 additions and 25 deletions

View file

@ -4,6 +4,7 @@
#include <type_traits> #include <type_traits>
#include <iostream> #include <iostream>
#include <format> #include <format>
#include <vector>
namespace s2ga namespace s2ga
{ {
@ -145,6 +146,10 @@ namespace s2ga
} }
} }
}; };
template<typename E>
requires std::is_enum_v<E>
using action_list = std::vector<action<E>>;
}; // namespace s2ga }; // namespace s2ga
inline void foo() inline void foo()

View file

@ -13,35 +13,99 @@ using namespace s2ga;
TEST_CASE("(dummy)", "[test]") TEST_CASE("(dummy)", "[test]")
{ {
enum State enum State
{ {
HAS_AMMO, HUNGRY,
HAS_WEAPON, HAS_FOOD,
ENEMY_ALIVE, HAS_HOUSE,
SATISFIED HAS_CLOTHES,
HAS_WOOD,
HAS_TOOLS,
HAS_FABRIC,
HAS_ANIMAL_SKIN,
IS_WET,
HAS_FIRE,
IS_RAINING
}; };
action<State> shoot_action; action_list<State> actions =
shoot_action.name = "SHOOT"; {
shoot_action.positive_preconds = bm<State>(HAS_AMMO, HAS_WEAPON, ENEMY_ALIVE); {
shoot_action.negative_preconds = bm<State>(SATISFIED); .name = "COLLECT FRUITS",
shoot_action.positive_effects = bm<State>(SATISFIED); .cost = 2.0f,
shoot_action.negative_effects = bm<State>(ENEMY_ALIVE); .positive_effects = bm<State>(HAS_FOOD),
shoot_action.cost = 0.5f; .negative_preconds = bm<State>(IS_RAINING),
},
{
.name = "COLLECT FRUITS",
.cost = 2.0f,
.positive_effects = bm<State>(HAS_FOOD),
.negative_preconds = bm<State>(IS_RAINING),
},
{
.name = "MAKE FISH TRAP",
.cost = 0.5f,
.positive_effects = bm<State>(HAS_FOOD),
.negative_effects = bm<State>(HAS_WOOD),
.positive_preconds = bm<State>(HAS_TOOLS),
.negative_preconds = bm<State>(IS_WET),
},
{
.name = "BUILD HOUSE",
.cost = 8.0f,
.positive_effects = bm<State>(HAS_HOUSE),
.negative_effects = bm<State>(HAS_WOOD, IS_WET),
.positive_preconds = bm<State>(HAS_TOOLS, HAS_WOOD),
.negative_preconds = bm<State>(HAS_HOUSE),
},
{
.name = "CRAFT TOOLS",
.cost = 5.0f,
.positive_effects = bm<State>(HAS_TOOLS),
.negative_effects = bm<State>(HAS_WOOD),
.positive_preconds = bm<State>(HAS_WOOD),
},
{
.name = "MAKE CLOTHES",
.cost = 4.0f,
.positive_effects = bm<State>(HAS_CLOTHES),
.negative_effects = bm<State>(HAS_FABRIC),
.positive_preconds = bm<State>(HAS_FABRIC),
.negative_preconds = bm<State>(IS_WET),
},
{
.name = "HUNT ANIMAL",
.cost = 6.0f,
.positive_effects = bm<State>(HAS_ANIMAL_SKIN, HAS_FOOD),
.negative_effects = bm<State>(HUNGRY),
.positive_preconds = bm<State>(HAS_TOOLS),
.negative_preconds = bm<State>(IS_RAINING),
},
{
.name = "MAKE FIRE",
.cost = 2.0f,
.positive_effects = bm<State>(HAS_FIRE),
.negative_effects = bm<State>(HAS_WOOD, IS_WET),
.positive_preconds = bm<State>(HAS_WOOD),
},
{
.name = "COLLECT WOOD",
.cost = 2.0f,
.positive_effects = bm<State>(HAS_WOOD),
.negative_preconds = bm<State>(IS_RAINING),
},
{
.name = "WAIT OUT RAIN",
.cost = 5.0f,
.negative_effects = bm<State>(IS_RAINING),
.positive_preconds = bm<State>(IS_RAINING),
}
};
shoot_action.print(); for(auto& action: actions)
/* {
Will print this: action.print();
[SHOOT, 0.5] }
Effects:
-ENEMY_ALIVE
+SATISFIED
Preconditions:
+HAS_AMMO
+HAS_WEAPON
+ENEMY_ALIVE
-SATISFIED
*/
} }
TEST_CASE("lehmer64 rng", "[test]") TEST_CASE("lehmer64 rng", "[test]")