You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
2.3 KiB
81 lines
2.3 KiB
#include <catch2/catch_test_macros.hpp>
|
|
#include <iostream>
|
|
#include "rituals.hpp"
|
|
#include "fsm.hpp"
|
|
#include "dinkyecs.hpp"
|
|
|
|
using namespace combat;
|
|
|
|
|
|
TEST_CASE("cause scared rat won't run away bug", "[combat]") {
|
|
ai::reset();
|
|
ai::init("assets/ai.json");
|
|
auto host_start = ai::load_state("Host::initial_state");
|
|
auto host_goal = ai::load_state("Host::final_state");
|
|
|
|
auto ai_start = ai::load_state("Enemy::initial_state");
|
|
auto ai_goal = ai::load_state("Enemy::final_state");
|
|
BattleEngine battle;
|
|
|
|
DinkyECS::Entity host_id = 0;
|
|
ai::EntityAI host("Host::actions", host_start, host_goal);
|
|
host.set_state("tough_personality", true);
|
|
host.set_state("health_good", true);
|
|
battle.add_enemy(host_id, host);
|
|
|
|
DinkyECS::Entity rat_id = 1;
|
|
ai::EntityAI rat("Enemy::actions", ai_start, ai_goal);
|
|
rat.set_state("tough_personality", false);
|
|
rat.set_state("health_good", true);
|
|
battle.add_enemy(rat_id, rat);
|
|
|
|
// first confirm that everyone stops fightings
|
|
bool active = battle.plan();
|
|
REQUIRE(active);
|
|
REQUIRE(host.wants_to("kill_enemy"));
|
|
REQUIRE(rat.wants_to("kill_enemy"));
|
|
|
|
// this causes the plan to read END but if you set
|
|
// health_good to false it will run_away
|
|
|
|
rat.set_state("health_good", false);
|
|
active = battle.plan();
|
|
REQUIRE(rat.wants_to("run_away"));
|
|
REQUIRE(host.wants_to("kill_enemy"));
|
|
|
|
// also the host will stop working if their health is low
|
|
host.set_state("health_good", false);
|
|
active = battle.plan();
|
|
REQUIRE(rat.wants_to("run_away"));
|
|
|
|
// THIS FAILS but I'll fix it later
|
|
// REQUIRE(host.active());
|
|
// REQUIRE(host.wants_to("kill_enemy"));
|
|
}
|
|
|
|
TEST_CASE("battle operations fantasy", "[combat]") {
|
|
ai::reset();
|
|
ai::init("assets/ai.json");
|
|
|
|
auto ai_start = ai::load_state("Enemy::initial_state");
|
|
auto ai_goal = ai::load_state("Enemy::final_state");
|
|
|
|
DinkyECS::Entity enemy_id = 0;
|
|
ai::EntityAI enemy("Enemy::actions", ai_start, ai_goal);
|
|
enemy.set_state("tough_personality", true);
|
|
enemy.set_state("health_good", true);
|
|
|
|
BattleEngine battle;
|
|
battle.add_enemy(enemy_id, enemy);
|
|
|
|
// responsible for running the AI and determining:
|
|
// 1. Which enemy gets to go.
|
|
// 2. What they want to do.
|
|
battle.plan();
|
|
|
|
// Then it will go through each in order and
|
|
// have them fight, producing the results
|
|
battle.fight([&](auto, auto& entity_ai) {
|
|
entity_ai.dump();
|
|
});
|
|
}
|
|
|