| Die in diesem Dokument und im Plugin vorgestellten Beispiele wurden in Unreal Engine 4.14, 4.15, 4.18 und 4.20+ erstellt. Sie funktionieren möglicherweise nicht korrekt mit anderen Versionen der Unreal Engine. |
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "ForceSeatMI" });
| Das ForceSeatMI-Plugin verwendet eine DLL, die als Teil der ForceSeatPM-Software installiert wird. Stelle sicher, dass ForceSeatPM auf deinem Computer installiert ist. |
IForceSeatMI_API* m_api;
m_api(&IForceSeatMI::Get().GetAPI())
m_api->BeginMotionControl();
m_api->SendTopTablePosLog(...); m_api->SendTopTablePosPhy(...); m_api->SendTopTableMatrixPhy(...);
m_api->EndMotionControl();

ATableLogPos_UnrealPawn::ATableLogPos_UnrealPawn() : CurrentDrawingHeave(0) , CurrentDrawingPitch(0) , CurrentDrawingRoll(0) { // ... generierter UE4-Code zur besseren Übersichtlichkeit entfernt // ForceSeatMI - BEGIN memset(&PlatformPosition, 0, sizeof(PlatformPosition)); PlatformPosition.structSize = sizeof(PlatformPosition); // Das Demoprogramm kann Pause, Position und Geschwindigkeitsbegrenzung bereitstellen PlatformPosition.maxSpeed = PLATFORM_MAX_SPEED; PlatformPosition.mask = FSMI_POS_BIT_STATE | FSMI_POS_BIT_POSITION | FSMI_POS_BIT_MAX_SPEED; // ForceSeatMI - END } void ATableLogPos_UnrealPawn::Tick(float DeltaTime) { Super::Tick(DeltaTime); // ... generierter UE4-Code zur besseren Übersichtlichkeit entfernt // ForceSeatMI - BEGIN SendCoordinatesToPlatform(); // ForceSeatMI - END } void ATableLogPos_UnrealPawn::BeginPlay() { Super::BeginPlay(); // ForceSeatMI - BEGIN if (FSMI_True == IForceSeatMI::Get().GetAPI().BeginMotionControl()) { SendCoordinatesToPlatform(); } // ForceSeatMI - END // ... generierter UE4-Code zur besseren Übersichtlichkeit entfernt } void ATableLogPos_UnrealPawn::EndPlay(const EEndPlayReason::Type EndPlayReason) { Super::EndPlay(EndPlayReason); // ForceSeatMI - BEGIN IForceSeatMI::Get().GetAPI().EndMotionControl(); // ForceSeatMI - END } void ATableLogPos_UnrealPawn::SendCoordinatesToPlatform() { // ForceSeatMI - BEGIN PlatformPosition.state = FSMI_STATE_NO_PAUSE; PlatformPosition.roll = static_cast(FMath::Clamp(CurrentDrawingRoll / DRAWING_ROLL_MAX * PLATFORM_POSITION_LOGIC_MAX, PLATFORM_POSITION_LOGIC_MIN, PLATFORM_POSITION_LOGIC_MAX)); PlatformPosition.pitch = static_cast(FMath::Clamp(CurrentDrawingPitch / DRAWING_PITCH_MAX * PLATFORM_POSITION_LOGIC_MAX, PLATFORM_POSITION_LOGIC_MIN, PLATFORM_POSITION_LOGIC_MAX)); PlatformPosition.heave = static_cast(FMath::Clamp(CurrentDrawingHeave / DRAWING_HEAVE_MAX * PLATFORM_POSITION_LOGIC_MAX, PLATFORM_POSITION_LOGIC_MIN, PLATFORM_POSITION_LOGIC_MAX)); IForceSeatMI::Get().GetAPI().SendTopTablePosLog(&PlatformPosition); // ForceSeatMI - END }
IForceSeatMI_VehicleTelemetry* m_veh;
m_veh(&IForceSeatMI::Get().GetVehicleTelemetry())
m_veh->Begin();();
m_veh->Tick(...);
m_veh->End();

void ATelemetry_Veh_UnrealPawn::Tick(float Delta) { Super::Tick(Delta); // ... generierter UE4-Code zur besseren Übersichtlichkeit entfernt // ForceSeatMI - BEGIN IForceSeatMI::Get().GetVehicleTelemetry().Tick(*this, *GetVehicleMovement(), Delta, false/* keine Pause */); // ForceSeatMI - END } void ATelemetry_Veh_UnrealPawn::BeginPlay() { Super::BeginPlay(); // ForceSeatMI - BEGIN IForceSeatMI::Get().GetVehicleTelemetry().Begin(); // ForceSeatMI - END }
IForceSeatMI_PlaneTelemetry* m_fly;
m_fly(&IForceSeatMI::Get().GetPlaneTelemetry())
m_fly->Begin();();
m_fly->Tick(...);
m_fly->End();

void ATelemetry_Fly_UnrealPawn::Tick(float DeltaSeconds) { // ... generierter UE4-Code zur besseren Übersichtlichkeit entfernt / Rufe eine beliebige Tick-Implementierung der Klasse der Eltern auf Super::Tick(DeltaSeconds); // ForceSeatMI - BEGIN IForceSeatMI::Get().GetPlaneTelemetry().Tick(*this, DeltaSeconds, false/* keine Pause */); // ForceSeatMI - END } void ATelemetry_Fly_UnrealPawn::BeginPlay() { Super::BeginPlay(); // ForceSeatMI - BEGIN IForceSeatMI::Get().GetPlaneTelemetry().Begin(); // ForceSeatMI - END }
