public void beginStep() {
		//Behaviors
		float dx = 0, dy = 0, da = 0;
		for(Behavior behavior : emmiterBehaviors) {
			Location loc = behavior.doBehavior(x, y, angle);
			dx += loc.x;
			dy += loc.y;
			da += loc.angle;
		}
		float delta = Game.getDeltaSeconds();
		x += dx * delta;
		y += dy * delta;
		angle += da * delta;
		
		//Parse commands
		String cmd = commands[currentCmd];
		if(cmd.startsWith("FIRE")) {
			fire();
			nextCmd();
		} else if(timer < 0 && cmd.startsWith("WAIT")) {
			float time = Float.parseFloat(cmd.split(" ")[1]);
			timer = time;
		} else if(cmd.startsWith("LOOP")) {
			String[] split = cmd.split(" ");
			loopCount++;
			if(loopCount >= Integer.parseInt(split[2])) {
				nextCmd();
				loopCount = 0;
			} else {
				currentCmd -= Integer.parseInt(split[1]);
			}
		}
		
		//Timer
		if(timer > 0) {
			timer -= Game.getDeltaSeconds();
			if(timer < 0) {
				nextCmd();
			}
		}
	}