做个时间轴
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