// Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "CoreMinimal.h" #include "Camera/CameraComponent.h" #include "Characters/ExoCharacterBase.h" #include "ExoPlayerCharacter.generated.h" class UInteractionComponent; class UShootingComponent; class UWBP_PlayerUI; UCLASS() class EXO_API AExoPlayerCharacter : public AExoCharacterBase { GENERATED_BODY() public: AExoPlayerCharacter(); UPROPERTY(EditAnywhere, Category = "Combat") TObjectPtr Weapon; UPROPERTY(VisibleAnywhere, BlueprintReadOnly) TObjectPtr InteractionComponent; UPROPERTY(VisibleAnywhere, BlueprintReadOnly) TObjectPtr ShootingComponent; UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="Camera") TObjectPtr CameraComponent; UPROPERTY(VisibleAnywhere, BlueprintReadOnly) TObjectPtr CapsuleBottom; UPROPERTY(EditAnywhere, Category = "Dodge Properties") float DodgeForce = 5000.f; UPROPERTY(EditAnywhere, Category = "Dodge Properties") float DodgeCooldown = 2.f; UPROPERTY(EditAnywhere, Category = "Slide Properties") float SlideCooldown = 0.35f; UPROPERTY(EditAnywhere, Category = "Movement Properties") float WalkSpeed = 600.0f; UPROPERTY(EditAnywhere, Category = "Movement Properties") float SprintSpeed = 1500.0f; UPROPERTY(EditAnywhere, Category = "Movement Properties") float SlideSpeed = 2500.f; UPROPERTY(EditAnywhere, Category = "Movement Properties") float CrouchSpeed = 300.f; UPROPERTY(EditAnywhere, Category = "Aiming") float bIsAimingMode = false; UPROPERTY(EditAnywhere, Category = "Health") float CurrentHealth = 50.0f; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "UI") TSubclassOf PlayerHudClass; UFUNCTION() void OnActorBeginOverlap(UPrimitiveComponent* OverlappedComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult ); UFUNCTION(BlueprintCallable, Category = "Movement") void CrouchCustom(); UFUNCTION(BlueprintCallable, Category = "Movement") void UnCrouchCustom(); DECLARE_MULTICAST_DELEGATE(FOnPlayerCrouchEvent); FOnPlayerCrouchEvent OnPlayerCrouchStart; FOnPlayerCrouchEvent OnPlayerCrouchStop; UFUNCTION() void AddHealthPoints(float addValue); /** Przekształca wartość relatywną do pozycji środka kapsuły gracza * na wartość relatywną do pozycji stóp gracza */ UFUNCTION(BlueprintPure) float ToFeet(float Value); /** Przekształca wartość relatywną do pozycji stóp kapsuły gracza * na wartość relatywną do pozycji kapsuły gracza */ UFUNCTION(BlueprintPure) float FromFeet(float Value); UFUNCTION(BlueprintCallable, Category="Camera") void SetEyePositionOffsetTarget(FVector LocationOffset); UFUNCTION(BlueprintCallable, Category="Camera") void SetEyeRoll(float RollValue); UFUNCTION(BlueprintCallable) FVector GetPlayerLocationAtFeet() const; UFUNCTION(BlueprintCallable, Category="Camera") void SetTargetEyeHeight(float NewEyeHeight, const bool bCapsuleRelative = false); UFUNCTION(BlueprintCallable, Category="Camera") float GetCurrentEyeHeight(const bool bCapsuleRelative = false); //UFUNCTION(BlueprintCallable, Category="Camera") //float GetCurrentEyeHeightBase(const bool bCapsuleRelative = false); UFUNCTION(BlueprintPure, Category="Camera") float GetStandingEyeHeight(const bool bCapsuleRelative = false) const; UFUNCTION(BlueprintPure, Category="Camera") float GetCrouchingEyeHeight(const bool bCapsuleRelative = false) const; /** Czy postać gracza jest obecnie schowana za osłoną */ UPROPERTY(BlueprintReadOnly, Category = "Cover System") bool bIsInCover = false; /** Offset kamery podczas leżenia (osłona, ślizg)
* Bezpiecznie będzie założyć że to najniżej jak kamera * może zejść podczas gameplaya */ UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Camera") float LowEyeHeightOffset; protected: virtual void BeginPlay() override; virtual void Tick(float DeltaTime) override; float MaxHealth = 100.0f; UWBP_PlayerUI* PlayerHud; /** Wysokość kamery podczas kucania jest dostarczana przez Character.h*/ /** Wysokość kamery podczas stania
* Też najwyższa wysokość na którą kamera może się wznieść * podczas gameplaya */ UPROPERTY(EditAnywhere, Category="Camera") float StandingEyeHeight; UFUNCTION(BlueprintCallable) float GetFootOffset(); private: FVector TargetEyeLocationOffset; FVector EyeLocationOffset; float TargetEyeRoll; float EyeRoll; float TargetEyeHeight; void UpdateCameraHeight(float DeltaTime); void ApplyCameraOffset(float DeltaTime); };