Starting multiplayer Marble game
This commit is contained in:
@@ -0,0 +1,13 @@
|
|||||||
|
# UE file types
|
||||||
|
*.uasset filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.umap filter=lfs diff=lfs merge=lfs -text
|
||||||
|
# Raw Content types
|
||||||
|
*.fbx filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.3ds filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.psd filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.png filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.mp3 filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.wav filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.xcf filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.jpg filter=lfs diff=lfs merge=lfs -text
|
||||||
|
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"FileVersion": 3,
|
||||||
|
"EngineAssociation": "5.8",
|
||||||
|
"Category": "",
|
||||||
|
"Description": "",
|
||||||
|
"Modules": [
|
||||||
|
{
|
||||||
|
"Name": "BigMarbleWorld",
|
||||||
|
"Type": "Runtime",
|
||||||
|
"LoadingPhase": "Default",
|
||||||
|
"AdditionalDependencies": [
|
||||||
|
"Engine"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"Plugins": [
|
||||||
|
{
|
||||||
|
"Name": "ModelingToolsEditorMode",
|
||||||
|
"Enabled": true,
|
||||||
|
"TargetAllowList": [
|
||||||
|
"Editor"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,269 @@
|
|||||||
|
|
||||||
|
|
||||||
|
[/Script/EngineSettings.GameMapsSettings]
|
||||||
|
GameDefaultMap=/Game/Maps/Playground/Playground.Playground
|
||||||
|
EditorStartupMap=/Game/Maps/Playground/Playground.Playground
|
||||||
|
GlobalDefaultGameMode=/Script/Engine.GameModeBase
|
||||||
|
|
||||||
|
[/Script/Engine.RendererSettings]
|
||||||
|
r.Mobile.ShadingPath=1
|
||||||
|
r.Mobile.ExtendedGBuffer=False
|
||||||
|
r.Mobile.AntiAliasing=2
|
||||||
|
r.Mobile.FloatPrecisionMode=0
|
||||||
|
r.Mobile.AllowDitheredLODTransition=False
|
||||||
|
r.DiscardUnusedQuality=False
|
||||||
|
r.AllowOcclusionQueries=True
|
||||||
|
r.MinScreenRadiusForLights=0.030000
|
||||||
|
r.MinScreenRadiusForDepthPrepass=0.030000
|
||||||
|
r.PrecomputedVisibilityWarning=False
|
||||||
|
r.TextureStreaming=True
|
||||||
|
Compat.UseDXT5NormalMaps=False
|
||||||
|
r.VirtualTextures=True
|
||||||
|
r.VirtualTexturedLightmaps=False
|
||||||
|
r.VT.TileSize=128
|
||||||
|
r.VT.TileBorderSize=4
|
||||||
|
r.VT.AnisotropicFiltering=False
|
||||||
|
r.VT.EnableAutoImport=False
|
||||||
|
bEnableVirtualTextureOpacityMask=False
|
||||||
|
r.MeshPaintVirtualTexture.Support=True
|
||||||
|
r.MeshPaintVirtualTexture.TileSize=32
|
||||||
|
r.MeshPaintVirtualTexture.TileBorderSize=2
|
||||||
|
r.MeshPaintVirtualTexture.UseCompression=True
|
||||||
|
r.StaticMesh.DefaultMeshPaintTextureSupport=True
|
||||||
|
r.MeshPaintVirtualTexture.DefaultTexelsPerVertex=4
|
||||||
|
r.MeshPaintVirtualTexture.MaxTextureSize=4096
|
||||||
|
r.vt.rvt.EnableBaseColor=True
|
||||||
|
r.vt.rvt.EnableBaseColorRoughness=True
|
||||||
|
r.vt.rvt.EnableBaseColorSpecular=True
|
||||||
|
r.vt.rvt.EnableMask4=True
|
||||||
|
r.vt.rvt.EnableWorldHeight=True
|
||||||
|
r.vt.rvt.EnableDisplacement=True
|
||||||
|
r.vt.rvt.HighQualityPerPixelHeight=True
|
||||||
|
WorkingColorSpaceChoice=sRGB
|
||||||
|
RedChromaticityCoordinate=(X=0.640000,Y=0.330000)
|
||||||
|
GreenChromaticityCoordinate=(X=0.300000,Y=0.600000)
|
||||||
|
BlueChromaticityCoordinate=(X=0.150000,Y=0.060000)
|
||||||
|
WhiteChromaticityCoordinate=(X=0.312700,Y=0.329000)
|
||||||
|
r.LegacyLuminanceFactors=False
|
||||||
|
r.ClearCoatNormal=False
|
||||||
|
r.DynamicGlobalIlluminationMethod=1
|
||||||
|
r.ReflectionMethod=1
|
||||||
|
r.ReflectionCaptureResolution=128
|
||||||
|
r.ReflectionEnvironmentLightmapMixBasedOnRoughness=True
|
||||||
|
r.Lumen.HardwareRayTracing=True
|
||||||
|
r.Lumen.HardwareRayTracing.LightingMode=0
|
||||||
|
r.Lumen.TranslucencyReflections.FrontLayer.EnableForProject=False
|
||||||
|
r.Lumen.TraceMeshSDFs=0
|
||||||
|
r.Lumen.ScreenTracingSource=0
|
||||||
|
r.Lumen.Reflections.HardwareRayTracing.Translucent.Refraction.EnableForProject=True
|
||||||
|
r.MegaLights.EnableForProject=False
|
||||||
|
r.MegaLights.FrontLayerTranslucency.EnableForProject=True
|
||||||
|
r.RayTracing.Shadows=False
|
||||||
|
r.Shadow.Virtual.Enable=1
|
||||||
|
r.RayTracing=True
|
||||||
|
r.RayTracing.RayTracingProxies.ProjectEnabled=True
|
||||||
|
r.RayTracing.UseTextureLod=False
|
||||||
|
r.PathTracing=True
|
||||||
|
r.GenerateMeshDistanceFields=True
|
||||||
|
r.DistanceFields.DefaultVoxelDensity=0.200000
|
||||||
|
r.Nanite.ProjectEnabled=True
|
||||||
|
r.AllowStaticLighting=False
|
||||||
|
r.NormalMapsForStaticLighting=False
|
||||||
|
r.ForwardShading=False
|
||||||
|
r.VertexFoggingForOpaque=True
|
||||||
|
r.SeparateTranslucency=True
|
||||||
|
r.TranslucentSortPolicy=0
|
||||||
|
TranslucentSortAxis=(X=0.000000,Y=-1.000000,Z=0.000000)
|
||||||
|
r.LocalFogVolume.ApplyOnTranslucent=False
|
||||||
|
xr.VRS.FoveationLevel=0
|
||||||
|
xr.VRS.DynamicFoveation=False
|
||||||
|
r.CustomDepth=1
|
||||||
|
r.CustomDepthTemporalAAJitter=True
|
||||||
|
r.PostProcessing.PropagateAlpha=False
|
||||||
|
r.Deferred.SupportPrimitiveAlphaHoldout=False
|
||||||
|
r.DefaultFeature.Bloom=True
|
||||||
|
r.DefaultFeature.AmbientOcclusion=True
|
||||||
|
r.DefaultFeature.AmbientOcclusionStaticFraction=True
|
||||||
|
r.DefaultFeature.AutoExposure=False
|
||||||
|
r.DefaultFeature.AutoExposure.Method=0
|
||||||
|
r.DefaultFeature.AutoExposure.Bias=1.000000
|
||||||
|
r.DefaultFeature.AutoExposure.ExtendDefaultLuminanceRange=True
|
||||||
|
r.DefaultFeature.LocalExposure.HighlightContrastScale=0.800000
|
||||||
|
r.DefaultFeature.LocalExposure.ShadowContrastScale=0.800000
|
||||||
|
r.DefaultFeature.MotionBlur=False
|
||||||
|
r.DefaultFeature.LensFlare=False
|
||||||
|
r.TemporalAA.Upsampling=True
|
||||||
|
r.AntiAliasingMethod=0
|
||||||
|
r.MSAACount=4
|
||||||
|
r.DefaultFeature.LightUnits=1
|
||||||
|
r.DefaultBackBufferPixelFormat=4
|
||||||
|
r.ScreenPercentage.Default=100.000000
|
||||||
|
r.ScreenPercentage.Default.Desktop.Mode=1
|
||||||
|
r.ScreenPercentage.Default.Mobile.Mode=0
|
||||||
|
r.ScreenPercentage.Default.VR.Mode=0
|
||||||
|
r.ScreenPercentage.Default.PathTracer.Mode=0
|
||||||
|
r.Shadow.UnbuiltPreviewInGame=True
|
||||||
|
r.StencilForLODDither=False
|
||||||
|
r.EarlyZPass=3
|
||||||
|
r.EarlyZPassOnlyMaterialMasking=True
|
||||||
|
r.Shadow.CSMCaching=False
|
||||||
|
r.DBuffer=True
|
||||||
|
r.ClearSceneMethod=1
|
||||||
|
r.VelocityOutputPass=0
|
||||||
|
r.Water.SingleLayer.DepthPrepass=True
|
||||||
|
r.Water.SingleLayer.VelocityOutputPass=1
|
||||||
|
r.Velocity.EnableVertexDeformation=2
|
||||||
|
r.SelectiveBasePassOutputs=False
|
||||||
|
bDefaultParticleCutouts=False
|
||||||
|
fx.GPUSimulationTextureSizeX=1024
|
||||||
|
fx.GPUSimulationTextureSizeY=1024
|
||||||
|
r.AllowGlobalClipPlane=False
|
||||||
|
r.GBufferFormat=1
|
||||||
|
r.MorphTarget.Mode=True
|
||||||
|
r.MorphTarget.MaxBlendWeight=5.000000
|
||||||
|
r.SupportSkyAtmosphere=True
|
||||||
|
r.SupportSkyAtmosphereAffectsHeightFog=True
|
||||||
|
r.SupportExpFogMatchesVolumetricFog=False
|
||||||
|
r.SupportLocalFogVolumes=True
|
||||||
|
r.SupportCloudShadowOnForwardLitTranslucent=False
|
||||||
|
r.ClusteredDeferredShading.EnableForProject=True
|
||||||
|
r.LightFunctionAtlas.Format=0
|
||||||
|
r.VolumetricFog.LightFunction=True
|
||||||
|
r.Deferred.UsesLightFunctionAtlas=True
|
||||||
|
r.SingleLayerWater.UsesLightFunctionAtlas=False
|
||||||
|
r.Translucent.UsesLightFunctionAtlas=False
|
||||||
|
r.Translucent.UsesIESProfiles=False
|
||||||
|
r.Translucent.UsesRectLights=False
|
||||||
|
r.Translucent.UsesShadowedLocalLights=False
|
||||||
|
r.GPUCrashDebugging=False
|
||||||
|
vr.InstancedStereo=False
|
||||||
|
r.MobileHDR=True
|
||||||
|
vr.MobileMultiView=False
|
||||||
|
r.Mobile.UseHWsRGBEncoding=False
|
||||||
|
vr.RoundRobinOcclusion=False
|
||||||
|
r.MeshStreaming=False
|
||||||
|
r.HeterogeneousVolumes=True
|
||||||
|
r.HeterogeneousVolumes.Shadows=False
|
||||||
|
r.Translucency.HeterogeneousVolumes=False
|
||||||
|
r.WireframeCullThreshold=5.000000
|
||||||
|
r.SupportStationarySkylight=True
|
||||||
|
r.SupportLowQualityLightmaps=True
|
||||||
|
r.SupportPointLightWholeSceneShadows=True
|
||||||
|
r.Shadow.TranslucentPerObject.ProjectEnabled=False
|
||||||
|
r.Water.SingleLayerWater.SupportCloudShadow=False
|
||||||
|
r.Substrate=True
|
||||||
|
r.Substrate.ProjectGBufferFormat=0
|
||||||
|
r.Substrate.ProjectClosuresPerPixel=4
|
||||||
|
r.Substrate.ProjectClosuresPerPixelOverride=0
|
||||||
|
r.Substrate.BytesPerPixel=80
|
||||||
|
r.Substrate.OpaqueMaterialRoughRefraction=False
|
||||||
|
r.Refraction.Blur=True
|
||||||
|
r.Substrate.Debug.AdvancedVisualizationShaders=False
|
||||||
|
r.Substrate.EnableLayerSupport=False
|
||||||
|
r.Material.RoughDiffuse=False
|
||||||
|
r.Material.EnergyConservation=False
|
||||||
|
r.Material.DefaultAutoMaterialUsage=True
|
||||||
|
r.OIT.SortedPixels=False
|
||||||
|
r.HairStrands.LODMode=True
|
||||||
|
r.VRS.Support=True
|
||||||
|
r.Mobile.EnableStaticAndCSMShadowReceivers=True
|
||||||
|
r.Mobile.EnableMovableLightCSMShaderCulling=True
|
||||||
|
r.Mobile.Forward.EnableLocalLights=1
|
||||||
|
r.Mobile.Forward.EnableClusteredReflections=False
|
||||||
|
r.Mobile.AllowDistanceFieldShadows=True
|
||||||
|
r.Mobile.EnableMovableSpotlightsShadow=False
|
||||||
|
r.GPUSkin.Limit2BoneInfluences=False
|
||||||
|
r.SupportDepthOnlyIndexBuffers=False
|
||||||
|
r.SupportReversedIndexBuffers=False
|
||||||
|
slate.MaterialShaderMode=0
|
||||||
|
r.Mobile.AmbientOcclusion=False
|
||||||
|
r.Mobile.ScreenSpaceReflections=False
|
||||||
|
r.Mobile.DBuffer=False
|
||||||
|
r.Mobile.PropagateAlpha=False
|
||||||
|
r.GPUSkin.UnlimitedBoneInfluences=False
|
||||||
|
r.GPUSkin.AlwaysUseDeformerForUnlimitedBoneInfluences=False
|
||||||
|
r.GPUSkin.UnlimitedBoneInfluencesThreshold=8
|
||||||
|
DefaultBoneInfluenceLimit=(Default=0,PerPlatform=())
|
||||||
|
r.SkinCache.CompileShaders=1
|
||||||
|
r.SkinCache.DefaultBehavior=1
|
||||||
|
r.Nanite.Foliage=False
|
||||||
|
bNaniteStreamableBulkDataOptional=(Default=False,PerPlatform=())
|
||||||
|
bStreamSkeletalMeshLODs=(Default=False,PerPlatform=())
|
||||||
|
bDiscardSkeletalMeshOptionalLODs=(Default=False,PerPlatform=())
|
||||||
|
VisualizeCalibrationColorMaterialPath=/Engine/EngineMaterials/PPM_DefaultCalibrationColor.PPM_DefaultCalibrationColor
|
||||||
|
VisualizeCalibrationCustomMaterialPath=None
|
||||||
|
VisualizeCalibrationGrayscaleMaterialPath=/Engine/EngineMaterials/PPM_DefaultCalibrationGrayscale.PPM_DefaultCalibrationGrayscale
|
||||||
|
r.PSOPrecache.ProxyCreationStrategy=1
|
||||||
|
PSOPrecacheFallbackMaterial=None
|
||||||
|
|
||||||
|
[/Script/WindowsTargetPlatform.WindowsTargetSettings]
|
||||||
|
DefaultGraphicsRHI=DefaultGraphicsRHI_DX12
|
||||||
|
DefaultGraphicsRHI=DefaultGraphicsRHI_DX12
|
||||||
|
-D3D12TargetedShaderFormats=PCD3D_SM5
|
||||||
|
+D3D12TargetedShaderFormats=PCD3D_SM6
|
||||||
|
-D3D11TargetedShaderFormats=PCD3D_SM5
|
||||||
|
+D3D11TargetedShaderFormats=PCD3D_SM5
|
||||||
|
Compiler=Default
|
||||||
|
AudioSampleRate=48000
|
||||||
|
AudioCallbackBufferFrameSize=1024
|
||||||
|
AudioNumBuffersToEnqueue=1
|
||||||
|
AudioMaxChannels=0
|
||||||
|
AudioNumSourceWorkers=4
|
||||||
|
SpatializationPlugin=
|
||||||
|
SourceDataOverridePlugin=
|
||||||
|
ReverbPlugin=
|
||||||
|
OcclusionPlugin=
|
||||||
|
CompressionOverrides=(bOverrideCompressionTimes=False,DurationThreshold=5.000000,MaxNumRandomBranches=0,SoundCueQualityIndex=0)
|
||||||
|
CacheSizeKB=65536
|
||||||
|
MaxChunkSizeOverrideKB=0
|
||||||
|
bResampleForDevice=False
|
||||||
|
MaxSampleRate=48000.000000
|
||||||
|
HighSampleRate=32000.000000
|
||||||
|
MedSampleRate=24000.000000
|
||||||
|
LowSampleRate=12000.000000
|
||||||
|
MinSampleRate=8000.000000
|
||||||
|
CompressionQualityModifier=1.000000
|
||||||
|
AutoStreamingThreshold=0.000000
|
||||||
|
SoundCueCookQualityIndex=-1
|
||||||
|
|
||||||
|
[/Script/LinuxTargetPlatform.LinuxTargetSettings]
|
||||||
|
-TargetedRHIs=SF_VULKAN_SM5
|
||||||
|
+TargetedRHIs=SF_VULKAN_SM6
|
||||||
|
|
||||||
|
[/Script/MacTargetPlatform.MacTargetSettings]
|
||||||
|
-TargetedRHIs=SF_METAL_SM5
|
||||||
|
+TargetedRHIs=SF_METAL_SM6
|
||||||
|
|
||||||
|
|
||||||
|
[/Script/HardwareTargeting.HardwareTargetingSettings]
|
||||||
|
TargetedHardwareClass=Desktop
|
||||||
|
AppliedTargetedHardwareClass=Desktop
|
||||||
|
DefaultGraphicsPerformance=Scalable
|
||||||
|
AppliedDefaultGraphicsPerformance=Scalable
|
||||||
|
|
||||||
|
[/Script/WorldPartitionEditor.WorldPartitionEditorSettings]
|
||||||
|
CommandletClass=Class'/Script/UnrealEd.WorldPartitionConvertCommandlet'
|
||||||
|
|
||||||
|
[/Script/Engine.UserInterfaceSettings]
|
||||||
|
bAuthorizeAutomaticWidgetVariableCreation=False
|
||||||
|
FontDPIPreset=Standard
|
||||||
|
FontDPI=72
|
||||||
|
|
||||||
|
[/Script/Engine.Engine]
|
||||||
|
+ActiveGameNameRedirects=(OldGameName="TP_Blank",NewGameName="/Script/BigMarbleWorld")
|
||||||
|
+ActiveGameNameRedirects=(OldGameName="/Script/TP_Blank",NewGameName="/Script/BigMarbleWorld")
|
||||||
|
|
||||||
|
[/Script/AndroidFileServerEditor.AndroidFileServerRuntimeSettings]
|
||||||
|
bEnablePlugin=True
|
||||||
|
bAllowNetworkConnection=True
|
||||||
|
SecurityToken=01A03558572D7F629657BD74440AF7AB
|
||||||
|
bIncludeInShipping=False
|
||||||
|
bAllowExternalStartInShipping=False
|
||||||
|
bCompileAFSProject=False
|
||||||
|
bUseCompression=False
|
||||||
|
bLogFiles=False
|
||||||
|
bReportStats=False
|
||||||
|
ConnectionType=USBOnly
|
||||||
|
bUseManualIPAddress=False
|
||||||
|
ManualIPAddress=
|
||||||
|
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
|
||||||
|
[/Script/CommonUI.CommonUISettings]
|
||||||
|
CommonButtonAcceptKeyHandling=TriggerClick
|
||||||
|
|
||||||
|
[ConsoleVariables]
|
||||||
|
CommonUI.CheckKeyboardFocusAndParentage=1
|
||||||
|
CommonUI.DisallowUserFocusedWidgetForPendingFocusRecipient=1
|
||||||
|
CommonUI.FallbackToDesiredOnAutoRestoreFailure=1
|
||||||
|
|
||||||
|
[/Script/EngineSettings.GeneralProjectSettings]
|
||||||
|
ProjectID=01A035574B9475648F0FF7583091327A
|
||||||
@@ -0,0 +1,84 @@
|
|||||||
|
[/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
|
||||||
|
bShouldFlushPressedKeysOnViewportFocusLost=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
|
||||||
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,15 @@
|
|||||||
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||||
|
|
||||||
|
using UnrealBuildTool;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
public class BigMarbleWorldTarget : TargetRules
|
||||||
|
{
|
||||||
|
public BigMarbleWorldTarget(TargetInfo Target) : base(Target)
|
||||||
|
{
|
||||||
|
Type = TargetType.Game;
|
||||||
|
DefaultBuildSettings = BuildSettingsVersion.V7;
|
||||||
|
IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_8;
|
||||||
|
ExtraModuleNames.Add("BigMarbleWorld");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||||
|
|
||||||
|
using UnrealBuildTool;
|
||||||
|
|
||||||
|
public class BigMarbleWorld : ModuleRules
|
||||||
|
{
|
||||||
|
public BigMarbleWorld(ReadOnlyTargetRules Target) : base(Target)
|
||||||
|
{
|
||||||
|
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
|
||||||
|
|
||||||
|
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "EnhancedInput" });
|
||||||
|
|
||||||
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||||
|
|
||||||
|
#include "BigMarbleWorld.h"
|
||||||
|
#include "Modules/ModuleManager.h"
|
||||||
|
|
||||||
|
IMPLEMENT_PRIMARY_GAME_MODULE( FDefaultGameModuleImpl, BigMarbleWorld, "BigMarbleWorld" );
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
|
||||||
|
#include "Marble/MarbleController.h"
|
||||||
|
|
||||||
|
#include "EnhancedInputSubsystems.h"
|
||||||
|
|
||||||
|
void AMarbleController::BeginPlay()
|
||||||
|
{
|
||||||
|
Super::BeginPlay();
|
||||||
|
|
||||||
|
bShowMouseCursor = false;
|
||||||
|
SetInputMode(FInputModeGameOnly());
|
||||||
|
|
||||||
|
if (PlayerCameraManager)
|
||||||
|
{
|
||||||
|
PlayerCameraManager->ViewPitchMin = -60.0f;
|
||||||
|
PlayerCameraManager->ViewPitchMax = 20.0f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void AMarbleController::SetupInputComponent()
|
||||||
|
{
|
||||||
|
Super::SetupInputComponent();
|
||||||
|
|
||||||
|
// only add IMCs for local player controllers
|
||||||
|
if (IsLocalPlayerController())
|
||||||
|
{
|
||||||
|
// Add Input Mapping Contexts
|
||||||
|
if (UEnhancedInputLocalPlayerSubsystem* Subsystem = ULocalPlayer::GetSubsystem<UEnhancedInputLocalPlayerSubsystem>(GetLocalPlayer()))
|
||||||
|
{
|
||||||
|
for (UInputMappingContext* CurrentContext : DefaultMappingContexts)
|
||||||
|
{
|
||||||
|
Subsystem->AddMappingContext(CurrentContext, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,196 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
|
||||||
|
#include "Marble/MarbleMovementComponent.h"
|
||||||
|
|
||||||
|
#include "Components/SphereComponent.h"
|
||||||
|
#include "DataWrappers/ChaosVDJointDataWrappers.h"
|
||||||
|
#include "Math/UnitConversion.h"
|
||||||
|
#include "Sound/SoundWaveProxyPlayer.h"
|
||||||
|
|
||||||
|
|
||||||
|
// Sets default values for this component's properties
|
||||||
|
UMarbleMovementComponent::UMarbleMovementComponent()
|
||||||
|
{
|
||||||
|
// Set this component to be initialized when the game starts, and to be ticked every frame. You can turn these features
|
||||||
|
// off to improve performance if you don't need them.
|
||||||
|
PrimaryComponentTick.bCanEverTick = true;
|
||||||
|
PrimaryComponentTick.TickInterval = 1.0f / 30.0f;
|
||||||
|
|
||||||
|
SetIsReplicatedByDefault(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void UMarbleMovementComponent::SetMoveDirection(FVector WorldDirection)
|
||||||
|
{
|
||||||
|
WorldDirection.Z = 0.0f;
|
||||||
|
WorldDirection = WorldDirection.GetClampedToMaxSize(1.0f);
|
||||||
|
|
||||||
|
CachedMoveDirection = WorldDirection;
|
||||||
|
}
|
||||||
|
|
||||||
|
void UMarbleMovementComponent::BeginJump()
|
||||||
|
{
|
||||||
|
if (!PhysicsSphere || !IsLocallyControlling() || !IsGrounded())
|
||||||
|
return;
|
||||||
|
|
||||||
|
bIsJumping = true;
|
||||||
|
JumpHoldElapsed = 0.0f;
|
||||||
|
PhysicsSphere->AddImpulse(FVector::UpVector * JumpInitialImpulse, NAME_None, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void UMarbleMovementComponent::EndJump()
|
||||||
|
{
|
||||||
|
bIsJumping = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool UMarbleMovementComponent::IsGrounded() const
|
||||||
|
{
|
||||||
|
if (!PhysicsSphere)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
const float Radius = PhysicsSphere->GetScaledSphereRadius();
|
||||||
|
const FVector Start = PhysicsSphere->GetComponentLocation();
|
||||||
|
const FVector End = Start - FVector::UpVector * (Radius + GroundCheckDistance);
|
||||||
|
|
||||||
|
FCollisionQueryParams Params;
|
||||||
|
Params.AddIgnoredActor(GetOwner());
|
||||||
|
|
||||||
|
FHitResult Hit;
|
||||||
|
return GetWorld()->LineTraceSingleByChannel(Hit, Start, End, ECC_Visibility, Params);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Called when the game starts
|
||||||
|
void UMarbleMovementComponent::BeginPlay()
|
||||||
|
{
|
||||||
|
Super::BeginPlay();
|
||||||
|
|
||||||
|
if (!IsValid(PhysicsSphere))
|
||||||
|
PhysicsSphere = Cast<USphereComponent>(GetOwner()->GetRootComponent());
|
||||||
|
ensureMsgf(PhysicsSphere, TEXT("Owner must have a sphere component as root"));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Called every frame
|
||||||
|
void UMarbleMovementComponent::TickComponent(float DeltaTime, ELevelTick TickType,
|
||||||
|
FActorComponentTickFunction* ThisTickFunction)
|
||||||
|
{
|
||||||
|
Super::TickComponent(DeltaTime, TickType, ThisTickFunction);
|
||||||
|
|
||||||
|
if (!PhysicsSphere)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (IsLocallyControlling())
|
||||||
|
TickControlling(DeltaTime);
|
||||||
|
else
|
||||||
|
TickProxy(DeltaTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
void UMarbleMovementComponent::ServerSyncTransform_Implementation(
|
||||||
|
FVector_NetQuantize100 Location,
|
||||||
|
FRotator Rotation,
|
||||||
|
FVector_NetQuantize100 LinearVel,
|
||||||
|
FVector_NetQuantize100 AngularVel)
|
||||||
|
{
|
||||||
|
MulticastSyncTransform(Location, Rotation, LinearVel, AngularVel);
|
||||||
|
}
|
||||||
|
|
||||||
|
void UMarbleMovementComponent::MulticastSyncTransform_Implementation(
|
||||||
|
FVector_NetQuantize100 Location,
|
||||||
|
FRotator Rotation,
|
||||||
|
FVector_NetQuantize100 LinearVel,
|
||||||
|
FVector_NetQuantize100 AngularVel)
|
||||||
|
{
|
||||||
|
if (IsLocallyControlling())
|
||||||
|
return;
|
||||||
|
|
||||||
|
ProxyTargetLocation = Location;
|
||||||
|
ProxyTargetRotation = Rotation;
|
||||||
|
ProxyTargetLinearVel = LinearVel;
|
||||||
|
ProxyTargetAngularVel = AngularVel;
|
||||||
|
bHasProxyTarget = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void UMarbleMovementComponent::ServerSetMoveDirection_Implementation(FVector WorldDirection)
|
||||||
|
{
|
||||||
|
CachedMoveDirection = WorldDirection;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool UMarbleMovementComponent::IsLocallyControlling() const
|
||||||
|
{
|
||||||
|
const APawn* OwningPawn = Cast<APawn>(GetOwner());
|
||||||
|
return IsValid(OwningPawn) && OwningPawn->IsLocallyControlled();
|
||||||
|
}
|
||||||
|
|
||||||
|
void UMarbleMovementComponent::TickControlling(float DeltaTime)
|
||||||
|
{
|
||||||
|
if (!CachedMoveDirection.IsNearlyZero())
|
||||||
|
{
|
||||||
|
const FVector Direction = CachedMoveDirection.GetSafeNormal();
|
||||||
|
const float Speed = CachedMoveDirection.Size();
|
||||||
|
|
||||||
|
const FVector TorqueAxis = FVector::CrossProduct(FVector::UpVector, Direction);
|
||||||
|
if (PhysicsSphere->GetPhysicsAngularVelocityInRadians().Size() < MaxAngularSpeed)
|
||||||
|
PhysicsSphere->AddTorqueInRadians(TorqueAxis * RollForce * Speed, NAME_None, true);
|
||||||
|
|
||||||
|
if (IsGrounded())
|
||||||
|
{
|
||||||
|
if (PhysicsSphere->GetPhysicsLinearVelocity().Size() < MaxLinearSpeed)
|
||||||
|
PhysicsSphere->AddForce(Direction * MoveForce * Speed, NAME_None, true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (PhysicsSphere->GetPhysicsLinearVelocity().Size() < MaxLinearSpeed * AerialControlFactor)
|
||||||
|
PhysicsSphere->AddForce(Direction * MoveForce * AerialControlFactor * Speed, NAME_None, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (bIsJumping)
|
||||||
|
{
|
||||||
|
JumpHoldElapsed += DeltaTime;
|
||||||
|
if (JumpHoldElapsed <= MaxJumpHoldDuration)
|
||||||
|
{
|
||||||
|
PhysicsSphere->AddForce(FVector::UpVector * JumpHoldForce, NAME_None, true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bIsJumping = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SyncTimer += DeltaTime;
|
||||||
|
const float SyncInterval = 1.0f / FMath::Max(1.0f, SyncSendRate);
|
||||||
|
if (SyncTimer >= SyncInterval)
|
||||||
|
{
|
||||||
|
SyncTimer = 0.0f;
|
||||||
|
|
||||||
|
const FVector_NetQuantize100 Location = PhysicsSphere->GetComponentLocation();
|
||||||
|
const FRotator Rotation = PhysicsSphere->GetComponentRotation();
|
||||||
|
const FVector_NetQuantize100 LinearVel = PhysicsSphere->GetPhysicsLinearVelocity();
|
||||||
|
const FVector_NetQuantize100 AngularVel = PhysicsSphere->GetPhysicsAngularVelocityInDegrees();
|
||||||
|
|
||||||
|
if (GetOwnerRole() == ROLE_Authority)
|
||||||
|
{
|
||||||
|
MulticastSyncTransform(Location, Rotation, LinearVel, AngularVel);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ServerSyncTransform(Location, Rotation, LinearVel, AngularVel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void UMarbleMovementComponent::TickProxy(float DeltaTime)
|
||||||
|
{
|
||||||
|
if (!bHasProxyTarget || !IsValid(PhysicsSphere))
|
||||||
|
return;
|
||||||
|
|
||||||
|
const FVector CurrentLocation = PhysicsSphere->GetComponentLocation();
|
||||||
|
const FVector NewLocation = FMath::VInterpTo(CurrentLocation, FVector(ProxyTargetLocation), DeltaTime, ProxyCorrectionSpeed);
|
||||||
|
|
||||||
|
const FRotator CurrentRotation = PhysicsSphere->GetComponentRotation();
|
||||||
|
const FRotator NewRotation = FMath::RInterpTo(CurrentRotation, FRotator(ProxyTargetRotation), DeltaTime, ProxyCorrectionSpeed);
|
||||||
|
|
||||||
|
PhysicsSphere->SetWorldLocationAndRotation(NewLocation, NewRotation, false, nullptr, ETeleportType::TeleportPhysics);
|
||||||
|
PhysicsSphere->SetPhysicsLinearVelocity(FVector(ProxyTargetLinearVel));
|
||||||
|
PhysicsSphere->SetPhysicsAngularVelocityInDegrees(FVector(ProxyTargetAngularVel));
|
||||||
|
}
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
|
||||||
|
#include "Marble/MarblePawn.h"
|
||||||
|
|
||||||
|
#include "Components/SphereComponent.h"
|
||||||
|
#include "Marble/MarbleMovementComponent.h"
|
||||||
|
|
||||||
|
// Sets default values
|
||||||
|
AMarblePawn::AMarblePawn()
|
||||||
|
{
|
||||||
|
// Set this pawn to call Tick() every frame. You can turn this off to improve performance if you don't need it.
|
||||||
|
PrimaryActorTick.bCanEverTick = false;
|
||||||
|
|
||||||
|
bReplicates = true;
|
||||||
|
SetReplicatingMovement(false); // custom sync in movement component
|
||||||
|
|
||||||
|
Collider = CreateDefaultSubobject<USphereComponent>(TEXT("Collider"));
|
||||||
|
RootComponent = Collider;
|
||||||
|
Collider->InitSphereRadius(50.f);
|
||||||
|
Collider->SetSimulatePhysics(true);
|
||||||
|
Collider->SetCollisionEnabled(ECollisionEnabled::QueryAndPhysics);
|
||||||
|
Collider->SetCollisionObjectType(ECC_Pawn);
|
||||||
|
Collider->SetLinearDamping(0.1f);
|
||||||
|
Collider->SetAngularDamping(0.3f);
|
||||||
|
Collider->SetNotifyRigidBodyCollision(true);
|
||||||
|
|
||||||
|
Mesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Mesh"));
|
||||||
|
Mesh->SetupAttachment(Collider);
|
||||||
|
Mesh->SetCollisionEnabled(ECollisionEnabled::NoCollision);
|
||||||
|
|
||||||
|
MovementComponent = CreateDefaultSubobject<UMarbleMovementComponent>(TEXT("MovementComponent"));
|
||||||
|
}
|
||||||
|
|
||||||
|
void AMarblePawn::BeginPlay()
|
||||||
|
{
|
||||||
|
Super::BeginPlay();
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,92 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
|
||||||
|
#include "Marble/MarblePlayerInputComponent.h"
|
||||||
|
|
||||||
|
#include "EnhancedInputComponent.h"
|
||||||
|
#include "EnhancedInputSubsystems.h"
|
||||||
|
#include "Camera/CameraComponent.h"
|
||||||
|
#include "Marble/MarbleMovementComponent.h"
|
||||||
|
|
||||||
|
|
||||||
|
// Sets default values for this component's properties
|
||||||
|
UMarblePlayerInputComponent::UMarblePlayerInputComponent()
|
||||||
|
{
|
||||||
|
// Set this component to be initialized when the game starts, and to be ticked every frame. You can turn these features
|
||||||
|
// off to improve performance if you don't need them.
|
||||||
|
PrimaryComponentTick.bCanEverTick = false;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void UMarblePlayerInputComponent::BindInput(UInputComponent* InputComponent)
|
||||||
|
{
|
||||||
|
if (APlayerController* PC = Cast<APlayerController>(GetOwner()->GetInstigatorController()))
|
||||||
|
{
|
||||||
|
if (UEnhancedInputLocalPlayerSubsystem* Subsystem =
|
||||||
|
ULocalPlayer::GetSubsystem<UEnhancedInputLocalPlayerSubsystem>(PC->GetLocalPlayer()))
|
||||||
|
{
|
||||||
|
Subsystem->AddMappingContext(DefaultMappingContext, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (UEnhancedInputComponent* EIC = Cast<UEnhancedInputComponent>(InputComponent))
|
||||||
|
{
|
||||||
|
EIC->BindAction(MoveAction, ETriggerEvent::Triggered, this, &ThisClass::OnMove);
|
||||||
|
EIC->BindAction(MoveAction, ETriggerEvent::Completed, this, &ThisClass::OnMove);
|
||||||
|
EIC->BindAction(MoveAction, ETriggerEvent::Canceled, this, &ThisClass::OnMove);
|
||||||
|
|
||||||
|
EIC->BindAction(LookAction, ETriggerEvent::Triggered, this, &ThisClass::OnLook);
|
||||||
|
|
||||||
|
EIC->BindAction(JumpAction, ETriggerEvent::Started, this, &ThisClass::OnJumpStarted);
|
||||||
|
EIC->BindAction(JumpAction, ETriggerEvent::Completed, this, &ThisClass::OnJumpReleased);
|
||||||
|
EIC->BindAction(JumpAction, ETriggerEvent::Canceled, this, &ThisClass::OnJumpReleased);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Called when the game starts
|
||||||
|
void UMarblePlayerInputComponent::BeginPlay()
|
||||||
|
{
|
||||||
|
Super::BeginPlay();
|
||||||
|
|
||||||
|
if (!IsValid(MovementComponent))
|
||||||
|
MovementComponent = GetOwner()->FindComponentByClass<UMarbleMovementComponent>();
|
||||||
|
if (!IsValid(CameraComponent))
|
||||||
|
CameraComponent = GetOwner()->FindComponentByClass<UCameraComponent>();
|
||||||
|
}
|
||||||
|
|
||||||
|
void UMarblePlayerInputComponent::OnMove(const FInputActionValue& Value)
|
||||||
|
{
|
||||||
|
if (!IsValid(MovementComponent) || !IsValid(CameraComponent))
|
||||||
|
return;
|
||||||
|
|
||||||
|
const FVector2D Input = Value.Get<FVector2D>();
|
||||||
|
const FRotator YawRot(0.0f, CameraComponent->GetComponentRotation().Yaw, 0.0f);
|
||||||
|
const FVector Forward = FRotationMatrix(YawRot).GetUnitAxis(EAxis::X);
|
||||||
|
const FVector Right = FRotationMatrix(YawRot).GetUnitAxis(EAxis::Y);
|
||||||
|
|
||||||
|
MovementComponent->SetMoveDirection(Forward * Input.Y + Right * Input.X);
|
||||||
|
}
|
||||||
|
|
||||||
|
void UMarblePlayerInputComponent::OnLook(const FInputActionValue& Value)
|
||||||
|
{
|
||||||
|
APawn* OwningPawn = Cast<APawn>(GetOwner());
|
||||||
|
if (!IsValid(OwningPawn))
|
||||||
|
return;
|
||||||
|
|
||||||
|
const FVector2D Input = Value.Get<FVector2D>();
|
||||||
|
|
||||||
|
OwningPawn->AddControllerYawInput(Input.X * LookYawRate);
|
||||||
|
OwningPawn->AddControllerPitchInput(-Input.Y * LookPitchRate);
|
||||||
|
}
|
||||||
|
|
||||||
|
void UMarblePlayerInputComponent::OnJumpStarted(const FInputActionValue& Value)
|
||||||
|
{
|
||||||
|
if (IsValid(MovementComponent))
|
||||||
|
MovementComponent->BeginJump();
|
||||||
|
}
|
||||||
|
|
||||||
|
void UMarblePlayerInputComponent::OnJumpReleased(const FInputActionValue& Value)
|
||||||
|
{
|
||||||
|
if (IsValid(MovementComponent))
|
||||||
|
MovementComponent->EndJump();
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
|
||||||
|
#include "Marble/PlayerMarblePawn.h"
|
||||||
|
|
||||||
|
#include "Camera/CameraComponent.h"
|
||||||
|
#include "GameFramework/SpringArmComponent.h"
|
||||||
|
#include "Marble/MarblePlayerInputComponent.h"
|
||||||
|
|
||||||
|
|
||||||
|
// Sets default values
|
||||||
|
APlayerMarblePawn::APlayerMarblePawn()
|
||||||
|
{
|
||||||
|
SpringArm = CreateDefaultSubobject<USpringArmComponent>(TEXT("SpringArm"));
|
||||||
|
SpringArm->SetupAttachment(RootComponent);
|
||||||
|
SpringArm->TargetArmLength = 650.0f;
|
||||||
|
SpringArm->bDoCollisionTest = true;
|
||||||
|
SpringArm->bEnableCameraLag = true;
|
||||||
|
SpringArm->CameraLagSpeed = 6.0f;
|
||||||
|
SpringArm->bUsePawnControlRotation = true;
|
||||||
|
|
||||||
|
Camera = CreateDefaultSubobject<UCameraComponent>(TEXT("Camera"));
|
||||||
|
Camera->SetupAttachment(SpringArm, USpringArmComponent::SocketName);
|
||||||
|
|
||||||
|
MarbleInputComponent = CreateDefaultSubobject<UMarblePlayerInputComponent>(TEXT("PlayerInputComponent"));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Called to bind functionality to input
|
||||||
|
void APlayerMarblePawn::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
|
||||||
|
{
|
||||||
|
Super::SetupPlayerInputComponent(PlayerInputComponent);
|
||||||
|
|
||||||
|
MarbleInputComponent->BindInput(PlayerInputComponent);
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
#include "GameFramework/PlayerController.h"
|
||||||
|
#include "MarbleController.generated.h"
|
||||||
|
|
||||||
|
class UInputMappingContext;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
UCLASS()
|
||||||
|
class BIGMARBLEWORLD_API AMarbleController : public APlayerController
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
/** Input Mapping Contexts */
|
||||||
|
UPROPERTY(EditAnywhere, Category ="Input|Input Mappings")
|
||||||
|
TArray<UInputMappingContext*> DefaultMappingContexts;
|
||||||
|
|
||||||
|
/** Gameplay initialization */
|
||||||
|
virtual void BeginPlay() override;
|
||||||
|
|
||||||
|
/** Input mapping context setup */
|
||||||
|
virtual void SetupInputComponent() override;
|
||||||
|
|
||||||
|
};
|
||||||
@@ -0,0 +1,118 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
#include "Components/ActorComponent.h"
|
||||||
|
#include "MarbleMovementComponent.generated.h"
|
||||||
|
|
||||||
|
class USphereComponent;
|
||||||
|
|
||||||
|
UCLASS(ClassGroup=(Custom), meta=(BlueprintSpawnableComponent))
|
||||||
|
class BIGMARBLEWORLD_API UMarbleMovementComponent : public UActorComponent
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
|
||||||
|
public:
|
||||||
|
// Sets default values for this component's properties
|
||||||
|
UMarbleMovementComponent();
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "Marble|Movement")
|
||||||
|
void SetMoveDirection(FVector WorldDirection);
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "Marble|Movement")
|
||||||
|
void BeginJump();
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "Marble|Jump")
|
||||||
|
void EndJump();
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "Marble|State")
|
||||||
|
bool IsGrounded() const;
|
||||||
|
|
||||||
|
// Called when the game starts
|
||||||
|
virtual void BeginPlay() override;
|
||||||
|
|
||||||
|
// Called every frame
|
||||||
|
virtual void TickComponent(float DeltaTime, ELevelTick TickType,
|
||||||
|
FActorComponentTickFunction* ThisTickFunction) override;
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "Marble|Network")
|
||||||
|
bool IsLocallyControlling() const;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
UFUNCTION(Server, Unreliable)
|
||||||
|
void ServerSetMoveDirection(FVector WorldDirection);
|
||||||
|
|
||||||
|
UFUNCTION(Server, Unreliable)
|
||||||
|
void ServerSyncTransform(
|
||||||
|
FVector_NetQuantize100 Location,
|
||||||
|
FRotator Rotation,
|
||||||
|
FVector_NetQuantize100 LinearVel,
|
||||||
|
FVector_NetQuantize100 AngularVel
|
||||||
|
);
|
||||||
|
|
||||||
|
UFUNCTION(NetMulticast, Unreliable)
|
||||||
|
void MulticastSyncTransform(
|
||||||
|
FVector_NetQuantize100 Location,
|
||||||
|
FRotator Rotation,
|
||||||
|
FVector_NetQuantize100 LinearVel,
|
||||||
|
FVector_NetQuantize100 AngularVel
|
||||||
|
);
|
||||||
|
|
||||||
|
UPROPERTY(EditAnywhere, Category = "Marble|Movement")
|
||||||
|
float RollForce = 1200.0f;
|
||||||
|
|
||||||
|
UPROPERTY(EditAnywhere, Category = "Marble|Movement")
|
||||||
|
float MaxAngularSpeed = 8.0f;
|
||||||
|
|
||||||
|
UPROPERTY(EditAnywhere, Category = "Marble|Movement")
|
||||||
|
float MoveForce = 400.0f;
|
||||||
|
|
||||||
|
UPROPERTY(EditAnywhere, Category = "Marble|Movement")
|
||||||
|
float MaxLinearSpeed = 1200.0f;
|
||||||
|
|
||||||
|
UPROPERTY(EditAnywhere, Category = "Marble|Movement")
|
||||||
|
float AerialControlFactor = 0.3f;
|
||||||
|
|
||||||
|
UPROPERTY(EditAnywhere, Category = "Marble|Jump")
|
||||||
|
float JumpInitialImpulse = 350.0f;
|
||||||
|
|
||||||
|
UPROPERTY(EditAnywhere, Category = "Marble|Jump")
|
||||||
|
float JumpHoldForce = 1800.0f;
|
||||||
|
|
||||||
|
UPROPERTY(EditAnywhere, Category = "Marble|Jump")
|
||||||
|
float MaxJumpHoldDuration = 0.3f;
|
||||||
|
|
||||||
|
UPROPERTY(EditAnywhere, Category = "Marble|Jump")
|
||||||
|
float GroundCheckDistance = 5.0f;
|
||||||
|
|
||||||
|
UPROPERTY(EditAnywhere, Category = "Marble|Network")
|
||||||
|
float SyncSendRate = 20.0f;
|
||||||
|
|
||||||
|
UPROPERTY(EditAnywhere, Category = "Marble|Network")
|
||||||
|
float ProxyCorrectionSpeed = 10.0f;
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
UPROPERTY(Transient)
|
||||||
|
TObjectPtr<USphereComponent> PhysicsSphere; // Resolved from owner
|
||||||
|
|
||||||
|
UPROPERTY(BlueprintReadOnly, Category = "Marble|Movement", meta = (AllowPrivateAccess = "true"))
|
||||||
|
FVector CachedMoveDirection = FVector::ZeroVector;
|
||||||
|
|
||||||
|
float SyncTimer = 0.0f;
|
||||||
|
|
||||||
|
bool bIsJumping = false;
|
||||||
|
float JumpHoldElapsed = 0.0f;
|
||||||
|
|
||||||
|
FVector_NetQuantize100 ProxyTargetLocation;
|
||||||
|
FRotator ProxyTargetRotation = FRotator::ZeroRotator;
|
||||||
|
FVector_NetQuantize100 ProxyTargetLinearVel;
|
||||||
|
FVector_NetQuantize100 ProxyTargetAngularVel;
|
||||||
|
bool bHasProxyTarget = false;
|
||||||
|
|
||||||
|
void TickControlling(float DeltaTime);
|
||||||
|
void TickProxy(float DeltaTime);
|
||||||
|
|
||||||
|
};
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
#include "GameFramework/Pawn.h"
|
||||||
|
#include "MarblePawn.generated.h"
|
||||||
|
|
||||||
|
class USphereComponent;
|
||||||
|
class UStaticMeshComponent;
|
||||||
|
class UMarbleMovementComponent;
|
||||||
|
|
||||||
|
UCLASS()
|
||||||
|
class BIGMARBLEWORLD_API AMarblePawn : public APawn
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
|
||||||
|
public:
|
||||||
|
// Sets default values for this pawn's properties
|
||||||
|
AMarblePawn();
|
||||||
|
|
||||||
|
UMarbleMovementComponent* GetMarbleMovement() const { return MovementComponent; }
|
||||||
|
|
||||||
|
void BeginPlay() override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components")
|
||||||
|
TObjectPtr<USphereComponent> Collider;
|
||||||
|
|
||||||
|
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components")
|
||||||
|
TObjectPtr<UStaticMeshComponent> Mesh;
|
||||||
|
|
||||||
|
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components")
|
||||||
|
TObjectPtr<UMarbleMovementComponent> MovementComponent;
|
||||||
|
|
||||||
|
};
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
#include "Components/ActorComponent.h"
|
||||||
|
#include "MarblePlayerInputComponent.generated.h"
|
||||||
|
|
||||||
|
|
||||||
|
class UCameraComponent;
|
||||||
|
class UMarbleMovementComponent;
|
||||||
|
struct FInputActionValue;
|
||||||
|
class UInputAction;
|
||||||
|
class UInputMappingContext;
|
||||||
|
class USpringArmComponent;
|
||||||
|
|
||||||
|
UCLASS(ClassGroup=(Custom), meta=(BlueprintSpawnableComponent))
|
||||||
|
class BIGMARBLEWORLD_API UMarblePlayerInputComponent : public UActorComponent
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
|
||||||
|
public:
|
||||||
|
// Sets default values for this component's properties
|
||||||
|
UMarblePlayerInputComponent();
|
||||||
|
|
||||||
|
void BindInput(UInputComponent* InputComponent);
|
||||||
|
|
||||||
|
// Called when the game starts
|
||||||
|
virtual void BeginPlay() override;
|
||||||
|
|
||||||
|
UPROPERTY(EditDefaultsOnly, Category = "Input")
|
||||||
|
TObjectPtr<UInputMappingContext> DefaultMappingContext;
|
||||||
|
|
||||||
|
UPROPERTY(EditDefaultsOnly, Category = "Input")
|
||||||
|
TObjectPtr<UInputAction> MoveAction;
|
||||||
|
|
||||||
|
UPROPERTY(EditDefaultsOnly, Category = "Input")
|
||||||
|
TObjectPtr<UInputAction> LookAction;
|
||||||
|
|
||||||
|
UPROPERTY(EditDefaultsOnly, Category = "Input")
|
||||||
|
TObjectPtr<UInputAction> JumpAction;
|
||||||
|
|
||||||
|
UPROPERTY(EditAnywhere, Category = "Input|Look")
|
||||||
|
float LookYawRate = 1.0f;
|
||||||
|
|
||||||
|
UPROPERTY(EditAnywhere, Category = "Input|Look")
|
||||||
|
float LookPitchRate = 1.0f;
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
void OnMove(const FInputActionValue& Value);
|
||||||
|
void OnLook(const FInputActionValue& Value);
|
||||||
|
void OnJumpStarted(const FInputActionValue& Value);
|
||||||
|
void OnJumpReleased(const FInputActionValue& Value);
|
||||||
|
|
||||||
|
UPROPERTY(Transient)
|
||||||
|
TObjectPtr<UMarbleMovementComponent> MovementComponent;
|
||||||
|
|
||||||
|
UPROPERTY(Transient)
|
||||||
|
TObjectPtr<UCameraComponent> CameraComponent;
|
||||||
|
|
||||||
|
};
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
#include "MarblePawn.h"
|
||||||
|
#include "PlayerMarblePawn.generated.h"
|
||||||
|
|
||||||
|
class UCameraComponent;
|
||||||
|
class UMarblePlayerInputComponent;
|
||||||
|
class USpringArmComponent;
|
||||||
|
|
||||||
|
UCLASS()
|
||||||
|
class BIGMARBLEWORLD_API APlayerMarblePawn : public AMarblePawn
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
|
||||||
|
public:
|
||||||
|
// Sets default values for this pawn's properties
|
||||||
|
APlayerMarblePawn();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
// Called to bind functionality to input
|
||||||
|
virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
|
||||||
|
|
||||||
|
UPROPERTY(VisibleAnywhere, Category = "Components")
|
||||||
|
TObjectPtr<USpringArmComponent> SpringArm;
|
||||||
|
|
||||||
|
UPROPERTY(VisibleAnywhere, Category = "Components")
|
||||||
|
TObjectPtr<UCameraComponent> Camera;
|
||||||
|
|
||||||
|
UPROPERTY(VisibleAnywhere, Category = "Components")
|
||||||
|
TObjectPtr<UMarblePlayerInputComponent> MarbleInputComponent;
|
||||||
|
|
||||||
|
};
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||||
|
|
||||||
|
using UnrealBuildTool;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
public class BigMarbleWorldEditorTarget : TargetRules
|
||||||
|
{
|
||||||
|
public BigMarbleWorldEditorTarget( TargetInfo Target) : base(Target)
|
||||||
|
{
|
||||||
|
Type = TargetType.Editor;
|
||||||
|
DefaultBuildSettings = BuildSettingsVersion.V7;
|
||||||
|
IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_8;
|
||||||
|
ExtraModuleNames.Add("BigMarbleWorld");
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user