// Path: src/main/java/ch/idsia/benchmark/mario/engine/GlobalOptions.java
// public abstract class GlobalOptions
// {
// public static final int primaryVerionUID = 0;
// public static final int minorVerionUID = 1;
// public static final int minorSubVerionID = 9;
// 
// public static boolean areLabels = false;
// public static boolean isCameraCenteredOnMario = false;
// public static Integer FPS = 24;
// public static int MaxFPS = 100;
// public static boolean areFrozenCreatures = false;
// 
// public static boolean isVisualization = true;
// public static boolean isGameplayStopped = false;
// public static boolean isFly = false;
// 
// private static GameViewer GameViewer = null;
// //    public static boolean isTimer = true;
// 
// public static int mariosecondMultiplier = 15;
// 
// public static boolean isPowerRestoration;
// 
// // required for rendering grid in ch/idsia/benchmark/mario/engine/sprites/Sprite.java
// public static int receptiveFieldWidth = 19;
// public static int receptiveFieldHeight = 19;
// public static int marioEgoCol = 9;
// public static int marioEgoRow = 9;
// 
// private static MarioVisualComponent marioVisualComponent;
// public static int VISUAL_COMPONENT_WIDTH = 320;
// public static int VISUAL_COMPONENT_HEIGHT = 240;
// 
// public static boolean isShowReceptiveField = false;
// public static boolean isScale2x = false;
// public static boolean isRecording = false;
// public static boolean isReplaying = false;
// 
// public static int getPrimaryVersionUID()
// {
//     return primaryVerionUID;
// }
// 
// public static int getMinorVersionUID()
// {
//     return minorVerionUID;
// }
// 
// public static int getMinorSubVersionID()
// {
//     return minorSubVerionID;
// }
// 
// public static String getBenchmarkName()
// {
//     return "[~ Mario AI Benchmark ~" + GlobalOptions.getVersionUID() + "]";
// }
// 
// public static String getVersionUID()
// {
//     return " " + getPrimaryVersionUID() + "." + getMinorVersionUID() + "." + getMinorSubVersionID();
// }
// 
// public static void registerMarioVisualComponent(MarioVisualComponent mc)
// {
//     marioVisualComponent = mc;
// }
// 
// public static void registerGameViewer(GameViewer gv)
// {
//     GameViewer = gv;
// }
// 
// public static void AdjustMarioVisualComponentFPS()
// {
//     if (marioVisualComponent != null)
//         marioVisualComponent.adjustFPS();
// }
// 
// public static void gameViewerTick()
// {
//     if (GameViewer != null)
//         GameViewer.tick();
// }
// 
// public static String getDateTime(Long d)
// {
//     final DateFormat dateFormat = (d == null) ? new SimpleDateFormat("yyyy/MM/dd HH:mm:ss:ms") :
//             new SimpleDateFormat("HH:mm:ss:ms");
//     if (d != null)
//         dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
//     final Date date = (d == null) ? new Date() : new Date(d);
//     return dateFormat.format(date);
// }
// 
// final static private DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss");
// 
// public static String getTimeStamp()
// {
//     return dateFormat.format(new Date());
// }
// 
// public static void changeScale2x()
// {
//     if (marioVisualComponent == null)
//         return;
// 
//     isScale2x = !isScale2x;
//     marioVisualComponent.width *= isScale2x ? 2 : 0.5;
//     marioVisualComponent.height *= isScale2x ? 2 : 0.5;
//     marioVisualComponent.changeScale2x();
// }
// }


import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import ch.idsia.agents.Agent;
import ch.idsia.benchmark.mario.engine.GlobalOptions;
import ch.idsia.benchmark.mario.environments.Environment;
{
    // move your coffee away from the keyboard..
    Action = new boolean[16];
}

public void setObservationDetails(final int rfWidth, final int rfHeight, final int egoRow, final int egoCol)
{}

public String getName() { return Name; }

public void setName(String name) { Name = name; }


public void keyPressed(KeyEvent e)
{
    toggleKey(e.getKeyCode(), true);
}

public void keyReleased(KeyEvent e)
{
    toggleKey(e.getKeyCode(), false);
}

