118 lines
3.7 KiB
C++
118 lines
3.7 KiB
C++
#pragma once
|
|
|
|
#include "CoreMinimal.h"
|
|
#include "GameFramework/Pawn.h"
|
|
#include "InputActionValue.h"
|
|
#include "Blueprint/UserWidget.h"
|
|
#include "SpaceshipPawn.generated.h"
|
|
|
|
UCLASS()
|
|
class MYPROJECT3_API ASpaceshipPawn : public APawn
|
|
{
|
|
GENERATED_BODY()
|
|
|
|
public:
|
|
ASpaceshipPawn();
|
|
virtual void Tick(float DeltaTime) override;
|
|
virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
|
|
|
|
protected:
|
|
virtual void BeginPlay() override;
|
|
|
|
// Components
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Components")
|
|
class UStaticMeshComponent* ShipMesh;
|
|
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Components")
|
|
class USpringArmComponent* CameraSpringArm;
|
|
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Components")
|
|
class UCameraComponent* Camera;
|
|
|
|
// Enhanced Input Components
|
|
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Input")
|
|
class UInputMappingContext* DefaultMappingContext;
|
|
|
|
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Input")
|
|
class UInputAction* ThrottleAction;
|
|
|
|
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Input")
|
|
class UInputAction* MouseLookAction;
|
|
|
|
// Movement Parameters
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Movement")
|
|
float MaxThrust = 2000.0f;
|
|
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Movement")
|
|
float ThrustAcceleration = 500.0f;
|
|
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Movement")
|
|
float ThrustDeceleration = 500.0f;
|
|
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Movement")
|
|
float RotationSpeed = 100.0f;
|
|
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Movement")
|
|
float MouseSensitivity = 2.0f;
|
|
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Movement")
|
|
float DragCoefficient = 0.05f;
|
|
|
|
// How quickly velocity aligns with new direction
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Movement", meta = (ClampMin = "0.0", ClampMax = "10.0"))
|
|
float VelocityAlignmentSpeed = 4.0f;
|
|
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Movement", meta = (ClampMin = "0.0", ClampMax = "1.0", ToolTip = "How much of the current velocity is maintained when changing direction (0 = none, 1 = full)"))
|
|
float DirectionalInertia = 0.3f;
|
|
|
|
// Shooting properties
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Combat")
|
|
TSubclassOf<class ASpaceshipProjectile> ProjectileClass;
|
|
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Combat")
|
|
float FireRate = 0.2f;
|
|
|
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Combat")
|
|
USceneComponent* ProjectileSpawnPoint;
|
|
|
|
// Input action for shooting
|
|
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Input")
|
|
class UInputAction* ShootAction;
|
|
|
|
UPROPERTY(EditDefaultsOnly, Category = "UI")
|
|
TSubclassOf<UUserWidget> CrosshairWidgetClass;
|
|
|
|
UPROPERTY()
|
|
UUserWidget* CrosshairWidget;
|
|
|
|
// Input functions
|
|
void HandleThrottleStarted(const FInputActionValue& Value);
|
|
void HandleThrottleReleased(const FInputActionValue& Value);
|
|
void HandleMouseLook(const FInputActionValue& Value);
|
|
|
|
private:
|
|
// Movement state
|
|
float CurrentThrust;
|
|
float TargetThrust;
|
|
bool bThrottlePressed;
|
|
FVector CurrentVelocity;
|
|
FRotator TargetRotation;
|
|
|
|
float CurrentPitch;
|
|
float CurrentYaw;
|
|
APlayerController* PlayerControllerRef;
|
|
|
|
FVector2D MouseDeltaSmoothed;
|
|
FVector2D LastMouseDelta;
|
|
float MouseSmoothingSpeed = 10.0f;
|
|
|
|
bool bWasThrottlePressed;
|
|
FVector DesiredVelocityDirection;
|
|
|
|
FTimerHandle FireTimerHandle;
|
|
bool bCanFire = true;
|
|
|
|
void HandleShoot(const FInputActionValue& Value);
|
|
void Fire();
|
|
void ResetFire();
|
|
}; |