做个时间轴
This commit is contained in:
commit
3487c05e38
6
.gitignore
vendored
Normal file
6
.gitignore
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
.idea
|
||||||
|
Platforms
|
||||||
|
Saved
|
||||||
|
Intermediate
|
||||||
|
.vs
|
||||||
|
Binaries
|
13
.vsconfig
Normal file
13
.vsconfig
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"version": "1.0",
|
||||||
|
"components": [
|
||||||
|
"Microsoft.Net.Component.4.6.2.TargetingPack",
|
||||||
|
"Microsoft.VisualStudio.Component.VC.14.34.17.4.x86.x64",
|
||||||
|
"Microsoft.VisualStudio.Component.VC.Tools.x86.x64",
|
||||||
|
"Microsoft.VisualStudio.Component.Windows10SDK",
|
||||||
|
"Microsoft.VisualStudio.Workload.CoreEditor",
|
||||||
|
"Microsoft.VisualStudio.Workload.ManagedDesktop",
|
||||||
|
"Microsoft.VisualStudio.Workload.NativeDesktop",
|
||||||
|
"Microsoft.VisualStudio.Workload.NativeGame"
|
||||||
|
]
|
||||||
|
}
|
0
Config/DefaultEditor.ini
Normal file
0
Config/DefaultEditor.ini
Normal file
207
Config/DefaultEngine.ini
Normal file
207
Config/DefaultEngine.ini
Normal file
@ -0,0 +1,207 @@
|
|||||||
|
|
||||||
|
|
||||||
|
[/Script/EngineSettings.GameMapsSettings]
|
||||||
|
GameDefaultMap=/Game/MainMap.MainMap
|
||||||
|
EditorStartupMap=/Game/MainMap.MainMap
|
||||||
|
|
||||||
|
[/Script/WindowsTargetPlatform.WindowsTargetSettings]
|
||||||
|
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/HardwareTargeting.HardwareTargetingSettings]
|
||||||
|
TargetedHardwareClass=Desktop
|
||||||
|
AppliedTargetedHardwareClass=Desktop
|
||||||
|
DefaultGraphicsPerformance=Scalable
|
||||||
|
AppliedDefaultGraphicsPerformance=Scalable
|
||||||
|
|
||||||
|
[/Script/Engine.RendererSettings]
|
||||||
|
r.Mobile.ShadingPath=0
|
||||||
|
r.Mobile.SupportGPUScene=False
|
||||||
|
r.Mobile.AntiAliasing=1
|
||||||
|
r.Mobile.FloatPrecisionMode=0
|
||||||
|
r.Mobile.AllowDitheredLODTransition=False
|
||||||
|
r.Mobile.VirtualTextures=False
|
||||||
|
r.DiscardUnusedQuality=False
|
||||||
|
r.Shaders.CompressionFormat=2
|
||||||
|
r.AllowOcclusionQueries=True
|
||||||
|
r.MinScreenRadiusForLights=0.030000
|
||||||
|
r.MinScreenRadiusForDepthPrepass=0.030000
|
||||||
|
r.MinScreenRadiusForCSMDepth=0.010000
|
||||||
|
r.PrecomputedVisibilityWarning=False
|
||||||
|
r.TextureStreaming=True
|
||||||
|
Compat.UseDXT5NormalMaps=False
|
||||||
|
r.VirtualTextures=False
|
||||||
|
r.VT.EnableAutoImport=True
|
||||||
|
r.VirtualTexturedLightmaps=False
|
||||||
|
r.VT.AnisotropicFiltering=False
|
||||||
|
bEnableVirtualTextureOpacityMask=False
|
||||||
|
r.VT.TileSize=128
|
||||||
|
r.VT.TileBorderSize=4
|
||||||
|
r.vt.FeedbackFactor=16
|
||||||
|
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.ClearCoatNormal=False
|
||||||
|
r.DynamicGlobalIlluminationMethod=0
|
||||||
|
r.ReflectionMethod=0
|
||||||
|
r.ReflectionCaptureResolution=128
|
||||||
|
r.ReflectionEnvironmentLightmapMixBasedOnRoughness=True
|
||||||
|
r.Lumen.HardwareRayTracing=False
|
||||||
|
r.Lumen.HardwareRayTracing.LightingMode=0
|
||||||
|
r.Lumen.TranslucencyReflections.FrontLayer.EnableForProject=False
|
||||||
|
r.Lumen.TraceMeshSDFs=0
|
||||||
|
r.Shadow.Virtual.Enable=1
|
||||||
|
r.RayTracing=False
|
||||||
|
r.RayTracing.Shadows=False
|
||||||
|
r.RayTracing.Skylight=False
|
||||||
|
r.RayTracing.UseTextureLod=False
|
||||||
|
r.PathTracing=True
|
||||||
|
r.GenerateMeshDistanceFields=True
|
||||||
|
r.DistanceFields.DefaultVoxelDensity=0.200000
|
||||||
|
r.Nanite.ProjectEnabled=True
|
||||||
|
r.AllowStaticLighting=True
|
||||||
|
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)
|
||||||
|
vr.VRS.HMDFixedFoveationLevel=0
|
||||||
|
vr.VRS.HMDFixedFoveationDynamic=False
|
||||||
|
r.CustomDepth=1
|
||||||
|
r.CustomDepthTemporalAAJitter=True
|
||||||
|
r.PostProcessing.PropagateAlpha=0
|
||||||
|
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.MotionBlur=False
|
||||||
|
r.DefaultFeature.LensFlare=False
|
||||||
|
r.TemporalAA.Upsampling=True
|
||||||
|
r.AntiAliasingMethod=0
|
||||||
|
r.MSAACount=4
|
||||||
|
r.DefaultFeature.LightUnits=1
|
||||||
|
r.DefaultBackBufferPixelFormat=4
|
||||||
|
r.Shadow.UnbuiltPreviewInGame=True
|
||||||
|
r.StencilForLODDither=False
|
||||||
|
r.EarlyZPass=3
|
||||||
|
r.EarlyZPassOnlyMaterialMasking=False
|
||||||
|
r.Shadow.CSMCaching=False
|
||||||
|
r.DBuffer=True
|
||||||
|
r.ClearSceneMethod=1
|
||||||
|
r.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.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.WireframeCullThreshold=5.000000
|
||||||
|
r.SupportStationarySkylight=True
|
||||||
|
r.SupportLowQualityLightmaps=True
|
||||||
|
r.SupportPointLightWholeSceneShadows=True
|
||||||
|
r.SupportSkyAtmosphere=True
|
||||||
|
r.SupportSkyAtmosphereAffectsHeightFog=True
|
||||||
|
r.SupportCloudShadowOnForwardLitTranslucent=False
|
||||||
|
r.Shadow.TranslucentPerObject.ProjectEnabled=False
|
||||||
|
r.Water.SingleLayerWater.SupportCloudShadow=False
|
||||||
|
r.Substrate=False
|
||||||
|
r.Substrate.OpaqueMaterialRoughRefraction=False
|
||||||
|
r.Substrate.Debug.AdvancedVisualizationShaders=False
|
||||||
|
r.Material.RoughDiffuse=False
|
||||||
|
r.Material.EnergyConservation=False
|
||||||
|
r.OIT.SortedPixels=False
|
||||||
|
r.SkinCache.CompileShaders=False
|
||||||
|
r.SkinCache.SkipCompilingGPUSkinVF=False
|
||||||
|
r.SkinCache.DefaultBehavior=1
|
||||||
|
r.SkinCache.SceneMemoryLimitInMB=128.000000
|
||||||
|
r.Mobile.EnableStaticAndCSMShadowReceivers=True
|
||||||
|
r.Mobile.EnableMovableLightCSMShaderCulling=True
|
||||||
|
r.Mobile.Forward.EnableLocalLights=True
|
||||||
|
r.Mobile.Forward.EnableClusteredReflections=False
|
||||||
|
r.Mobile.EnableNoPrecomputedLightingCSMShader=False
|
||||||
|
r.Mobile.AllowDistanceFieldShadows=True
|
||||||
|
r.Mobile.AllowMovableDirectionalLights=True
|
||||||
|
r.Mobile.EnableMovableSpotlightsShadow=False
|
||||||
|
r.GPUSkin.Support16BitBoneIndex=False
|
||||||
|
r.GPUSkin.Limit2BoneInfluences=False
|
||||||
|
r.SupportDepthOnlyIndexBuffers=True
|
||||||
|
r.SupportReversedIndexBuffers=True
|
||||||
|
r.Mobile.AmbientOcclusion=False
|
||||||
|
r.GPUSkin.UnlimitedBoneInfluences=False
|
||||||
|
r.GPUSkin.UnlimitedBoneInfluencesThreshold=8
|
||||||
|
DefaultBoneInfluenceLimit=(Default=0,PerPlatform=())
|
||||||
|
MaxSkinBones=(Default=65536,PerPlatform=(("Mobile", 256)))
|
||||||
|
r.Mobile.PlanarReflectionMode=0
|
||||||
|
r.Mobile.SupportsGen4TAA=True
|
||||||
|
bStreamSkeletalMeshLODs=(Default=False,PerPlatform=())
|
||||||
|
bDiscardSkeletalMeshOptionalLODs=(Default=False,PerPlatform=())
|
||||||
|
VisualizeCalibrationColorMaterialPath=/Engine/EngineMaterials/PPM_DefaultCalibrationColor.PPM_DefaultCalibrationColor
|
||||||
|
VisualizeCalibrationCustomMaterialPath=None
|
||||||
|
VisualizeCalibrationGrayscaleMaterialPath=/Engine/EngineMaterials/PPM_DefaultCalibrationGrayscale.PPM_DefaultCalibrationGrayscale
|
||||||
|
|
||||||
|
[/Script/WorldPartitionEditor.WorldPartitionEditorSettings]
|
||||||
|
CommandletClass=Class'/Script/UnrealEd.WorldPartitionConvertCommandlet'
|
||||||
|
|
||||||
|
[/Script/Engine.UserInterfaceSettings]
|
||||||
|
bAuthorizeAutomaticWidgetVariableCreation=False
|
||||||
|
|
||||||
|
[/Script/Engine.Engine]
|
||||||
|
+ActiveGameNameRedirects=(OldGameName="TP_Blank",NewGameName="/Script/Cut5")
|
||||||
|
+ActiveGameNameRedirects=(OldGameName="/Script/TP_Blank",NewGameName="/Script/Cut5")
|
||||||
|
+ActiveClassRedirects=(OldClassName="TP_BlankGameModeBase",NewClassName="Cut5GameModeBase")
|
||||||
|
|
||||||
|
[/Script/AndroidFileServerEditor.AndroidFileServerRuntimeSettings]
|
||||||
|
bEnablePlugin=True
|
||||||
|
bAllowNetworkConnection=True
|
||||||
|
SecurityToken=64F25A3B42285FEAB8C132B15063357A
|
||||||
|
bIncludeInShipping=False
|
||||||
|
bAllowExternalStartInShipping=False
|
||||||
|
bCompileAFSProject=False
|
||||||
|
bUseCompression=False
|
||||||
|
bLogFiles=False
|
||||||
|
bReportStats=False
|
||||||
|
ConnectionType=USBOnly
|
||||||
|
bUseManualIPAddress=False
|
||||||
|
ManualIPAddress=
|
||||||
|
|
3
Config/DefaultGame.ini
Normal file
3
Config/DefaultGame.ini
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
|
||||||
|
[/Script/EngineSettings.GeneralProjectSettings]
|
||||||
|
ProjectID=DC8863584B4EB976B538D48259B614C0
|
85
Config/DefaultInput.ini
Normal file
85
Config/DefaultInput.ini
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
[/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
|
||||||
|
+ConsoleKeys=Caret
|
||||||
|
|
BIN
Content/MainMap.umap
Normal file
BIN
Content/MainMap.umap
Normal file
Binary file not shown.
BIN
Content/NewWidgetBlueprint.uasset
Normal file
BIN
Content/NewWidgetBlueprint.uasset
Normal file
Binary file not shown.
73
Cut5.sln
Normal file
73
Cut5.sln
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio Version 17
|
||||||
|
VisualStudioVersion = 17.0.31314.256
|
||||||
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Engine", "Engine", "{233774A8-CC9D-3FA9-86D1-90573E92B704}"
|
||||||
|
EndProject
|
||||||
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Games", "Games", "{DE1F8B53-6C02-3C13-9101-A7C8D96F3FF6}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Cut5", "Intermediate\ProjectFiles\Cut5.vcxproj", "{B95E7D0E-DB45-3765-9058-E00EBBC4B157}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UE5", "Intermediate\ProjectFiles\UE5.vcxproj", "{C48D0E9D-C862-3EA3-96A7-752EE9D06362}"
|
||||||
|
EndProject
|
||||||
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Visualizers", "Visualizers", "{1CCEC849-CC72-4C59-8C36-2F7C38706D4C}"
|
||||||
|
ProjectSection(SolutionItems) = preProject
|
||||||
|
..\..\Software\UE_5.2\Engine\Extras\VisualStudioDebugging\Unreal.natvis = ..\..\Software\UE_5.2\Engine\Extras\VisualStudioDebugging\Unreal.natvis
|
||||||
|
EndProjectSection
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
DebugGame Editor|Android = DebugGame Editor|Android
|
||||||
|
DebugGame Editor|Win64 = DebugGame Editor|Win64
|
||||||
|
DebugGame|Android = DebugGame|Android
|
||||||
|
DebugGame|Win64 = DebugGame|Win64
|
||||||
|
Development Editor|Android = Development Editor|Android
|
||||||
|
Development Editor|Win64 = Development Editor|Win64
|
||||||
|
Development|Android = Development|Android
|
||||||
|
Development|Win64 = Development|Win64
|
||||||
|
Shipping|Android = Shipping|Android
|
||||||
|
Shipping|Win64 = Shipping|Win64
|
||||||
|
EndGlobalSection
|
||||||
|
# UnrealVS Section
|
||||||
|
GlobalSection(ddbf523f-7eb6-4887-bd51-85a714ff87eb) = preSolution
|
||||||
|
AvailablePlatforms=Win64;Android
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{B95E7D0E-DB45-3765-9058-E00EBBC4B157}.DebugGame Editor|Android.ActiveCfg = Invalid|x64
|
||||||
|
{B95E7D0E-DB45-3765-9058-E00EBBC4B157}.DebugGame Editor|Win64.ActiveCfg = DebugGame_Editor|x64
|
||||||
|
{B95E7D0E-DB45-3765-9058-E00EBBC4B157}.DebugGame Editor|Win64.Build.0 = DebugGame_Editor|x64
|
||||||
|
{B95E7D0E-DB45-3765-9058-E00EBBC4B157}.DebugGame|Android.ActiveCfg = Android_DebugGame|Win64
|
||||||
|
{B95E7D0E-DB45-3765-9058-E00EBBC4B157}.DebugGame|Android.Build.0 = Android_DebugGame|Win64
|
||||||
|
{B95E7D0E-DB45-3765-9058-E00EBBC4B157}.DebugGame|Win64.ActiveCfg = DebugGame|x64
|
||||||
|
{B95E7D0E-DB45-3765-9058-E00EBBC4B157}.DebugGame|Win64.Build.0 = DebugGame|x64
|
||||||
|
{B95E7D0E-DB45-3765-9058-E00EBBC4B157}.Development Editor|Android.ActiveCfg = Invalid|x64
|
||||||
|
{B95E7D0E-DB45-3765-9058-E00EBBC4B157}.Development Editor|Win64.ActiveCfg = Development_Editor|x64
|
||||||
|
{B95E7D0E-DB45-3765-9058-E00EBBC4B157}.Development Editor|Win64.Build.0 = Development_Editor|x64
|
||||||
|
{B95E7D0E-DB45-3765-9058-E00EBBC4B157}.Development|Android.ActiveCfg = Android_Development|Win64
|
||||||
|
{B95E7D0E-DB45-3765-9058-E00EBBC4B157}.Development|Android.Build.0 = Android_Development|Win64
|
||||||
|
{B95E7D0E-DB45-3765-9058-E00EBBC4B157}.Development|Win64.ActiveCfg = Development|x64
|
||||||
|
{B95E7D0E-DB45-3765-9058-E00EBBC4B157}.Development|Win64.Build.0 = Development|x64
|
||||||
|
{B95E7D0E-DB45-3765-9058-E00EBBC4B157}.Shipping|Android.ActiveCfg = Android_Shipping|Win64
|
||||||
|
{B95E7D0E-DB45-3765-9058-E00EBBC4B157}.Shipping|Android.Build.0 = Android_Shipping|Win64
|
||||||
|
{B95E7D0E-DB45-3765-9058-E00EBBC4B157}.Shipping|Win64.ActiveCfg = Shipping|x64
|
||||||
|
{B95E7D0E-DB45-3765-9058-E00EBBC4B157}.Shipping|Win64.Build.0 = Shipping|x64
|
||||||
|
{C48D0E9D-C862-3EA3-96A7-752EE9D06362}.DebugGame Editor|Android.ActiveCfg = BuiltWithUnrealBuildTool|Win64
|
||||||
|
{C48D0E9D-C862-3EA3-96A7-752EE9D06362}.DebugGame Editor|Win64.ActiveCfg = BuiltWithUnrealBuildTool|Win64
|
||||||
|
{C48D0E9D-C862-3EA3-96A7-752EE9D06362}.DebugGame|Android.ActiveCfg = BuiltWithUnrealBuildTool|Win64
|
||||||
|
{C48D0E9D-C862-3EA3-96A7-752EE9D06362}.DebugGame|Win64.ActiveCfg = BuiltWithUnrealBuildTool|Win64
|
||||||
|
{C48D0E9D-C862-3EA3-96A7-752EE9D06362}.Development Editor|Android.ActiveCfg = BuiltWithUnrealBuildTool|Win64
|
||||||
|
{C48D0E9D-C862-3EA3-96A7-752EE9D06362}.Development Editor|Win64.ActiveCfg = BuiltWithUnrealBuildTool|Win64
|
||||||
|
{C48D0E9D-C862-3EA3-96A7-752EE9D06362}.Development|Android.ActiveCfg = BuiltWithUnrealBuildTool|Win64
|
||||||
|
{C48D0E9D-C862-3EA3-96A7-752EE9D06362}.Development|Win64.ActiveCfg = BuiltWithUnrealBuildTool|Win64
|
||||||
|
{C48D0E9D-C862-3EA3-96A7-752EE9D06362}.Shipping|Android.ActiveCfg = BuiltWithUnrealBuildTool|Win64
|
||||||
|
{C48D0E9D-C862-3EA3-96A7-752EE9D06362}.Shipping|Win64.ActiveCfg = BuiltWithUnrealBuildTool|Win64
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(NestedProjects) = preSolution
|
||||||
|
{C48D0E9D-C862-3EA3-96A7-752EE9D06362} = {233774A8-CC9D-3FA9-86D1-90573E92B704}
|
||||||
|
{B95E7D0E-DB45-3765-9058-E00EBBC4B157} = {DE1F8B53-6C02-3C13-9101-A7C8D96F3FF6}
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
25
Cut5.uproject
Normal file
25
Cut5.uproject
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"FileVersion": 3,
|
||||||
|
"EngineAssociation": "5.2",
|
||||||
|
"Category": "",
|
||||||
|
"Description": "",
|
||||||
|
"Modules": [
|
||||||
|
{
|
||||||
|
"Name": "Cut5",
|
||||||
|
"Type": "Runtime",
|
||||||
|
"LoadingPhase": "Default",
|
||||||
|
"AdditionalDependencies": [
|
||||||
|
"Engine"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"Plugins": [
|
||||||
|
{
|
||||||
|
"Name": "ModelingToolsEditorMode",
|
||||||
|
"Enabled": true,
|
||||||
|
"TargetAllowList": [
|
||||||
|
"Editor"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
15
Source/Cut5.Target.cs
Normal file
15
Source/Cut5.Target.cs
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||||
|
|
||||||
|
using UnrealBuildTool;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
public class Cut5Target : TargetRules
|
||||||
|
{
|
||||||
|
public Cut5Target( TargetInfo Target) : base(Target)
|
||||||
|
{
|
||||||
|
Type = TargetType.Game;
|
||||||
|
DefaultBuildSettings = BuildSettingsVersion.V2;
|
||||||
|
IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_1;
|
||||||
|
ExtraModuleNames.Add("Cut5");
|
||||||
|
}
|
||||||
|
}
|
23
Source/Cut5/Cut5.Build.cs
Normal file
23
Source/Cut5/Cut5.Build.cs
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||||
|
|
||||||
|
using UnrealBuildTool;
|
||||||
|
|
||||||
|
public class Cut5 : ModuleRules
|
||||||
|
{
|
||||||
|
public Cut5(ReadOnlyTargetRules Target) : base(Target)
|
||||||
|
{
|
||||||
|
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
|
||||||
|
|
||||||
|
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore" });
|
||||||
|
|
||||||
|
PrivateDependencyModuleNames.AddRange(new string[] { });
|
||||||
|
|
||||||
|
|
||||||
|
PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore", "UMG"});
|
||||||
|
|
||||||
|
// 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/Cut5/Cut5.cpp
Normal file
6
Source/Cut5/Cut5.cpp
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||||
|
|
||||||
|
#include "Cut5.h"
|
||||||
|
#include "Modules/ModuleManager.h"
|
||||||
|
|
||||||
|
IMPLEMENT_PRIMARY_GAME_MODULE( FDefaultGameModuleImpl, Cut5, "Cut5" );
|
6
Source/Cut5/Cut5.h
Normal file
6
Source/Cut5/Cut5.h
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
|
12
Source/Cut5/Cut5GameModeBase.cpp
Normal file
12
Source/Cut5/Cut5GameModeBase.cpp
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||||
|
|
||||||
|
|
||||||
|
#include "Cut5GameModeBase.h"
|
||||||
|
|
||||||
|
#include "MainHUD.h"
|
||||||
|
|
||||||
|
ACut5GameModeBase::ACut5GameModeBase()
|
||||||
|
: AGameModeBase()
|
||||||
|
{
|
||||||
|
HUDClass = AMainHUD::StaticClass();
|
||||||
|
}
|
18
Source/Cut5/Cut5GameModeBase.h
Normal file
18
Source/Cut5/Cut5GameModeBase.h
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
#include "GameFramework/GameModeBase.h"
|
||||||
|
#include "Cut5GameModeBase.generated.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
UCLASS()
|
||||||
|
class CUT5_API ACut5GameModeBase : public AGameModeBase
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
|
||||||
|
ACut5GameModeBase();
|
||||||
|
};
|
25
Source/Cut5/MainHUD.cpp
Normal file
25
Source/Cut5/MainHUD.cpp
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
|
||||||
|
#include "MainHUD.h"
|
||||||
|
|
||||||
|
#include "Blueprint/WidgetBlueprintLibrary.h"
|
||||||
|
#include "Kismet/GameplayStatics.h"
|
||||||
|
#include "Widgets/SCutMainWindow.h"
|
||||||
|
|
||||||
|
AMainHUD::AMainHUD()
|
||||||
|
{
|
||||||
|
if (GEngine && GEngine->GameViewport)
|
||||||
|
{
|
||||||
|
GEngine->GameViewport->AddViewportWidgetContent(
|
||||||
|
SNew(SCutMainWindow)
|
||||||
|
);
|
||||||
|
|
||||||
|
GEngine->bUseFixedFrameRate = 1;
|
||||||
|
GEngine->FixedFrameRate = 60000.0f;
|
||||||
|
|
||||||
|
|
||||||
|
UWidgetBlueprintLibrary::SetInputMode_UIOnlyEx(UGameplayStatics::GetPlayerController(GWorld, 0), nullptr, EMouseLockMode::DoNotLock);
|
||||||
|
UGameplayStatics::GetPlayerController(GWorld, 0)->bShowMouseCursor = true;
|
||||||
|
}
|
||||||
|
}
|
19
Source/Cut5/MainHUD.h
Normal file
19
Source/Cut5/MainHUD.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
// 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 CUT5_API AMainHUD : public AHUD
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
|
||||||
|
AMainHUD();
|
||||||
|
|
||||||
|
};
|
7
Source/Cut5/WidgetInterface.cpp
Normal file
7
Source/Cut5/WidgetInterface.cpp
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
|
||||||
|
#include "WidgetInterface.h"
|
||||||
|
|
||||||
|
|
||||||
|
// Add default functionality here for any IWidgetInterface functions that are not pure virtual.
|
27
Source/Cut5/WidgetInterface.h
Normal file
27
Source/Cut5/WidgetInterface.h
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
#include "UObject/Interface.h"
|
||||||
|
#include "WidgetInterface.generated.h"
|
||||||
|
|
||||||
|
// This class does not need to be modified.
|
||||||
|
UINTERFACE()
|
||||||
|
class UWidgetInterface : public UInterface
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class CUT5_API IWidgetInterface
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
|
||||||
|
// Add interface functions to this class. This is the class that will be inherited to implement this interface.
|
||||||
|
public:
|
||||||
|
|
||||||
|
virtual void UpdateTimelineLength() = 0;
|
||||||
|
};
|
55
Source/Cut5/Widgets/DefineGlobal.h
Normal file
55
Source/Cut5/Widgets/DefineGlobal.h
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "DragAndDrop/DecoratedDragDropOp.h"
|
||||||
|
|
||||||
|
class CUT5_API FGlobalData
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
inline static int32 DefaultTrackHeight = 50;
|
||||||
|
inline static int32 TrackLength = 1000;
|
||||||
|
inline static double DefaultTimeTickSpace = 10.0;
|
||||||
|
};
|
||||||
|
enum class ETrackType
|
||||||
|
{
|
||||||
|
VideoTrack,
|
||||||
|
AudioTrack,
|
||||||
|
PlayerTrack,
|
||||||
|
AtomSphereLightTrack,
|
||||||
|
SpotLightTrack,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct FClipData;
|
||||||
|
struct CUT5_API FTrackData
|
||||||
|
{
|
||||||
|
FString TrackName;
|
||||||
|
ETrackType TrackType;
|
||||||
|
TArray<FClipData> ClipData;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct CUT5_API FClipData
|
||||||
|
{
|
||||||
|
FGuid ClipGuid;
|
||||||
|
ETrackType ClipType;
|
||||||
|
int32 ClipStartFrame = 0;
|
||||||
|
int32 ClipEndFrame = 10;
|
||||||
|
TArray<FLinearColor> ClipColors;
|
||||||
|
|
||||||
|
};
|
||||||
|
struct CUT5_API FTimelinePropertyData
|
||||||
|
{
|
||||||
|
FTimelinePropertyData() {};
|
||||||
|
FTimelinePropertyData(FString InName, ETrackType InType)
|
||||||
|
{
|
||||||
|
Name = InName;
|
||||||
|
Type = InType;
|
||||||
|
}
|
||||||
|
FString Name = "";
|
||||||
|
ETrackType Type = ETrackType::VideoTrack;
|
||||||
|
};
|
||||||
|
|
||||||
|
class CUT5_API FTrackClipDragOperation final : public FDecoratedDragDropOp
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
TSharedPtr<SWidget> DraggingWidget;
|
||||||
|
FTimelinePropertyData TimelinePropertyData;
|
||||||
|
};
|
||||||
|
|
105
Source/Cut5/Widgets/SCutMainWindow.cpp
Normal file
105
Source/Cut5/Widgets/SCutMainWindow.cpp
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
|
||||||
|
#include "SCutMainWindow.h"
|
||||||
|
|
||||||
|
#include "SCutTimeline.h"
|
||||||
|
#include "SlateOptMacros.h"
|
||||||
|
#include "STimelinePropertyPanel.h"
|
||||||
|
#include "Widgets/Layout/SConstraintCanvas.h"
|
||||||
|
#include "Widgets/Layout/SScaleBox.h"
|
||||||
|
|
||||||
|
BEGIN_SLATE_FUNCTION_BUILD_OPTIMIZATION
|
||||||
|
|
||||||
|
void SCutMainWindow::Construct(const FArguments& InArgs)
|
||||||
|
{
|
||||||
|
SAssignNew(CutTimeline, SCutTimeline);
|
||||||
|
ChildSlot
|
||||||
|
[
|
||||||
|
SNew(SScaleBox)
|
||||||
|
.HAlign(HAlign_Fill)
|
||||||
|
.VAlign(VAlign_Fill)
|
||||||
|
.Stretch(EStretch::Fill)
|
||||||
|
[
|
||||||
|
SNew(SConstraintCanvas)
|
||||||
|
+ SConstraintCanvas::Slot()
|
||||||
|
.Anchors(FAnchors(0, 0, 1, 1))
|
||||||
|
[
|
||||||
|
SNew(SVerticalBox)
|
||||||
|
+ SVerticalBox::Slot()
|
||||||
|
.HAlign(HAlign_Fill)
|
||||||
|
.VAlign(VAlign_Fill)
|
||||||
|
[
|
||||||
|
SNew(SHorizontalBox)
|
||||||
|
+ SHorizontalBox::Slot()
|
||||||
|
.HAlign(HAlign_Fill)
|
||||||
|
.VAlign(VAlign_Fill)
|
||||||
|
[
|
||||||
|
SNew(SVerticalBox)
|
||||||
|
+ SVerticalBox::Slot()
|
||||||
|
[
|
||||||
|
// Property Panel
|
||||||
|
SNew(STimelinePropertyPanel)
|
||||||
|
.MainWindow(SharedThis(this))
|
||||||
|
]
|
||||||
|
]
|
||||||
|
+ SHorizontalBox::Slot()
|
||||||
|
[
|
||||||
|
SNew(SVerticalBox)
|
||||||
|
+ SVerticalBox::Slot()
|
||||||
|
]
|
||||||
|
+ SHorizontalBox::Slot()
|
||||||
|
[
|
||||||
|
SNew(SVerticalBox)
|
||||||
|
+ SVerticalBox::Slot()
|
||||||
|
]
|
||||||
|
]
|
||||||
|
+ SVerticalBox::Slot()
|
||||||
|
.HAlign(HAlign_Fill)
|
||||||
|
.VAlign(VAlign_Fill)
|
||||||
|
[
|
||||||
|
CutTimeline.ToSharedRef()
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
];
|
||||||
|
|
||||||
|
FTrackData NewTrack;
|
||||||
|
NewTrack.TrackName = "Track 1";
|
||||||
|
NewTrack.TrackType = ETrackType::VideoTrack;
|
||||||
|
CutTimeline->AddNewTrack(NewTrack, 0);
|
||||||
|
FTrackData NewTrack2;
|
||||||
|
NewTrack2.TrackName = "Track 2";
|
||||||
|
NewTrack2.TrackType = ETrackType::VideoTrack;
|
||||||
|
CutTimeline->AddNewTrack(NewTrack2, 0);
|
||||||
|
CutTimeline->AddNewTrack(NewTrack2, 0);
|
||||||
|
CutTimeline->AddNewTrack(NewTrack2, 0);
|
||||||
|
CutTimeline->AddNewTrack(NewTrack2, 0);
|
||||||
|
CutTimeline->AddNewTrack(NewTrack2, 0);
|
||||||
|
CutTimeline->AddNewTrack(NewTrack2, 0);
|
||||||
|
CutTimeline->AddNewTrack(NewTrack2, 0);
|
||||||
|
CutTimeline->AddNewTrack(NewTrack2, 0);
|
||||||
|
CutTimeline->AddNewTrack(NewTrack2, 0);
|
||||||
|
CutTimeline->AddNewTrack(NewTrack2, 0);
|
||||||
|
CutTimeline->AddNewTrack(NewTrack2, 0);
|
||||||
|
CutTimeline->AddNewTrack(NewTrack2, 0);
|
||||||
|
CutTimeline->AddNewTrack(NewTrack2, 0);
|
||||||
|
CutTimeline->AddNewTrack(NewTrack2, 0);
|
||||||
|
CutTimeline->AddNewTrack(NewTrack2, 0);
|
||||||
|
CutTimeline->AddNewTrack(NewTrack2, 0);
|
||||||
|
CutTimeline->AddNewTrack(NewTrack2, 0);
|
||||||
|
CutTimeline->AddNewTrack(NewTrack2, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
FReply SCutMainWindow::OnDragOver(const FGeometry& MyGeometry, const FDragDropEvent& DragDropEvent)
|
||||||
|
{
|
||||||
|
const FTrackClipDragOperation& ClipDragOperation = static_cast<FTrackClipDragOperation&>(DragDropEvent.GetOperation().ToSharedRef().Get());
|
||||||
|
return SCompoundWidget::OnDragOver(MyGeometry, DragDropEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
FReply SCutMainWindow::OnDrop(const FGeometry& MyGeometry, const FDragDropEvent& DragDropEvent)
|
||||||
|
{
|
||||||
|
return FReply::Handled().EndDragDrop();
|
||||||
|
}
|
||||||
|
|
||||||
|
END_SLATE_FUNCTION_BUILD_OPTIMIZATION
|
28
Source/Cut5/Widgets/SCutMainWindow.h
Normal file
28
Source/Cut5/Widgets/SCutMainWindow.h
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
#include "SCutTimeline.h"
|
||||||
|
#include "Widgets/SCompoundWidget.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class CUT5_API SCutMainWindow : public SCompoundWidget
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
SLATE_BEGIN_ARGS(SCutMainWindow)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
SLATE_END_ARGS()
|
||||||
|
|
||||||
|
/** Constructs this widget with InArgs */
|
||||||
|
void Construct(const FArguments& InArgs);
|
||||||
|
|
||||||
|
TSharedPtr<SCutTimeline> CutTimeline;
|
||||||
|
|
||||||
|
virtual FReply OnDragOver(const FGeometry& MyGeometry, const FDragDropEvent& DragDropEvent) override;
|
||||||
|
virtual FReply OnDrop(const FGeometry& MyGeometry, const FDragDropEvent& DragDropEvent) override;
|
||||||
|
};
|
141
Source/Cut5/Widgets/SCutTimeline.cpp
Normal file
141
Source/Cut5/Widgets/SCutTimeline.cpp
Normal file
@ -0,0 +1,141 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
|
||||||
|
#include "SCutTimeline.h"
|
||||||
|
|
||||||
|
#include "SlateOptMacros.h"
|
||||||
|
#include "STimelineTick.h"
|
||||||
|
#include "STrackBody.h"
|
||||||
|
#include "Widgets/Input/SSlider.h"
|
||||||
|
#include "Widgets/Layout/SScrollBox.h"
|
||||||
|
|
||||||
|
BEGIN_SLATE_FUNCTION_BUILD_OPTIMIZATION
|
||||||
|
|
||||||
|
void SCutTimeline::UpdateTimelineLength()
|
||||||
|
{
|
||||||
|
TimelineTickBox->SetWidthOverride(FGlobalData::TrackLength);
|
||||||
|
for (IWidgetInterface* Interface : AllWidgets)
|
||||||
|
{
|
||||||
|
Interface->UpdateTimelineLength();
|
||||||
|
}
|
||||||
|
TimelineTick->TickLengthBox->SetWidthOverride(FGlobalData::TrackLength);
|
||||||
|
TimelineTick->GenerateTickBox(FGlobalData::TrackLength / FGlobalData::DefaultTimeTickSpace);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SCutTimeline::Construct(const FArguments& InArgs)
|
||||||
|
{
|
||||||
|
ChildSlot
|
||||||
|
[
|
||||||
|
SNew(SVerticalBox)
|
||||||
|
+ SVerticalBox::Slot()
|
||||||
|
[
|
||||||
|
// Tool bar
|
||||||
|
SNew(SHorizontalBox)
|
||||||
|
]
|
||||||
|
+ SVerticalBox::Slot()
|
||||||
|
[
|
||||||
|
// Timeline
|
||||||
|
SNew(SHorizontalBox)
|
||||||
|
+ SHorizontalBox::Slot()
|
||||||
|
.SizeParam(FStretch(0.1f))
|
||||||
|
[
|
||||||
|
SNew(SVerticalBox)
|
||||||
|
+ SVerticalBox::Slot()
|
||||||
|
.SizeParam(FAuto())
|
||||||
|
[
|
||||||
|
SNew(SBox)
|
||||||
|
.WidthOverride(10000)
|
||||||
|
.HeightOverride(25)
|
||||||
|
// 刻度补差值
|
||||||
|
]
|
||||||
|
+ SVerticalBox::Slot()
|
||||||
|
[
|
||||||
|
SAssignNew(TrackHeadScrollBox, SScrollBox)
|
||||||
|
.OnUserScrolled_Lambda([this](float ScrollValue)
|
||||||
|
{
|
||||||
|
TrackBodyScrollBox->SetScrollOffset(ScrollValue);
|
||||||
|
})
|
||||||
|
]
|
||||||
|
// Track Head
|
||||||
|
|
||||||
|
]
|
||||||
|
+ SHorizontalBox::Slot()
|
||||||
|
.SizeParam(FStretch(0.9f))
|
||||||
|
[
|
||||||
|
SNew(SVerticalBox)
|
||||||
|
+ SVerticalBox::Slot()
|
||||||
|
.SizeParam(FAuto())
|
||||||
|
[
|
||||||
|
SAssignNew(TimelineTickBox, SBox)
|
||||||
|
.WidthOverride(FGlobalData::TrackLength)
|
||||||
|
.HeightOverride(25)
|
||||||
|
[
|
||||||
|
SAssignNew(TickScrollBox, SScrollBox)
|
||||||
|
.ScrollBarVisibility(EVisibility::Hidden)
|
||||||
|
.Orientation(EOrientation::Orient_Horizontal)
|
||||||
|
+ SScrollBox::Slot()
|
||||||
|
[
|
||||||
|
SAssignNew(TimelineTick, STimelineTick)
|
||||||
|
]
|
||||||
|
|
||||||
|
]
|
||||||
|
// 刻度
|
||||||
|
]
|
||||||
|
+ SVerticalBox::Slot()
|
||||||
|
[
|
||||||
|
SAssignNew(TrackBodyHScrollBox, SScrollBox)
|
||||||
|
.Orientation(EOrientation::Orient_Horizontal)
|
||||||
|
.Visibility(EVisibility::SelfHitTestInvisible)
|
||||||
|
.ScrollBarVisibility(EVisibility::Hidden)
|
||||||
|
+ SScrollBox::Slot()
|
||||||
|
[
|
||||||
|
// Track Body
|
||||||
|
SAssignNew(TrackBodyScrollBox, SScrollBox)
|
||||||
|
.ScrollBarVisibility(EVisibility::Hidden)
|
||||||
|
.OnUserScrolled_Lambda([this](float ScrollValue)
|
||||||
|
{
|
||||||
|
TrackHeadScrollBox->SetScrollOffset(ScrollValue);
|
||||||
|
})
|
||||||
|
]
|
||||||
|
]
|
||||||
|
+ SVerticalBox::Slot()
|
||||||
|
.SizeParam(FAuto())
|
||||||
|
[
|
||||||
|
SNew(SSlider)
|
||||||
|
.Value(0.0f)
|
||||||
|
.OnValueChanged_Lambda([this](float ChangedValue)
|
||||||
|
{
|
||||||
|
TrackBodyHScrollBox->SetScrollOffset(ChangedValue * TrackBodyHScrollBox->GetScrollOffsetOfEnd());
|
||||||
|
TickScrollBox->SetScrollOffset(ChangedValue * TickScrollBox->GetScrollOffsetOfEnd());
|
||||||
|
})
|
||||||
|
]
|
||||||
|
|
||||||
|
]
|
||||||
|
]
|
||||||
|
];
|
||||||
|
TrackHeadScrollBox->SetScrollBarVisibility(EVisibility::Hidden);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void SCutTimeline::AddNewTrack(FTrackData TrackData, int32 TrackIndex)
|
||||||
|
{
|
||||||
|
TrackDataArray.Insert(TrackData, TrackIndex);
|
||||||
|
const TSharedPtr<STrackHead> NewTrackHead = SNew(STrackHead).TrackData(TrackData).CutTimeline(SharedThis(this));
|
||||||
|
const TSharedPtr<STrackBody> NewTrackBody = SNew(STrackBody).TrackHead(NewTrackHead);
|
||||||
|
TrackHeadScrollBox->AddSlot()
|
||||||
|
[
|
||||||
|
NewTrackHead.ToSharedRef()
|
||||||
|
];
|
||||||
|
TrackBodyScrollBox->AddSlot()
|
||||||
|
[
|
||||||
|
NewTrackBody.ToSharedRef()
|
||||||
|
];
|
||||||
|
AllWidgets.Add(NewTrackBody.Get());
|
||||||
|
}
|
||||||
|
|
||||||
|
FReply SCutTimeline::OnDragOver(const FGeometry& MyGeometry, const FDragDropEvent& DragDropEvent)
|
||||||
|
{
|
||||||
|
return SCompoundWidget::OnDragOver(MyGeometry, DragDropEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
END_SLATE_FUNCTION_BUILD_OPTIMIZATION
|
47
Source/Cut5/Widgets/SCutTimeline.h
Normal file
47
Source/Cut5/Widgets/SCutTimeline.h
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
#include "DefineGlobal.h"
|
||||||
|
#include "STimelineTick.h"
|
||||||
|
#include "Cut5/WidgetInterface.h"
|
||||||
|
|
||||||
|
#include "Widgets/SCompoundWidget.h"
|
||||||
|
#include "Widgets/Layout/SScrollBox.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class CUT5_API SCutTimeline : public SCompoundWidget
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
SLATE_BEGIN_ARGS(SCutTimeline)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
SLATE_END_ARGS()
|
||||||
|
|
||||||
|
void UpdateTimelineLength();
|
||||||
|
|
||||||
|
|
||||||
|
/** Constructs this widget with InArgs */
|
||||||
|
void Construct(const FArguments& InArgs);
|
||||||
|
|
||||||
|
void AddNewTrack(FTrackData TrackData, int32 TrackIndex);
|
||||||
|
|
||||||
|
TArray<FTrackData> TrackDataArray;
|
||||||
|
TArray<IWidgetInterface*> AllWidgets;
|
||||||
|
TSharedPtr<STimelineTick> TimelineTick;
|
||||||
|
TSharedPtr<SScrollBox> TrackHeadScrollBox;
|
||||||
|
TSharedPtr<SScrollBox> TrackBodyScrollBox;
|
||||||
|
TSharedPtr<SScrollBox> TrackBodyHScrollBox;
|
||||||
|
TSharedPtr<SBox> TimelineTickBox;
|
||||||
|
TSharedPtr<SScrollBox> TickScrollBox;
|
||||||
|
|
||||||
|
virtual FReply OnDragOver(const FGeometry& MyGeometry, const FDragDropEvent& DragDropEvent) override;
|
||||||
|
};
|
20
Source/Cut5/Widgets/STimelineClip.cpp
Normal file
20
Source/Cut5/Widgets/STimelineClip.cpp
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
|
||||||
|
#include "STimelineClip.h"
|
||||||
|
|
||||||
|
#include "SlateOptMacros.h"
|
||||||
|
|
||||||
|
BEGIN_SLATE_FUNCTION_BUILD_OPTIMIZATION
|
||||||
|
|
||||||
|
void STimelineClip::Construct(const FArguments& InArgs)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
ChildSlot
|
||||||
|
[
|
||||||
|
// Populate the widget
|
||||||
|
];
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
END_SLATE_FUNCTION_BUILD_OPTIMIZATION
|
25
Source/Cut5/Widgets/STimelineClip.h
Normal file
25
Source/Cut5/Widgets/STimelineClip.h
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
#include "DefineGlobal.h"
|
||||||
|
#include "Widgets/SCompoundWidget.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class CUT5_API STimelineClip : public SCompoundWidget
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
SLATE_BEGIN_ARGS(STimelineClip)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
SLATE_END_ARGS()
|
||||||
|
|
||||||
|
/** Constructs this widget with InArgs */
|
||||||
|
void Construct(const FArguments& InArgs);
|
||||||
|
|
||||||
|
FClipData ClipData;
|
||||||
|
};
|
52
Source/Cut5/Widgets/STimelineProperty.cpp
Normal file
52
Source/Cut5/Widgets/STimelineProperty.cpp
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
|
||||||
|
#include "STimelineProperty.h"
|
||||||
|
|
||||||
|
#include "SlateOptMacros.h"
|
||||||
|
|
||||||
|
BEGIN_SLATE_FUNCTION_BUILD_OPTIMIZATION
|
||||||
|
|
||||||
|
void STimelineProperty::Construct(const FArguments& InArgs)
|
||||||
|
{
|
||||||
|
TimelinePropertyData = InArgs._TimelinePropertyData;
|
||||||
|
MainWindow = InArgs._MainWindow;
|
||||||
|
ChildSlot
|
||||||
|
[
|
||||||
|
SNew(SBox)
|
||||||
|
.WidthOverride(128)
|
||||||
|
.HeightOverride(128)
|
||||||
|
.Padding(10, 10, 10, 10)
|
||||||
|
[
|
||||||
|
SNew(SOverlay)
|
||||||
|
+ SOverlay::Slot()
|
||||||
|
[
|
||||||
|
SNew(SImage)
|
||||||
|
]
|
||||||
|
+ SOverlay::Slot()
|
||||||
|
[
|
||||||
|
SNew(STextBlock)
|
||||||
|
.Text(FText::FromString(TimelinePropertyData.Name))
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
];
|
||||||
|
// this->AssignParentWidget(MainWindow->CutTimeline.ToSharedRef());
|
||||||
|
}
|
||||||
|
|
||||||
|
FReply STimelineProperty::OnMouseButtonDown(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent)
|
||||||
|
{
|
||||||
|
return FReply::Handled().DetectDrag(SharedThis(this), EKeys::LeftMouseButton);
|
||||||
|
}
|
||||||
|
|
||||||
|
FReply STimelineProperty::OnDragDetected(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent)
|
||||||
|
{
|
||||||
|
UE_LOG(LogTemp, Warning, TEXT("On Drag Detected"));
|
||||||
|
const TSharedPtr<FTrackClipDragOperation> Operation = MakeShared<FTrackClipDragOperation>();
|
||||||
|
Operation->TimelinePropertyData = TimelinePropertyData;
|
||||||
|
Operation->DraggingWidget = SharedThis(this);
|
||||||
|
return FReply::Handled().BeginDragDrop(Operation.ToSharedRef());
|
||||||
|
|
||||||
|
}
|
||||||
|
END_SLATE_FUNCTION_BUILD_OPTIMIZATION
|
31
Source/Cut5/Widgets/STimelineProperty.h
Normal file
31
Source/Cut5/Widgets/STimelineProperty.h
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
#include "SCutMainWindow.h"
|
||||||
|
#include "SCutTimeline.h"
|
||||||
|
#include "Widgets/SCompoundWidget.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
class CUT5_API STimelineProperty : public SCompoundWidget
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
SLATE_BEGIN_ARGS(STimelineProperty)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
SLATE_ARGUMENT(FTimelinePropertyData, TimelinePropertyData)
|
||||||
|
SLATE_ARGUMENT(TSharedPtr<SCutMainWindow>, MainWindow)
|
||||||
|
SLATE_END_ARGS()
|
||||||
|
|
||||||
|
/** Constructs this widget with InArgs */
|
||||||
|
void Construct(const FArguments& InArgs);
|
||||||
|
FTimelinePropertyData TimelinePropertyData;
|
||||||
|
TSharedPtr<SCutMainWindow> MainWindow;
|
||||||
|
virtual FReply OnMouseButtonDown(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent) override;
|
||||||
|
virtual FReply OnDragDetected(const FGeometry& MyGeometry, const FPointerEvent& MouseEvent) override;
|
||||||
|
};
|
57
Source/Cut5/Widgets/STimelinePropertyPanel.cpp
Normal file
57
Source/Cut5/Widgets/STimelinePropertyPanel.cpp
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
|
||||||
|
#include "STimelinePropertyPanel.h"
|
||||||
|
|
||||||
|
#include "SlateOptMacros.h"
|
||||||
|
#include "Widgets/Layout/SGridPanel.h"
|
||||||
|
|
||||||
|
BEGIN_SLATE_FUNCTION_BUILD_OPTIMIZATION
|
||||||
|
|
||||||
|
void STimelinePropertyPanel::Construct(const FArguments& InArgs)
|
||||||
|
{
|
||||||
|
MainWindow = InArgs._MainWindow;
|
||||||
|
ChildSlot
|
||||||
|
[
|
||||||
|
SNew(SBox)
|
||||||
|
[
|
||||||
|
SNew(SScrollBox)
|
||||||
|
+ SScrollBox::Slot()
|
||||||
|
.HAlign(HAlign_Fill)
|
||||||
|
.VAlign(VAlign_Fill)
|
||||||
|
[
|
||||||
|
SAssignNew(GridPanel, SGridPanel)
|
||||||
|
]
|
||||||
|
]
|
||||||
|
];
|
||||||
|
AddNewSelection(FTimelinePropertyData("Test", ETrackType::VideoTrack));
|
||||||
|
AddNewSelection(FTimelinePropertyData("Test1", ETrackType::VideoTrack));
|
||||||
|
AddNewSelection(FTimelinePropertyData("Test2", ETrackType::VideoTrack));
|
||||||
|
AddNewSelection(FTimelinePropertyData("Test3", ETrackType::VideoTrack));
|
||||||
|
AddNewSelection(FTimelinePropertyData("Test4", ETrackType::VideoTrack));
|
||||||
|
AddNewSelection(FTimelinePropertyData("Test5", ETrackType::VideoTrack));
|
||||||
|
AddNewSelection(FTimelinePropertyData("Test6", ETrackType::VideoTrack));
|
||||||
|
AddNewSelection(FTimelinePropertyData("Test7", ETrackType::VideoTrack));
|
||||||
|
AddNewSelection(FTimelinePropertyData("Test8", ETrackType::VideoTrack));
|
||||||
|
AddNewSelection(FTimelinePropertyData("Test9", ETrackType::VideoTrack));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void STimelinePropertyPanel::AddNewSelection(FTimelinePropertyData TimelinePropertyData)
|
||||||
|
{
|
||||||
|
const int32 TotalCount = GridPanel->GetChildren()->Num();
|
||||||
|
GridPanel->AddSlot(TotalCount % MaxRowIndex, TotalCount / MaxRowIndex)
|
||||||
|
[
|
||||||
|
SNew(STimelineProperty)
|
||||||
|
.TimelinePropertyData(TimelinePropertyData)
|
||||||
|
.MainWindow(MainWindow)
|
||||||
|
];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
FReply STimelinePropertyPanel::OnDragOver(const FGeometry& MyGeometry, const FDragDropEvent& DragDropEvent)
|
||||||
|
{
|
||||||
|
return SCompoundWidget::OnDragOver(MyGeometry, DragDropEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
END_SLATE_FUNCTION_BUILD_OPTIMIZATION
|
33
Source/Cut5/Widgets/STimelinePropertyPanel.h
Normal file
33
Source/Cut5/Widgets/STimelinePropertyPanel.h
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
#include "STimelineProperty.h"
|
||||||
|
#include "Widgets/SCompoundWidget.h"
|
||||||
|
#include "Widgets/Layout/SGridPanel.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class CUT5_API STimelinePropertyPanel : public SCompoundWidget
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
SLATE_BEGIN_ARGS(STimelinePropertyPanel)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
SLATE_ARGUMENT(TSharedPtr<SCutMainWindow>, MainWindow)
|
||||||
|
SLATE_END_ARGS()
|
||||||
|
|
||||||
|
/** Constructs this widget with InArgs */
|
||||||
|
void Construct(const FArguments& InArgs);
|
||||||
|
|
||||||
|
void AddNewSelection(FTimelinePropertyData TimelinePropertyData);
|
||||||
|
|
||||||
|
virtual FReply OnDragOver(const FGeometry& MyGeometry, const FDragDropEvent& DragDropEvent) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
int32 MaxRowIndex = 3;
|
||||||
|
TSharedPtr<SCutMainWindow> MainWindow;
|
||||||
|
TSharedPtr<SGridPanel> GridPanel;
|
||||||
|
};
|
47
Source/Cut5/Widgets/STimelineTick.cpp
Normal file
47
Source/Cut5/Widgets/STimelineTick.cpp
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
|
||||||
|
#include "STimelineTick.h"
|
||||||
|
|
||||||
|
#include "DefineGlobal.h"
|
||||||
|
#include "SlateOptMacros.h"
|
||||||
|
|
||||||
|
BEGIN_SLATE_FUNCTION_BUILD_OPTIMIZATION
|
||||||
|
|
||||||
|
void STimelineTick::Construct(const FArguments& InArgs)
|
||||||
|
{
|
||||||
|
FSlateRenderTransform RenderTransform = FSlateRenderTransform();
|
||||||
|
RenderTransform.
|
||||||
|
ChildSlot
|
||||||
|
[
|
||||||
|
SAssignNew(TickLengthBox, SBox)
|
||||||
|
.WidthOverride(FGlobalData::TrackLength)
|
||||||
|
.HeightOverride(25)
|
||||||
|
[
|
||||||
|
SAssignNew(TickBox, SOverlay)
|
||||||
|
+ SOverlay::Slot()
|
||||||
|
[
|
||||||
|
SAssignNew(TickCursor, SImage)
|
||||||
|
.RenderTransform()
|
||||||
|
]
|
||||||
|
]
|
||||||
|
];
|
||||||
|
GenerateTickBox(FGlobalData::TrackLength / FGlobalData::DefaultTimeTickSpace);
|
||||||
|
}
|
||||||
|
|
||||||
|
void STimelineTick::GenerateTickBox(int32 TickCount)
|
||||||
|
{
|
||||||
|
for (int32 i = 0; i < TickCount; i++)
|
||||||
|
{
|
||||||
|
TSharedPtr<STextBlock> TickText = SNew(STextBlock).Text(FText::FromString("|"));
|
||||||
|
TickBox->AddSlot()
|
||||||
|
[
|
||||||
|
TickText.ToSharedRef()
|
||||||
|
|
||||||
|
];
|
||||||
|
TickText->SetRenderTransform(FSlateRenderTransform(FVector2D(i * FGlobalData::DefaultTimeTickSpace, 0)));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
END_SLATE_FUNCTION_BUILD_OPTIMIZATION
|
27
Source/Cut5/Widgets/STimelineTick.h
Normal file
27
Source/Cut5/Widgets/STimelineTick.h
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
#include "Widgets/SCompoundWidget.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class CUT5_API STimelineTick : public SCompoundWidget
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
SLATE_BEGIN_ARGS(STimelineTick)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
SLATE_END_ARGS()
|
||||||
|
|
||||||
|
/** Constructs this widget with InArgs */
|
||||||
|
void Construct(const FArguments& InArgs);
|
||||||
|
|
||||||
|
void GenerateTickBox(int32 TickCount);
|
||||||
|
TSharedPtr<SOverlay> TickBox;
|
||||||
|
TSharedPtr<SBox> TickLengthBox;
|
||||||
|
TSharedPtr<SImage> TickCursor;
|
||||||
|
};
|
121
Source/Cut5/Widgets/STrackBody.cpp
Normal file
121
Source/Cut5/Widgets/STrackBody.cpp
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
|
||||||
|
#include "STrackBody.h"
|
||||||
|
|
||||||
|
#include "SlateOptMacros.h"
|
||||||
|
#include "Widgets/Layout/SConstraintCanvas.h"
|
||||||
|
|
||||||
|
BEGIN_SLATE_FUNCTION_BUILD_OPTIMIZATION
|
||||||
|
|
||||||
|
void STrackBody::Construct(const FArguments& InArgs)
|
||||||
|
{
|
||||||
|
TrackHead = InArgs._TrackHead;
|
||||||
|
ChildSlot
|
||||||
|
[
|
||||||
|
SAssignNew(TrackBodyBox, SBox)
|
||||||
|
.WidthOverride(FGlobalData::TrackLength)
|
||||||
|
.HeightOverride(FGlobalData::DefaultTrackHeight)
|
||||||
|
[
|
||||||
|
SNew(SConstraintCanvas)
|
||||||
|
+ SConstraintCanvas::Slot()
|
||||||
|
.AutoSize(true)
|
||||||
|
.Offset(FMargin(0, 0, 0, 0))
|
||||||
|
.Anchors(FAnchors(0, 0, 1, 1))
|
||||||
|
[
|
||||||
|
SNew(SBorder)
|
||||||
|
.HAlign(HAlign_Fill)
|
||||||
|
.VAlign(VAlign_Fill)
|
||||||
|
.BorderBackgroundColor(FLinearColor(0.1f, 0.15f, 0.2f, 1.0f))
|
||||||
|
[
|
||||||
|
SAssignNew(Overlay, SOverlay)
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void STrackBody::CallRender()
|
||||||
|
{
|
||||||
|
Overlay->ClearChildren();
|
||||||
|
for (FClipData TempClipData : TrackHead->TrackData.ClipData)
|
||||||
|
{
|
||||||
|
if (TempClipData.ClipEndFrame > FGlobalData::TrackLength)
|
||||||
|
{
|
||||||
|
FGlobalData::TrackLength = TempClipData.ClipEndFrame;
|
||||||
|
TrackHead->CutTimeline->UpdateTimelineLength();
|
||||||
|
}
|
||||||
|
Overlay->AddSlot()
|
||||||
|
.HAlign(HAlign_Left)
|
||||||
|
[
|
||||||
|
SNew(SBox)
|
||||||
|
.WidthOverride(TempClipData.ClipEndFrame - TempClipData.ClipStartFrame)
|
||||||
|
.HeightOverride(FGlobalData::DefaultTrackHeight)
|
||||||
|
.RenderTransform(FSlateRenderTransform(FVector2D(TempClipData.ClipStartFrame, 0)))
|
||||||
|
[
|
||||||
|
SNew(SBorder)
|
||||||
|
.ColorAndOpacity(TempClipData.ClipColors[0])
|
||||||
|
.BorderBackgroundColor(TempClipData.ClipColors[0])
|
||||||
|
]
|
||||||
|
];
|
||||||
|
const FString A = FString::Printf(TEXT("%d"), TempClipData.ClipEndFrame - TempClipData.ClipStartFrame);
|
||||||
|
UE_LOG(LogTemp, Warning, TEXT("%s"), *A);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
FReply STrackBody::OnDrop(const FGeometry& MyGeometry, const FDragDropEvent& DragDropEvent)
|
||||||
|
{
|
||||||
|
const FTrackClipDragOperation& ClipDragOperation = static_cast<FTrackClipDragOperation&>(DragDropEvent.GetOperation().ToSharedRef().Get());
|
||||||
|
if (ClipDragOperation.TimelinePropertyData.Type == TrackHead->TrackData.TrackType)
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
FClipData NewClipData;
|
||||||
|
NewClipData.ClipGuid = FGuid::NewGuid();
|
||||||
|
NewClipData.ClipType = ClipDragOperation.TimelinePropertyData.Type;
|
||||||
|
NewClipData.ClipStartFrame = FMath::TruncToInt(MyGeometry.AbsoluteToLocal(DragDropEvent.GetScreenSpacePosition()).X / FGlobalData::DefaultTimeTickSpace) * FGlobalData::DefaultTimeTickSpace;
|
||||||
|
NewClipData.ClipColors.Add(FLinearColor(1, 1, 1, 1));;
|
||||||
|
NewClipData.ClipEndFrame = NewClipData.ClipStartFrame + 200;
|
||||||
|
|
||||||
|
//Overwrite the clip if it is in the same position
|
||||||
|
for (int32 i = TrackHead->TrackData.ClipData.Num() - 1; i > 0; i--)
|
||||||
|
{
|
||||||
|
const double ClipStartTime = TrackHead->TrackData.ClipData[i].ClipStartFrame;
|
||||||
|
const double ClipEndTime = TrackHead->TrackData.ClipData[i].ClipEndFrame;
|
||||||
|
if ((NewClipData.ClipEndFrame < ClipEndTime && ClipEndTime > ClipStartTime))
|
||||||
|
{
|
||||||
|
TrackHead->TrackData.ClipData[i].ClipStartFrame = NewClipData.ClipEndFrame;
|
||||||
|
}
|
||||||
|
if ((NewClipData.ClipStartFrame < TrackHead->TrackData.ClipData[i].ClipEndFrame && NewClipData.ClipStartFrame > TrackHead->TrackData.ClipData[i].ClipStartFrame))
|
||||||
|
{
|
||||||
|
TrackHead->TrackData.ClipData[i].ClipEndFrame = NewClipData.ClipStartFrame;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
TrackHead->TrackData.ClipData.Add(NewClipData);
|
||||||
|
CallRender();
|
||||||
|
}
|
||||||
|
|
||||||
|
return FReply::Handled().EndDragDrop();
|
||||||
|
}
|
||||||
|
|
||||||
|
FReply STrackBody::OnDragOver(const FGeometry& MyGeometry, const FDragDropEvent& DragDropEvent)
|
||||||
|
{
|
||||||
|
// GEngine->AddOnScreenDebugMessage(-1, 10.0f, FColor::Blue, DragDropEvent.GetScreenSpacePosition().ToString());
|
||||||
|
// GEngine->AddOnScreenDebugMessage(-1, 10.0f, FColor::Green, MyGeometry.GetAbsolutePosition().ToString());
|
||||||
|
// GEngine->AddOnScreenDebugMessage(-1, 10.0f, FColor::Red, MyGeometry.AbsoluteToLocal(DragDropEvent.GetScreenSpacePosition()).ToString());
|
||||||
|
return SCompoundWidget::OnDragOver(MyGeometry, DragDropEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
void STrackBody::OnDragEnter(const FGeometry& MyGeometry, const FDragDropEvent& DragDropEvent)
|
||||||
|
{
|
||||||
|
SCompoundWidget::OnDragEnter(MyGeometry, DragDropEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
void STrackBody::OnDragLeave(const FDragDropEvent& DragDropEvent)
|
||||||
|
{
|
||||||
|
SCompoundWidget::OnDragLeave(DragDropEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
END_SLATE_FUNCTION_BUILD_OPTIMIZATION
|
37
Source/Cut5/Widgets/STrackBody.h
Normal file
37
Source/Cut5/Widgets/STrackBody.h
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
#include "STrackHead.h"
|
||||||
|
#include "Widgets/SCompoundWidget.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class CUT5_API STrackBody : public SCompoundWidget, public IWidgetInterface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
SLATE_BEGIN_ARGS(STrackBody)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
SLATE_ARGUMENT(TSharedPtr<STrackHead>, TrackHead)
|
||||||
|
SLATE_END_ARGS()
|
||||||
|
|
||||||
|
/** Constructs this widget with InArgs */
|
||||||
|
void Construct(const FArguments& InArgs);
|
||||||
|
void CallRender();
|
||||||
|
virtual FReply OnDrop(const FGeometry& MyGeometry, const FDragDropEvent& DragDropEvent) override;
|
||||||
|
virtual FReply OnDragOver(const FGeometry& MyGeometry, const FDragDropEvent& DragDropEvent) override;
|
||||||
|
virtual void OnDragEnter(const FGeometry& MyGeometry, const FDragDropEvent& DragDropEvent) override;
|
||||||
|
virtual void OnDragLeave(const FDragDropEvent& DragDropEvent) override;
|
||||||
|
TSharedPtr<STrackHead> TrackHead;
|
||||||
|
TSharedPtr<SOverlay> Overlay;
|
||||||
|
TSharedPtr<SBox> TrackBodyBox;
|
||||||
|
|
||||||
|
// Interface
|
||||||
|
virtual void UpdateTimelineLength() override
|
||||||
|
{
|
||||||
|
TrackBodyBox->SetWidthOverride(FGlobalData::TrackLength);
|
||||||
|
};
|
||||||
|
};
|
31
Source/Cut5/Widgets/STrackHead.cpp
Normal file
31
Source/Cut5/Widgets/STrackHead.cpp
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
|
||||||
|
#include "STrackHead.h"
|
||||||
|
|
||||||
|
#include "SlateOptMacros.h"
|
||||||
|
|
||||||
|
BEGIN_SLATE_FUNCTION_BUILD_OPTIMIZATION
|
||||||
|
|
||||||
|
void STrackHead::Construct(const FArguments& InArgs)
|
||||||
|
{
|
||||||
|
TrackData = InArgs._TrackData;
|
||||||
|
CutTimeline = InArgs._CutTimeline;
|
||||||
|
ChildSlot
|
||||||
|
[
|
||||||
|
SNew(SBox)
|
||||||
|
.WidthOverride(100)
|
||||||
|
.HeightOverride(FGlobalData::DefaultTrackHeight)
|
||||||
|
[
|
||||||
|
SNew(SVerticalBox)
|
||||||
|
+ SVerticalBox::Slot()
|
||||||
|
[
|
||||||
|
SNew(STextBlock)
|
||||||
|
.Text(FText::FromString(TrackData.TrackName))
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
END_SLATE_FUNCTION_BUILD_OPTIMIZATION
|
27
Source/Cut5/Widgets/STrackHead.h
Normal file
27
Source/Cut5/Widgets/STrackHead.h
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
#include "SCutTimeline.h"
|
||||||
|
#include "Widgets/SCompoundWidget.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class CUT5_API STrackHead : public SCompoundWidget
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
SLATE_BEGIN_ARGS(STrackHead)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
SLATE_ARGUMENT(FTrackData, TrackData);
|
||||||
|
SLATE_ARGUMENT(TSharedPtr<SCutTimeline>, CutTimeline);
|
||||||
|
SLATE_END_ARGS()
|
||||||
|
|
||||||
|
/** Constructs this widget with InArgs */
|
||||||
|
void Construct(const FArguments& InArgs);
|
||||||
|
|
||||||
|
FTrackData TrackData;
|
||||||
|
TSharedPtr<SCutTimeline> CutTimeline;
|
||||||
|
};
|
15
Source/Cut5Editor.Target.cs
Normal file
15
Source/Cut5Editor.Target.cs
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
||||||
|
|
||||||
|
using UnrealBuildTool;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
public class Cut5EditorTarget : TargetRules
|
||||||
|
{
|
||||||
|
public Cut5EditorTarget( TargetInfo Target) : base(Target)
|
||||||
|
{
|
||||||
|
Type = TargetType.Editor;
|
||||||
|
DefaultBuildSettings = BuildSettingsVersion.V2;
|
||||||
|
IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_1;
|
||||||
|
ExtraModuleNames.Add("Cut5");
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user