private void toggleKey(int keyCode, boolean isPressed)
{
    switch (keyCode)
    {
        //Cheats;
        case KeyEvent.VK_D:
            if (isPressed)
// Path: src/main/java/ch/idsia/benchmark/mario/engine/GlobalOptions.java
// public abstract class GlobalOptions
// {
// public static final int primaryVerionUID = 0;
// public static final int minorVerionUID = 1;
// public static final int minorSubVerionID = 9;
// 
// public static boolean areLabels = false;
// public static boolean isCameraCenteredOnMario = false;
// public static Integer FPS = 24;
// public static int MaxFPS = 100;
// public static boolean areFrozenCreatures = false;
// 
// public static boolean isVisualization = true;
// public static boolean isGameplayStopped = false;
// public static boolean isFly = false;
// 
// private static GameViewer GameViewer = null;
// //    public static boolean isTimer = true;
// 
// public static int mariosecondMultiplier = 15;
// 
// public static boolean isPowerRestoration;
// 
// // required for rendering grid in ch/idsia/benchmark/mario/engine/sprites/Sprite.java
// public static int receptiveFieldWidth = 19;
// public static int receptiveFieldHeight = 19;
// public static int marioEgoCol = 9;
// public static int marioEgoRow = 9;
// 
// private static MarioVisualComponent marioVisualComponent;
// public static int VISUAL_COMPONENT_WIDTH = 320;
// public static int VISUAL_COMPONENT_HEIGHT = 240;
// 
// public static boolean isShowReceptiveField = false;
// public static boolean isScale2x = false;
// public static boolean isRecording = false;
// public static boolean isReplaying = false;
// 
// public static int getPrimaryVersionUID()
// {
//     return primaryVerionUID;
// }
// 
// public static int getMinorVersionUID()
// {
//     return minorVerionUID;
// }
// 
// public static int getMinorSubVersionID()
// {
//     return minorSubVerionID;
// }
// 
// public static String getBenchmarkName()
// {
//     return "[~ Mario AI Benchmark ~" + GlobalOptions.getVersionUID() + "]";
// }
// 
// public static String getVersionUID()
// {
//     return " " + getPrimaryVersionUID() + "." + getMinorVersionUID() + "." + getMinorSubVersionID();
// }
// 
// public static void registerMarioVisualComponent(MarioVisualComponent mc)
// {
//     marioVisualComponent = mc;
// }
// 
// public static void registerGameViewer(GameViewer gv)
// {
//     GameViewer = gv;
// }
// 
// public static void AdjustMarioVisualComponentFPS()
// {
//     if (marioVisualComponent != null)
//         marioVisualComponent.adjustFPS();
// }
// 
// public static void gameViewerTick()
// {
//     if (GameViewer != null)
//         GameViewer.tick();
// }
// 
// public static String getDateTime(Long d)
// {
//     final DateFormat dateFormat = (d == null) ? new SimpleDateFormat("yyyy/MM/dd HH:mm:ss:ms") :
//             new SimpleDateFormat("HH:mm:ss:ms");
//     if (d != null)
//         dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
//     final Date date = (d == null) ? new Date() : new Date(d);
//     return dateFormat.format(date);
// }
// 
// final static private DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss");
// 
// public static String getTimeStamp()
// {
//     return dateFormat.format(new Date());
// }
// 
// public static void changeScale2x()
// {
//     if (marioVisualComponent == null)
//         return;
// 
//     isScale2x = !isScale2x;
//     marioVisualComponent.width *= isScale2x ? 2 : 0.5;
//     marioVisualComponent.height *= isScale2x ? 2 : 0.5;
//     marioVisualComponent.changeScale2x();
// }
// }


// Path: src/main/java/ch/idsia/agents/controllers/human/CheaterKeyboardAgent.java
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import ch.idsia.agents.Agent;
import ch.idsia.benchmark.mario.engine.GlobalOptions;
import ch.idsia.benchmark.mario.environments.Environment;

{
    // move your coffee away from the keyboard..
    Action = new boolean[16];
}

public void setObservationDetails(final int rfWidth, final int rfHeight, final int egoRow, final int egoCol)
{}

public String getName() { return Name; }

public void setName(String name) { Name = name; }


public void keyPressed(KeyEvent e)
{
    toggleKey(e.getKeyCode(), true);
}

public void keyReleased(KeyEvent e)
{
    toggleKey(e.getKeyCode(), false);
}

private void toggleKey(int keyCode, boolean isPressed)
{
    switch (keyCode)
    {
        //Cheats;
        case KeyEvent.VK_D:
            if (isPressed)
                GlobalOptions.gameViewerTick();