A Demo Project for the UnrealEngineSDK
Loading...
Searching...
No Matches
GrippableSphereComponent.cpp
Go to the documentation of this file.
1// Copyright 1998-2016 Epic Games, Inc. All Rights Reserved.
2
4#include "Net/UnrealNetwork.h"
5
6 //=============================================================================
31
32void UGrippableSphereComponent::GetLifetimeReplicatedProps(TArray< class FLifetimeProperty > & OutLifetimeProps) const
33{
34 Super::GetLifetimeReplicatedProps(OutLifetimeProps);
35
36 DOREPLIFETIME_CONDITION(UGrippableSphereComponent, GripLogicScripts, COND_Custom);
40 DOREPLIFETIME_CONDITION(UGrippableSphereComponent, VRGripInterfaceSettings, COND_Custom);
41 DOREPLIFETIME_CONDITION(UGrippableSphereComponent, GameplayTags, COND_Custom);
42}
43
44void UGrippableSphereComponent::PreReplication(IRepChangedPropertyTracker & ChangedPropertyTracker)
45{
46 Super::PreReplication(ChangedPropertyTracker);
47
48 // Don't replicate if set to not do it
52
53 DOREPLIFETIME_ACTIVE_OVERRIDE_PRIVATE_PROPERTY(USceneComponent, RelativeLocation, bReplicateMovement);
54 DOREPLIFETIME_ACTIVE_OVERRIDE_PRIVATE_PROPERTY(USceneComponent, RelativeRotation, bReplicateMovement);
55 DOREPLIFETIME_ACTIVE_OVERRIDE_PRIVATE_PROPERTY(USceneComponent, RelativeScale3D, bReplicateMovement);
56}
57
58bool UGrippableSphereComponent::ReplicateSubobjects(UActorChannel* Channel, class FOutBunch *Bunch, FReplicationFlags *RepFlags)
59{
60 bool WroteSomething = Super::ReplicateSubobjects(Channel, Bunch, RepFlags);
61
63 {
65 {
66 if (Script && !Script->IsPendingKill())
67 {
68 WroteSomething |= Channel->ReplicateSubobject(Script, *Bunch, *RepFlags);
69 }
70 }
71 }
72
73 return WroteSomething;
74}
75
76//=============================================================================
80
82{
83 // Call the base class
84 Super::BeginPlay();
85
86 // Call all grip scripts begin play events so they can perform any needed logic
88 {
89 if (Script)
90 {
91 Script->BeginPlay(this);
92 }
93 }
94
96}
97
98void UGrippableSphereComponent::EndPlay(const EEndPlayReason::Type EndPlayReason)
99{
100 // Call the base class
101 Super::EndPlay(EndPlayReason);
102
103 // Call all grip scripts begin play events so they can perform any needed logic
104 for (UVRGripScriptBase* Script : GripLogicScripts)
105 {
106 if (Script)
107 {
108 Script->EndPlay(EndPlayReason);
109 }
110 }
111}
112
114{
116}
117
122
123void UGrippableSphereComponent::TickGrip_Implementation(UGripMotionControllerComponent * GrippingController, const FBPActorGripInformation & GripInformation, float DeltaTime) {}
125void UGrippableSphereComponent::OnGripRelease_Implementation(UGripMotionControllerComponent* ReleasingController, const FBPActorGripInformation& GripInformation, bool bWasSocketed) { }
128void UGrippableSphereComponent::OnSecondaryGrip_Implementation(UGripMotionControllerComponent* GripOwningController, USceneComponent* SecondaryGripComponent, const FBPActorGripInformation& GripInformation) { OnSecondaryGripAdded.Broadcast(GripOwningController, GripInformation); }
129void UGrippableSphereComponent::OnSecondaryGripRelease_Implementation(UGripMotionControllerComponent* GripOwningController, USceneComponent* ReleasingSecondaryGripComponent, const FBPActorGripInformation& GripInformation) { OnSecondaryGripRemoved.Broadcast(GripOwningController, GripInformation); }
134void UGrippableSphereComponent::OnInput_Implementation(FKey Key, EInputEvent KeyEvent) {}
135bool UGrippableSphereComponent::RequestsSocketing_Implementation(USceneComponent *& ParentToSocketTo, FName & OptionalSocketName, FTransform_NetQuantize & RelativeTransform) { return false; }
136
141
146
151
156
161
166
171
172void UGrippableSphereComponent::GetGripStiffnessAndDamping_Implementation(float &GripStiffnessOut, float &GripDampingOut)
173{
176}
177
182
187
188void UGrippableSphereComponent::ClosestGripSlotInRange_Implementation(FVector WorldLocation, bool bSecondarySlot, bool & bHadSlotInRange, FTransform & SlotWorldTransform, FName & SlotName, UGripMotionControllerComponent * CallingController, FName OverridePrefix)
189{
190 if (OverridePrefix.IsNone())
191 bSecondarySlot ? OverridePrefix = "VRGripS" : OverridePrefix = "VRGripP";
192
193 UVRExpansionFunctionLibrary::GetGripSlotInRangeByTypeName_Component(OverridePrefix, this, WorldLocation, bSecondarySlot ? VRGripInterfaceSettings.SecondarySlotRange : VRGripInterfaceSettings.PrimarySlotRange, bHadSlotInRange, SlotWorldTransform, SlotName, CallingController);
194}
195
200
201void UGrippableSphereComponent::IsHeld_Implementation(TArray<FBPGripPair> & HoldingControllers, bool & bIsHeld)
202{
203 HoldingControllers = VRGripInterfaceSettings.HoldingControllers;
205}
206
208{
209 if (bGripped)
210 {
211 OnGripped.Broadcast(Controller, GripInformation);
212 }
213 else
214 {
215 OnDropped.Broadcast(Controller, GripInformation, bWasSocketed);
216 }
217}
218
245
246/*FBPInteractionSettings UGrippableSphereComponent::GetInteractionSettings_Implementation()
247{
248 return VRGripInterfaceSettings.InteractionSettings;
249}*/
250
251
252bool UGrippableSphereComponent::GetGripScripts_Implementation(TArray<UVRGripScriptBase*> & ArrayReference)
253{
254 ArrayReference = GripLogicScripts;
255 return GripLogicScripts.Num() > 0;
256}
257
259{
260 Super::PreDestroyFromReplication();
261
262 // Destroy any sub-objects we created
263 for (int32 i = 0; i < GripLogicScripts.Num(); ++i)
264 {
265 if (UObject *SubObject = GripLogicScripts[i])
266 {
267 SubObject->PreDestroyFromReplication();
268 SubObject->MarkPendingKill();
269 }
270 }
271
272 GripLogicScripts.Empty();
273}
274
276{
278 {
279 for (int32 i = 0; i < GripLogicScripts.Num(); ++i)
280 {
281 if (UObject* SubObject = GripLogicScripts[i])
282 {
283 ObjList.Add(SubObject);
284 }
285 }
286 }
287}
288
290{
291 // Call the super at the end, after we've done what we needed to do
292 Super::OnComponentDestroyed(bDestroyingHierarchy);
293
294 // Don't set these in editor preview window and the like, it causes saving issues
295 if (UWorld * World = GetWorld())
296 {
297 EWorldType::Type WorldType = World->WorldType;
298 if (WorldType == EWorldType::Editor || WorldType == EWorldType::EditorPreview)
299 {
300 return;
301 }
302 }
303
304 for (int32 i = 0; i < GripLogicScripts.Num(); i++)
305 {
306 if (UObject *SubObject = GripLogicScripts[i])
307 {
308 SubObject->MarkPendingKill();
309 }
310 }
311
312 GripLogicScripts.Empty();
313}
EGripMovementReplicationSettings
UENUM(Blueprintable)
ESecondaryGripType
UENUM(Blueprintable)
EGripCollisionType
UENUM(Blueprintable)
EGripLateUpdateSettings
UENUM(Blueprintable)
EGripInterfaceTeleportBehavior
UENUM(Blueprintable)
UCLASS(Blueprintable, meta = (BlueprintSpawnableComponent), ClassGroup = MotionController)
UCLASS(Blueprintable, meta = (BlueprintSpawnableComponent, ChildCanTick), ClassGroup = (VRExpansionPl...
virtual void SetHeld_Implementation(UGripMotionControllerComponent *HoldingController, uint8 GripID, bool bIsHeld) override
bool bReplicateGripScripts
UPROPERTY(EditAnywhere, Replicated, BlueprintReadWrite, Category = "VRGripInterface")
virtual void OnSecondaryGrip_Implementation(UGripMotionControllerComponent *GripOwningController, USceneComponent *SecondaryGripComponent, const FBPActorGripInformation &GripInformation) override
virtual void OnInput_Implementation(FKey Key, EInputEvent KeyEvent) override
FBPInterfaceProperties VRGripInterfaceSettings
UPROPERTY(EditAnywhere, Replicated, BlueprintReadWrite, Category = "VRGripInterface")
virtual bool SimulateOnDrop_Implementation() override
virtual EGripInterfaceTeleportBehavior TeleportBehavior_Implementation() override
virtual void OnEndUsed_Implementation() override
FVROnDropSignature OnDropped
UPROPERTY(BlueprintAssignable, Category = "Grip Events")
void SetDenyGripping(bool bDenyGripping)
UFUNCTION(BlueprintCallable, Category = "VRGripInterface")
void SetGripPriority(int NewGripPriority)
UFUNCTION(BlueprintCallable, Category = "VRGripInterface")
virtual void PreDestroyFromReplication() override
virtual void OnUsed_Implementation() override
virtual bool AllowsMultipleGrips_Implementation() override
FVROnGripSignature OnGripped
UPROPERTY(BlueprintAssignable, Category = "Grip Events")
virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override
virtual void PreReplication(IRepChangedPropertyTracker &ChangedPropertyTracker) override
virtual void OnGrip_Implementation(UGripMotionControllerComponent *GrippingController, const FBPActorGripInformation &GripInformation) override
virtual bool GetGripScripts_Implementation(TArray< UVRGripScriptBase * > &ArrayReference) override
bool bReplicateMovement
UPROPERTY(EditAnywhere, Replicated, BlueprintReadWrite, Category = "VRGripInterface|Replication")
virtual void OnChildGripRelease_Implementation(UGripMotionControllerComponent *ReleasingController, const FBPActorGripInformation &GripInformation, bool bWasSocketed=false) override
virtual void GetGripStiffnessAndDamping_Implementation(float &GripStiffnessOut, float &GripDampingOut) override
virtual void OnGripRelease_Implementation(UGripMotionControllerComponent *ReleasingController, const FBPActorGripInformation &GripInformation, bool bWasSocketed=false) override
bool bRepGripSettingsAndGameplayTags
UPROPERTY(EditAnywhere, Replicated, BlueprintReadWrite, Category = "VRGripInterface|Replication")
UGrippableSphereComponent(const FObjectInitializer &ObjectInitializer)
virtual float GripBreakDistance_Implementation() override
virtual void OnSecondaryGripRelease_Implementation(UGripMotionControllerComponent *GripOwningController, USceneComponent *ReleasingSecondaryGripComponent, const FBPActorGripInformation &GripInformation) override
virtual void OnChildGrip_Implementation(UGripMotionControllerComponent *GrippingController, const FBPActorGripInformation &GripInformation) override
virtual bool DenyGripping_Implementation(UGripMotionControllerComponent *GripInitiator=nullptr) override
virtual EGripCollisionType GetPrimaryGripType_Implementation(bool bIsSlot) override
FVROnGripSignature OnSecondaryGripRemoved
UPROPERTY(BlueprintAssignable, Category = "Grip Events")
virtual void OnSecondaryUsed_Implementation() override
virtual void GetSubobjectsWithStableNamesForNetworking(TArray< UObject * > &ObjList) override
TArray< class UVRGripScriptBase * > GripLogicScripts
UPROPERTY(EditAnywhere, Replicated, BlueprintReadOnly, Instanced, Category = "VRGripInterface")
FVROnGripSignature OnSecondaryGripAdded
UPROPERTY(BlueprintAssignable, Category = "Grip Events")
virtual void IsHeld_Implementation(TArray< FBPGripPair > &HoldingControllers, bool &bIsHeld) override
virtual void TickGrip_Implementation(UGripMotionControllerComponent *GrippingController, const FBPActorGripInformation &GripInformation, float DeltaTime) override
virtual ESecondaryGripType SecondaryGripType_Implementation() override
virtual bool RequestsSocketing_Implementation(USceneComponent *&ParentToSocketTo, FName &OptionalSocketName, FTransform_NetQuantize &RelativeTransform) override
virtual void ClosestGripSlotInRange_Implementation(FVector WorldLocation, bool bSecondarySlot, bool &bHadSlotInRange, FTransform &SlotWorldTransform, FName &SlotName, UGripMotionControllerComponent *CallingController=nullptr, FName OverridePrefix=NAME_None) override
virtual FBPAdvGripSettings AdvancedGripSettings_Implementation() override
FGameplayTagContainer GameplayTags
UPROPERTY(EditAnywhere, Replicated, BlueprintReadWrite, Category = "GameplayTags")
virtual EGripMovementReplicationSettings GripMovementReplicationType_Implementation() override
virtual void OnComponentDestroyed(bool bDestroyingHierarchy) override
virtual EGripLateUpdateSettings GripLateUpdateSetting_Implementation() override
virtual void OnEndSecondaryUsed_Implementation() override
bool ReplicateSubobjects(UActorChannel *Channel, class FOutBunch *Bunch, FReplicationFlags *RepFlags) override
virtual void Native_NotifyThrowGripDelegates(UGripMotionControllerComponent *Controller, bool bGripped, const FBPActorGripInformation &GripInformation, bool bWasSocketed=false) override
static void GetGripSlotInRangeByTypeName_Component(FName SlotType, USceneComponent *Component, FVector WorldLocation, float MaxRange, bool &bHadSlotInRange, FTransform &SlotWorldTransform, FName &SlotName, UGripMotionControllerComponent *QueryController=nullptr)
UFUNCTION(BlueprintPure, Category = "VRGrip", meta = (bIgnoreSelf = "true", DisplayName = "GetGripSlo...
UCLASS(NotBlueprintable, BlueprintType, EditInlineNew, DefaultToInstanced, Abstract,...
USTRUCT(BlueprintType, Category = "VRExpansionLibrary")
USTRUCT(BlueprintType, Category = "VRExpansionLibrary")
uint8 GripPriority
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AdvancedGripSettings")
USTRUCT(BlueprintType, Category = "VRExpansionLibrary")
ESecondaryGripType SecondaryGripType
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRGripInterface")
bool bDenyGripping
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRGripInterface")
EGripCollisionType FreeDefaultGripType
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRGripInterface")
float ConstraintBreakDistance
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRGripInterface")
bool bAllowMultipleGrips
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRGripInterface")
float SecondarySlotRange
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRGripInterface")
EGripLateUpdateSettings LateUpdateSetting
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRGripInterface")
EGripCollisionType SlotDefaultGripType
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRGripInterface")
EGripInterfaceTeleportBehavior OnTeleportBehavior
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRGripInterface")
float ConstraintStiffness
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRGripInterface")
float PrimarySlotRange
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRGripInterface")
bool bIsHeld
UPROPERTY(BlueprintReadWrite, NotReplicated, Category = "VRGripInterface")
TArray< FBPGripPair > HoldingControllers
UPROPERTY(BlueprintReadWrite, NotReplicated, Category = "VRGripInterface")
float ConstraintDamping
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRGripInterface")
FBPAdvGripSettings AdvancedGripSettings
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRGripInterface|AdvancedGripSettings")
EGripMovementReplicationSettings MovementReplicationType
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRGripInterface")
bool bSimulateOnDrop
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VRGripInterface")
USTRUCT(BlueprintType, Category = "VRExpansionLibrary|TransformNetQuantize", meta = (HasNativeMake = ...