72 - Spawning the Projectile
This commit is contained in:
parent
53a50536f1
commit
e56044608a
Binary file not shown.
Binary file not shown.
|
@ -106,9 +106,11 @@ void UCombatComponent::TraceUnderCrosshairs(FHitResult& TraceHitResult)
|
||||||
if (!TraceHitResult.bBlockingHit)
|
if (!TraceHitResult.bBlockingHit)
|
||||||
{
|
{
|
||||||
TraceHitResult.ImpactPoint = End;
|
TraceHitResult.ImpactPoint = End;
|
||||||
|
HitTarget = End;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
HitTarget = TraceHitResult.ImpactPoint;
|
||||||
DrawDebugSphere(
|
DrawDebugSphere(
|
||||||
GetWorld(),
|
GetWorld(),
|
||||||
TraceHitResult.ImpactPoint,
|
TraceHitResult.ImpactPoint,
|
||||||
|
@ -131,7 +133,7 @@ void UCombatComponent::MulticastFire_Implementation()
|
||||||
if (Character)
|
if (Character)
|
||||||
{
|
{
|
||||||
Character->PlayFireMontage(bAiming);
|
Character->PlayFireMontage(bAiming);
|
||||||
EquippedWeapon->Fire();
|
EquippedWeapon->Fire(HitTarget);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -58,4 +58,6 @@ private:
|
||||||
float AimWalkSpeed;
|
float AimWalkSpeed;
|
||||||
|
|
||||||
bool bFireButtonPressed;
|
bool bFireButtonPressed;
|
||||||
|
|
||||||
|
FVector HitTarget;
|
||||||
};
|
};
|
||||||
|
|
|
@ -3,3 +3,38 @@
|
||||||
|
|
||||||
#include "ProjectileWeapon.h"
|
#include "ProjectileWeapon.h"
|
||||||
|
|
||||||
|
#include "Projectile.h"
|
||||||
|
#include "Engine/SkeletalMeshSocket.h"
|
||||||
|
|
||||||
|
void AProjectileWeapon::Fire(const FVector& HitTarget)
|
||||||
|
{
|
||||||
|
Super::Fire(HitTarget);
|
||||||
|
|
||||||
|
APawn* InstigatorPawn = Cast<APawn>(GetOwner());
|
||||||
|
const USkeletalMeshSocket* MuzzleFlashSocket = GetWeaponMesh()->GetSocketByName(FName("MuzzleFlash"));
|
||||||
|
if (MuzzleFlashSocket)
|
||||||
|
{
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
World->SpawnActor<AProjectile>(
|
||||||
|
ProjectileClass,
|
||||||
|
SocketTransform.GetLocation(),
|
||||||
|
TargetRotation,
|
||||||
|
SpawnParams
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -13,7 +13,11 @@ UCLASS()
|
||||||
class BLASTER_API AProjectileWeapon : public AWeapon
|
class BLASTER_API AProjectileWeapon : public AWeapon
|
||||||
{
|
{
|
||||||
GENERATED_BODY()
|
GENERATED_BODY()
|
||||||
|
virtual void Fire(const FVector& HitTarget) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
UPROPERTY(EditAnywhere)
|
||||||
|
TSubclassOf<class AProjectile> ProjectileClass;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -109,7 +109,7 @@ void AWeapon::ShowPickupWidget(bool bShowWidget)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AWeapon::Fire()
|
void AWeapon::Fire(const FVector& HitTarget)
|
||||||
{
|
{
|
||||||
if (FireAnimation)
|
if (FireAnimation)
|
||||||
{
|
{
|
||||||
|
|
|
@ -25,7 +25,7 @@ public:
|
||||||
AWeapon();
|
AWeapon();
|
||||||
virtual void GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const override;
|
virtual void GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const override;
|
||||||
void ShowPickupWidget(bool bShowWidget);
|
void ShowPickupWidget(bool bShowWidget);
|
||||||
void Fire();
|
virtual void Fire(const FVector& HitTarget);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void BeginPlay() override;
|
virtual void BeginPlay() override;
|
||||||
|
|
Loading…
Reference in New Issue