初始提交: UE5.3项目基础框架
This commit is contained in:
17
Source/BXSSP/Public/MainHUD.h
Normal file
17
Source/BXSSP/Public/MainHUD.h
Normal file
@ -0,0 +1,17 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "GameFramework/HUD.h"
|
||||
#include "MainHUD.generated.h"
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
UCLASS()
|
||||
class BXSSP_API AMainHUD : public AHUD
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
};
|
||||
467
Source/BXSSP/Public/Rover.h
Normal file
467
Source/BXSSP/Public/Rover.h
Normal file
@ -0,0 +1,467 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "GlobeAwareDefaultPawn.h"
|
||||
#include "Interfaces/IHttpRequest.h"
|
||||
#include "Rover.generated.h"
|
||||
|
||||
class UInputAction;
|
||||
struct FInputActionValue;
|
||||
class UInputMappingContext;
|
||||
class ADefaultPawnController;
|
||||
class UCesiumFlyToComponent;
|
||||
class ARoverController;
|
||||
class UCameraComponent;
|
||||
class USpringArmComponent;
|
||||
|
||||
enum class ESelecteItemMode :uint8 {
|
||||
ESM_Single,
|
||||
ESM_Multiple,
|
||||
ESM_Default
|
||||
};
|
||||
enum class ETSAction :uint8 {
|
||||
ETS_Default,
|
||||
ETS_RotationOrZoom,
|
||||
ETS_UPDown
|
||||
};
|
||||
/**
|
||||
*
|
||||
*/
|
||||
UCLASS()
|
||||
class BXSSP_API ARover : public AGlobeAwareDefaultPawn
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
|
||||
ARover();
|
||||
|
||||
virtual void Tick(float DeltaTime)override;
|
||||
UFUNCTION(BlueprintCallable)
|
||||
void UpdateOrignLongitudeLatitude(float Time = 0.01f);
|
||||
|
||||
UFUNCTION(BlueprintCallable)
|
||||
void FlyTo(const FVector& LongitudeLatitude, double YawAtDestination, double PitchAtDestination);
|
||||
|
||||
/*UFUNCTION(BlueprintCallable)
|
||||
void FlyTo(const FVector& LongitudeLatitude, double YawAtDestination, double PitchAtDestination);*/
|
||||
UFUNCTION(BlueprintCallable)
|
||||
void AssistMouseRollDistance(float Value, const FVector2D& ZoomScreenPosition = FVector2D(-1, -1));
|
||||
// 辅助通过滚动轴缩进距离
|
||||
void AssistMouseRollDistance(float Value, std::optional<FHitResult> _TS_ZoomHitResult, std::optional<FVector2D> ZoomScreenPosition = std::nullopt);
|
||||
FVector GetCurrentLongitudeLatitude();
|
||||
|
||||
bool IsPressMouseLeft() { return bPressMouseLeftKey; }
|
||||
|
||||
//检测是否更新原点经纬度
|
||||
UFUNCTION(BlueprintCallable)
|
||||
void CheckUpdateOrignLongitudeLatitude();
|
||||
|
||||
float GetHeight()const;
|
||||
|
||||
FORCEINLINE ARoverController* GetPlayerController()const { return PlayerController; }
|
||||
|
||||
FORCEINLINE TSoftObjectPtr<ACesiumGeoreference> GetGeoreference() { return Georeference; }
|
||||
|
||||
FORCEINLINE bool IsPressRightKey()const { return bPressMouseRightKey; }
|
||||
|
||||
UFUNCTION(BlueprintCallable)
|
||||
FORCEINLINE void SetAssistMouseLeftMoveActor(TSoftObjectPtr<AStaticMeshActor> Object) { AssistMouseLeftMoveActor = Object; }
|
||||
|
||||
FORCEINLINE void SetSelectedModeStatus(ESelecteItemMode Mode) {
|
||||
LastSelecteItemMode = SelecteItemMode;
|
||||
SelecteItemMode = Mode;
|
||||
}
|
||||
FORCEINLINE ESelecteItemMode GetSelectedModeStatus()const { return SelecteItemMode; }
|
||||
FORCEINLINE ESelecteItemMode GetLastSelectedModeStatus()const { return LastSelecteItemMode; }
|
||||
|
||||
//绕中心点旋转视角
|
||||
UFUNCTION(BlueprintCallable)
|
||||
void AroundPointRotation(float TheValue, EAxis::Type AxisType = EAxis::Y, FVector _RotationPoint = FVector(-1));
|
||||
|
||||
FORCEINLINE bool IsTempStopAutoRotate()const { return bTempStopAutoRotate; }
|
||||
// 更新屏幕中心点位置
|
||||
UFUNCTION(BlueprintCallable)
|
||||
void UpdatascreenCenterPointLocation();
|
||||
|
||||
//通过高度调整速度
|
||||
void AdjustSpeedByHeight();
|
||||
|
||||
// fly开始时调用
|
||||
UFUNCTION(BlueprintImplementableEvent)
|
||||
void OnFlyStart(const FVector& LongitudeLatitudeHeightDestination,
|
||||
double YawAtDestination,
|
||||
double PitchAtDestination);
|
||||
|
||||
|
||||
UFUNCTION(BlueprintCallable)
|
||||
void ModifyMaxRollCoefficient(float Coefficient);
|
||||
UCameraComponent* GetFollowCamera()const { return Camera; }
|
||||
void _MoveRight(const FInputActionValue& TheValue);
|
||||
UFUNCTION(BlueprintCallable)
|
||||
void UpdateCurrentHeight();
|
||||
FORCEINLINE float GetCurrentHeight()const { return CurrentHeight; }
|
||||
// 重置玩家对象属性,用于因某些原因导致的系统事件失效情况
|
||||
UFUNCTION(BlueprintCallable)
|
||||
void ResetPlayerProperty();
|
||||
UFUNCTION(BlueprintCallable)
|
||||
void MoveToLongitudeLatitudeHeight(const FVector& LongitudeLatitudeHeight);
|
||||
UFUNCTION(BlueprintPure)
|
||||
bool IsFlying() { return bFlying; }
|
||||
UFUNCTION(BlueprintCallable)
|
||||
void EnableCameraLag(bool bOpen);
|
||||
UFUNCTION(BlueprintCallable)
|
||||
void SetMaxRollDistance(float _MaxDistance);
|
||||
|
||||
FConvexVolume GetViewFrustum();
|
||||
bool CheckPointInViewFrustum(const FVector& Point);
|
||||
|
||||
// 停止按键移动
|
||||
UFUNCTION(BlueprintCallable)
|
||||
void StopKeyMove();
|
||||
// 允许按键移动
|
||||
UFUNCTION(BlueprintCallable)
|
||||
void StartKeyMove();
|
||||
UFUNCTION(BlueprintCallable)
|
||||
void SetEnabledAroundPointRotation(bool bEnabled) { IsEnabledAroundPointRotation = bEnabled; }
|
||||
UFUNCTION(BlueprintCallable)
|
||||
void ClearCurrentSlowStopMoveOffsetTime();
|
||||
public:
|
||||
//正在创建对象
|
||||
UPROPERTY(BlueprintReadWrite)
|
||||
bool IsCreatingActor;
|
||||
protected:
|
||||
|
||||
virtual void BeginPlay()override;
|
||||
|
||||
virtual void SetupPlayerInputComponent(UInputComponent* InInputComponent) override;
|
||||
|
||||
void PressMouseMiddleButton();
|
||||
void ReleaseMouseMiddleButton();
|
||||
UFUNCTION(BlueprintCallable)
|
||||
void PressMouseLeftButton();
|
||||
UFUNCTION(BlueprintCallable)
|
||||
void ReleaseMouseLeftButton();
|
||||
UFUNCTION(BlueprintCallable)
|
||||
void PressMouseRightButton();
|
||||
UFUNCTION(BlueprintCallable)
|
||||
void ReleaseMouseRightButton();
|
||||
void _TurnAtRate(const FInputActionValue& Value);
|
||||
void GamePadTurnAtRate(const FInputActionValue& Value);
|
||||
void _LookUpAtRate(const FInputActionValue& Value);
|
||||
void GamePadLookUpAtRate(const FInputActionValue& Value);
|
||||
// 通过滚动轴缩进距离
|
||||
void MouseRollDistance(const FInputActionValue& Value);
|
||||
void TS_TriggeredTwoTouch(const FInputActionValue& Value);
|
||||
void TS_MouseRollDistance(const FInputActionValue& Value);
|
||||
void TS_PressTwoTouch();
|
||||
void TS_ReleaseTwoTouch();
|
||||
void TS_FOVRotation(const FInputActionValue& Value);
|
||||
void TS_UpDownPitch(const FInputActionValue& Value);
|
||||
void TS_StartAction();
|
||||
void MouseLeftMovePawn(const FInputActionValue& Value);
|
||||
UFUNCTION(BlueprintCallable)
|
||||
void TouchMovePawn(FVector2D CurScreenPosition, FVector2D LastScreenPosition);
|
||||
|
||||
void UpdataMoveToLocation(float DeltaTime);
|
||||
|
||||
UFUNCTION(BlueprintCallable)
|
||||
FORCEINLINE void SetGeoreference(TSoftObjectPtr<class ACesiumGeoreference> TheGeoreference) { Georeference = TheGeoreference; }
|
||||
|
||||
void _MoveForward(const FInputActionValue& TheValue);
|
||||
|
||||
void ReleaseMoveButton();
|
||||
|
||||
void StopMoveForward();
|
||||
void StopMoveRight();
|
||||
UFUNCTION(BlueprintImplementableEvent)
|
||||
void UpdateOriginCoordinate();
|
||||
|
||||
// 设置是否允许鼠标左键移动
|
||||
UFUNCTION(BlueprintCallable)
|
||||
void AllowLeftMouseMovePlayer(bool bAllow);
|
||||
UFUNCTION(BlueprintCallable)
|
||||
bool GetKeyMoveState();
|
||||
|
||||
UFUNCTION(BlueprintCallable)
|
||||
bool GetPressLeftMouseKey() { return bPressMouseLeftKey; };
|
||||
|
||||
// 自动更新,通过鼠标右键进行旋转时产生的滑动效果
|
||||
void UpdateSlideRotation(float DeltaTime);
|
||||
protected:
|
||||
//鼠标中键值
|
||||
UPROPERTY(BlueprintReadOnly)
|
||||
float MiddleKeyValue;
|
||||
private:
|
||||
|
||||
void StartSlowStopMove();
|
||||
|
||||
|
||||
// 停止通过鼠标左键移动
|
||||
void StopMouseLeftMove();
|
||||
// 延迟更新原点
|
||||
void DelayUpdateOrigin(float DelayTime = 0.1);
|
||||
|
||||
// 当鼠标左键移动以后的缓冲惯性移动
|
||||
void InertialMove(float DeltaTime);
|
||||
private:
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = InputAction, meta = (AllowPrivateAccess = "true"))
|
||||
UInputAction* MouseLeftAsset;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = InputAction, meta = (AllowPrivateAccess = "true"))
|
||||
UInputAction* MouseRightAsset;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = InputAction, meta = (AllowPrivateAccess = "true"))
|
||||
UInputAction* TurnAsset;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = InputAction, meta = (AllowPrivateAccess = "true"))
|
||||
UInputAction* LookUpAsset;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = InputAction, meta = (AllowPrivateAccess = "true"))
|
||||
UInputAction* MouseRollAxisAsset;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = InputAction, meta = (AllowPrivateAccess = "true"))
|
||||
UInputAction* MouseMiddleAxisAsset;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = InputAction, meta = (AllowPrivateAccess = "true"))
|
||||
UInputAction* MoveForwardAsset;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = InputAction, meta = (AllowPrivateAccess = "true"))
|
||||
UInputAction* MoveRightAsset;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = InputAction, meta = (AllowPrivateAccess = "true"))
|
||||
UInputAction* TS_TwoTouchAsset;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = InputAction, meta = (AllowPrivateAccess = "true"))
|
||||
UInputAction* GamePadTurnAsset;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = InputAction, meta = (AllowPrivateAccess = "true"))
|
||||
UInputAction* GamePadLookUPAsset;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = InputAction, meta = (AllowPrivateAccess = "true"))
|
||||
UInputMappingContext* BaseInputAction;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Controller, meta = (AllowPrivateAccess = "true"))
|
||||
ARoverController* PlayerController;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = InputAction, meta = (AllowPrivateAccess = "true"))
|
||||
UCesiumFlyToComponent* FlyComp;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = InputAction, meta = (AllowPrivateAccess = "true"))
|
||||
UCameraComponent* Camera;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = InputAction, meta = (AllowPrivateAccess = "true"))
|
||||
USpringArmComponent* SpringArm;
|
||||
// 是否按下鼠标中键
|
||||
bool bPressMouseMiddleKey;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = InputAction, meta = (AllowPrivateAccess = "true"))
|
||||
float SelfBaseTurnRate;
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = InputAction, meta = (AllowPrivateAccess = "true"))
|
||||
float SelfBaseLookUpRate;
|
||||
|
||||
// 滚动中键时的缩放速度
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Property, meta = (AllowPrivateAccess = "true"))
|
||||
float ZoomRollSpeed;
|
||||
|
||||
// 当绕中间旋转时保存的屏幕中间位置
|
||||
FVector screenMiddleLocation;
|
||||
|
||||
// 按下中键旋转的角度
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Property, meta = (AllowPrivateAccess = "true"))
|
||||
float RotateAngle;
|
||||
|
||||
// 是否按下鼠标右键
|
||||
bool bPressMouseRightKey;
|
||||
// 是否按下鼠标左键
|
||||
bool bPressMouseLeftKey;
|
||||
|
||||
FVector2D MousePosition;
|
||||
FVector2D LastMousePosition;
|
||||
|
||||
FVector2D TestMousePosition;
|
||||
FVector2D TestLastMousePosition;
|
||||
|
||||
// 鼠标左键基础移动速率
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Property, meta = (AllowPrivateAccess = "true"))
|
||||
float BaseMouseLeftMoveRate;
|
||||
|
||||
// 通过鼠标左键移动到的位置
|
||||
FVector MoveToLocation;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, BlueprintSetter = SetGeoreference, Category = Property, meta = (AllowPrivateAccess = "true"))
|
||||
TSoftObjectPtr<ACesiumGeoreference> Georeference;
|
||||
|
||||
// 刷新当前原点经纬度
|
||||
FTimerHandle RefreshOriginLongitudeLatitudeTimer;
|
||||
|
||||
// 当超过最大距离时刷新原点经纬度
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Property, meta = (AllowPrivateAccess = "true"))
|
||||
float MaxDistance;
|
||||
|
||||
// 当前是否在向(前/后)移动
|
||||
bool bMoveForward;
|
||||
// 当前是否在向(左/右)移动
|
||||
bool bMoveRight;
|
||||
|
||||
FVector ForwardDirection;
|
||||
FVector RightDirection;
|
||||
|
||||
// 按键移动速度
|
||||
float MoveSpeed;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Class, meta = (AllowPrivateAccess = "true"))
|
||||
TSubclassOf<UUserWidget> QuitGameDialogClass;
|
||||
|
||||
// 是否限制绕点旋转的视角
|
||||
bool bLimitViewport;
|
||||
// 是否允许鼠标左键移动
|
||||
bool bAllowMouseLeftMove;
|
||||
// 当使用左键移动时,控制高度来控制移动速度
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Move, meta = (AllowPrivateAccess = "true"))
|
||||
float ControlHeightMulitiplier;
|
||||
// 当使用左键移动时,控制高度来控制移动速度乘数
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Move, meta = (AllowPrivateAccess = "true"))
|
||||
float LongitudeLatitudeControlHeightMulitiplier;
|
||||
|
||||
// 鼠标左键移动时的缓慢停止移动计时器
|
||||
FTimerHandle SlowStopMoveTimer;
|
||||
|
||||
|
||||
// 鼠标移动偏移乘数(用于多少时间停止移动的乘数)
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Move, meta = (AllowPrivateAccess = "true"))
|
||||
float MouseMoveOffsetMulitiplier;
|
||||
|
||||
// 是否允许更新鼠标左键移动
|
||||
bool bAllowUpdataMove;
|
||||
// 鼠标最后一次移动的方向
|
||||
FVector MoveDirectionLast;
|
||||
// 缓慢停止时的移动速度
|
||||
float SlowStopMoveSpeed;
|
||||
// 总的缓慢停止时的拖尾移动时间
|
||||
float TotalSlowStopMoveOffsetTime;
|
||||
// 当前缓慢停止时的拖尾移动时间
|
||||
float CurrentSlowStopMoveOffsetTime;
|
||||
// 高度转变鼠标移动方式的阈值
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Move, meta = (AllowPrivateAccess = "true"))
|
||||
float ChangeHeightThreshold;
|
||||
// 更新原点经纬度计时器
|
||||
FTimerHandle UpdateOriginLongitudeLatitdeTimer;
|
||||
|
||||
// 当前是否正在飞行
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Property, meta = (AllowPrivateAccess = "true"))
|
||||
bool bFlying;
|
||||
|
||||
// 当进行滚动轴缩放时,滚动点离屏幕中心点远时的平移缩放偏移乘数
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Property, meta = (AllowPrivateAccess = "true"))
|
||||
float ZoomOffsetMulitiplier;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Property, meta = (AllowPrivateAccess = "true"))
|
||||
// 当高于该阈值时更新缩放偏移
|
||||
float ZoomOffsetHeightValue;
|
||||
// 当前是否跟随运动轨迹
|
||||
bool bFollowSportTrace;
|
||||
|
||||
|
||||
// 在飞行途中更新原点计时器
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Timer, meta = (AllowPrivateAccess = "true"))
|
||||
FTimerHandle UpdateFlyOriginTimer;
|
||||
|
||||
// 从当前位置到移动位置的距离
|
||||
double CurrentMoveDistance;
|
||||
// 移动速度乘数
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Property, meta = (AllowPrivateAccess = "true"))
|
||||
double MoveSpeedMultiplier;
|
||||
|
||||
// 是否允许惯性移动
|
||||
bool bAllowInertialMove;
|
||||
|
||||
FVector MouseClickLongitudeLatitude;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, BlueprintSetter = SetAssistMouseLeftMoveActor, Category = Move, meta = (AllowPrivateAccess = "true"))
|
||||
TSoftObjectPtr< AStaticMeshActor> AssistMouseLeftMoveActor;
|
||||
|
||||
ECollisionChannel CheckMoveCollisionChannel;
|
||||
|
||||
// 当前选择的模式
|
||||
ESelecteItemMode SelecteItemMode;
|
||||
// 上一次选择的模式
|
||||
ESelecteItemMode LastSelecteItemMode;
|
||||
|
||||
// 当正在进行自动旋转时,如果按下鼠标右键自行选择角度时临时停止旋转
|
||||
bool bTempStopAutoRotate;
|
||||
|
||||
// 当前高亮模型对象
|
||||
USkeletalMeshComponent* CurrentHightLightModel;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Property, meta = (AllowPrivateAccess = "true"))
|
||||
bool bHDRIMode = false;
|
||||
|
||||
// 鼠标右键的滑动速度
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Property, meta = (AllowPrivateAccess = "true"))
|
||||
float SlideSpeed = 1;
|
||||
// 滑动时间
|
||||
float SlideTime = 0;
|
||||
float TotalSlideTime = 0;
|
||||
|
||||
// 滑动速度乘数
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Move, meta = (AllowPrivateAccess = "true"))
|
||||
float SlideSpeedMulitiplier = 0.01f;
|
||||
// 当前最大滚动距离
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Move, meta = (AllowPrivateAccess = "true"))
|
||||
float CurrentMaxRollDistance = 1000000000.0f;
|
||||
//最大滚动系数
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Move, meta = (AllowPrivateAccess = "true"))
|
||||
float MaxRollCoefficient = 1.f;
|
||||
// 是否按下移动按钮(W,S,A,D)
|
||||
bool bPressMoveButton = false;
|
||||
|
||||
// 绕一个点旋转的极限值
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Rotate, meta = (AllowPrivateAccess = "true"))
|
||||
float LimitValueOfRotateAroundPoint = 911352.5488545;
|
||||
// 当前是否按下双指缩放
|
||||
bool bTS_PressTwoTouch = false;
|
||||
|
||||
FVector2D Touch1, Touch2;
|
||||
FVector2D LastTouch1, LastTouch2;
|
||||
bool bPressTouch1, bPressTouch2;
|
||||
FTimerHandle TS_ActionTimer;
|
||||
bool bTS_StartAction = false;
|
||||
ETSAction TS_ActionStatus = ETSAction::ETS_Default;
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Property, meta = (AllowPrivateAccess = "true"))
|
||||
float TS_DelayTime = 0.07f;
|
||||
std::optional<FHitResult> TS_ZoomHitResult = std::nullopt;
|
||||
// 双指触摸延迟释放
|
||||
FTimerHandle TS_DelayReleaseTimer;
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Property, meta = (AllowPrivateAccess = "true"))
|
||||
float CurrentHeight = 0;
|
||||
// 最大跨越纬度
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Property, meta = (AllowPrivateAccess = "true"))
|
||||
float MaxCrossingLatitude = 75.f;
|
||||
// 当通过鼠标左键移动地球时,鼠标没有点到地形的情况下运行
|
||||
bool bAllowUpdateSlide = false;
|
||||
// 当角色纬度超过正负MaxCrossingLatitude时,启用平滑过渡
|
||||
FTimerHandle CrossingLatitudeTimer;
|
||||
// 更新高度计时器
|
||||
FTimerHandle UpdateHeightTimer;
|
||||
// 用于更新在太空没有击中地面时是否使用缓慢滑行
|
||||
bool bAllowSlowStopMove = true;
|
||||
// 当前是否在仰视天空,如果在仰视且点中天空就执行平移变旋转视角
|
||||
bool bCurrentLookingup = false;
|
||||
// 当在旋转时释放移动操作
|
||||
FTimerHandle ReleaseMoveButtonTimer;
|
||||
|
||||
std::atomic<FVector> PlayerLongitudeLatitudeHeight = FVector(0);
|
||||
|
||||
bool bKeyMove = true;
|
||||
|
||||
bool IsEnabledAroundPointRotation = true;
|
||||
public:
|
||||
static ARover* PlayerPawn;
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Property)
|
||||
bool IsUpdateOrignLongitudeLatitude = true;
|
||||
};
|
||||
|
||||
57
Source/BXSSP/Public/RoverController.h
Normal file
57
Source/BXSSP/Public/RoverController.h
Normal file
@ -0,0 +1,57 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "GameFramework/PlayerController.h"
|
||||
#include "RoverController.generated.h"
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
UCLASS()
|
||||
class BXSSP_API ARoverController : public APlayerController
|
||||
{
|
||||
GENERATED_BODY()
|
||||
public:
|
||||
ARoverController();
|
||||
|
||||
// 设置鼠标显示状态
|
||||
UFUNCTION(BlueprintCallable)
|
||||
void SetMouseShowStatus(bool bStatus);
|
||||
|
||||
// 获得鼠标下撞击点位置
|
||||
UFUNCTION(BlueprintCallable)
|
||||
bool GetUnderMouseHitPosition(FHitResult& HitResult);
|
||||
|
||||
// 获得屏幕中心撞击位置
|
||||
UFUNCTION(BlueprintPure)
|
||||
bool GetUnderscreenCenterHitPosition(FHitResult& HitResult);
|
||||
bool GetUnderScreenHitPosition(const FVector2D& ScreenPosition, FHitResult& HitResult);
|
||||
UFUNCTION(BlueprintPure)
|
||||
static FVector2D GetScreenCenterPosition();
|
||||
protected:
|
||||
|
||||
virtual void BeginPlay()override;
|
||||
|
||||
private:
|
||||
// 重置鼠标位置到点击点
|
||||
void ResetMousePositionToClickPoint();
|
||||
UFUNCTION()
|
||||
void RotateCameraToTargetPoint(FRotator Rotation);
|
||||
private:
|
||||
|
||||
// 把鼠标位置重置到屏幕开始点击时的位置(用于防止鼠标拖到屏幕边界出现不能拖动情况)
|
||||
FTimerHandle ResetMousePositionTimer;
|
||||
|
||||
FVector2D ClickMousePosition;
|
||||
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Player, meta = (AllowPrivateAccess = "true"))
|
||||
class ARover* Rover;
|
||||
public:
|
||||
static ARoverController* PlayerController;
|
||||
// (当开始自动旋转时,先让摄像机看向目标对象)时用的计时器
|
||||
FTimerHandle RotateCameraTimer;
|
||||
|
||||
};
|
||||
24
Source/BXSSP/Public/RoverGameModeBase.h
Normal file
24
Source/BXSSP/Public/RoverGameModeBase.h
Normal file
@ -0,0 +1,24 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "GameFramework/GameModeBase.h"
|
||||
#include "RoverGameModeBase.generated.h"
|
||||
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
UCLASS()
|
||||
class BXSSP_API ARoverGameModeBase : public AGameModeBase
|
||||
{
|
||||
GENERATED_BODY()
|
||||
public:
|
||||
|
||||
ARoverGameModeBase();
|
||||
static void Init();
|
||||
public:
|
||||
static ARoverGameModeBase* BaseGameMode;
|
||||
};
|
||||
Reference in New Issue
Block a user