krazwer

AuraProjectileMovementComponent.h

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