Space Plunder
Loading...
Searching...
No Matches
ATerminal Class Reference

#include <Terminal.h>

Inheritance diagram for ATerminal:
AInteractableSwitch AInteractableActor AActorBase IBaseInterface ISaveLoad

Public Member Functions

 ATerminal ()
 
virtual void ResetTerminal ()
 
void LockTerminal (const float LockoutTime)
 
void UpdateCaller () const
 
- Public Member Functions inherited from AInteractableSwitch
 AInteractableSwitch ()
 
virtual void ReceiveToggleSwitch (AActor *Caller, const bool bOn) override
 
- Public Member Functions inherited from AInteractableActor
 AInteractableActor ()
 
virtual void ReceiveOnEndInteract (AActor *Caller)
 
- Public Member Functions inherited from AActorBase
 AActorBase ()
 
virtual bool SaveGame () override
 
virtual bool LoadGame () override
 
void SetGravityEnabledEvent (const bool bValue)
 

Protected Member Functions

virtual void BeginPlay () override
 
virtual void ReceiveOnInteract (AActor *Caller, const EInteractionType InteractionType) override
 
virtual void ReceiveStartFocus (AActor *Caller) override
 
virtual void ReceiveEndFocus (AActor *Caller) override
 
virtual void ReceiveOnOverlap (AActor *Caller) override
 
virtual void ReceiveOnEndOverlap (AActor *Caller) override
 
- Protected Member Functions inherited from AInteractableActor
virtual void Tick (float DeltaTime) override
 
virtual void SetMeshOutline (const bool bValue)
 
- Protected Member Functions inherited from AActorBase
void LogDebugError (const FString &Message) const
 
void LogDebugError (const FString &Message, const int32 Value) const
 
void LogDebugError (const FString &Message, const float Value) const
 
void LogDebugWarning (const FString &Message) const
 
void LogDebugWarning (const FString &Message, const int32 Value) const
 
void LogDebugWarning (const FString &Message, const float Value) const
 
void LogDebugMessage (const FString &Message, const bool bWarning=false, const bool bError=false) const
 
void LogDebugMessage (const FString &Message, const int32 Value, const bool bWarning=false, const bool bError=false) const
 
void LogDebugMessage (const FString &Message, const float Value, const bool bWarning=false, const bool bError=false) const
 
void LogDebugMessage (const FString &Message, const bool bValue, const bool bWarning, const bool bError) const
 
void LogOnScreenMessage (const int32 Key, const FString &Message, FColor Color=FColor::Green) const
 
void SetCategoryName (const FLogCategoryBase &Category)
 

Protected Attributes

UStaticMeshComponent * MeshComponent
 
UBoxComponent * BoxComponent
 
bool bInUse = false
 
AActor * CurrentCaller
 
UUserWidget * HackingWidget = nullptr
 
bool bHacked = false
 
- Protected Attributes inherited from AInteractableSwitch
TArray< AActor * > ActorsControlledBySwitch
 
- Protected Attributes inherited from AInteractableActor
class UInteractableActorComponent * InteractableActorComponent
 
class UAudioReactionComponent * AudioReactionComponent
 
class UAIPerceptionStimuliSourceComponent * PerceptionStimuliComponent
 
- Protected Attributes inherited from AActorBase
FString DisplayName = "Display Name"
 
bool bDebuggingMode = false
 

Private Member Functions

void SetHacked ()
 
void DelayedPress ()
 

Private Attributes

TSubclassOf< UUserWidget > HackingWidgetClass
 
IMiniGameMiniGame
 
FTimerHandle LockedTimerHandle
 
FTimerHandle RoundTimerHandle
 

Additional Inherited Members

- Public Attributes inherited from AInteractableSwitch
bool bSwitchOn = false
 

Constructor & Destructor Documentation

◆ ATerminal()

