Files
wagic/projects/mtg/include/Tasks.h
2013-12-09 22:20:43 +01:00

255 lines
5.8 KiB
C++

#ifndef TASK_H
#define TASK_H
#include <vector>
#include <string>
#include "Easing.h"
using namespace std;
class GameObserver;
class JQuad;
class JTexture;
// Task type constant
#define TASK_BASIC 'B'
#define TASK_WIN_AGAINST 'W'
#define TASK_SLAUGHTER 'S'
#define TASK_DELAY 'D'
#define TASK_IMMORTAL 'I'
#define TASK_MASSIVE_BURIAL 'M'
#define TASK_WISDOM 'O'
#define TASK_PACIFISM 'P'
#define TASKS_ALL "WSDIMOP"
#define ITEM_SEPARATOR "|"
#define COMMON_ATTRIBS_COUNT 7
class Task
{
protected:
int reward; // TODO: Complex rewards. Be consistent with other planned modes with rewards.
int opponent;
bool accepted;
char type;
int expiresIn;
string description;
string opponentName;
vector<string> persistentAttribs; // persistentAttributes
void storeCommonAttribs();
int restoreCommonAttribs();
string getOpponentName();
virtual void storeCustomAttribs();
virtual void restoreCustomAttribs();
virtual void randomize();
virtual int computeReward() = 0;
public:
// variable to store and method to obtain names of AI decks
//!! Todo: This should _really_ be handled elsewhere (dedicated class?)
static vector<string> sAIDeckNames;
static void LoadAIDeckNames();
static int getAIDeckCount();
static string getAIDeckName(int id);
// End of AI deck buffering code
Task(char _type = ' ');
virtual ~Task(){};
static Task* createFromStr(const string params, bool rand = false);
virtual string toString();
string getDesc();
virtual string createDesc() = 0;
virtual string getShortDesc() = 0;
int getExpiration();
int getReward();
virtual bool isDone(GameObserver* observer, GameApp * _app) = 0;
bool isExpired();
void setExpiration(int _expiresIn);
void passOneDay();
};
class TaskList
{
protected:
string fileName;
float vPos;
OutQuadEasing vPosInEasing;
InQuadEasing vPosOutEasing;
int mState;
JQuad * mBg[9];
JTexture * mBgTex;
float sH, sW;
public:
vector<Task*> tasks;
enum
{
TASKS_IN,
TASKS_ACTIVE,
TASKS_OUT,
TASKS_INACTIVE,
};
TaskList(string _fileName = "");
int load(string _fileName = "");
int save(string _fileName = "");
int getState()
{
return mState;
}
void addTask(string params, bool rand = false);
void addTask(Task *task);
void addRandomTask(int diff = 100);
void removeTask(Task *task);
void passOneDay();
void getDoneTasks(GameObserver* observer, GameApp * _app, vector<Task*>* result);
int getTaskCount();
void Start();
void End();
void Update(float dt);
void Render();
//!!virtual void ButtonPressed(int controllerId, int controlId);
~TaskList();
};
class TaskWinAgainst: public Task
{
protected:
virtual int computeReward();
public:
TaskWinAgainst(int _opponent = 0);
virtual string createDesc();
virtual string getShortDesc();
virtual bool isDone(GameObserver* observer, GameApp * _app);
};
class TaskSlaughter: public TaskWinAgainst
{
protected:
int targetLife;
virtual int computeReward();
public:
TaskSlaughter(int _opponent = 0, int _targetLife = -15);
virtual string createDesc();
virtual string getShortDesc();
virtual bool isDone(GameObserver* observer, GameApp * _app);
virtual void storeCustomAttribs();
virtual void restoreCustomAttribs();
virtual void randomize();
};
class TaskDelay: public TaskWinAgainst
{
protected:
int turn;
bool afterTurn;
virtual int computeReward();
public:
TaskDelay(int _opponent = 0, int _turn = 20);
virtual string createDesc();
virtual string getShortDesc();
virtual bool isDone(GameObserver* observer, GameApp * _app);
virtual void storeCustomAttribs();
virtual void restoreCustomAttribs();
virtual void randomize();
};
class TaskImmortal: public Task
{
protected:
int targetLife;
int level;
virtual int computeReward();
public:
TaskImmortal(int _targetLife = 20);
virtual string createDesc();
virtual string getShortDesc();
virtual bool isDone(GameObserver* observer, GameApp * _app);
virtual void storeCustomAttribs();
virtual void restoreCustomAttribs();
virtual void randomize();
};
class TaskMassiveBurial: public Task
{
protected:
int color;
int bodyCount;
virtual int computeReward();
public:
TaskMassiveBurial(int _color = 0, int _bodyCount = 0);
virtual string createDesc();
virtual string getShortDesc();
virtual bool isDone(GameObserver* observer, GameApp * _app);
virtual void storeCustomAttribs();
virtual void restoreCustomAttribs();
virtual void randomize();
};
class TaskWisdom: public Task
{
protected:
int color;
int cardCount;
virtual int computeReward();
public:
TaskWisdom(int _color = 0, int _cardCount = 0);
virtual string createDesc();
virtual string getShortDesc();
virtual bool isDone(GameObserver* observer, GameApp * _app);
virtual void storeCustomAttribs();
virtual void restoreCustomAttribs();
virtual void randomize();
};
class TaskPacifism: public Task
{
protected:
virtual int computeReward();
int lifeSlashCardMin;
public:
TaskPacifism(int _lifeSlashCardMin = 0);
virtual string createDesc();
virtual string getShortDesc();
virtual bool isDone(GameObserver* observer, GameApp * _app);
virtual void storeCustomAttribs();
virtual void restoreCustomAttribs();
virtual void randomize();
};
/* ------------ Task template ------------
class TaskXX : public Task {
protected:
virtual int computeReward();
public:
TaskXX();
virtual string createDesc();
virtual string getShortDesc();
virtual bool isDone(GameObserver* observer, GameApp * _app);
virtual void storeCustomAttribs();
virtual void restoreCustomAttribs();
virtual void randomize();
};
*/
#endif