From fb79d802150035e0256538dfcab1df3e569a3975 Mon Sep 17 00:00:00 2001 From: Kingsmedia Date: Fri, 27 May 2022 23:33:52 +0200 Subject: [PATCH] 196 - Spawning Projectiles Locally --- .../Blueprints/Weapon/BP_AssaultRifle.uasset | Bin 32475 -> 32775 bytes .../BP_ServerSideRewindProjectile.uasset | Bin 0 -> 23255 bytes Source/Blaster/Weapon/Projectile.h | 5 +- Source/Blaster/Weapon/ProjectileWeapon.cpp | 63 +++++++++++++----- Source/Blaster/Weapon/ProjectileWeapon.h | 3 + 5 files changed, 51 insertions(+), 20 deletions(-) create mode 100644 Content/Blueprints/Weapon/Projectiles/BP_ServerSideRewindProjectile.uasset diff --git a/Content/Blueprints/Weapon/BP_AssaultRifle.uasset b/Content/Blueprints/Weapon/BP_AssaultRifle.uasset index a1f9416958e3108ab96f5f57ff83e2dc59e4fc23..fcd2d8b4c81f257d2aaf342a7ede2415d305932d 100644 GIT binary patch delta 8209 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 delta 8505 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 PY!X_NSz_n+nz8v0$zrPP diff --git a/Content/Blueprints/Weapon/Projectiles/BP_ServerSideRewindProjectile.uasset b/Content/Blueprints/Weapon/Projectiles/BP_ServerSideRewindProjectile.uasset new file mode 100644 index 0000000000000000000000000000000000000000..13ee9d6615f37c267358d83d3fa0314ed83ba199 GIT binary patch literal 23255 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 DA;VEcESnkE%D)W3 zC9{PnyOt;760Bh@(( zoN*cc5CBfg9PS|neA#dQ#!eohAO4I6j*BGtQ652$!hwfWM-K)aC`odb1?Cu!X-{WpfEB`s?2jx zIP8If9#Ik^;;;pEU|4Q`Ip;3bAD|>t!hCUO;+?F%cNt{lsluZd5k%*g;HR3!Y zOp6k4xoWc^F+o-wpH9Zl@npdfJQ`nyo;{nNKj@b&%M^B;Fdq?1<*JdB2)hg;%hP`F zE95SuOlSZlUWR#QL(GQURZ{QUaL9k5XUER!Z~S8Vv;#jhy^hI@%{N3zLSw zp$s*JLmn1I%S?Pw;Vzu=jy^Kf1rv_%0%!YB;#*412Epza%iBsN%B8QxDRS|EuGt|}P4Euw+(+D{`qW*x-*`?mOK|hf< z26AWyY8Flo!#dW(ffw~>7xZ~pYi-mRv5ZrM~6>O{rPnbJKwpa>hpUZxn}L{ zkIYB}Q%7(m2l5~>SxDB7QzdNhugw%l2pE#>6$7SmA-iTg1U?5p!|XNqt)KMdu2+jj zH{4kB-WB51DW@cYHQF8;EW??q#jYV6auVSNVZ`5zNQS>t>{JaAGppy~pzf~sU5l1Yx%zi@x8YoiT=UxEqD`3-bE>Z|`t*T)kJW!G z5p1zkr1>$}DTfU#Hm0qIVJ}DIl;HPMubuzZn>OBDz3aO3%CqY4T#^X(j~rOwcd=G8 z=eft1FZu4Bd$(Qq?Vmi82)4+kx|khi5m3I=#3|owFiw6t%^%M@t=F_T7OIEY5s>z5 z{r&Ug4<6E4(8I_dU!hd~FP=X(zW>Hme|Ytcy4^SQ?R)3e%G+6+a2d`Ym}Fl6^a*pP zk1ufTZ0kQ~%gZOen+Uep=4Ua#1#I|%nT=`dVc5$-Zav(<41S;gaz@h+PMu!2WzVjQ z_k=y$62bnF^9T6teClh@{PcwFm6v_E_tvI|uU(r67F&%Fe#{P;bR*vd=2R~O8z?Q~i*lA(#edqpB)-*zV3f|ISMzbrcq1}fmU@aOn(QY> zc^=O{-(|T*JiiT2DP35$q|o)*vX+*g%0I#xD|w)?M_5 zGE=N;xNEt)oEDFH}g4vvCrnY=hRT}}WJ2?0mWZ@m-GY5uG;TY5cZt4`^{ z^v1ycptCdfm6P0K@r6`akiSR6GMb#G(eU+-GpcJoif^Zj-d<*CvEPQq_FF*Oa)0nO zh!6F0zLBd-AKKI5OEdy$S&1`MZTbq_e(0;Y;6(hIu2zN3vlbpUlJ2`s`Sbf_$8Ncz_UaG+ iYszEZ&sF5A4&pW(`5P3wl)N(^CkPZ~N8CfNwEi1_=<9O; literal 0 HcmV?d00001 diff --git a/Source/Blaster/Weapon/Projectile.h b/Source/Blaster/Weapon/Projectile.h index db0da77..71869d6 100644 --- a/Source/Blaster/Weapon/Projectile.h +++ b/Source/Blaster/Weapon/Projectile.h @@ -23,6 +23,8 @@ public: UPROPERTY(EditAnywhere) float InitialSpeed = 15000; + + float Damage = 20.f; protected: virtual void BeginPlay() override; @@ -35,9 +37,6 @@ protected: virtual void OnHit(UPrimitiveComponent* HitComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, FVector NormalImpulse, const FHitResult& Hit); virtual void Destroyed() override; - UPROPERTY(EditAnywhere) - float Damage = 20.f; - UPROPERTY(EditAnywhere) class UParticleSystem* ImpactParticles; diff --git a/Source/Blaster/Weapon/ProjectileWeapon.cpp b/Source/Blaster/Weapon/ProjectileWeapon.cpp index 1488240..0f508fa 100644 --- a/Source/Blaster/Weapon/ProjectileWeapon.cpp +++ b/Source/Blaster/Weapon/ProjectileWeapon.cpp @@ -10,32 +10,61 @@ void AProjectileWeapon::Fire(const FVector& HitTarget) { Super::Fire(HitTarget); - if (!HasAuthority()) return; - APawn* InstigatorPawn = Cast(GetOwner()); const USkeletalMeshSocket* MuzzleFlashSocket = GetWeaponMesh()->GetSocketByName(FName("MuzzleFlash")); - if (MuzzleFlashSocket) + UWorld* World = GetWorld(); + if (MuzzleFlashSocket && World) { FTransform SocketTransform = MuzzleFlashSocket->GetSocketTransform(GetWeaponMesh()); // From muzzle flash socket to hit location from TraceUnderCrosshairs FVector ToTarget = HitTarget - SocketTransform.GetLocation(); FRotator TargetRotation = ToTarget.Rotation(); - - if (ProjectileClass && InstigatorPawn) - { - FActorSpawnParameters SpawnParams; - SpawnParams.Owner = GetOwner(); - SpawnParams.Instigator = InstigatorPawn; - UWorld* World = GetWorld(); - if (World) + FActorSpawnParameters SpawnParams; + SpawnParams.Owner = GetOwner(); + SpawnParams.Instigator = InstigatorPawn; + + AProjectile* SpawnedProjectile = nullptr; + if (bUseServerSideRewind) + { + if (InstigatorPawn->HasAuthority()) // Server { - World->SpawnActor( - ProjectileClass, - SocketTransform.GetLocation(), - TargetRotation, - SpawnParams - ); + if (InstigatorPawn->IsLocallyControlled()) // Server, host - use replicated projectile + { + SpawnedProjectile = World->SpawnActor(ProjectileClass, SocketTransform.GetLocation(), TargetRotation, SpawnParams); + SpawnedProjectile->bUseServerSideRewind = false; + SpawnedProjectile->Damage = Damage; + } + else // Server, not locally controlled - spawn non-replicated projectile, no SSR + { + SpawnedProjectile = World->SpawnActor(ServerSideRewindProjectileClass, SocketTransform.GetLocation(), TargetRotation, SpawnParams); + SpawnedProjectile->bUseServerSideRewind = false; + } + } + else // Client, using SSR + { + if (InstigatorPawn->IsLocallyControlled()) // Client, locally controlled - spawn non-replicated projectile, use SSR + { + SpawnedProjectile = World->SpawnActor(ServerSideRewindProjectileClass, SocketTransform.GetLocation(), TargetRotation, SpawnParams); + SpawnedProjectile->bUseServerSideRewind = true; + SpawnedProjectile->TraceStart = SocketTransform.GetLocation(); + SpawnedProjectile->InitialVelocity= SpawnedProjectile->GetActorForwardVector() * SpawnedProjectile->InitialSpeed; + SpawnedProjectile->Damage = Damage; + } + else // Client, not locally controlled - spawn non-replicated projectile, no SSR + { + SpawnedProjectile = World->SpawnActor(ServerSideRewindProjectileClass, SocketTransform.GetLocation(), TargetRotation, SpawnParams); + SpawnedProjectile->bUseServerSideRewind = false; + } + } + } + else // Weapon not using SSR + { + if (InstigatorPawn->HasAuthority()) + { + SpawnedProjectile = World->SpawnActor(ProjectileClass, SocketTransform.GetLocation(), TargetRotation, SpawnParams); + SpawnedProjectile->bUseServerSideRewind = false; + SpawnedProjectile->Damage = Damage; } } } diff --git a/Source/Blaster/Weapon/ProjectileWeapon.h b/Source/Blaster/Weapon/ProjectileWeapon.h index 7437f09..c1bbb70 100644 --- a/Source/Blaster/Weapon/ProjectileWeapon.h +++ b/Source/Blaster/Weapon/ProjectileWeapon.h @@ -20,4 +20,7 @@ private: UPROPERTY(EditAnywhere) TSubclassOf ProjectileClass; + UPROPERTY(EditAnywhere) + TSubclassOf ServerSideRewindProjectileClass; + };