ExpertSystem.h 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #include "../vcmi/global.h"
  2. #include "../vcmi/CCallback.h"
  3. #include "HeroBonus.h"
  4. #include <set>
  5. /*
  6. * ExpertSystem.h, part of VCMI engine
  7. *
  8. * Authors: listed in file AUTHORS in main folder
  9. *
  10. * License: GNU General Public License v2.0 or later
  11. * Full text of license available in license.txt file, in main folder
  12. *
  13. */
  14. template <typename ruleType, typename facts> class ExpertSystemShell
  15. {
  16. private:
  17. ICallback* m_cb;
  18. protected:
  19. template std::set<typename ruleType> knowledge;
  20. public:
  21. template std::set<typename facts> facts;
  22. template <typename t1> void getKnowledge(const t1 &a1){};
  23. template <typename ruleType> void getNextRule(){};
  24. template <typename t2> void returnGoals(const t2 &a2){};
  25. };
  26. template <typename input> class condition
  27. {
  28. enum conditionType {LESS_THAN, EQUAL, GREATER_THAN, UNEQUAL, PRESENT};
  29. public:
  30. input object;
  31. ui16 value;
  32. conditionType conType;
  33. };
  34. template <typename &input, typename &output> class Rule
  35. {
  36. friend class ExpertSystemShell;
  37. public:
  38. fired; //if conditions of rule were met and it produces some output
  39. protected:
  40. std::set<typename input> conditions;
  41. virtual void canBeFired(); //if this data makes any sense for rule
  42. virtual void fireRule();
  43. public:
  44. template <typename &givenInput> bool matchesInput() //if condition and data match type
  45. {return dynamic_cast<input*>(givenInput);};
  46. };
  47. template <typename &input, typename &output> class Goal : public Rule
  48. {
  49. public:
  50. void fireTule(){};
  51. };
  52. template <typename &input, typename &output> class Weight : public Rule
  53. {
  54. public:
  55. float value; //multiply input by value and return to output
  56. void fireTule(){};
  57. };
  58. template <typename RuleType> class BonusSystemExpert : public ExpertSystemShell <typename RuleType, Bonus>
  59. {
  60. enum effectType {POSITIVE=1, NEGATIVE=2, EXCLUDING=4, ENEMY=8, ALLY=16}; //what is the influencce of bonus and for who
  61. };