#include "ale_controller.hpp"
#include "../games/Roms.hpp"
#include "../common/display_screen.h"
#include "../common/Log.hpp"
namespace ale {
ALEController::ALEController(OSystem* osystem)
: m_osystem(osystem), m_settings(buildRomRLWrapper(
m_osystem->settings().getString("rom_file"))),
m_environment(m_osystem, m_settings.get()) {
if (m_settings.get() == NULL) {
ale::Logger::Warning << "Unsupported ROM file: " << std::endl;
exit(1);
} else {
m_environment.reset();
}
}
void ALEController::display() {
DisplayScreen* display = m_osystem->p_display_screen;
if (display) {
display->display_screen();
while (display->manual_control_engaged()) {
Action user_action = display->getUserAction();
applyActions(user_action, PLAYER_B_NOOP);
display->display_screen();
}
}
}
reward_t ALEController::applyActions(Action player_a, Action player_b) {
reward_t sum_rewards = 0;
switch (player_a) {
case LOAD_STATE: m_environment.load();
break;
case SAVE_STATE: m_environment.save();
break;
case SYSTEM_RESET:
m_environment.reset();
break;
default:
sum_rewards = m_environment.act(player_a, player_b);
break;
}
return sum_rewards;
}
}