Section 11: Multiple Weapon Types - Lecture 213

This commit is contained in:
charnet3d 2024-01-13 20:37:03 +01:00
parent 473271348a
commit d2221d2334
6 changed files with 44 additions and 19 deletions

Binary file not shown.

Binary file not shown.

View File

@ -52,7 +52,6 @@ AShooterCharacter::AShooterCharacter() :
// Automatic fire
bFireButtonPressed(false),
bShouldFire(true),
AutomaticFireRate(0.1f),
// Item trace variables
bShouldTraceForItems(false),
// Camera interp location variables
@ -577,9 +576,11 @@ void AShooterCharacter::FireWeapon()
void AShooterCharacter::StartFireTimer()
{
if (!EquippedWeapon) return;
CombatState = ECombatState::ECS_FireTimerInProgress;
GetWorldTimerManager().SetTimer(AutoFireTimer, this, &AShooterCharacter::AutoFireReset,
AutomaticFireRate);
EquippedWeapon->GetAutoFireRate());
}
void AShooterCharacter::AutoFireReset()
@ -601,9 +602,10 @@ void AShooterCharacter::AutoFireReset()
void AShooterCharacter::PlayFireSound()
{
// Play fire sound
if (FireSound)
if (!EquippedWeapon) return;
if (EquippedWeapon->GetFireSound())
{
UGameplayStatics::PlaySound2D(this, FireSound);
UGameplayStatics::PlaySound2D(this, EquippedWeapon->GetFireSound());
}
}
@ -615,9 +617,10 @@ void AShooterCharacter::SendBullet()
const FTransform SocketTransform = BarrelSocket->GetSocketTransform(EquippedWeapon->GetItemMesh());
if (MuzzleFlash)
if (!EquippedWeapon) return;
if (EquippedWeapon->GetMuzzleFlash())
{
UGameplayStatics::SpawnEmitterAtLocation(GetWorld(), MuzzleFlash, SocketTransform);
UGameplayStatics::SpawnEmitterAtLocation(GetWorld(), EquippedWeapon->GetMuzzleFlash(), SocketTransform);
}
FVector BeamEnd;

View File

@ -267,14 +267,6 @@ private:
meta = (ClampMin = 0.0, ClampMax = 1.0, UIMin = 0.0, UIMax = 1.0))
float MouseAimingLookUpRate;
/* Randomized gunshot sound cue*/
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Combat, meta = (AllowPrivateAccess = true))
USoundCue* FireSound;
/* Flash spawned at BarrelSocket */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Combat, meta = (AllowPrivateAccess = true))
UParticleSystem* MuzzleFlash;
/* Montage for firing the weapon */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Combat, meta = (AllowPrivateAccess = true))
UAnimMontage* HipFireMontage;
@ -336,9 +328,6 @@ private:
/* True when we cane fire. False when waiting for the timer */
bool bShouldFire;
/* Rate of automatic gun fire */
float AutomaticFireRate;
/* Sets a timer between gunshots */
FTimerHandle AutoFireTimer;

View File

@ -126,6 +126,10 @@ void AWeapon::OnConstruction(const FTransform& Transform)
CrosshairsRight = WeaponDataRow->CrosshairsRight;
CrosshairsBottom = WeaponDataRow->CrosshairsBottom;
CrosshairsTop = WeaponDataRow->CrosshairsTop;
AutoFireRate = WeaponDataRow->AutoFireRate;
MuzzleFlash = WeaponDataRow->MuzzleFlash;
FireSound = WeaponDataRow->FireSound;
}
if (GetMaterialInstance())

View File

@ -12,6 +12,7 @@
class USoundCue;
class UWidgetComponent;
class UParticleSystem;
USTRUCT(BlueprintType)
struct FWeaponDataTable : public FTableRowBase
@ -74,6 +75,15 @@ struct FWeaponDataTable : public FTableRowBase
UPROPERTY(EditAnywhere, BlueprintReadWrite)
UTexture2D* CrosshairsTop;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
float AutoFireRate;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
UParticleSystem* MuzzleFlash;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
USoundCue* FireSound;
};
/**
@ -148,6 +158,19 @@ private:
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = DataTable, meta = (AllowPrivateAccess = "true"))
UTexture2D* CrosshairsTop;
/** The speed at which automatic fire happens */
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = DataTable, meta = (AllowPrivateAccess = "true"))
float AutoFireRate;
/** Particle system spawned at the BarrelSocket */
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = DataTable, meta = (AllowPrivateAccess = "true"))
UParticleSystem* MuzzleFlash;
/** Sound played when the weapon is fired */
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = DataTable, meta = (AllowPrivateAccess = "true"))
USoundCue* FireSound;
public:
/** Adds an impulse to the weapon */
void ThrowWeapon();
@ -162,6 +185,9 @@ public:
FORCEINLINE int32 GetMagazineCapacity() const { return MagazineCapacity; }
FORCEINLINE FName GetReloadMontageSection() const { return ReloadMontageSection; }
FORCEINLINE FName GetClipBoneName() const { return ClipBoneName; }
FORCEINLINE float GetAutoFireRate() const { return AutoFireRate; }
FORCEINLINE UParticleSystem* GetMuzzleFlash() const { return MuzzleFlash; }
FORCEINLINE USoundCue* GetFireSound() const { return FireSound; }
void ReloadAmmo(int32 Amount);