Files
integration/Source/Integration/LuprexGameModeBase.h

128 lines
4.3 KiB
C
Raw Normal View History

2023-06-08 17:10:14 -04:00
// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "Engine/HitResult.h"
2023-06-08 17:10:14 -04:00
#include "GameFramework/GameModeBase.h"
#include "LuprexSockets.h"
#include "BreakToDebugger.h"
#include "LuprexGameModeBase.generated.h"
2023-06-08 17:10:14 -04:00
/**
2026-02-25 14:48:14 -05:00
*
2023-06-08 17:10:14 -04:00
*/
2025-04-07 16:48:27 -04:00
UCLASS(BlueprintType)
2026-02-27 17:49:29 -05:00
class INTEGRATION_API ALuprexGameModeBase : public AGameModeBase
2023-06-08 17:10:14 -04:00
{
GENERATED_BODY()
public:
ALuprexGameModeBase();
~ALuprexGameModeBase();
2023-06-08 17:10:14 -04:00
virtual void BeginPlay() override;
2023-06-09 16:47:46 -04:00
virtual void EndPlay(const EEndPlayReason::Type EndPlayReason);
2023-06-08 17:10:14 -04:00
2023-06-23 16:27:23 -04:00
// Delete all the state created in BeginPlay. That
// includes: the Luprex engine, the thread, and the socket state.
void ResetToInitialState();
// Initialize the Luprex DLL, and do other global initialization.
void InitializeGlobalState();
2026-02-09 13:54:00 -05:00
// Send prints into Unreal, for display on the virtual console.
UFUNCTION(BlueprintImplementableEvent, Category = "Luprex|Miscellaneous")
2025-12-09 02:42:13 -05:00
void ConsoleAddOutput(const FString& text);
2023-06-08 17:10:14 -04:00
UFUNCTION(BlueprintCallable, Category = "Luprex|Miscellaneous")
int64 GetPlayerId();
UFUNCTION(BlueprintCallable, meta = (WorldContext = "Context"), Category = "Luprex|Look-At Detection")
2025-04-07 16:48:27 -04:00
static void SetLookAt(const UObject *Context, const FHitResult &HitResult);
UFUNCTION(BlueprintPure, meta = (WorldContext = "Context"),Category = "Luprex|Look-At Detection")
static const FHitResult &GetLookAt(const UObject *Context) { return FromContext(Context)->CurrentLookAt; }
UFUNCTION(BlueprintPure, meta = (WorldContext = "Context"),Category = "Luprex|Look-At Detection")
static const AActor *GetLookAtActor(const UObject *Context) { return FromContext(Context)->CurrentLookAt.GetActor(); }
2025-04-07 16:48:27 -04:00
UFUNCTION(BlueprintPure, meta = (WorldContext = "Context"),Category = "Luprex|Look-At Detection")
static FVector2D GetLookAtPixel(const UObject *Context);
UFUNCTION(BlueprintCallable, meta = (WorldContext = "Context"), Category = "Luprex|Look-At Detection")
static void SetLookAtChanged(const UObject* Context);
2025-04-07 16:48:27 -04:00
//
// Look-At Related Events
//
UFUNCTION(BlueprintImplementableEvent, Category = "Luprex|Look-At Detection")
void CalculateLookAt(APlayerController *PlayerController);
UFUNCTION(BlueprintImplementableEvent, Category = "Luprex|Look-At Detection")
void LookAtChanged();
2024-09-17 17:22:47 -04:00
2023-06-23 12:45:23 -04:00
// Transfer console output from the Luprex engine to unreal.
void UpdateConsoleOutput();
// Update the tangibles according to what Luprex tells us.
// This also includes calling 'AnimationQueueChanged' on all
// tangibles that have been changed.
void UpdateTangibles();
// Look for a tangible whose ID is equal to the current actor ID.
// Tell the player controller to possess that tangible.
void UpdatePossessedTangible();
// Call 'CalculateLookAt', but only if everything is valid.
// It is up to the blueprint code to actually determine what we're looking at.
void UpdateLookAt();
2026-02-27 17:49:29 -05:00
// If the engine wants a new copy of the lua source code,
// provide it.
void UpdateLuaSourceCode();
// Update Sockets and Lua. Feeds socket data into the luprex engine,
// and also calls play_update, the main Lua update function that causes
// Luprex to execute the majority of all the Lua code that needs processing.
void UpdateSocketsAndLua();
2023-06-23 12:45:23 -04:00
2026-02-27 17:49:29 -05:00
// Post-tick function.
void OnWorldPostActorTick(UWorld* InWorld, ELevelTick InLevelTick, float InDeltaSeconds);
// Get the current Luprex Game Mode Base, given a Context object.
static ALuprexGameModeBase *FromContext(const UObject *Context);
// The actor that the player is looking at, current frame.
2024-09-17 17:22:47 -04:00
UPROPERTY()
FHitResult CurrentLookAt;
2024-09-17 17:22:47 -04:00
bool MustCallLookAtChanged = false;
// The sensitivity level at which a log message triggers a debugger breakpoint.
UPROPERTY(EditAnywhere, Category="Debugging Tools")
ElxBreakToDebuggerThreshold BreakToDebuggerLogVerbosity;
2026-02-27 17:49:29 -05:00
// Luprex socket system.
2023-09-15 13:28:18 -04:00
TUniquePtr<FlxSockets> Sockets;
2023-06-23 16:27:23 -04:00
// True if 'BeginPlay' has been successfully completed.
bool Playing = false;
// This is always true unless you use the debugger to set it to false.
bool TickEnabled = true;
// Current Player ID
int64 PlayerId = 0;
// Amount of elapsed time since BeginPlay.
float EngineSeconds = 0.0f;
2023-06-23 12:45:23 -04:00
2026-02-27 17:49:29 -05:00
// This allows us to post-tick.
FDelegateHandle OnWorldPostActorTickHandle;
// The device that implements BreakToDebuggerLogVerbosity, above.
TUniquePtr<FlxBreakToDebuggerOutputDevice> BreakToDebuggerLogVerbosityDevice;
2023-06-08 17:10:14 -04:00
};