#pragma once

class ClientState;

class Connecting;
class Connected;
class Disconnected;

#include "Client.h"

class ClientState
{
  public:
    virtual void update(unsigned int delta) = 0;
};

class Connecting : public ClientState {
  public:
    Connecting(Client *client) : m_client(client) {}

    virtual void update(unsigned int delta) override;

  private:
    Client *m_client;
};

class Connected : public ClientState
{
  public:
    Connected(Client *client) : m_client(client) {}

    virtual void update(unsigned int delta) override;

  private:
    Client *m_client;
};

class Disconnected : public ClientState
{
  public:
    Disconnected(Client *client) : m_client(client) {}

    virtual void update(unsigned int delta) override;

  private:
    Client *m_client;
};
