初始提交: UE5.3项目基础框架
This commit is contained in:
16
Source/BXSSP.Target.cs
Normal file
16
Source/BXSSP.Target.cs
Normal file
@ -0,0 +1,16 @@
|
||||
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
using UnrealBuildTool;
|
||||
using System.Collections.Generic;
|
||||
|
||||
public class BXSSPTarget : TargetRules
|
||||
{
|
||||
public BXSSPTarget(TargetInfo Target) : base(Target)
|
||||
{
|
||||
Type = TargetType.Game;
|
||||
DefaultBuildSettings = BuildSettingsVersion.V4;
|
||||
IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_3;
|
||||
ExtraModuleNames.Add("BXSSP");
|
||||
ExtraModuleNames.AddRange(new string[] { "BXSSP", "CesiumRuntime" });
|
||||
}
|
||||
}
|
||||
23
Source/BXSSP/BXSSP.Build.cs
Normal file
23
Source/BXSSP/BXSSP.Build.cs
Normal file
@ -0,0 +1,23 @@
|
||||
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
using UnrealBuildTool;
|
||||
|
||||
public class BXSSP : ModuleRules
|
||||
{
|
||||
public BXSSP(ReadOnlyTargetRules Target) : base(Target)
|
||||
{
|
||||
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
|
||||
|
||||
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "CesiumRuntime","Engine", "InputCore", "EnhancedInput", "UMG", "Slate", "Json", "JsonUtilities", "HTTP", "XmlParser", "SlateCore", "Niagara", "ProceduralMeshComponent", "WebSockets", "GeometryFramework", "CableComponent", });
|
||||
|
||||
PrivateDependencyModuleNames.AddRange(new string[] { });
|
||||
|
||||
// Uncomment if you are using Slate UI
|
||||
// PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" });
|
||||
|
||||
// Uncomment if you are using online features
|
||||
// PrivateDependencyModuleNames.Add("OnlineSubsystem");
|
||||
|
||||
// To include OnlineSubsystemSteam, add it to the plugins section in your uproject file with the Enabled attribute set to true
|
||||
}
|
||||
}
|
||||
6
Source/BXSSP/BXSSP.cpp
Normal file
6
Source/BXSSP/BXSSP.cpp
Normal file
@ -0,0 +1,6 @@
|
||||
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
#include "BXSSP.h"
|
||||
#include "Modules/ModuleManager.h"
|
||||
|
||||
IMPLEMENT_PRIMARY_GAME_MODULE( FDefaultGameModuleImpl, BXSSP, "BXSSP" );
|
||||
6
Source/BXSSP/BXSSP.h
Normal file
6
Source/BXSSP/BXSSP.h
Normal file
@ -0,0 +1,6 @@
|
||||
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
|
||||
5
Source/BXSSP/Private/MainHUD.cpp
Normal file
5
Source/BXSSP/Private/MainHUD.cpp
Normal file
@ -0,0 +1,5 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
|
||||
#include "MainHUD.h"
|
||||
|
||||
1073
Source/BXSSP/Private/Rover.cpp
Normal file
1073
Source/BXSSP/Private/Rover.cpp
Normal file
File diff suppressed because it is too large
Load Diff
99
Source/BXSSP/Private/RoverController.cpp
Normal file
99
Source/BXSSP/Private/RoverController.cpp
Normal file
@ -0,0 +1,99 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
#include "RoverController.h"
|
||||
#include "Rover.h"
|
||||
#include "RoverGameModeBase.h"
|
||||
#include "Kismet/GameplayStatics.h"
|
||||
#include "Kismet/KismetMathLibrary.h"
|
||||
|
||||
ARoverController* ARoverController::PlayerController = nullptr;
|
||||
|
||||
ARoverController::ARoverController()
|
||||
{
|
||||
PlayerController = this;
|
||||
}
|
||||
void ARoverController::BeginPlay()
|
||||
{
|
||||
|
||||
Super::BeginPlay();
|
||||
ARoverGameModeBase::Init();
|
||||
if (UGameplayStatics::GetPlayerController(GetWorld(), 0) == this) {
|
||||
|
||||
SetShowMouseCursor(true);
|
||||
Rover = Cast<ARover>(UGameplayStatics::GetPlayerPawn(GetWorld(), 0));
|
||||
|
||||
UE_LOG(LogTemp, Log, TEXT("Init Successful"));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void ARoverController::SetMouseShowStatus(bool bStatus)
|
||||
{
|
||||
if (bStatus) {
|
||||
GetWorldTimerManager().ClearTimer(ResetMousePositionTimer);
|
||||
}
|
||||
else {
|
||||
GetMousePosition(ClickMousePosition.X, ClickMousePosition.Y);
|
||||
GetWorldTimerManager().ClearTimer(ResetMousePositionTimer);
|
||||
GetWorldTimerManager().SetTimer(ResetMousePositionTimer, this, &ARoverController::ResetMousePositionToClickPoint, 0.05f, true);
|
||||
}
|
||||
SetShowMouseCursor(bStatus);
|
||||
}
|
||||
|
||||
bool ARoverController::GetUnderMouseHitPosition(FHitResult& HitResult)
|
||||
{
|
||||
FVector2D MousePosition;
|
||||
GetMousePosition(MousePosition.X, MousePosition.Y);
|
||||
return GetUnderScreenHitPosition(MousePosition, HitResult);
|
||||
}
|
||||
|
||||
bool ARoverController::GetUnderScreenHitPosition(const FVector2D& ScreenPosition, FHitResult& HitResult)
|
||||
{
|
||||
FVector WorldLocation;
|
||||
FVector WorldDirection;
|
||||
DeprojectScreenPositionToWorld(ScreenPosition.X, ScreenPosition.Y, WorldLocation, WorldDirection);
|
||||
FVector End = WorldLocation + WorldDirection * 10000000000;
|
||||
if (GetWorld()->LineTraceSingleByChannel(HitResult, WorldLocation, End, ECollisionChannel::ECC_Visibility)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ARoverController::GetUnderscreenCenterHitPosition(FHitResult& HitResult)
|
||||
{
|
||||
FVector WorldLocation;
|
||||
FVector WorldDirection;
|
||||
FVector2D ScreenCenter = GetScreenCenterPosition();
|
||||
DeprojectScreenPositionToWorld(ScreenCenter.X, ScreenCenter.Y, WorldLocation, WorldDirection);
|
||||
FVector End = WorldLocation + WorldDirection * 10000000000;
|
||||
if (GetWorld()->LineTraceSingleByChannel(HitResult, WorldLocation, End, ECollisionChannel::ECC_Visibility)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
FVector2D ARoverController::GetScreenCenterPosition()
|
||||
{
|
||||
FVector2D ScreenCenter;
|
||||
GEngine->GameViewport->GetViewportSize(ScreenCenter);
|
||||
ScreenCenter *= 0.5;
|
||||
return ScreenCenter;
|
||||
}
|
||||
|
||||
|
||||
void ARoverController::ResetMousePositionToClickPoint()
|
||||
{
|
||||
SetMouseLocation(ClickMousePosition.X, ClickMousePosition.Y);
|
||||
}
|
||||
|
||||
void ARoverController::RotateCameraToTargetPoint(FRotator Rotation)
|
||||
{
|
||||
FRotator SelfRotation = GetControlRotation();
|
||||
if (UKismetMathLibrary::Dot_VectorVector(SelfRotation.Vector(), Rotation.Vector()) >= 0.999999) {
|
||||
SetControlRotation(Rotation);
|
||||
Rover->UpdatascreenCenterPointLocation();
|
||||
GetWorldTimerManager().ClearTimer(RotateCameraTimer);
|
||||
return;
|
||||
}
|
||||
SetControlRotation(UKismetMathLibrary::RInterpTo(SelfRotation, Rotation, GetWorld()->GetDeltaSeconds(), 5.f));
|
||||
}
|
||||
15
Source/BXSSP/Private/RoverGameModeBase.cpp
Normal file
15
Source/BXSSP/Private/RoverGameModeBase.cpp
Normal file
@ -0,0 +1,15 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
|
||||
#include "RoverGameModeBase.h"
|
||||
|
||||
ARoverGameModeBase* ARoverGameModeBase::BaseGameMode = nullptr;
|
||||
|
||||
ARoverGameModeBase::ARoverGameModeBase()
|
||||
{
|
||||
BaseGameMode = this;
|
||||
}
|
||||
|
||||
void ARoverGameModeBase::Init()
|
||||
{
|
||||
}
|
||||
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;
|
||||
};
|
||||
15
Source/BXSSPEditor.Target.cs
Normal file
15
Source/BXSSPEditor.Target.cs
Normal file
@ -0,0 +1,15 @@
|
||||
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||
|
||||
using UnrealBuildTool;
|
||||
using System.Collections.Generic;
|
||||
|
||||
public class BXSSPEditorTarget : TargetRules
|
||||
{
|
||||
public BXSSPEditorTarget( TargetInfo Target) : base(Target)
|
||||
{
|
||||
Type = TargetType.Editor;
|
||||
DefaultBuildSettings = BuildSettingsVersion.V4;
|
||||
IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_3;
|
||||
ExtraModuleNames.Add("BXSSP");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user