#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::function<bool(Player*,vf2d)>action=[](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);
};