2021-05-15 18:22:44 +02:00
/*
* FuzzyEngines . h , part of VCMI engine
*
* Authors : listed in file AUTHORS in main folder
*
* License : GNU General Public License v2 .0 or later
* Full text of license available in license . txt file , in main folder
*
*/
# pragma once
2023-09-16 07:13:16 +02:00
# if __has_include(<fuzzylite / Headers.h>)
# include <fuzzylite / Headers.h>
# else
# include <fl / Headers.h>
# endif
2021-05-16 13:55:57 +02:00
# include "../Goals/AbstractGoal.h"
2021-05-15 18:22:44 +02:00
2022-07-26 15:07:42 +02:00
VCMI_LIB_NAMESPACE_BEGIN
2021-05-15 18:22:44 +02:00
class CArmedInstance ;
2022-07-26 15:07:42 +02:00
VCMI_LIB_NAMESPACE_END
2022-09-26 20:01:07 +02:00
namespace NKAI
{
2021-05-15 18:22:44 +02:00
class engineBase //subclasses create fuzzylite variables with "new" that are not freed - this is desired as fl::Engine wants to destroy these...
{
protected :
fl : : Engine engine ;
2019-12-15 15:47:21 +02:00
fl : : RuleBlock * rules ;
2021-05-15 18:22:44 +02:00
virtual void configure ( ) ;
void addRule ( const std : : string & txt ) ;
public :
engineBase ( ) ;
} ;
class TacticalAdvantageEngine : public engineBase //TODO: rework this engine, it does not work well (example: AI hero with 140 beholders attacked 150 beholders - engine lowered danger 50000 -> 35000)
{
public :
TacticalAdvantageEngine ( ) ;
float getTacticalAdvantage ( const CArmedInstance * we , const CArmedInstance * enemy ) ; //returns factor how many times enemy is stronger than us
private :
2024-01-10 00:38:54 +02:00
fl : : InputVariable * ourWalkers ;
fl : : InputVariable * ourShooters ;
fl : : InputVariable * ourFlyers ;
fl : : InputVariable * enemyWalkers ;
fl : : InputVariable * enemyShooters ;
fl : : InputVariable * enemyFlyers ;
fl : : InputVariable * ourSpeed ;
fl : : InputVariable * enemySpeed ;
2021-05-15 18:22:44 +02:00
fl : : InputVariable * bankPresent ;
fl : : InputVariable * castleWalls ;
fl : : OutputVariable * threat ;
} ;
2022-09-26 20:01:07 +02:00
}