bool FGameplayEffectContext::NetSerialize(FArchive& Ar, class UPackageMap* Map, bool& bOutSuccess) { Ar << Instigator; Ar << EffectCauser; Ar << Actors; bool HasHitResults = HitResult.IsValid(); Ar << HasHitResults; if (Ar.IsLoading()) { if (HasHitResults) { if (!HitResult.IsValid()) { HitResult = TSharedPtr<FHitResult>(new FHitResult()); } } AddInstigator(Instigator.Get(), EffectCauser.Get()); // Just to initialize InstigatorAbilitySystemComponent } if (HasHitResults == 1) { HitResult->NetSerialize(Ar, Map, bOutSuccess); } Ar << bHasWorldOrigin; Ar << WorldOrigin; bOutSuccess = true; return true; }
bool FGameplayEffectContext::NetSerialize(FArchive& Ar, class UPackageMap* Map, bool& bOutSuccess) { uint8 RepBits = 0; if (Ar.IsSaving()) { if (Instigator.IsValid() ) { RepBits |= 1 << 0; } if (EffectCauser.IsValid() ) { RepBits |= 1 << 1; } if (SourceObject.IsValid() ) { RepBits |= 1 << 2; } if (Actors.Num() > 0) { RepBits |= 1 << 3; } if (HitResult.IsValid()) { RepBits |= 1 << 4; } if (bHasWorldOrigin) { RepBits |= 1 << 5; } } Ar.SerializeBits(&RepBits, 6); if (RepBits & (1 << 0)) { Ar << Instigator; } if (RepBits & (1 << 1)) { Ar << EffectCauser; } if (RepBits & (1 << 2)) { Ar << SourceObject; } if (RepBits & (1 << 3)) { Ar << Actors;; } if (RepBits & (1 << 4)) { if (Ar.IsLoading()) { if (!HitResult.IsValid()) { HitResult = TSharedPtr<FHitResult>(new FHitResult()); } } HitResult->NetSerialize(Ar, Map, bOutSuccess); } if (RepBits & (1 << 5)) { Ar << WorldOrigin; bHasWorldOrigin = true; } else { bHasWorldOrigin = false; } if (Ar.IsLoading()) { AddInstigator(Instigator.Get(), EffectCauser.Get()); // Just to initialize InstigatorAbilitySystemComponent } bOutSuccess = true; return true; }