#ifndef __RLGLUE_CONTROLLER_HPP__
#define __RLGLUE_CONTROLLER_HPP__
#include "ale_controller.hpp"
#include "../common/Constants.h"
#ifdef __USE_RLGLUE
#include <rlglue/Environment_common.h>
#include <rlglue/network/RL_network.h>
namespace ale {
class RLGlueController : public ALEController {
public:
RLGlueController(OSystem* osystem);
virtual ~RLGlueController();
virtual void run();
private:
void initRLGlue();
void endRLGlue();
void rlGlueLoop();
bool isDone();
void envInit();
void envStart();
void envStep();
void envCleanup();
void envMessage();
reward_observation_terminal_t
constructRewardObservationTerminal(reward_t reward);
void filterActions(Action& player_a_action, Action& player_b_action);
private:
rlBuffer m_buffer;
int m_connection;
observation_t m_observation;
action_t m_rlglue_action;
int m_max_num_frames;
ActionVect available_actions;
bool m_send_rgb;
};
}
#else
namespace ale {
class RLGlueController : public ALEController {
public:
RLGlueController(OSystem* osystem);
virtual ~RLGlueController() {}
virtual void run();
};
}
#endif
#endif