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
# include <fl/Headers.h>
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 :
fl : : InputVariable * ourWalkers , * ourShooters , * ourFlyers , * enemyWalkers , * enemyShooters , * enemyFlyers ;
fl : : InputVariable * ourSpeed , * enemySpeed ;
fl : : InputVariable * bankPresent ;
fl : : InputVariable * castleWalls ;
fl : : OutputVariable * threat ;
} ;
2022-09-26 20:01:07 +02:00
}