Space Plunder
Loading...
Searching...
No Matches
ALSCharacterMovementComponent.h
Go to the documentation of this file.
1// Copyright: Copyright (C) 2022 Doğa Can Yanıkoğlu
2// Source Code: https://github.com/dyanikoglu/ALS-Community
3
4#pragma once
5
6#include "CoreMinimal.h"
7#include "GameFramework/CharacterMovementComponent.h"
11
12#include "ALSCharacterMovementComponent.generated.h"
13
14enum class EGravityDirectionMode : uint8;
15
16DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnGravityDirectionChanged, EGravityDirectionMode, OldGravityDirectionMode, EGravityDirectionMode, CurrentGravityDirectionMode);
17
21UCLASS()
22class ALSV4_CPP_API UALSCharacterMovementComponent : public UCharacterMovementComponent, public IALSCharacterMovementInterface, public IALSGravityMovementInterface
23{
24 GENERATED_UCLASS_BODY()
25
26 class ALSV4_CPP_API FSavedMove_My : public FSavedMove_Character
27 {
28 public:
29
30 typedef FSavedMove_Character Super;
31
32 virtual void Clear() override;
33 virtual uint8 GetCompressedFlags() const override;
34 virtual void SetMoveFor(ACharacter* Character, float InDeltaTime, FVector const& NewAccel,
35 class FNetworkPredictionData_Client_Character& ClientData) override;
36 virtual void PrepMoveFor(class ACharacter* Character) override;
37
38 // Walk Speed Update
40 EALSGait SavedAllowedGait = EALSGait::Walking;
41 };
42
43 class ALSV4_CPP_API FNetworkPredictionData_Client_My : public FNetworkPredictionData_Client_Character
44 {
45 public:
46 FNetworkPredictionData_Client_My(const UCharacterMovementComponent& ClientMovement);
47
48 typedef FNetworkPredictionData_Client_Character Super;
49
50 virtual FSavedMovePtr AllocateNewMove() override;
51 };
52
53 virtual void UpdateFromCompressedFlags(uint8 Flags) override;
54 virtual class FNetworkPredictionData_Client* GetPredictionData_Client() const override;
55 virtual void OnMovementUpdated(float DeltaTime, const FVector& OldLocation, const FVector& OldVelocity) override;
56
57 // Movement Settings Override
58 virtual void PhysWalking(float deltaTime, int32 Iterations) override;
59 virtual float GetMaxAcceleration() const override;
60 virtual float GetMaxBrakingDeceleration() const override;
61
62 // Movement Settings Variables
63 UPROPERTY()
64 uint8 bRequestMovementSettingsChange = 1;
65
66 UPROPERTY()
67 EALSGait AllowedGait = EALSGait::Walking;
68
69 UPROPERTY(BlueprintReadOnly, Category = "ALS|Movement System")
70 FALSMovementSettings CurrentMovementSettings;
71
72 // Set Movement Curve (Called in every instance)
73 float GetMappedSpeed() const;
74
75 UFUNCTION(BlueprintCallable, Category = "Movement Settings")
76 void SetMovementSettings(FALSMovementSettings NewMovementSettings);
77
78 // Set Max Walking Speed (Called from the owning client)
79 UFUNCTION(BlueprintCallable, Category = "Movement Settings")
80 void SetAllowedGait(EALSGait NewAllowedGait);
81
82 UFUNCTION(Reliable, Server, Category = "Movement Settings")
83 void Server_SetAllowedGait(EALSGait NewAllowedGait);
84
85
86 //~ IALSGravityMovementInterface Functions ~//
87
88 UPROPERTY(BlueprintAssignable, Category="Gravity")
89 FOnGravityDirectionChanged OnGravityDirectionChanged;
90 // /** Called after GravityDirectionMode (or related data) has changed.
91 // * @note Can be overriden
92 // * @param OldGravityDirectionMode - previous value of GravityDirectionMode
93 // * @param CurrentGravityDirectionMode - current value of GravityDirectionMode */
94 // UFUNCTION(BlueprintImplementableEvent, Category="GravityCharacterMovement")
95 // void OnGravityDirectionChanged(EGravityDirectionMode OldGravityDirectionMode, EGravityDirectionMode CurrentGravityDirectionMode);
96
97
98 virtual void SetNewGravityScale(const float NewGravity) override;
99 virtual void ResetGravityScale() override;
100
104 virtual void SetFixedGravityDirection(const FVector& NewFixedGravityDirection) override;
105
109 virtual void SetSplineTangentGravityDirection(AActor* NewGravityActor) override;
110
114 virtual void SetPointGravityDirection(const FVector& NewGravityPoint) override;
115
119 virtual void SetPointGravityDirectionFromActor(AActor* NewGravityActor) override;
120
125 virtual void SetLineGravityDirection(const FVector& NewGravityLineStart, const FVector& NewGravityLineEnd) override;
126
131 virtual void SetSegmentGravityDirection(const FVector& NewGravitySegmentStart, const FVector& NewGravitySegmentEnd) override;
132
136 virtual void SetSplineGravityDirection(AActor* NewGravityActor) override;
137
142 virtual void SetPlaneGravityDirection(const FVector& NewGravityPlaneBase, const FVector& NewGravityPlaneNormal) override;
143
144
149 virtual void SetSplinePlaneGravityDirection(AActor* NewGravityActor) override;
150
155 virtual void SetBoxGravityDirection(const FVector& NewGravityBoxOrigin, const FVector& NewGravityBoxExtent) override;
156
160 virtual void SetBoxGravityDirectionFromActor(AActor* NewGravityActor) override;
161
165 virtual void SetCollisionGravityDirection(AActor* NewGravityActor) override;
166
168 virtual bool GetIsWalking() const override;
169
171 virtual void LaunchCharacter(const FVector& LaunchVel) override;
172
173
174 //~ IALSGravityMovementInterface Functions ~//
175
176 virtual FVector GetGravityDirection() const override;
177
181 virtual void UpdateGravity();
182
186 virtual void ReplicateGravityToClients();
187
195 UPROPERTY(EditAnywhere,BlueprintReadWrite,BlueprintSetter=SetAlignGravityToBase,Category="GravityCharacterMovement")
196 uint32 bAlignGravityToBase:1;
197
202 UFUNCTION(BlueprintSetter,Category="Pawn|Components|GravityCharacterMovement")
203 virtual void SetAlignGravityToBase(bool bNewAlignGravityToBase);
204
205
206
207protected:
208
212 UFUNCTION(NetMulticast,Reliable)
213 virtual void MulticastEnableAlignGravityToBase();
214
218 UFUNCTION(NetMulticast,Reliable)
219 virtual void MulticastDisableAlignGravityToBase();
220
225 UFUNCTION(NetMulticast,Reliable)
226 virtual void MulticastSetGravityScale(const float NewGravityScale);
227
228
231 UFUNCTION(NetMulticast,Reliable)
232 virtual void MulticastSetFixedGravityDirection(const FVector& NewFixedGravityDirection);
233
236 UFUNCTION(NetMulticast,Reliable)
237 virtual void MulticastSetSplineTangentGravityDirection(AActor* NewGravityActor);
238
241 UFUNCTION(NetMulticast,Reliable)
242 virtual void MulticastSetPointGravityDirection(const FVector& NewGravityPoint);
243
246 UFUNCTION(NetMulticast,Reliable)
247 virtual void MulticastSetPointGravityDirectionFromActor(AActor* NewGravityActor);
248
252 UFUNCTION(NetMulticast,Reliable)
253 virtual void MulticastSetLineGravityDirection(const FVector& NewGravityLineStart, const FVector& NewGravityLineEnd);
254
258 UFUNCTION(NetMulticast,Reliable)
259 virtual void MulticastSetSegmentGravityDirection(const FVector& NewGravitySegmentStart, const FVector& NewGravitySegmentEnd);
260
263 UFUNCTION(NetMulticast,Reliable)
264 virtual void MulticastSetSplineGravityDirection(AActor* NewGravityActor);
265
266
270 UFUNCTION(NetMulticast,Reliable)
271 virtual void MulticastSetPlaneGravityDirection(const FVector& NewGravityPlaneBase, const FVector& NewGravityPlaneNormal);
272
276 UFUNCTION(NetMulticast,Reliable)
277 virtual void MulticastSetSplinePlaneGravityDirection(AActor* NewGravityActor);
278
279
283 UFUNCTION(NetMulticast,Reliable)
284 virtual void MulticastSetBoxGravityDirection(const FVector& NewGravityBoxOrigin, const FVector& NewGravityBoxExtent);
285
288 UFUNCTION(NetMulticast,Reliable)
289 virtual void MulticastSetBoxGravityDirectionFromActor(AActor* NewGravityActor);
290
293 UFUNCTION(NetMulticast,Reliable)
294 virtual void MulticastSetCollisionGravityDirection(AActor* NewGravityActor);
295
298 void GravityDirectionChanged(const EGravityDirectionMode OldGravityDirectionMode);
299
300
305 virtual bool GetShouldReplicateGravity() const;
306
307
308 //~ Gravity Vars ~//
309
311 UPROPERTY(VisibleInstanceOnly, BlueprintReadOnly,Category="GravityCharacterMovement")
312 EGravityDirectionMode GravityDirectionMode;
313
315 UPROPERTY(VisibleInstanceOnly,BlueprintReadOnly,Category="GravityCharacterMovement")
316 FVector GravityVectorA;
317
319 UPROPERTY(VisibleInstanceOnly,BlueprintReadOnly,Category="GravityCharacterMovement")
320 FVector GravityVectorB;
321
323 UPROPERTY(VisibleInstanceOnly,BlueprintReadOnly,Category="GravityCharacterMovement")
324 TObjectPtr<AActor> GravityActor;
325
330 float OldGravityScale;
331
332
334 uint32 bDirtyGravityDirection:1;
335
337 UPROPERTY(EditAnywhere,BlueprintReadWrite,Category="GravityCharacterMovement")
338 uint32 bDisableGravityReplication:1;
339
340
341 //~ Gravity Vars ~//
342
343
344};
EALSGait
Definition ALSCharacterEnumLibrary.h:29
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FOnGravityDirectionChanged, EGravityDirectionMode, OldGravityDirectionMode, EGravityDirectionMode, CurrentGravityDirectionMode)
EGravityDirectionMode
Definition ALSExtraData.h:14
UCLASS(Blueprintable, BlueprintType, ClassGroup=(BucciGames), meta=(BlueprintSpawnableComponent)) class CHATSYSTEM_API UChatSystemComponent
Definition ChatSystemComponent.h:13
Definition ALSCharacterMovementInterface.h:20
Definition ALSGravityMovementInterface.h:19
Definition ALSCharacterMovementComponent.h:44
FNetworkPredictionData_Client_Character Super
Definition ALSCharacterMovementComponent.h:48
Definition ALSCharacterMovementComponent.h:27
FSavedMove_Character Super
Definition ALSCharacterMovementComponent.h:30
uint8 bSavedRequestMovementSettingsChange
Definition ALSCharacterMovementComponent.h:39
Definition ALSCharacterMovementComponent.h:23
Definition ALSCharacterStructLibrary.h:176