///Generic AI function utilising Newton's First Law
class AI {
public:
///Every AI needs a Clone function
AI * Clone()const;
/** this function can be overwritten by the subclass's function */
virtual void Execute(class Spectre *parent);
virtual ~AI(){}
};
class VirtualSocket {
class Packet {
char data [2048];///< FIXME not quite so simple
};
std::vector<Packet> inputQueue;
public:
void write (const Packet &p);
Packet *read ();//something like this
~VirtualSocket(){}
};
///Networked AI, communicating over a socket,
class NetworkAI:public AI {
protected:
VirtualSocket sockt;///< Allows This to write and read from the server as if it were the only thing listening
public:
NetworkAI (VirtualSocket vs);
AI * Clone ()const {return new NetworkAI(sockt);}
virtual void Execute (class Spectre * parent);
virtual ~NetworkAI(){}
};
///The AI we're used to.. the one that defends flags and blasts people
class ComputerAI: public AI {
int mode;
public:
AI * Clone ()const {return new ComputerAI;}
virtual void Execute (class Spectre * parent);
virtual ~ComputerAI(){}
};
///Extracomputer-AI pilots utilising methods such as keyboard or joystick I/O
class HumanAI: public AI {
public:
AI * Clone ()const {return new HumanAI;}
virtual void Execute (class Spectre * parent);
virtual ~HumanAI(){}
};