public StartPanel(EngineSettings engineSettings)
	{
		super(engineSettings);
		running = false;
		this.engineSettings = engineSettings;
		
		menuItems = new ArrayList<ClickableString>();
		
		// Secret class! Uses Secret class to check for
		// the secret code being entered. If it is we run
		// the engine.
		this.addKeyListener(new Secret()
		{
			@Override
			public void runEngine()
			{
				if(!running)
				{
					new Thread(getOutsideReference()).start();
					running = true;
				}
			}
		});
		
		// Simply for demonstration, still lots of refactoring to do.
		start = new ClickableString("Start", 3, MENU_FONT_SIZE, this.getFontMetrics(menuFont), stringBGColor, stringFGColor)
		{
			@Override
			public void stringEntered()
			{
				repaint();
			}

			@Override
			public void stringClicked()
			{
				Runnable changeEngine = new Runnable()
				{
					@Override
					public void run()
					{
						// We remove the old JPanel and replace it with the engine JPanel.
						Engine engine = new Engine(getOutsideReference().engineSettings);
						getOutsideReference().getParent().add(engine);
						getOutsideReference().getParent().remove(getOutsideReference());
						new Thread(engine).start();
					}
				};
				
				if(EventQueue.isDispatchThread())
					changeEngine.run();
				
				else
					EventQueue.invokeLater(changeEngine);
			}
		};
		
		options = new ClickableString("Options", 3, MENU_FONT_SIZE * 2 + SPACE_SIZE, this.getFontMetrics(menuFont), stringBGColor, stringFGColor)
		{
			@Override
			public void stringEntered()
			{
				repaint();
			}

			@Override
			public void stringClicked()
			{
				getOutsideReference().engineSettings = GetEngineSettingsFromPanel.getEngineSettings(getOutsideReference().engineSettings);
			}
		};
		
		menuItems.add(start);
		menuItems.add(options);
		
		menuItems.forEach(c -> {
			addMouseMotionListener(c);
			addMouseListener(c);
		});
		
		// Allow for secret code to be typed.
		setFocusable(true);
		requestFocus();
		setVisible(true);
	}