From 1220a82663c44f10a5bffd15de79f0df4a5d1a22 Mon Sep 17 00:00:00 2001 From: Foxim Date: Wed, 12 Feb 2025 15:15:36 +0100 Subject: [PATCH] feat: add initial project --- .gitignore | 1 + .vsconfig | 13 ++++ Config/DefaultEditor.ini | 0 Config/DefaultEngine.ini | 54 ++++++++++++++++ Config/DefaultGame.ini | 2 + Config/DefaultInput.ini | 86 +++++++++++++++++++++++++ Content/Blueprints/Levels/TestMap.umap | Bin 0 -> 38684 bytes Content/Blueprints/TestMap.umap | Bin 0 -> 1409 bytes Content/TestMap.umap | Bin 0 -> 1373 bytes Exo.uproject | 22 +++++++ Source/Exo.Target.cs | 15 +++++ Source/Exo/Exo.Build.cs | 23 +++++++ Source/Exo/Exo.cpp | 6 ++ Source/Exo/Exo.h | 6 ++ Source/Exo/ExoGameModeBase.cpp | 5 ++ Source/Exo/ExoGameModeBase.h | 17 +++++ Source/ExoEditor.Target.cs | 15 +++++ 17 files changed, 265 insertions(+) create mode 100644 .vsconfig create mode 100644 Config/DefaultEditor.ini create mode 100644 Config/DefaultEngine.ini create mode 100644 Config/DefaultGame.ini create mode 100644 Config/DefaultInput.ini create mode 100644 Content/Blueprints/Levels/TestMap.umap create mode 100644 Content/Blueprints/TestMap.umap create mode 100644 Content/TestMap.umap create mode 100644 Exo.uproject create mode 100644 Source/Exo.Target.cs create mode 100644 Source/Exo/Exo.Build.cs create mode 100644 Source/Exo/Exo.cpp create mode 100644 Source/Exo/Exo.h create mode 100644 Source/Exo/ExoGameModeBase.cpp create mode 100644 Source/Exo/ExoGameModeBase.h create mode 100644 Source/ExoEditor.Target.cs diff --git a/.gitignore b/.gitignore index 632806e..07bb2d4 100644 --- a/.gitignore +++ b/.gitignore @@ -41,6 +41,7 @@ *.sdf *.VC.db *.VC.opendb +*.idea # Precompiled Assets SourceArt/**/*.png diff --git a/.vsconfig b/.vsconfig new file mode 100644 index 0000000..1a9d718 --- /dev/null +++ b/.vsconfig @@ -0,0 +1,13 @@ +{ + "version": "1.0", + "components": [ + "Microsoft.Net.Component.4.6.2.TargetingPack", + "Microsoft.VisualStudio.Component.VC.14.36.17.6.x86.x64", + "Microsoft.VisualStudio.Component.VC.Tools.x86.x64", + "Microsoft.VisualStudio.Component.Windows10SDK.22000", + "Microsoft.VisualStudio.Workload.CoreEditor", + "Microsoft.VisualStudio.Workload.ManagedDesktop", + "Microsoft.VisualStudio.Workload.NativeDesktop", + "Microsoft.VisualStudio.Workload.NativeGame" + ] +} diff --git a/Config/DefaultEditor.ini b/Config/DefaultEditor.ini new file mode 100644 index 0000000..e69de29 diff --git a/Config/DefaultEngine.ini b/Config/DefaultEngine.ini new file mode 100644 index 0000000..8ddeec0 --- /dev/null +++ b/Config/DefaultEngine.ini @@ -0,0 +1,54 @@ + + +[Audio] +UseAudioMixer=True + +[OnlineSubsystemEOS] +bUseSessionPresenceAttribute=True + +[/Script/HardwareTargeting.HardwareTargetingSettings] +TargetedHardwareClass=Desktop +AppliedTargetedHardwareClass=Desktop +DefaultGraphicsPerformance=Maximum +AppliedDefaultGraphicsPerformance=Maximum + +[/Script/WindowsTargetPlatform.WindowsTargetSettings] +DefaultGraphicsRHI=DefaultGraphicsRHI_DX12 +!D3D12TargetedShaderFormats=ClearArray ++D3D12TargetedShaderFormats=PCD3D_SM6 + +[/Script/Engine.RendererSettings] +r.GenerateMeshDistanceFields=True +r.DynamicGlobalIlluminationMethod=1 +r.ReflectionMethod=1 +r.Shadow.Virtual.Enable=1 +r.DefaultFeature.AutoExposure.ExtendDefaultLuminanceRange=True +r.DefaultFeature.LocalExposure.HighlightContrastScale=0.8 +r.DefaultFeature.LocalExposure.ShadowContrastScale=0.8 + +[/Script/WorldPartitionEditor.WorldPartitionEditorSettings] +CommandletClass=Class'/Script/UnrealEd.WorldPartitionConvertCommandlet' + +[/Script/Engine.UserInterfaceSettings] +bAuthorizeAutomaticWidgetVariableCreation=False +FontDPIPreset=Standard +FontDPI=72 + +[/Script/AndroidFileServerEditor.AndroidFileServerRuntimeSettings] +bEnablePlugin=True +bAllowNetworkConnection=True +SecurityToken=8C7B35864B4942811C37B4B49E57A3B7 +bIncludeInShipping=False +bAllowExternalStartInShipping=False +bCompileAFSProject=False +bUseCompression=False +bLogFiles=False +bReportStats=False +ConnectionType=USBOnly +bUseManualIPAddress=False +ManualIPAddress= + +[/Script/EngineSettings.GameMapsSettings] +EditorStartupMap=/Game/Blueprints/Levels/TestMap.TestMap +GameDefaultMap=/Game/Blueprints/Levels/TestMap.TestMap + diff --git a/Config/DefaultGame.ini b/Config/DefaultGame.ini new file mode 100644 index 0000000..b0edad4 --- /dev/null +++ b/Config/DefaultGame.ini @@ -0,0 +1,2 @@ +[/Script/EngineSettings.GeneralProjectSettings] +ProjectID=0E0B54CE4463DE25F2EEF086EC556E98 diff --git a/Config/DefaultInput.ini b/Config/DefaultInput.ini new file mode 100644 index 0000000..1ff89cc --- /dev/null +++ b/Config/DefaultInput.ini @@ -0,0 +1,86 @@ +[/Script/Engine.InputSettings] +-AxisConfig=(AxisKeyName="Gamepad_LeftX",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) +-AxisConfig=(AxisKeyName="Gamepad_LeftY",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) +-AxisConfig=(AxisKeyName="Gamepad_RightX",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) +-AxisConfig=(AxisKeyName="Gamepad_RightY",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) +-AxisConfig=(AxisKeyName="MouseX",AxisProperties=(DeadZone=0.f,Exponent=1.f,Sensitivity=0.07f)) +-AxisConfig=(AxisKeyName="MouseY",AxisProperties=(DeadZone=0.f,Exponent=1.f,Sensitivity=0.07f)) +-AxisConfig=(AxisKeyName="Mouse2D",AxisProperties=(DeadZone=0.f,Exponent=1.f,Sensitivity=0.07f)) ++AxisConfig=(AxisKeyName="Gamepad_LeftX",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_LeftY",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_RightX",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_RightY",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MouseX",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MouseY",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Mouse2D",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MouseWheelAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_LeftTriggerAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_RightTriggerAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_Special_Left_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_Special_Left_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Left_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Left_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Right_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Right_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Left_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Left_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Left_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Left_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Right_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Right_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Right_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Right_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Left_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Left_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Left_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Right_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Right_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Right_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Grip_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Trackpad_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Grip_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Trackpad_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) +bAltEnterTogglesFullscreen=True +bF11TogglesFullscreen=True +bUseMouseForTouch=False +bEnableMouseSmoothing=True +bEnableFOVScaling=True +bCaptureMouseOnLaunch=True +bEnableLegacyInputScales=True +bEnableMotionControls=True +bFilterInputByPlatformUser=False +bEnableInputDeviceSubsystem=True +bShouldFlushPressedKeysOnViewportFocusLost=True +bEnableDynamicComponentInputBinding=True +bAlwaysShowTouchInterface=False +bShowConsoleOnFourFingerTap=True +bEnableGestureRecognizer=False +bUseAutocorrect=False +DefaultViewportMouseCaptureMode=CapturePermanently_IncludingInitialMouseDown +DefaultViewportMouseLockMode=LockOnCapture +FOVScale=0.011110 +DoubleClickTime=0.200000 +DefaultPlayerInputClass=/Script/EnhancedInput.EnhancedPlayerInput +DefaultInputComponentClass=/Script/EnhancedInput.EnhancedInputComponent +DefaultTouchInterface=/Engine/MobileResources/HUD/DefaultVirtualJoysticks.DefaultVirtualJoysticks +-ConsoleKeys=Tilde ++ConsoleKeys=Tilde + diff --git a/Content/Blueprints/Levels/TestMap.umap b/Content/Blueprints/Levels/TestMap.umap new file mode 100644 index 0000000000000000000000000000000000000000..0b8a1fc864c399348b63d363c60b1eae75a0026d GIT binary patch literal 38684 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 Dln@o{ literal 0 HcmV?d00001 diff --git a/Content/TestMap.umap b/Content/TestMap.umap new file mode 100644 index 0000000000000000000000000000000000000000..1ac4bf4e5a0c6c34ca983bf9b5721ea90ba5f418 GIT binary patch literal 1373 zcmX@utTpe)|Ns9Jm>C$jm>3v70%;In1md?D8=ky$n(~GFmf<4D-EMjsK(QMv3=Dig zTHie}H&s6*wYbDLu>isV=KsRkU1cSure?M+5f!vGYSED+S;M6rrJTNIjM=osk)|m#$b5{ zhE+O?aL5BSfx+9eYkENpGobyNAjcsAV5t2E1qaAZT_iaW(=R_SmEjBXQC?XfCm=C7 zJ25@gCqFqcC$lQCBr`wH4;XsI1&PV23_>N99g;vrkN|bcDNQXX%FHV%hKFs+CkqqI z5T9k&HdzFuEjYO-v!F!ZIlm}1)ITXJHMxZ0ho`O`Ka!klUV0|bIc*NDo@_v2=bXgi zVuq6Piiw;+o^NVNqDx{)BEyr0Et3U-0uV!jQd2UEfQIE4F}!*C#fJkZ0rdt$v3rN8 z0D=!UV6M)RRFFDYqA;FbxD{kycz#h%3WH*7v=}h3zyKr)0)K!Z$PQtmkl56LOhyMV zbs&Gh04O%l0XB6oF=Vx{NaTSE{sp>^8(9IA4T^bWVJ;{KWVa)f4N4g>07{u4j18ch z1yb`5&3u>}K$!v*@*p4yb1aaJ&3u@B*vtnTfQ10*!I}h+qm>cpu`^K5fixh?sRH>} zQluV6ngVGA