You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
SeasonI/battleproperty.h

215 lines
5.3 KiB

#ifndef BATTLE_PROPERTY_H
#define BATTLE_PROPERTY_H
#include "pixelGameEngine.h"
#include "entity.h"
#include "object.h"
using namespace olc;
class BattleProperty{
public:
std::string displayName;
std::string effectName;
Property prop;
BattleProperty(Property prop,std::string displayName,std::string effectName)
:prop(prop),displayName(displayName),effectName(effectName){}
virtual void OnApplication(Entity*ent,int val)=0; //What happens when the effect is immediately applied.
virtual bool OnTurnStart(Entity*ent,int val)=0; //Effects on turn start.
virtual void OnTurnEnd(Entity*ent,int val)=0; //Effects on turn end.
};
class Property_PETRIFY:public BattleProperty{
public:
Property_PETRIFY()
:BattleProperty(Property::PETRIFY,"PETRIFY","Petrified"){}
void OnApplication(Entity*ent,int val){
}
//Return false to cancel the move.
bool OnTurnStart(Entity*ent,int val){
return true;
}
void OnTurnEnd(Entity*ent,int val){
}
};
class Property_PARALYZE:public BattleProperty{
public:
Property_PARALYZE()
:BattleProperty(Property::PARALYZE,"PARALYZE","Paralyzed"){}
void OnApplication(Entity*ent,int val){
}
//Return false to cancel the move.
bool OnTurnStart(Entity*ent,int val){
return true;
}
void OnTurnEnd(Entity*ent,int val){
}
};
class Property_DIAMONDIZE:public BattleProperty{
public:
Property_DIAMONDIZE()
:BattleProperty(Property::DIAMONDIZE,"DIAMONDIZE","Diamondized"){}
void OnApplication(Entity*ent,int val){
}
//Return false to cancel the move.
bool OnTurnStart(Entity*ent,int val){
return true;
}
void OnTurnEnd(Entity*ent,int val){
}
};
class Property_CRYING:public BattleProperty{
public:
Property_CRYING()
:BattleProperty(Property::CRYING,"CRYING","Crying"){}
void OnApplication(Entity*ent,int val){
}
//Return false to cancel the move.
bool OnTurnStart(Entity*ent,int val){
return true;
}
void OnTurnEnd(Entity*ent,int val){
}
};
class Property_SLOW:public BattleProperty{
public:
Property_SLOW()
:BattleProperty(Property::SLOW,"SLOW","Slowed"){}
void OnApplication(Entity*ent,int val){
ent->statusEffects[prop]=val;
printf("%s: %s - %d\n",displayName.c_str(),ent->obj->name.c_str(),ent->statusEffects[prop]);
}
//Return false to cancel the move.
bool OnTurnStart(Entity*ent,int val){
printf("%s: %s - %d\n",displayName.c_str(),ent->obj->name.c_str(),ent->statusEffects[prop]);
return true;
}
void OnTurnEnd(Entity*ent,int val){
ent->statusEffects[prop]--;
printf("%s: %s - %d\n",displayName.c_str(),ent->obj->name.c_str(),ent->statusEffects[prop]);
}
};
class Property_MUSHROOMIZED:public BattleProperty{
public:
Property_MUSHROOMIZED()
:BattleProperty(Property::MUSHROOMIZED,"MUSHROOMIZED","Mushroomized"){}
void OnApplication(Entity*ent,int val){
}
//Return false to cancel the move.
bool OnTurnStart(Entity*ent,int val){
return true;
}
void OnTurnEnd(Entity*ent,int val){
}
};
class Property_CONFUSE:public BattleProperty{
public:
Property_CONFUSE()
:BattleProperty(Property::CONFUSE,"CONFUSE","Confused"){}
void OnApplication(Entity*ent,int val){
}
//Return false to cancel the move.
bool OnTurnStart(Entity*ent,int val){
return true;
}
void OnTurnEnd(Entity*ent,int val){
}
};
class Property_POISON:public BattleProperty{
public:
Property_POISON()
:BattleProperty(Property::POISON,"POISON","Poisoned"){}
void OnApplication(Entity*ent,int val){
}
//Return false to cancel the move.
bool OnTurnStart(Entity*ent,int val){
return true;
}
void OnTurnEnd(Entity*ent,int val){
}
};
class Property_REGEN:public BattleProperty{
public:
Property_REGEN()
:BattleProperty(Property::REGEN,"REGEN","Regenerating"){}
void OnApplication(Entity*ent,int val){
}
//Return false to cancel the move.
bool OnTurnStart(Entity*ent,int val){
return true;
}
void OnTurnEnd(Entity*ent,int val){
}
};
class Property_DEFENSE_UP:public BattleProperty{
public:
Property_DEFENSE_UP()
:BattleProperty(Property::DEFENSE_UP,"DEFENSE_UP","Hardened"){}
void OnApplication(Entity*ent,int val){
}
//Return false to cancel the move.
bool OnTurnStart(Entity*ent,int val){
return true;
}
void OnTurnEnd(Entity*ent,int val){
}
};
class Property_REVIVE:public BattleProperty{
public:
Property_REVIVE()
:BattleProperty(Property::REVIVE,"REVIVE","Revived"){}
void OnApplication(Entity*ent,int val){
}
//Return false to cancel the move.
bool OnTurnStart(Entity*ent,int val){
return true;
}
void OnTurnEnd(Entity*ent,int val){
}
};
class Property_NONE:public BattleProperty{
public:
Property_NONE()
:BattleProperty(Property::NONE,"NONE",""){}
void OnApplication(Entity*ent,int val){
}
//Return false to cancel the move.
bool OnTurnStart(Entity*ent,int val){
return true;
}
void OnTurnEnd(Entity*ent,int val){
}
};
#endif