468 lines
16 KiB
C
468 lines
16 KiB
C
|
|
// 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;
|
|||
|
|
};
|
|||
|
|
|