ATerminal::ATerminal ( )
12{
13 MeshComponent = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Static Mesh"));
14 RootComponent = MeshComponent;
15 BoxComponent = CreateDefaultSubobject<UBoxComponent>(TEXT("Box Component"));
16 BoxComponent->SetupAttachment(MeshComponent);
18 FInteractionType HackType;
19 HackType.bAvailable = false;
21 InteractableActorComponent->InteractionData.InteractionTypes.Add(HackType);
22 HackingWidgetClass = UBaseHelpersBPLib::GetDefaultWidgetBPClass("/Interaction/Widgets/MiniGames/WBP_Hacking");
23}
@ Use
Definition InteractionComponent.cpp:798
class UInteractableActorComponent * InteractableActorComponent
Definition InteractableActor.h:63
UStaticMeshComponent * MeshComponent
Definition Terminal.h:40
UBoxComponent * BoxComponent
Definition Terminal.h:42
TSubclassOf< UUserWidget > HackingWidgetClass
Definition Terminal.h:64
static TSubclassOf< UUserWidget > GetDefaultWidgetBPClass(const FString &Location)
Definition BaseHelpersBPLib.cpp:227
Definition BaseData.h:420
Definition BaseData.h:333
bool bAvailable
Definition BaseData.h:341
EInteractionType InteractionType
Definition BaseData.h:337

Member Function Documentation

◆ BeginPlay()

void ATerminal::BeginPlay ( )
overrideprotectedvirtual

Reimplemented from AInteractableSwitch.

27{
28 Super::BeginPlay();
29
30}

◆ DelayedPress()

void ATerminal::DelayedPress ( )
private
218{
219 // if(MiniGame == nullptr){LogMissingPointer("MiniGame");return;}
220 // const EMiniGameStatus MiniGameStatus = MiniGame->GetResult();
221 // IPlayerControllerInterface* PlayerController = Cast<IPlayerControllerInterface>(CurrentCaller->GetInstigatorController());
222 // GetWorld()->GetTimerManager().ClearTimer(RoundTimerHandle);
223 // switch (MiniGameStatus) {
224 // case InProgress:
225 // GetWorld()->GetTimerManager().SetTimer(RoundTimerHandle, this, &ATerminal::DelayedPress,MiniGame->GetRoundTime());
226 // break;
227 // case Passed:
228 // //@TODO could have optional wait time
229 // break;
230 // case Complete:
231 // if(PlayerController != nullptr)
232 // {
233 // PlayerController->SetCharacterMode(FGameplayTag(CharacterModeTags::Default));
234 // }
235 // SetHacked();
236 // break;
237 // case Failed:
238 // if(PlayerController != nullptr)
239 // {
240 // PlayerController->SetCharacterMode(FGameplayTag(CharacterModeTags::Default));
241 // }
242 // LockTerminal(MiniGame->GetRetryDelay());
243 // break;
244 // }
245}

◆ LockTerminal()

void ATerminal::LockTerminal ( const float LockoutTime)
270{
271 if(InteractableActorComponent != nullptr)
272 {
273 InteractableActorComponent->SetInteractionHidden(EInteractionType::Use, true);
274 }
275 if(LockoutTime < 0.0f)
276 {
277 return;
278 }
279 GetWorld()->GetTimerManager().SetTimer(LockedTimerHandle, this, &ATerminal::ResetTerminal, LockoutTime);
280}
virtual void ResetTerminal()
Definition Terminal.cpp:248
FTimerHandle LockedTimerHandle
Definition Terminal.h:67

◆ ReceiveEndFocus()

void ATerminal::ReceiveEndFocus ( AActor * Caller)
overrideprotectedvirtual

Reimplemented from AInteractableActor.

110{
111 Super::ReceiveEndFocus(Caller);
112}

◆ ReceiveOnEndOverlap()

void ATerminal::ReceiveOnEndOverlap ( AActor * Caller)
overrideprotectedvirtual

Reimplemented from AInteractableActor.

120{
121 Super::ReceiveOnEndOverlap(Caller);
122 if(Caller == CurrentCaller)
123 {
125 }
126}
AActor * CurrentCaller
Definition Terminal.h:51

◆ ReceiveOnInteract()

