KLingo Project Documentation 1.0.0
Unreal Engine 5.6 C++ Project Documentation
로딩중...
검색중...
일치하는것 없음
ALingoGameState.h
이 파일의 문서화 페이지로 가기
1// Copyright (c) 2025 Doppleddiggong. All rights reserved. Unauthorized copying, modification, or distribution of this file, via any medium is strictly prohibited. Proprietary and confidential.
2
3#pragma once
4
5#include "CoreMinimal.h"
6#include "NetworkData.h"
7#include "GameFramework/GameState.h"
8#include "ALingoGameState.generated.h"
9
10UENUM(Blueprintable)
11enum class EQuestType : uint8
12{
13 None = 0,
14
15 Read = 1,
16 Listen = 2,
17 Write = 3,
18 Speak = 4
19};
20
23DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOnQuestScenarioDataUpdated);
24DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnRoomIdUpdated, int64, NewRoomId);
25DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnRoomLevelUpdated, int32, NewRoomLevel);
26
27UCLASS()
28class ONEPIECE_API ALingoGameState : public AGameState
29{
30 GENERATED_BODY()
31
32public:
34
35protected:
36 virtual void GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const override;
37 virtual void BeginPlay() override;
38
39public:
40 virtual void Tick(float DeltaSeconds) override;
41
42 FORCEINLINE int64 GetRoomId() { return RoomId; };
43 FORCEINLINE int32 GetRoomLevel() { return RoomLevel; };
44 FORCEINLINE float GetRemainMissionTime() { return RemainMissionTime; }
45 FORCEINLINE float GetTimeTaken() { return TimeLimit - RemainMissionTime; }
46 FORCEINLINE bool IsQuestIng() { return QuestType != EQuestType::None; }
47 FORCEINLINE EQuestType GetCurrentQuestType() const { return QuestType; }
48 FORCEINLINE const FResponseReadScenario& GetReadScenarioData() const {return ReadScenarioData;}
49 FORCEINLINE const FResponseListenScenario& GetListenScenarioData() const {return ListenScenarioData;}
50 FORCEINLINE const FResponseUserMe& GetBotInfo() const { return Bot; }
51
53 UFUNCTION(BlueprintCallable, Category = "Mission")
54 void StartMissionTimer(float TimeLimit);
55
57 UFUNCTION(BlueprintCallable, Category = "Mission")
58 void StopMissionTimer();
59
60 UFUNCTION(BlueprintCallable, Category = "Mission")
61 void DecreaseMissionTimer(const float InValue);
62
63 void UpdateRemainMissionTime(const float InTimeLimit);
64
65 void SetReadScenarioData(const FResponseReadScenario& InResponseData);
66 void SetListenScenarioData(const FResponseListenScenario& InResponseData);
67
70 void SetRoomLevel(int32 InRoomLevel);
71
72protected:
73 UFUNCTION(NetMulticast, Reliable)
74 void Multicast_UpdateQuestType(const EQuestType InQuestType);
75
76 UFUNCTION(NetMulticast, Reliable)
77 void Multicast_ShowReadQuestPopup(const FResponseReadScenario& InScenarioData);
78
79 UFUNCTION(NetMulticast, Reliable)
80 void Multicast_ShowListenQuestPopup(const FResponseListenScenario& InScenarioData);
81
82 UFUNCTION()
83 void OnRep_ReadScenarioData();
84
85 UFUNCTION()
86 void OnRep_ReadResult();
87
88 UFUNCTION()
89 void OnRep_ListenScenarioData();
90
91 UFUNCTION()
92 void OnRep_ListenResult();
93
94 UFUNCTION()
95 void OnRep_RoomId();
96
97 UFUNCTION()
98 void OnRep_RoomLevel();
99
100public:
101 // Chat System
102 UFUNCTION(NetMulticast, Reliable)
103 void MulticastRPC_SendChat(FResponseUserMe sendUser, const FText& inMessage, int32 PlayerIndex);
104
105private:
107 void OnMissionTimerEnd();
108
109public:
110 FOnReadResultUpdated OnReadResultUpdated;
111 FOnListenResultUpdated OnListenResultUpdated;
112 FOnQuestScenarioDataUpdated OnQuestScenarioDataUpdated;
113 FOnRoomIdUpdated OnRoomIdUpdated;
114 FOnRoomLevelUpdated OnRoomLevelUpdated;
115
116 FORCEINLINE int GetWrongReadAnswerNum() { return WrongReadAnswerList.Num(); }
117 void AddWrongReadAnswer(int32 Value);
118
119 UPROPERTY(ReplicatedUsing = OnRep_ReadScenarioData)
120 FResponseReadScenario ReadScenarioData;
121
122 UPROPERTY(Replicated)
123 TArray<int32> WrongReadAnswerList;
124
125 UPROPERTY(Replicated)
126 FResponseReadResult ReqReadResult;
127
128 UPROPERTY(ReplicatedUsing = OnRep_ReadResult)
130 //--------------------------------------------------------------//
131
132 FORCEINLINE int GetWrongListenAnswerNum() { return WrongListenAnswerList.Num(); }
133 void AddWrongListenAnswer(int32 Value);
134 // 서버에서 받아오는 원본
135 UPROPERTY(ReplicatedUsing = OnRep_ListenScenarioData)
136 FResponseListenScenario ListenScenarioData;
137 // 시도한 선택지들 저장
138 UPROPERTY(Replicated)
139 FResponseListenScenario TryListenAnswerData;
140 // 서버로 정답률 보내기 위한 형식상 인덱스 리스트
141 UPROPERTY(Replicated)
142 TArray<int32> WrongListenAnswerList;
143
144 UPROPERTY(Replicated)
145 FResponseListenResult ReqListenResult;
146
147 UPROPERTY(ReplicatedUsing = OnRep_ListenResult)
149 //--------------------------------------------------------------//
150
151protected:
152 UPROPERTY(Replicated, BlueprintReadOnly, Category = "Mission")
153 float RemainMissionTime = 0.f;
154
156 UPROPERTY(Replicated, BlueprintReadOnly, Category = "Mission")
157 bool bIsTimerActive = false;
158
159 UPROPERTY(Replicated, BlueprintReadOnly, Category = "Quest")
160 EQuestType QuestType;
161
163 UPROPERTY(ReplicatedUsing=OnRep_RoomId, BlueprintReadOnly, Category = "Room")
164 int64 RoomId = 0;
165
166 UPROPERTY(ReplicatedUsing=OnRep_RoomLevel, BlueprintReadOnly, Category = "Room")
167 int32 RoomLevel = 1;
168
169private:
170 float TimeLimit = 0;
171
173
174public:
175 // Quest Tag
176 UFUNCTION(BlueprintCallable, Category = "Compass")
177 void SetCompassVisibilityByTag(FName Tag, bool bVisible);
178
179 UFUNCTION(BlueprintCallable, Category = "Compass")
180 void SetCompassVisibilityByClass(TSubclassOf<AActor> ActorClass, bool bVisible);
181
182 UFUNCTION(BlueprintCallable, Category = "Compass")
183 void SetAllCompassVisibility(bool bVisible);
184
185 UFUNCTION(NetMulticast, Reliable)
186 void Multicast_SetCompassVisibilityByTag(FName Tag, bool bVisible);
187
188 UFUNCTION(NetMulticast, Reliable)
189 void Multicast_SetCompassVisibilityByClass(TSubclassOf<AActor> ActorClass, bool bVisible);
190
191 UFUNCTION(NetMulticast, Reliable)
192 void Multicast_SetAllCompassVisibility(bool bVisible);
193
194};
EQuestType
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnReadResultUpdated, const FResponseReadResult &, Result)
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOnQuestScenarioDataUpdated)
네트워크 요청과 응답에 사용되는 구조체 및 설정을 정의합니다.
FORCEINLINE int32 GetRoomLevel()
FORCEINLINE const FResponseListenScenario & GetListenScenarioData() const
FORCEINLINE float GetTimeTaken()
FORCEINLINE EQuestType GetCurrentQuestType() const
FORCEINLINE bool IsQuestIng()
FORCEINLINE float GetRemainMissionTime()
FORCEINLINE const FResponseUserMe & GetBotInfo() const
FORCEINLINE const FResponseReadScenario & GetReadScenarioData() const
FORCEINLINE int64 GetRoomId()