// Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "CoreMinimal.h" #include "GameFramework/Actor.h" #include "Particles/ParticleSystemComponent.h" #include "Projectile.generated.h" UCLASS() class BLASTER_API AProjectile : public AActor { GENERATED_BODY() public: AProjectile(); virtual void Tick(float DeltaTime) override; // Used with server-side rewind bool bUseServerSideRewind = false; FVector_NetQuantize TraceStart; FVector_NetQuantize100 InitialVelocity; UPROPERTY(EditAnywhere) float InitialSpeed = 15000; float Damage = 20.f; protected: virtual void BeginPlay() override; void StartDestroyTimer(); void DestroyTimerFinished(); void SpawnTrailSystem(); void ExplodeDamage(); UFUNCTION() virtual void OnHit(UPrimitiveComponent* HitComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, FVector NormalImpulse, const FHitResult& Hit); virtual void Destroyed() override; UPROPERTY(EditAnywhere) class UParticleSystem* ImpactParticles; UPROPERTY(EditAnywhere) class USoundCue* ImpactSound; UPROPERTY(EditAnywhere) class UBoxComponent* CollisionBox; UPROPERTY(VisibleAnywhere) class UProjectileMovementComponent* ProjectileMovementComponent; UPROPERTY(EditAnywhere) class UNiagaraSystem* TrailSystem; UPROPERTY() class UNiagaraComponent* TrailSystemComponent; UPROPERTY(VisibleAnywhere) UStaticMeshComponent* ProjectileMesh; UPROPERTY(EditAnywhere) float DamageInnerRadius = 200.f; UPROPERTY(EditAnywhere) float DamageOuterRadius = 500.f; private: UPROPERTY(EditAnywhere) class UParticleSystem* Tracer; UPROPERTY() class UParticleSystemComponent* TracerComponent; FTimerHandle DestroyTimer; UPROPERTY(EditAnywhere) float DestroyTime = 3.f; };