Player controller

classDiagram class ACommonPlayerController{ } class AController{ } class ALyraPlayerController{ #TObjectPtr~APlayerState~ LastSeenPlayerState } class ALyraPlayerState{ } class AModularPlayerState{ } class APlayerController{ } class APlayerState{ } class AModularPlayerController{ } class UCommonLocalPlayer{ } class ULocalPlayer{ } class ULyraLocalPlayer{ -TWeakObjectPtr~APlayerController~ LastBoundPC +SpawnPlayActor(FString URL, FString OutError, UWorld InWorld) bool +SwitchController(APlayerController PC) } ACommonPlayerController --|> AModularPlayerController ALyraPlayerController --|> ACommonPlayerController ALyraPlayerState --|> AModularPlayerState AModularPlayerController --|> APlayerController AModularPlayerState --|> APlayerState APlayerController --|> AController UCommonLocalPlayer --|> ULocalPlayer ULyraLocalPlayer --|> UCommonLocalPlayer ULyraLocalPlayer "0..*" --* "1" APlayerController ALyraPlayerController "1" --* "1" APlayerState

Player start

classDiagram class ACommonPlayerController{ } class AController{ } class ALyraPlayerController{ } class ALyraPlayerStart{ #TObjectPtr~AController~ ClaimingController +IsClaimed() bool +TryClaim(AController OccupyingController) bool } class APlayerController{ } class AModularPlayerController{ } class ULyraPlayerSpawningManagerComponent{ TArray~TWekObjectPtr~ALyraPlayerStart~~ CachedPlayerStarts -ChoosePlayerStart(AController Player) AActor -ControllerCanRestart(AController Player) bool -FinishRestartPlayer(AController NewPlayer, FRotator StartRotation) } ACommonPlayerController --|> AModularPlayerController ALyraPlayerController --|> ACommonPlayerController AModularPlayerController --|> APlayerController APlayerController --|> AController ALyraPlayerStart "1" --* "1" AController ULyraPlayerSpawningManagerComponent "1" --* "0..*" ALyraPlayerStart

Lyra Player Bot Controller

classDiagram class AAIController{ } class AController{ } class ALyraPlayerBotController{ -TObjectPtr~APlayerState~ LastSeenPlayerState } class AModularAIController{ } class APlayerState{ } AAIController --|> AController ALyraPlayerBotController --|> AModularAIController AModularAIController --|> AAIController ALyraPlayerBotController "1" --* "1" APlayerState