#ifndef CREATURELIB_SCRIPT_HPP #define CREATURELIB_SCRIPT_HPP #include #include #include #include namespace CreatureLib::Battling{ class BaseTurnChoice; class AttackTurnChoice; class ExecutingAttack; class Creature; class Script{ const std::string _name; public: explicit Script(std::string name) :_name(std::move(name)){} virtual ~Script() = default; virtual void Stack(){}; const std::string& GetName(){ return _name; } virtual void OnBeforeTurn(const BaseTurnChoice* choice){}; virtual void ChangeAttack(AttackTurnChoice* choice, std::string& attack){}; virtual void PreventAttack(ExecutingAttack* attack,bool& result){}; virtual void FailIncomingAttack(ExecutingAttack* attack, Creature* target, bool& result){}; virtual void IsInvulnerable(ExecutingAttack* attack, Creature* target , bool& result){}; virtual void OnAttackMiss(ExecutingAttack* attack, Creature* target){}; virtual void ChangeAttackType(ExecutingAttack* attack, Creature* target, uint8_t hitNumber, uint8_t& type){}; virtual void OnStatusMove(const ExecutingAttack* attack, Creature* target, uint8_t hitNumber){}; virtual void PreventSecondaryEffects(const ExecutingAttack* attack, Creature* target, uint8_t hitNumber, bool& result){}; virtual void OnSecondaryEffect(const ExecutingAttack* attack, Creature* target, uint8_t hitNumber){}; virtual void OnAfterHits(const ExecutingAttack* attack, Creature* target){}; }; } #endif //CREATURELIB_SCRIPT_HPP