/*
 * Copyright (C) 2012-2026 MotionSystems
 *
 * This file is part of ForceSeatMI SDK.
 *
 * www.motionsystems.eu
 *
 */

#pragma once

// Disable PhysX deprecation related warnings (check ChaosVehiclePhysics Plugin)
#pragma warning(disable : 4996)

#include "CoreMinimal.h"
#include "Components/ActorComponent.h"
#include "WheeledVehicle.h"

#include "ForceSeatMIPhysXVehicle_ControllerCore.h"

#include "ForceSeatMIPhysXVehicle_Controller.generated.h"

UCLASS( ClassGroup=(ForceSeatMIPhysXVehicle), meta=(BlueprintSpawnableComponent) )
class UForceSeatMIPhysXVehicle_Controller : public UActorComponent
{
	GENERATED_BODY()
public:
	UForceSeatMIPhysXVehicle_Controller();
	virtual ~UForceSeatMIPhysXVehicle_Controller();

public:
	virtual void TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override;

	UFUNCTION(BlueprintCallable, Category = "ForceSeatMIPhysXVehicle")
	void SetVehicleObject(AWheeledVehicle* Input);

	UFUNCTION(BlueprintCallable, Category = "ForceSeatMIPhysXVehicle")
	void SetAdditionalProperties(float SideSlip, float RoadHarshness, float G);

	UFUNCTION(BlueprintCallable, Category = "ForceSeatMIPhysXVehicle")
	void SetUserAux(float aux1, float aux2, float aux3, float aux4, float aux5, float aux6, float aux7, float aux8);

	UFUNCTION(BlueprintCallable, Category = "ForceSeatMIPhysXVehicle")
	void Pause(bool paused);

protected:
	virtual void BeginPlay() override;
	virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override;

private:
	ForceSeatMIPhysXVehicle_ControllerCore* m_controller;
	AWheeledVehicle*                        m_source;
};
