#pragma once #include "olcPixelGameEngine.h" #include "Key.h" struct Player; struct PrecastData{ float castTime; float range; float size; //Whether or not this ability requires precasting (automatically set to true when precast time is greater than zero) bool precastTargetingRequired=false; PrecastData(); //Cast an ability without a targeting indicator, just starts the cast. PrecastData(float castTime); PrecastData(float castTime,float range,float size); }; //Abilities are tied to class data which is defined in Class.cpp. struct Ability{ std::string name=""; std::string shortName=""; float cooldown=0; float COOLDOWN_TIME=0; int manaCost=0; Pixel barColor1,barColor2; PrecastData precastInfo; bool canCancelCast=false; InputGroup*input; std::string icon; std::functionaction=[](Player*,vf2d){return false;}; static InputGroup DEFAULT; Ability(); //NOTE: icon expects the actual name relative to the "Ability Icons" directory for this constructor! Ability(std::string name,std::string shortName,float cooldownTime,int manaCost,InputGroup*input,std::string icon,Pixel barColor1=VERY_DARK_RED,Pixel barColor2=DARK_RED,PrecastData precastInfo={},bool canCancelCast=false); };