#ifndef CREATURELIB_SCRIPT_HPP #define CREATURELIB_SCRIPT_HPP #include #include #include #include #include "../../Library/CreatureData/CreatureSpecies.hpp" namespace CreatureLib::Battling { class BaseTurnChoice; class AttackTurnChoice; class SwitchTurnChoice; 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(){}; virtual void OnRemove(){}; const std::string& GetName() { return _name; } virtual void OnBeforeTurn(const BaseTurnChoice* choice){}; virtual void ChangeAttack(AttackTurnChoice* choice, std::string* outAttack){}; virtual void PreventAttack(ExecutingAttack* attack, bool* outResult){}; virtual void FailAttack(ExecutingAttack* attack, bool* outFailed){}; virtual void StopBeforeAttack(ExecutingAttack* attack, bool* outResult){}; virtual void OnBeforeAttack(ExecutingAttack* attack){}; virtual void FailIncomingAttack(ExecutingAttack* attack, Creature* target, bool* outResult){}; virtual void IsInvulnerable(ExecutingAttack* attack, Creature* target, bool* outResult){}; virtual void OnAttackMiss(ExecutingAttack* attack, Creature* target){}; virtual void ChangeAttackType(ExecutingAttack* attack, Creature* target, uint8_t hitNumber, uint8_t* outType){}; virtual void OnStatusMove(const ExecutingAttack* attack, Creature* target, uint8_t hitNumber){}; virtual void PreventSecondaryEffects(const ExecutingAttack* attack, Creature* target, uint8_t hitNumber, bool* outResult){}; virtual void OnSecondaryEffect(const ExecutingAttack* attack, Creature* target, uint8_t hitNumber){}; virtual void OnAfterHits(const ExecutingAttack* attack, Creature* target){}; virtual void PreventSelfSwitch(const SwitchTurnChoice* choice, bool* outResult){}; virtual void ModifyEffectChance(const ExecutingAttack* attack, Creature* target, float* chance){}; virtual void ModifyIncomingEffectChance(const ExecutingAttack* attack, Creature* target, float* chance){}; }; } #endif // CREATURELIB_SCRIPT_HPP