// Includes
#Include "TextLib" as TL
#Include "MathLib" as ML

#Const C_AngelScript_True "true"

#Struct K_CarInput {
	Real Steering;
	Real Brake;
	Boolean Accelerate;
}

Void ApplyInputs(K_CarInput _Input) {
	foreach (Player in Players) {
		SetPlayerVehicle_ControlledByMode(Player, True);
		SetPlayerVehicle_MaxSpeedValue(Player, 1000.);
		SetPlayerVehicle_SteerValue(Player, _Input.Steering);
		SetPlayerVehicle_BrakeValue(Player, _Input.Brake);
		SetPlayerVehicle_Accelerate(Player, _Input.Accelerate);
	}
}

Void Yield() {
	foreach (Event in UIManager.PendingEvents) {
		if (Event.CustomEventType == "TwitchPlays.Input") {
			declare Inputs = K_CarInput{};
			Inputs.Steering = TL::ToReal(Event.CustomEventData[0]);
			Inputs.Brake = TL::ToReal(Event.CustomEventData[1]);
			Inputs.Accelerate = (Event.CustomEventData[2] == C_AngelScript_True);
			ApplyInputs(Inputs);
		}

		else if (Event.CustomEventType == "TwitchPlays.Respawn") {
			if (Event.UI != Null) {
				if (GetPlayer(Event.UI).SpawnStatus == CSmPlayer::ESpawnStatus::Spawned) RespawnPlayer(GetPlayer(Event.UI));
			}
		}
	}
}