@Override
	public void run() {
		System.out.println("Starting game");
		running = true;
		sendEvent(new GameStartEvent(this));
		beginGameCall();
		while(running) {
			if(actionQueue.size() == 0 && running) {
				synchronized(this) { 
					try { wait(); } catch (InterruptedException e) {} 
				}
			} else if(running) {
				T2<Actionable,Double> args = actionQueue.poll();
				beforeActionCall(args.a1());
				gameTime = args.a2();
				args.a1().takeAction();
				sendEvent(new TimerEvent(this, gameTime));
				afterActionCall(args.a1());
			}
		}
	}