/*
 * Created: 3.3.2007
 * Author: jedi
 */


#include <iostream>
#include <loki/Visitor.h>


using namespace std;
using namespace Loki;


// -- game objects -----------------

class character : public BaseVisitable<>
{
   public:
      LOKI_DEFINE_VISITABLE()
};
class enemy : public character
{
   public:
      LOKI_DEFINE_VISITABLE()
};
class friendly : public character
{
   public:
      LOKI_DEFINE_VISITABLE()
};


// -- game operations (visitors) ---

class next_move :
   public BaseVisitor, public Visitor<friendly>, public Visitor<enemy>
{
   public:
      void Visit(enemy&) {cout << "try to find friendly character" << endl;}
      void Visit(friendly&) {cout << "try to find enemy" << endl;}
};
class die :
   public BaseVisitor, public Visitor<friendly>, public Visitor<enemy>
{
   public:
      void Visit(enemy&) {cout << "enemy died" << endl;}
      void Visit(friendly&) {cout << "friendly died" << endl;}
};


// -- main --------------------------

int main()
{
   friendly f;
   enemy e;

   next_move m;
   f.Accept(m);
   e.Accept(m);

   die d;
   f.Accept(d);
   e.Accept(d);

   return 0;
}