void ATerminal::ReceiveOnInteract ( AActor * Caller,
const EInteractionType InteractionType )
overrideprotectedvirtual

Reimplemented from AInteractableSwitch.

33{
34 Super::ReceiveOnInteract(Caller, InteractionType);
35 if(Caller == nullptr || Caller->GetInstigatorController() == nullptr){return;}
36 if(InteractableActorComponent == nullptr){return;}
37 // FInteractionType InteractionType;
38 // if(UBaseHelpersBPLib::GetInteraction(InteractionType, InteractionData, SelectedInteraction))
39 // {
40 if(InteractionType == EInteractionType::Hack)
41 {
42 CurrentCaller = Caller;
43 IPlayerControllerInterface* PlayerController = Cast<IPlayerControllerInterface>(CurrentCaller->GetInstigatorController());
44 if(PlayerController == nullptr){LogDebugError("Player Controller");return;}
45 PlayerController->SetCharacterMode(CharacterModeTags::Talking);
46 if(HackingWidgetClass == nullptr){LogDebugError("WidgetClass");return;}
47 //@@ TODO we need to have a better way to control the widget, not through this terminal
48
49 HackingWidget = CreateWidget(GetWorld(), HackingWidgetClass);
50 if(HackingWidget == nullptr){LogDebugError("HackingWidget");return;}
51 MiniGame = Cast<IMiniGame>(HackingWidget);
52 if(MiniGame == nullptr){LogDebugError("MiniGame Interface");return;}
53 HackingWidget->AddToPlayerScreen();
54 bInUse = true;
55 MiniGame->Start();
56 InteractableActorComponent->SetInteractionHidden(EInteractionType::Hack, true);
57 InteractableActorComponent->SetInteractionHidden(EInteractionType::Use, false);
59 }
60 if(InteractionType == EInteractionType::Use)
61 {
62 if(MiniGame == nullptr){LogDebugError("MiniGame");return;}
63 // MiniGame->GetResult();
64 // const EMiniGameStatus MiniGameStatus = MiniGame->Select();
65
66 const EMiniGameStatus MiniGameStatus = MiniGame->Select();
67 IPlayerControllerInterface* PlayerController = Cast<IPlayerControllerInterface>(CurrentCaller->GetInstigatorController());
68 switch (MiniGameStatus) {
69 case Ready:
70 LogDebugMessage("Terminal Ready");
71 break;
72 case InProgress:
73 LogDebugMessage("Terminal In Progress");
74 // if(GetWorld()->GetTimerManager().IsTimerActive(RoundTimerHandle) == false)
75 // {
76 // GetWorld()->GetTimerManager().SetTimer(RoundTimerHandle, this, &ATerminal::DelayedPress,MiniGame->GetRoundTime());
77 // }
78 break;
79 case Passed:
80 LogDebugMessage("Terminal Passed");
81 //@TODO could have optional wait time
82 break;
83 case Complete:
84 LogDebugMessage("Terminal Complete");
85 if(PlayerController != nullptr)
86 {
87 PlayerController->SetCharacterMode(FGameplayTag(CharacterModeTags::Default));
88 }
89 SetHacked();
90 break;
91 case Failed:
92 LogDebugMessage("Terminal Failed");
93 if(PlayerController != nullptr)
94 {
95 PlayerController->SetCharacterMode(FGameplayTag(CharacterModeTags::Default));
96 }
98 break;
99 }
100 }
101 // }
102}
EMiniGameStatus
Definition InteractionData.h:25
@ Ready
Definition InteractionData.h:26
@ Failed
Definition InteractionData.h:29
@ InProgress
Definition InteractionData.h:27
@ Passed
Definition InteractionData.h:28
@ Complete
Definition InteractionData.h:30
void LogDebugMessage(const FString &Message, const bool bWarning=false, const bool bError=false) const
Definition ActorBase.cpp:96
void LogDebugError(const FString &Message) const
Definition ActorBase.cpp:58
void SetHacked()
Definition Terminal.cpp:199
void UpdateCaller() const
Definition Terminal.cpp:309
void LockTerminal(const float LockoutTime)
Definition Terminal.cpp:269
bool bInUse
Definition Terminal.h:45
IMiniGame * MiniGame
Definition Terminal.h:66
UUserWidget * HackingWidget
Definition Terminal.h:53
virtual float GetRetryDelay() const =0
virtual EMiniGameStatus Select()=0
virtual void Start()=0
Definition PlayerControllerInterface.h:21
virtual void SetCharacterMode(const FGameplayTag &Mode)=0

