krazwer

AuraProjectileMovementComponent.h

Sep 4th, 2025
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.01 KB | None | 0 0
  1. // Copyright Lucas Rossi
  2.  
  3. #pragma once
  4.  
  5. #include "CoreMinimal.h"
  6. #include "Enums/MotionShiftMode.h"
  7. #include "Enums/ProjectileMotionType.h"
  8. #include "GameFramework/ProjectileMovementComponent.h"
  9. #include "AuraProjectileMovementComponent.generated.h"
  10.  
  11. /**
  12.  *
  13.  */
  14. UCLASS()
  15. class AURA_API UAuraProjectileMovementComponent : public UProjectileMovementComponent
  16. {
  17.     GENERATED_BODY()
  18.  
  19. public:
  20.   UAuraProjectileMovementComponent();
  21.  
  22.   UFUNCTION(BlueprintCallable, Category="Custom Movement")
  23.   void SetActiveMotion(EProjectileMotionType Motion);
  24.  
  25.   bool bDefinedDirections = false;
  26.   float DirectionMultiplier = 1.f;
  27.  
  28.   bool bYoYoReturnToAvatar = false;
  29.   TWeakObjectPtr<AActor> AvatarActor;
  30.  
  31.   bool bBezierOverride = false;
  32.   FVector BezierEndOverride = FVector();
  33.  
  34. protected:
  35.   virtual void BeginPlay() override;
  36.   virtual void InitializeComponent() override;
  37.   virtual void TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override;
  38.  
  39.   /** The currently active motion effect */
  40.   UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Custom Movement")
  41.   EProjectileMotionType ActiveMotion = EProjectileMotionType::Default;
  42.  
  43.   UPROPERTY(
  44.     EditAnywhere,
  45.     BlueprintReadWrite,
  46.     Category="Custom Movement",
  47.     meta=(EditCondition="ActiveMotion != EProjectileMotionType::Bezier && ActiveMotion != EProjectileMotionType::Default && ActiveMotion != EProjectileMotionType::Noise && ActiveMotion != EProjectileMotionType::YoYo", EditConditionHides)
  48.   )
  49.   float Frequency = 15.f;
  50.  
  51.   UPROPERTY(
  52.     EditAnywhere,
  53.     BlueprintReadWrite,
  54.     Category="Custom Movement",
  55.     meta=(EditCondition="ActiveMotion != EProjectileMotionType::Bezier && ActiveMotion != EProjectileMotionType::Default && ActiveMotion != EProjectileMotionType::YoYo", EditConditionHides)
  56.   )
  57.   float Amplitude = 8.f;
  58.  
  59.   UPROPERTY(
  60.     EditAnywhere,
  61.     BlueprintReadWrite,
  62.     Category="Custom Movement",
  63.     meta=(EditCondition="ActiveMotion == EProjectileMotionType::Noise", EditConditionHides)
  64.   )
  65.   float NoiseInterval = 0.1f;
  66.   UPROPERTY(
  67.     EditAnywhere,
  68.     BlueprintReadWrite,
  69.     Category="Custom Movement",
  70.     meta=(EditCondition="ActiveMotion == EProjectileMotionType::Noise", EditConditionHides)
  71.   )
  72.   float NoiseInterpSpeed = 25.f;
  73.  
  74.   UPROPERTY(
  75.     EditAnywhere,
  76.     BlueprintReadWrite,
  77.     Category="Custom Movement|Motion Shift",
  78.     meta=(EditCondition="ActiveMotion != EProjectileMotionType::Default", EditConditionHides)
  79.   )
  80.   TSet<EMotionShiftMode> MotionShiftModes;
  81.  
  82.   /* The max possible speed shift based on a % of Frequency, Bezier Duration or Velocity */
  83.   UPROPERTY(
  84.     EditAnywhere,
  85.     BlueprintReadWrite,
  86.     Category="Custom Movement|Motion Shift",
  87.     meta=(EditCondition="ActiveMotion != EProjectileMotionType::Default", EditConditionHides)
  88.   )
  89.   float MaxSpeedShiftAmplitude = 1.f;
  90.  
  91.   UPROPERTY(
  92.     EditAnywhere,
  93.     BlueprintReadWrite,
  94.     Category="Custom Movement|Motion Shift",
  95.     meta=(EditCondition="ActiveMotion != EProjectileMotionType::Bezier && ActiveMotion != EProjectileMotionType::Default && ActiveMotion != EProjectileMotionType::YoYo", EditConditionHides)
  96.   )
  97.   float GrowthRate = 1.f;
  98.  
  99.   /** Bezier control points */
  100.   UPROPERTY(
  101.     EditAnywhere,
  102.     BlueprintReadWrite,
  103.     Category="Custom Movement",
  104.     meta=(EditCondition="ActiveMotion == EProjectileMotionType::Bezier", EditConditionHides)
  105.   )
  106.   FVector BezierP1 = FVector();
  107.  
  108.   UPROPERTY(
  109.     EditAnywhere,
  110.     BlueprintReadWrite,
  111.     Category="Custom Movement",
  112.     meta=(EditCondition="ActiveMotion == EProjectileMotionType::Bezier", EditConditionHides)
  113.   )
  114.   FVector BezierP2 = FVector();
  115.  
  116.   UPROPERTY(
  117.     EditAnywhere,
  118.     BlueprintReadWrite,
  119.     Category="Custom Movement",
  120.     meta=(EditCondition="ActiveMotion == EProjectileMotionType::Bezier", EditConditionHides)
  121.   )
  122.   FVector BezierEnd = FVector();
  123.  
  124.   UPROPERTY(
  125.     EditAnywhere,
  126.     BlueprintReadWrite,
  127.     Category="Custom Movement",
  128.     meta=(EditCondition="ActiveMotion == EProjectileMotionType::Bezier", EditConditionHides)
  129.   )
  130.   float BezierDuration = 1.f;
  131.  
  132.   UPROPERTY(
  133.     EditAnywhere,
  134.     BlueprintReadWrite,
  135.     Category="Custom Movement|Motion Shift",
  136.     meta=(
  137.       EditCondition="ActiveMotion == EProjectileMotionType::Bezier",
  138.       EditConditionHides,
  139.       ClampMin=-120.f,
  140.       UIMin=-120.f,
  141.       ClampMax=120.f,
  142.       UIMax=120.f
  143.     )
  144.   )
  145.   float MaxRandomBezierRotation = 60.f;
  146.  
  147.   UPROPERTY(
  148.     EditAnywhere,
  149.     BlueprintReadWrite,
  150.     Category="Custom Movement",
  151.     meta=(EditCondition="ActiveMotion == EProjectileMotionType::YoYo", EditConditionHides)
  152.   )
  153.   float YoYoForwardDuration = 0.5f;
  154.  
  155.   UPROPERTY(
  156.     EditAnywhere,
  157.     BlueprintReadWrite,
  158.     Category="Custom Movement",
  159.     meta=(EditCondition="ActiveMotion == EProjectileMotionType::YoYo", EditConditionHides)
  160.   )
  161.   float YoYoIdleDuration = 0.f;
  162.  
  163.   UPROPERTY(
  164.     EditAnywhere,
  165.     BlueprintReadWrite,
  166.     Category="Custom Movement",
  167.     meta=(EditCondition="ActiveMotion == EProjectileMotionType::YoYo", EditConditionHides)
  168.   )
  169.   float YoYoReturnSpeedFactor = 1.f;
  170.  
  171. private:
  172.   float ComputeEffectiveAmplitude();
  173.   FVector ComputeMotionOffset(float DeltaTime);
  174.   FVector ComputeBezierPosition(float T) const;
  175.  
  176.   void SetupYoYoMotion();
  177.   void ReturnYoYo();
  178.  
  179.   float ElapsedTime = 0.f;
  180.   float EffectiveFrequency = 10.f;
  181.  
  182.   FVector StartLocation = FVector();
  183.   FVector StartVelocity = FVector();
  184.   FTransform StartTransform = FTransform();
  185.  
  186.   FVector HelixLastLateral = FVector();
  187.  
  188.   float RandomPhaseShift = 0.f;
  189.  
  190.   FRotator RandomBezierRotation = FRotator();
  191.   float EffectiveBezierDuration = 1.f;
  192.   FVector EffectiveBezierEnd = FVector();
  193.  
  194.   float NoiseTimer = 0.f;
  195.   FVector CurrentNoiseOffset = FVector();
  196.   FVector TargetNoiseOffset = FVector();
  197.   float EffectiveNoiseInterval = 0.1f;
  198.  
  199.   bool bYoYoReturning = false;
  200.   float EffectiveYoYoForwardDuration = 0.5f;
  201.   float EffectiveYoYoIdleDuration = 0.f;
  202.   float EffectiveYoYoReturnSpeedFactor = 1.f;
  203. };
  204.  
Advertisement
Add Comment
Please, Sign In to add comment