◆ ReceiveOnOverlap()

void ATerminal::ReceiveOnOverlap ( AActor * Caller)
overrideprotectedvirtual

Reimplemented from AInteractableActor.

115{
116 Super::ReceiveOnOverlap(Caller);
117}

◆ ReceiveStartFocus()

void ATerminal::ReceiveStartFocus ( AActor * Caller)
overrideprotectedvirtual

Reimplemented from AInteractableActor.

105{
106 Super::ReceiveStartFocus(Caller);
107}

◆ ResetTerminal()

void ATerminal::ResetTerminal ( )
virtual
249{
250 GetWorld()->GetTimerManager().ClearTimer(LockedTimerHandle);
251 if(MiniGame != nullptr)
252 {
253 MiniGame->Reset();
254 }
255 MiniGame = nullptr;
256 if(HackingWidget != nullptr)
257 {
258 HackingWidget->RemoveFromParent();
259 }
260 HackingWidget = nullptr;
261 if(InteractableActorComponent != nullptr)
262 {
263 InteractableActorComponent->SetInteractionHidden(EInteractionType::Hack, false);
264 }
265 UpdateCaller();
266 CurrentCaller = nullptr;
267}
virtual void Reset()=0

◆ SetHacked()

void ATerminal::SetHacked ( )
private
200{
201 bHacked = true;
203 if(InteractableActorComponent != nullptr)
204 {
205 InteractableActorComponent->SetInteractionHidden(EInteractionType::Hack, true);
206 }
207 UpdateCaller();
208 MiniGame = nullptr;
209 if(HackingWidget != nullptr)
210 {
211 HackingWidget->RemoveFromParent();
212 }
213 HackingWidget = nullptr;
214 CurrentCaller = nullptr;
215}
virtual void ReceiveToggleSwitch(AActor *Caller, const bool bOn) override
Definition InteractableSwitch.cpp:16
bool bSwitchOn
Definition InteractableSwitch.h:23
bool bHacked
Definition Terminal.h:55

◆ UpdateCaller()

void ATerminal::UpdateCaller ( ) const
310{
311 if(CurrentCaller == nullptr){return;}
312 const IInteractionInterface* InteractableCaller = Cast<IInteractionInterface>(CurrentCaller);
313 if(InteractableCaller == nullptr){LogDebugError("InteractableCaller");return;}
314 InteractableCaller->InteractionDataUpdated();
315}
Definition InteractionInterface.h:18
virtual void InteractionDataUpdated() const
Definition InteractionInterface.h:57

Member Data Documentation

◆ bHacked

bool ATerminal::bHacked = false
protected

◆ bInUse

bool ATerminal::bInUse = false
protected

◆ BoxComponent

UBoxComponent* ATerminal::BoxComponent
protected

◆ CurrentCaller

AActor* ATerminal::CurrentCaller
protected

◆ HackingWidget

UUserWidget* ATerminal::HackingWidget = nullptr
protected

◆ HackingWidgetClass

TSubclassOf<UUserWidget> ATerminal::HackingWidgetClass
private

◆ LockedTimerHandle

FTimerHandle ATerminal::LockedTimerHandle
private

◆ MeshComponent

UStaticMeshComponent* ATerminal::MeshComponent
protected

◆ MiniGame

IMiniGame* ATerminal::MiniGame
private

◆ RoundTimerHandle

FTimerHandle ATerminal::RoundTimerHandle
private

The documentation for this class was generated from the following files: