diff --git a/.vs/RimWorld-Animation-Studio/v16/.suo b/.vs/RimWorld-Animation-Studio/v16/.suo
index f6edf7aa..2c75330c 100644
Binary files a/.vs/RimWorld-Animation-Studio/v16/.suo and b/.vs/RimWorld-Animation-Studio/v16/.suo differ
diff --git a/Assembly-CSharp.csproj b/Assembly-CSharp.csproj
index 62cf9a0b..2bf6b987 100644
--- a/Assembly-CSharp.csproj
+++ b/Assembly-CSharp.csproj
@@ -88,7 +88,7 @@
-
+
@@ -132,6 +132,7 @@
+
@@ -141,7 +142,6 @@
-
diff --git a/Assets/Resources/Prefabs/GhostSlider.prefab b/Assets/Resources/Prefabs/GhostSlider.prefab
index e76edfe3..d2e766b3 100644
--- a/Assets/Resources/Prefabs/GhostSlider.prefab
+++ b/Assets/Resources/Prefabs/GhostSlider.prefab
@@ -181,7 +181,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
- m_Color: {r: 0.5, g: 0, b: 0, a: 0.5019608}
+ m_Color: {r: 0.5, g: 0, b: 0, a: 1}
m_RaycastTarget: 0
m_Maskable: 1
m_OnCullStateChanged:
diff --git a/Assets/Scenes/MainScene.unity b/Assets/Scenes/MainScene.unity
index 285473d1..a6fdb86b 100644
--- a/Assets/Scenes/MainScene.unity
+++ b/Assets/Scenes/MainScene.unity
@@ -2452,6 +2452,7 @@ GameObject:
- component: {fileID: 149299858}
- component: {fileID: 149299857}
- component: {fileID: 149299856}
+ - component: {fileID: 149299859}
m_Layer: 5
m_Name: ActorAddonButton
m_TagString: Untagged
@@ -2517,7 +2518,7 @@ MonoBehaviour:
m_PressedTrigger: Pressed
m_SelectedTrigger: Selected
m_DisabledTrigger: Disabled
- m_Interactable: 1
+ m_Interactable: 0
m_TargetGraphic: {fileID: 149299857}
m_OnClick:
m_PersistentCalls:
@@ -2570,6 +2571,25 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 149299854}
m_CullTransparentMesh: 0
+--- !u!114 &149299859
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 149299854}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: c05e9ac2a2f311549b12f094d2785a20, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ message: Currently disabled
+ executedCommand:
+ delay: 0
+ offset: {x: 5, y: -15}
+ flipX: 0
+ tooltip: {fileID: 0}
+ tooltipText: {fileID: 0}
--- !u!1 &160519906
GameObject:
m_ObjectHideFlags: 0
@@ -3511,6 +3531,84 @@ MonoBehaviour:
cloneObjects:
- {fileID: 8098018029235791166, guid: 860a3bbda6bdfad4791a7fce0c17e672, type: 3}
- {fileID: 567861683340653947, guid: 9c09247b9acee3645ad8788eab810b2e, type: 3}
+--- !u!1 &250084108
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 250084109}
+ - component: {fileID: 250084111}
+ - component: {fileID: 250084110}
+ m_Layer: 5
+ m_Name: StageWindowLengthNormal
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &250084109
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 250084108}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 665717983}
+ m_RootOrder: 4
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 110, y: -30}
+ m_SizeDelta: {x: 110, y: 20}
+ m_Pivot: {x: 0, y: 0.5}
+--- !u!114 &250084110
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 250084108}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_FontData:
+ m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+ m_FontSize: 14
+ m_FontStyle: 0
+ m_BestFit: 0
+ m_MinSize: 10
+ m_MaxSize: 40
+ m_Alignment: 4
+ m_AlignByGeometry: 0
+ m_RichText: 1
+ m_HorizontalOverflow: 0
+ m_VerticalOverflow: 0
+ m_LineSpacing: 1
+ m_Text: 6000 (100.00 s)
+--- !u!222 &250084111
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 250084108}
+ m_CullTransparentMesh: 0
--- !u!1 &252080743
GameObject:
m_ObjectHideFlags: 0
@@ -3942,6 +4040,84 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 272322073}
m_CullTransparentMesh: 0
+--- !u!1 &279394488
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 279394489}
+ - component: {fileID: 279394491}
+ - component: {fileID: 279394490}
+ m_Layer: 5
+ m_Name: AnimationLengthQuickText
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &279394489
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 279394488}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 665717983}
+ m_RootOrder: 8
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 220, y: -50}
+ m_SizeDelta: {x: 110, y: 20}
+ m_Pivot: {x: 0, y: 0.5}
+--- !u!114 &279394490
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 279394488}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_FontData:
+ m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+ m_FontSize: 14
+ m_FontStyle: 0
+ m_BestFit: 0
+ m_MinSize: 10
+ m_MaxSize: 40
+ m_Alignment: 4
+ m_AlignByGeometry: 0
+ m_RichText: 1
+ m_HorizontalOverflow: 0
+ m_VerticalOverflow: 0
+ m_LineSpacing: 1
+ m_Text: 6000 (100.00 s)
+--- !u!222 &279394491
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 279394488}
+ m_CullTransparentMesh: 0
--- !u!224 &279689758 stripped
RectTransform:
m_CorrespondingSourceObject: {fileID: 5792094730711952121, guid: 9070db4f6841de145b1ceb2f217d92f7,
@@ -8244,9 +8420,9 @@ MonoBehaviour:
onValueChanged:
m_PersistentCalls:
m_Calls:
- - m_Target: {fileID: 1900570406}
- m_MethodName: set_isOn
- m_Mode: 0
+ - m_Target: {fileID: 1335076905}
+ m_MethodName: StretchKeyframesToggle
+ m_Mode: 1
m_Arguments:
m_ObjectArgument: {fileID: 0}
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
@@ -9664,7 +9840,6 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 5ce34f72fe7ef0c41a7bc163fce97970, type: 3}
m_Name:
m_EditorClassIdentifier:
- isAnimating: 0
animationTimelines: {fileID: 1100016168}
actorBodies: {fileID: 1828035561}
stageLoopDropdown: {fileID: 429161118}
@@ -10230,7 +10405,7 @@ RectTransform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 539052776}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 206.25}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 1791478860}
@@ -10241,14 +10416,13 @@ RectTransform:
- {fileID: 462332575}
- {fileID: 1083597498}
- {fileID: 429161117}
- - {fileID: 665717983}
m_Father: {fileID: 1100016168}
- m_RootOrder: 1
+ m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 10, y: -22.5}
- m_SizeDelta: {x: 1375.8606, y: 45}
+ m_SizeDelta: {x: 1055, y: 45}
m_Pivot: {x: 0, y: 0.5}
--- !u!114 &539052778
MonoBehaviour:
@@ -10262,10 +10436,8 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 6b414452bfd6c9b4bb99542a51d77468, type: 3}
m_Name:
m_EditorClassIdentifier:
- stageLoopDropdown: {fileID: 429161118}
- animationClipTimeField: {fileID: 760297267}
- animationClipLengthField: {fileID: 1676585155}
- stretchKeyframesToggle: {fileID: 462332576}
+ currentTimeField: {fileID: 760297267}
+ stageWindowLengthField: {fileID: 1676585155}
playBackSpeedField: {fileID: 1579799916}
playToggleButton: {fileID: 79733375}
stageTimelineSlider: {fileID: 1289465655}
@@ -10412,7 +10584,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0.5}
m_AnchorMax: {x: 1, y: 0.5}
- m_AnchoredPosition: {x: 0, y: 84.999985}
+ m_AnchoredPosition: {x: 0, y: 84.99999}
m_SizeDelta: {x: 0, y: 5}
m_Pivot: {x: 0, y: 1}
--- !u!114 &542629604
@@ -11443,11 +11615,11 @@ RectTransform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 591894604}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 206.25}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 1100016168}
- m_RootOrder: 0
+ m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 1}
@@ -12976,9 +13148,10 @@ GameObject:
m_Component:
- component: {fileID: 665717983}
- component: {fileID: 665717987}
- - component: {fileID: 665717986}
- - component: {fileID: 665717985}
- component: {fileID: 665717984}
+ - component: {fileID: 665717988}
+ - component: {fileID: 665717985}
+ - component: {fileID: 665717986}
m_Layer: 5
m_Name: 'StageTimeMetricsLabel '
m_TagString: Untagged
@@ -12993,21 +13166,27 @@ RectTransform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 665717982}
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
+ - {fileID: 1456872509}
+ - {fileID: 1662558896}
+ - {fileID: 2073914479}
- {fileID: 1137451984}
- - {fileID: 1834285083}
+ - {fileID: 250084109}
+ - {fileID: 1062318706}
- {fileID: 1293297799}
- m_Father: {fileID: 539052777}
- m_RootOrder: 8
+ - {fileID: 715800481}
+ - {fileID: 279394489}
+ m_Father: {fileID: 1100016168}
+ m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 1}
- m_AnchorMax: {x: 0, y: 1}
- m_AnchoredPosition: {x: 1006.86053, y: -35}
- m_SizeDelta: {x: 364, y: 25}
- m_Pivot: {x: 0, y: 0}
+ m_AnchorMin: {x: 1, y: 0}
+ m_AnchorMax: {x: 1, y: 0}
+ m_AnchoredPosition: {x: -310, y: 90}
+ m_SizeDelta: {x: 330, y: 60}
+ m_Pivot: {x: 1, y: 0}
--- !u!114 &665717984
MonoBehaviour:
m_ObjectHideFlags: 0
@@ -13031,22 +13210,21 @@ MonoBehaviour:
m_GameObject: {fileID: 665717982}
m_Enabled: 1
m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3}
+ m_Script: {fileID: 11500000, guid: 8a8695521f0d02e499659fee002a26c2, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Padding:
- m_Left: 20
+ m_Left: 0
m_Right: 0
m_Top: 0
m_Bottom: 0
m_ChildAlignment: 0
- m_Spacing: 0
- m_ChildForceExpandWidth: 0
- m_ChildForceExpandHeight: 0
- m_ChildControlWidth: 0
- m_ChildControlHeight: 0
- m_ChildScaleWidth: 1
- m_ChildScaleHeight: 1
+ m_StartCorner: 0
+ m_StartAxis: 0
+ m_CellSize: {x: 110, y: 20}
+ m_Spacing: {x: 0, y: 0}
+ m_Constraint: 1
+ m_ConstraintCount: 3
--- !u!114 &665717986
MonoBehaviour:
m_ObjectHideFlags: 0
@@ -13056,30 +13234,14 @@ MonoBehaviour:
m_GameObject: {fileID: 665717982}
m_Enabled: 1
m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+ m_Script: {fileID: 11500000, guid: 060e49b40b1097e46b662059e4e29cdf, type: 3}
m_Name:
m_EditorClassIdentifier:
- m_Material: {fileID: 0}
- m_Color: {r: 1, g: 1, b: 1, a: 1}
- m_RaycastTarget: 1
- m_Maskable: 1
- m_OnCullStateChanged:
- m_PersistentCalls:
- m_Calls: []
- m_FontData:
- m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
- m_FontSize: 14
- m_FontStyle: 0
- m_BestFit: 0
- m_MinSize: 10
- m_MaxSize: 40
- m_Alignment: 3
- m_AlignByGeometry: 0
- m_RichText: 1
- m_HorizontalOverflow: 0
- m_VerticalOverflow: 0
- m_LineSpacing: 1
- m_Text:
+ stageLengthNormalText: {fileID: 250084110}
+ stageLengthQuickText: {fileID: 1062318707}
+ animationLengthNormalText: {fileID: 715800482}
+ animationLengthQuickText: {fileID: 279394490}
+ spacing: 10
--- !u!222 &665717987
CanvasRenderer:
m_ObjectHideFlags: 0
@@ -13088,6 +13250,26 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 665717982}
m_CullTransparentMesh: 0
+--- !u!114 &665717988
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 665717982}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_IgnoreLayout: 1
+ m_MinWidth: -1
+ m_MinHeight: -1
+ m_PreferredWidth: -1
+ m_PreferredHeight: -1
+ m_FlexibleWidth: -1
+ m_FlexibleHeight: -1
+ m_LayoutPriority: 1
--- !u!1 &675124297
GameObject:
m_ObjectHideFlags: 0
@@ -13751,7 +13933,7 @@ GameObject:
m_Component:
- component: {fileID: 714321235}
m_Layer: 5
- m_Name: PreviewTimeline
+ m_Name: AnimationPreviewTimeline
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
@@ -13765,18 +13947,96 @@ RectTransform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 714321234}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 206.25}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 138865804}
m_Father: {fileID: 1100016168}
- m_RootOrder: 2
+ m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 537.5, y: -55}
m_SizeDelta: {x: 1055, y: 20}
m_Pivot: {x: 0.5, y: 0.5}
+--- !u!1 &715800480
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 715800481}
+ - component: {fileID: 715800483}
+ - component: {fileID: 715800482}
+ m_Layer: 5
+ m_Name: AnimationLengthNormalText
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &715800481
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 715800480}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 665717983}
+ m_RootOrder: 7
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 110, y: -50}
+ m_SizeDelta: {x: 110, y: 20}
+ m_Pivot: {x: 0, y: 0.5}
+--- !u!114 &715800482
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 715800480}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_FontData:
+ m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+ m_FontSize: 14
+ m_FontStyle: 0
+ m_BestFit: 0
+ m_MinSize: 10
+ m_MaxSize: 40
+ m_Alignment: 4
+ m_AlignByGeometry: 0
+ m_RichText: 1
+ m_HorizontalOverflow: 0
+ m_VerticalOverflow: 0
+ m_LineSpacing: 1
+ m_Text: 6000 (100.00 s)
+--- !u!222 &715800483
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 715800480}
+ m_CullTransparentMesh: 0
--- !u!1 &719308825
GameObject:
m_ObjectHideFlags: 0
@@ -14701,7 +14961,7 @@ GameObject:
- component: {fileID: 760297270}
- component: {fileID: 760297271}
m_Layer: 5
- m_Name: AnimationClipTimeField
+ m_Name: CurrentTimeField
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
@@ -14779,18 +15039,7 @@ MonoBehaviour:
m_CharacterLimit: 0
m_OnEndEdit:
m_PersistentCalls:
- m_Calls:
- - m_Target: {fileID: 531246358}
- m_MethodName: OnAnimationClipTimeFieldChange
- m_Mode: 1
- m_Arguments:
- m_ObjectArgument: {fileID: 0}
- m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
- m_IntArgument: 0
- m_FloatArgument: 0
- m_StringArgument:
- m_BoolArgument: 0
- m_CallState: 2
+ m_Calls: []
m_OnValueChanged:
m_PersistentCalls:
m_Calls: []
@@ -19124,7 +19373,7 @@ RectTransform:
m_Children:
- {fileID: 1673215398}
m_Father: {fileID: 1100016168}
- m_RootOrder: 3
+ m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
@@ -19468,6 +19717,84 @@ MonoBehaviour:
m_BlockingMask:
serializedVersion: 2
m_Bits: 4294967295
+--- !u!1 &1062318705
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1062318706}
+ - component: {fileID: 1062318708}
+ - component: {fileID: 1062318707}
+ m_Layer: 5
+ m_Name: StageWindowLengthQuick
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1062318706
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1062318705}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 665717983}
+ m_RootOrder: 5
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 220, y: -30}
+ m_SizeDelta: {x: 110, y: 20}
+ m_Pivot: {x: 0, y: 0.5}
+--- !u!114 &1062318707
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1062318705}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_FontData:
+ m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+ m_FontSize: 14
+ m_FontStyle: 0
+ m_BestFit: 0
+ m_MinSize: 10
+ m_MaxSize: 40
+ m_Alignment: 4
+ m_AlignByGeometry: 0
+ m_RichText: 1
+ m_HorizontalOverflow: 0
+ m_VerticalOverflow: 0
+ m_LineSpacing: 1
+ m_Text: 6000 (100.00 s)
+--- !u!222 &1062318708
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1062318705}
+ m_CullTransparentMesh: 0
--- !u!1 &1068786481
GameObject:
m_ObjectHideFlags: 0
@@ -20012,6 +20339,7 @@ RectTransform:
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
+ - {fileID: 665717983}
- {fileID: 591894605}
- {fileID: 539052777}
- {fileID: 714321235}
@@ -20621,7 +20949,7 @@ GameObject:
- component: {fileID: 1137451986}
- component: {fileID: 1137451985}
m_Layer: 5
- m_Name: StageLengthText
+ m_Name: StageWindowLengthText
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
@@ -20639,12 +20967,12 @@ RectTransform:
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 665717983}
- m_RootOrder: 0
+ m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
- m_AnchoredPosition: {x: 20, y: -12.5}
- m_SizeDelta: {x: 153, y: 25}
+ m_AnchoredPosition: {x: 0, y: -30}
+ m_SizeDelta: {x: 110, y: 20}
m_Pivot: {x: 0, y: 0.5}
--- !u!114 &1137451985
MonoBehaviour:
@@ -20655,11 +20983,17 @@ MonoBehaviour:
m_GameObject: {fileID: 1137451983}
m_Enabled: 1
m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
+ m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
m_Name:
m_EditorClassIdentifier:
- m_HorizontalFit: 2
- m_VerticalFit: 0
+ m_IgnoreLayout: 0
+ m_MinWidth: 120
+ m_MinHeight: -1
+ m_PreferredWidth: 120
+ m_PreferredHeight: -1
+ m_FlexibleWidth: -1
+ m_FlexibleHeight: -1
+ m_LayoutPriority: 1
--- !u!114 &1137451986
MonoBehaviour:
m_ObjectHideFlags: 0
@@ -20682,17 +21016,17 @@ MonoBehaviour:
m_FontData:
m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
m_FontSize: 14
- m_FontStyle: 0
+ m_FontStyle: 1
m_BestFit: 0
m_MinSize: 10
m_MaxSize: 40
- m_Alignment: 5
+ m_Alignment: 3
m_AlignByGeometry: 0
m_RichText: 1
m_HorizontalOverflow: 0
m_VerticalOverflow: 0
m_LineSpacing: 1
- m_Text: 'Stage length: 600 (10 s)'
+ m_Text: Stage length
--- !u!222 &1137451987
CanvasRenderer:
m_ObjectHideFlags: 0
@@ -24277,7 +24611,7 @@ GameObject:
- component: {fileID: 1289465655}
- component: {fileID: 1289465656}
m_Layer: 5
- m_Name: AnimTimelineSlider
+ m_Name: StageTimelineSlider
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
@@ -24354,7 +24688,7 @@ MonoBehaviour:
m_OnValueChanged:
m_PersistentCalls:
m_Calls:
- - m_Target: {fileID: 531246358}
+ - m_Target: {fileID: 539052778}
m_MethodName: OnStageTimelineSliderChange
m_Mode: 1
m_Arguments:
@@ -24553,7 +24887,6 @@ GameObject:
- component: {fileID: 1293297799}
- component: {fileID: 1293297802}
- component: {fileID: 1293297801}
- - component: {fileID: 1293297800}
m_Layer: 5
m_Name: AnimationLengthText
m_TagString: Untagged
@@ -24573,27 +24906,13 @@ RectTransform:
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 665717983}
- m_RootOrder: 2
+ m_RootOrder: 6
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
- m_AnchoredPosition: {x: 185, y: -12.5}
- m_SizeDelta: {x: 179, y: 25}
+ m_AnchoredPosition: {x: 0, y: -50}
+ m_SizeDelta: {x: 110, y: 20}
m_Pivot: {x: 0, y: 0.5}
---- !u!114 &1293297800
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1293297798}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_HorizontalFit: 2
- m_VerticalFit: 0
--- !u!114 &1293297801
MonoBehaviour:
m_ObjectHideFlags: 0
@@ -24616,7 +24935,7 @@ MonoBehaviour:
m_FontData:
m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
m_FontSize: 14
- m_FontStyle: 0
+ m_FontStyle: 1
m_BestFit: 0
m_MinSize: 10
m_MaxSize: 40
@@ -24626,7 +24945,7 @@ MonoBehaviour:
m_HorizontalOverflow: 0
m_VerticalOverflow: 0
m_LineSpacing: 1
- m_Text: 'Animation length: 600 (10 s)'
+ m_Text: Total length
--- !u!222 &1293297802
CanvasRenderer:
m_ObjectHideFlags: 0
@@ -28092,6 +28411,41 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 0d0b652f32a2cc243917e4028fa0f046, type: 3}
m_Name:
m_EditorClassIdentifier:
+--- !u!1 &1456872508
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1456872509}
+ m_Layer: 5
+ m_Name: Spacer
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1456872509
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1456872508}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 665717983}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 55, y: -10}
+ m_SizeDelta: {x: 110, y: 20}
+ m_Pivot: {x: 0.5, y: 0.5}
--- !u!1 &1458444068
GameObject:
m_ObjectHideFlags: 0
@@ -28484,6 +28838,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 4264bb913f7501844bf60529d6b59b8a, type: 3}
m_Name:
m_EditorClassIdentifier:
+ animationTimelines: {fileID: 1100016168}
targetDivisions: 30
divisionBands: 0100000002000000050000000a000000190000003200000064000000fa000000f4010000e8030000
linearScaleTickPrefab: {fileID: 5891687054347736455, guid: 229f16c49d39ed446bf8c22c8065cd8a,
@@ -31963,6 +32318,84 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1661572514}
m_CullTransparentMesh: 0
+--- !u!1 &1662558895
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1662558896}
+ - component: {fileID: 1662558898}
+ - component: {fileID: 1662558897}
+ m_Layer: 5
+ m_Name: NormalText
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1662558896
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1662558895}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 665717983}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 165, y: -10}
+ m_SizeDelta: {x: 110, y: 20}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1662558897
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1662558895}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_FontData:
+ m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+ m_FontSize: 14
+ m_FontStyle: 1
+ m_BestFit: 0
+ m_MinSize: 10
+ m_MaxSize: 40
+ m_Alignment: 4
+ m_AlignByGeometry: 0
+ m_RichText: 1
+ m_HorizontalOverflow: 0
+ m_VerticalOverflow: 0
+ m_LineSpacing: 1
+ m_Text: Normal
+--- !u!222 &1662558898
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1662558895}
+ m_CullTransparentMesh: 0
--- !u!1 &1668270816
GameObject:
m_ObjectHideFlags: 0
@@ -32348,7 +32781,7 @@ GameObject:
- component: {fileID: 1676585158}
- component: {fileID: 1676585159}
m_Layer: 5
- m_Name: AnimationClipLengthField
+ m_Name: StageWindowLengthField
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
@@ -32426,18 +32859,7 @@ MonoBehaviour:
m_CharacterLimit: 0
m_OnEndEdit:
m_PersistentCalls:
- m_Calls:
- - m_Target: {fileID: 531246358}
- m_MethodName: OnAnimationClipLengthFieldChange
- m_Mode: 1
- m_Arguments:
- m_ObjectArgument: {fileID: 0}
- m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
- m_IntArgument: 0
- m_FloatArgument: 0
- m_StringArgument:
- m_BoolArgument: 0
- m_CallState: 2
+ m_Calls: []
m_OnValueChanged:
m_PersistentCalls:
m_Calls: []
@@ -35316,84 +35738,6 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1833911027}
m_CullTransparentMesh: 0
---- !u!1 &1834285082
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 1834285083}
- - component: {fileID: 1834285085}
- - component: {fileID: 1834285084}
- m_Layer: 5
- m_Name: /
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!224 &1834285083
-RectTransform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1834285082}
- m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children: []
- m_Father: {fileID: 665717983}
- m_RootOrder: 1
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 1}
- m_AnchorMax: {x: 0, y: 1}
- m_AnchoredPosition: {x: 179, y: -12.5}
- m_SizeDelta: {x: 12, y: 25}
- m_Pivot: {x: 0.5, y: 0.5}
---- !u!114 &1834285084
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1834285082}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_Material: {fileID: 0}
- m_Color: {r: 1, g: 1, b: 1, a: 1}
- m_RaycastTarget: 1
- m_Maskable: 1
- m_OnCullStateChanged:
- m_PersistentCalls:
- m_Calls: []
- m_FontData:
- m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
- m_FontSize: 14
- m_FontStyle: 0
- m_BestFit: 0
- m_MinSize: 10
- m_MaxSize: 40
- m_Alignment: 4
- m_AlignByGeometry: 0
- m_RichText: 1
- m_HorizontalOverflow: 0
- m_VerticalOverflow: 0
- m_LineSpacing: 1
- m_Text: /
---- !u!222 &1834285085
-CanvasRenderer:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1834285082}
- m_CullTransparentMesh: 0
--- !u!1 &1845441704
GameObject:
m_ObjectHideFlags: 0
@@ -39024,6 +39368,84 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2070462931}
m_CullTransparentMesh: 0
+--- !u!1 &2073914478
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 2073914479}
+ - component: {fileID: 2073914481}
+ - component: {fileID: 2073914480}
+ m_Layer: 5
+ m_Name: QuickText
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &2073914479
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2073914478}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 665717983}
+ m_RootOrder: 2
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 275, y: -10}
+ m_SizeDelta: {x: 110, y: 20}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &2073914480
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2073914478}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_FontData:
+ m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+ m_FontSize: 14
+ m_FontStyle: 1
+ m_BestFit: 0
+ m_MinSize: 10
+ m_MaxSize: 40
+ m_Alignment: 4
+ m_AlignByGeometry: 0
+ m_RichText: 1
+ m_HorizontalOverflow: 0
+ m_VerticalOverflow: 0
+ m_LineSpacing: 1
+ m_Text: Quick
+--- !u!222 &2073914481
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2073914478}
+ m_CullTransparentMesh: 0
--- !u!1 &2076684196 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 7715503544683182667, guid: 8b89f6c9e5f696c4997760829c45a505,
diff --git a/Assets/Scripts/AnimationComponents/AnimationStage.cs b/Assets/Scripts/AnimationComponents/AnimationStage.cs
index 5bb85e4c..9eeffb78 100644
--- a/Assets/Scripts/AnimationComponents/AnimationStage.cs
+++ b/Assets/Scripts/AnimationComponents/AnimationStage.cs
@@ -98,6 +98,8 @@ namespace RimWorldAnimationStudio
clip.BuildSimpleCurves();
}
+
+ EventsManager.OnStageWindowSizeChanged(this);
}
public void ResizeStageWindow(int newStageWindowSize)
@@ -105,6 +107,8 @@ namespace RimWorldAnimationStudio
Workspace.GetCurrentAnimationStage().stageWindowSize = newStageWindowSize;
Workspace.GetCurrentAnimationStage().PlayTimeTicks = newStageWindowSize * StageLoopsNormal;
Workspace.GetCurrentAnimationStage().PlayTimeTicksQuick = newStageWindowSize * StageLoopsQuick;
+
+ EventsManager.OnStageWindowSizeChanged(this);
}
public void AddAnimationClip(int actorID = -1)
diff --git a/Assets/Scripts/AnimationComponents/PawnAnimationClip.cs b/Assets/Scripts/AnimationComponents/PawnAnimationClip.cs
index 54575122..999e48bd 100644
--- a/Assets/Scripts/AnimationComponents/PawnAnimationClip.cs
+++ b/Assets/Scripts/AnimationComponents/PawnAnimationClip.cs
@@ -193,30 +193,27 @@ namespace RimWorldAnimationStudio
public void AddPawnKeyframe()
{
- PawnAnimationClip clip = Workspace.GetCurrentPawnAnimationClip();
- List keyframes = clip?.Keyframes;
-
- if (clip == null || keyframes == null)
+ if (Keyframes == null)
{ Debug.LogWarning("Cannot add pawn keyframe - the AnimationDef is invalid"); return; }
- if (keyframes.FirstOrDefault(x => x.atTick == Workspace.StageTick) != null)
+ if (Keyframes.FirstOrDefault(x => x.atTick == Workspace.StageTick) != null)
{ Debug.LogWarning("Cannot add pawn keyframe - a keyframe already exists at this tick"); return; }
- float clipPercent = (float)(Workspace.StageTick % clip.duration) / clip.duration;
+ float clipPercent = (float)(Workspace.StageTick % duration) / duration;
PawnKeyframe keyframe = new PawnKeyframe();
- keyframe.BodyAngle = clip.BodyAngle.Evaluate(clipPercent);
- keyframe.HeadAngle = clip.HeadAngle.Evaluate(clipPercent);
- keyframe.HeadBob = clip.HeadBob.Evaluate(clipPercent);
- keyframe.BodyOffsetX = clip.BodyOffsetX.Evaluate(clipPercent);
- keyframe.BodyOffsetZ = clip.BodyOffsetZ.Evaluate(clipPercent);
- keyframe.HeadFacing = (int)clip.HeadFacing.Evaluate(clipPercent);
- keyframe.BodyFacing = (int)clip.BodyFacing.Evaluate(clipPercent);
- keyframe.GenitalAngle = clip.GenitalAngle.Evaluate(clipPercent);
+ keyframe.BodyAngle = BodyAngle.Evaluate(clipPercent);
+ keyframe.HeadAngle = HeadAngle.Evaluate(clipPercent);
+ keyframe.HeadBob = HeadBob.Evaluate(clipPercent);
+ keyframe.BodyOffsetX = BodyOffsetX.Evaluate(clipPercent);
+ keyframe.BodyOffsetZ = BodyOffsetZ.Evaluate(clipPercent);
+ keyframe.HeadFacing = (int)HeadFacing.Evaluate(clipPercent);
+ keyframe.BodyFacing = (int)BodyFacing.Evaluate(clipPercent);
+ keyframe.GenitalAngle = GenitalAngle.Evaluate(clipPercent);
keyframe.atTick = Workspace.StageTick;
- PawnKeyframe nextKeyframe = keyframes.FirstOrDefault(x => x.atTick > Workspace.StageTick);
+ PawnKeyframe nextKeyframe = Keyframes.FirstOrDefault(x => x.atTick > Workspace.StageTick);
if (nextKeyframe != null)
{ keyframes.Insert(keyframes.IndexOf(nextKeyframe), keyframe); }
@@ -224,41 +221,10 @@ namespace RimWorldAnimationStudio
else
{ keyframes.Add(keyframe); }
- clip.BuildSimpleCurves();
+ BuildSimpleCurves();
- Workspace.RecordEvent("Keyframe addition");
- }
-
- public void ClonePawnKeyframe()
- {
- List keyframesToClone = Workspace.GetPawnKeyframesByID(Workspace.keyframeID);
-
- foreach (PawnKeyframe keyframe in keyframesToClone)
- {
- PawnAnimationClip clip = Workspace.GetAnimationClipThatOwnsKeyframe(keyframe.keyframeID);
-
- if (clip == null)
- { Debug.LogWarning("Cannot clone pawn keyframe - no clip owns this keyframe"); continue; }
-
- if (clip.Keyframes.FirstOrDefault(x => x.atTick == Workspace.StageTick) != null)
- { Debug.LogWarning("Cannot clone pawn keyframe - a keyframe already exists at this tick"); return; }
-
- PawnKeyframe cloneFrame = keyframe.Copy();
- cloneFrame.GenerateKeyframeID(clip.GetOwningActorID());
- cloneFrame.atTick = Workspace.StageTick;
-
- PawnKeyframe nextKeyframe = clip.Keyframes.FirstOrDefault(x => x.atTick > Workspace.StageTick);
-
- if (nextKeyframe != null)
- { clip.Keyframes.Insert(clip.Keyframes.IndexOf(nextKeyframe), cloneFrame); }
-
- else
- { clip.Keyframes.Add(cloneFrame); }
-
- clip.BuildSimpleCurves();
- }
-
- Workspace.RecordEvent("Keyframe clone");
+ EventsManager.OnKeyframeCountChanged(this);
+ Workspace.RecordEvent("Keyframe addition");
}
public void CopyPawnKeyframes()
@@ -319,6 +285,8 @@ namespace RimWorldAnimationStudio
{ clip.Keyframes.Add(clonedKeyframe); }
clip.BuildSimpleCurves();
+
+ EventsManager.OnKeyframeCountChanged(clip);
}
if (originalWindowSize != Workspace.StageWindowSize)
@@ -344,6 +312,7 @@ namespace RimWorldAnimationStudio
Keyframes.Remove(keyframe);
BuildSimpleCurves();
+ EventsManager.OnKeyframeCountChanged(this);
Workspace.RecordEvent("Keyframe deletion");
}
@@ -360,7 +329,10 @@ namespace RimWorldAnimationStudio
// Pre-save / post-load
public void OnPreSave()
{
- foreach (ActorAddon addon in Addons)
+ var temp = Addons.Copy();
+ Addons.Clear();
+
+ foreach (ActorAddon addon in temp)
{
if (addon.Render)
{ addons.Add(addon); }
diff --git a/Assets/Scripts/AnimationComponents/PawnKeyframe.cs b/Assets/Scripts/AnimationComponents/PawnKeyframe.cs
index 08930dce..ef2c64ea 100644
--- a/Assets/Scripts/AnimationComponents/PawnKeyframe.cs
+++ b/Assets/Scripts/AnimationComponents/PawnKeyframe.cs
@@ -210,14 +210,18 @@ namespace RimWorldAnimationStudio
{
SoundEffect = DefaultTags.soundDefs.Concat(CustomTags.soundDefs).Contains(SoundEffect) ? SoundEffect : null;
- addonKeyframes.Clear();
-
- foreach (AddonKeyframe addonKeyframe in AddonKeyframes)
+ if (addonKeyframes.NotNullOrEmpty())
{
- ActorAddon addon = Workspace.GetAnimationClipThatOwnsKeyframe(keyframeID).GetActorAddon(addonKeyframe.AddonName);
+ var temp = AddonKeyframes.Copy();
+ addonKeyframes.Clear();
- if (addon.Render)
- { addonKeyframes.Add(addonKeyframe.Copy()); }
+ foreach (AddonKeyframe addonKeyframe in temp)
+ {
+ ActorAddon addon = Workspace.GetAnimationClipThatOwnsKeyframe(keyframeID).GetActorAddon(addonKeyframe.AddonName);
+
+ if (addon.Render)
+ { addonKeyframes.Add(addonKeyframe.Copy()); }
+ }
}
}
diff --git a/Assets/Scripts/GUI/Actors/ActorBody.cs b/Assets/Scripts/GUI/Actors/ActorBody.cs
index 0ae4ce1c..d1cabcc6 100644
--- a/Assets/Scripts/GUI/Actors/ActorBody.cs
+++ b/Assets/Scripts/GUI/Actors/ActorBody.cs
@@ -17,6 +17,9 @@ namespace RimWorldAnimationStudio
{
EventsManager.onActorBodyPartSelected.AddListener(delegate(ActorBodyPart bodyPart) { OnActorBodyPartSelected(bodyPart); });
EventsManager.onActorBodySelected.AddListener(delegate(ActorBody actorBody) { OnActorBodySelected(actorBody); });
+
+ if (Workspace.ActorID == actorID)
+ { Activate(); }
}
public void OnActorBodySelected(ActorBody actorBody)
diff --git a/Assets/Scripts/GUI/Actors/ActorBodyPart.cs b/Assets/Scripts/GUI/Actors/ActorBodyPart.cs
index bdbfc23e..5da1531c 100644
--- a/Assets/Scripts/GUI/Actors/ActorBodyPart.cs
+++ b/Assets/Scripts/GUI/Actors/ActorBodyPart.cs
@@ -18,6 +18,9 @@ namespace RimWorldAnimationStudio
{
EventsManager.onActorBodyPartSelected.AddListener(delegate (ActorBodyPart bodyPart) { OnActorBodyPartSelected(bodyPart); });
EventsManager.onActorBodySelected.AddListener(delegate (ActorBody actorBody) { OnActorBodySelected(actorBody); });
+
+ if (Workspace.ActorID == parent.actorID)
+ { parent.Activate(); }
}
public void OnActorAddonChange(ActorAddon actorAddon)
diff --git a/Assets/Scripts/GUI/AnimationLengthDisplay.cs b/Assets/Scripts/GUI/AnimationLengthDisplay.cs
deleted file mode 100644
index 7e58ceb0..00000000
--- a/Assets/Scripts/GUI/AnimationLengthDisplay.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using UnityEngine;
-using UnityEngine.UI;
-
-namespace RimWorldAnimationStudio
-{
- public class AnimationLengthDisplay : MonoBehaviour
- {
- public Text stageLengthNormalText;
- public Text animationLengthNormalText;
- public Text stageLengthQuickText;
- public Text animationLengthQuickText;
-
- public void Start()
- {
-
- }
-
- public void UpdateGUI()
- {
- stageLengthNormalText.text = "Stage length (normal): " + Workspace.GetCurrentAnimationStage().PlayTimeTicks + " (" + Workspace.GetCurrentAnimationStage().PlayTimeTicks / 60f + " s)";
- animationLengthNormalText.text = "Animation length (normal): " + Workspace.animationDef.animationTimeTicks + " (" + Workspace.animationDef.animationTimeTicks / 60f + " s)";
-
- stageLengthQuickText.text = "Stage length (quickie): " + Workspace.GetCurrentAnimationStage().PlayTimeTicksQuick + " (" + Workspace.GetCurrentAnimationStage().PlayTimeTicksQuick / 60f + " s)";
- animationLengthQuickText.text = "Animation length (quickie): " + Workspace.animationDef.animationTimeTicksQuick + " (" + Workspace.animationDef.animationTimeTicksQuick / 60f + " s)";
-
- LayoutRebuilder.ForceRebuildLayoutImmediate(stageLengthQuickText.GetComponent());
- LayoutRebuilder.ForceRebuildLayoutImmediate(animationLengthQuickText.GetComponent());
- }
- }
-}
diff --git a/Assets/Scripts/GUI/AnimationLengthsCard.cs b/Assets/Scripts/GUI/AnimationLengthsCard.cs
new file mode 100644
index 00000000..6df3f063
--- /dev/null
+++ b/Assets/Scripts/GUI/AnimationLengthsCard.cs
@@ -0,0 +1,39 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using UnityEngine;
+using UnityEngine.UI;
+
+namespace RimWorldAnimationStudio
+{
+ public class AnimationLengthsCard : MonoBehaviour
+ {
+ public Text stageLengthNormalText;
+ public Text stageLengthQuickText;
+ public Text animationLengthNormalText;
+ public Text animationLengthQuickText;
+ public float spacing = 10f;
+
+ private RectTransform rect;
+
+ private void Start()
+ {
+ rect = GetComponent();
+ }
+
+ public void Update()
+ {
+ LayoutRebuilder.ForceRebuildLayoutImmediate(transform.parent.GetComponent());
+ LayoutRebuilder.ForceRebuildLayoutImmediate(transform.parent.GetComponent());
+ rect.localPosition = new Vector3(rect.localPosition.x, spacing + transform.parent.GetComponent().sizeDelta.y, rect.localPosition.z);
+
+ stageLengthNormalText.text = Workspace.GetCurrentAnimationStage().PlayTimeTicks + " (" + string.Format("{0:0.00}", Workspace.GetCurrentAnimationStage().PlayTimeTicks / 60f) + " s)";
+ animationLengthNormalText.text = Workspace.animationDef.animationTimeTicks + " (" + string.Format("{0:0.00}", Workspace.animationDef.animationTimeTicks / 60f) + " s)";
+
+ stageLengthQuickText.text = Workspace.GetCurrentAnimationStage().PlayTimeTicksQuick + " (" + string.Format("{0:0.00}", Workspace.GetCurrentAnimationStage().PlayTimeTicksQuick / 60f) + " s)";
+ animationLengthQuickText.text = Workspace.animationDef.animationTimeTicksQuick + " (" + string.Format("{0:0.00}", Workspace.animationDef.animationTimeTicksQuick / 60f) + " s)";
+ }
+ }
+}
diff --git a/Assets/Scripts/GUI/AnimationLengthDisplay.cs.meta b/Assets/Scripts/GUI/AnimationLengthsCard.cs.meta
similarity index 100%
rename from Assets/Scripts/GUI/AnimationLengthDisplay.cs.meta
rename to Assets/Scripts/GUI/AnimationLengthsCard.cs.meta
diff --git a/Assets/Scripts/GUI/AnimationTimeline.cs b/Assets/Scripts/GUI/AnimationTimeline.cs
index 217f57ac..8fe5e224 100644
--- a/Assets/Scripts/GUI/AnimationTimeline.cs
+++ b/Assets/Scripts/GUI/AnimationTimeline.cs
@@ -11,45 +11,50 @@ namespace RimWorldAnimationStudio
{
public class AnimationTimeline : MonoBehaviour, IPointerClickHandler
{
- public int actorID;
+ public int actorID = -1;
public KeyframeSlider keyframeSliderPrefab;
private Transform anchorTransform;
+ private void Start()
+ {
+ EventsManager.onAnimationTimelinesChanged.AddListener(delegate { UpdateGUI(); });
+ EventsManager.onKeyframeCountChanged.AddListener(delegate { UpdateGUI(); });
+ EventsManager.onActorIDChanged.AddListener(delegate { UpdateTimelineSelection(); });
+
+ UpdateTimelineSelection();
+ UpdateGUI();
+ }
+
public void Initialize(int actorID)
{
anchorTransform = transform.parent;
this.actorID = actorID;
+ UpdateGUI();
+ }
+
+ public void UpdateGUI()
+ {
+ if (actorID < 0) return;
+
PawnAnimationClip clip = Workspace.GetPawnAnimationClip(actorID);
+ if (clip == null) return;
+
clip.BuildSimpleCurves();
foreach (KeyframeSlider slider in GetComponentsInChildren())
- { RemovePawnKeyFrame(slider.keyframeID);}
+ { RemovePawnKeyFrame(slider.keyframeID); }
foreach (PawnKeyframe keyframe in clip.Keyframes)
{ AddPawnKeyFrame(keyframe.keyframeID); }
- /*int keyframeCount = clip.keyframes.Count;
- int childCount = GetComponentsInChildren().Count();
+ InitiateUpdateOfGhostFrames();
+ }
- for (int i = 0; i < Mathf.Max(keyframeCount, childCount); i++)
- {
- // Add new keyframe sliders as required
- if (i >= childCount)
- { AddPawnKeyFrame(clip.keyframes[i].keyframeID); }
-
- // Get objects to update
- KeyframeSlider keyframeSlider = GetComponentsInChildren()[i];
-
- // Update values
- if (i < keyframeCount)
- { keyframeSlider.Initialize(this, actorID, clip.keyframes[i].keyframeID); }
-
- // Remove excess objects as required
- else
- { RemovePawnKeyFrame(GetComponentsInChildren()[i].keyframeID); }
- }*/
+ public void UpdateTimelineSelection()
+ {
+ GetComponent().color = (Workspace.ActorID == actorID ? Constants.ColorGoldYellow : Constants.ColorMidGrey);
}
public void AddPawnKeyFrame(int keyframeID)
@@ -64,19 +69,8 @@ namespace RimWorldAnimationStudio
Destroy(keyframeSlider?.gameObject);
}
- public void Update()
- {
- if (Workspace.ActorID == actorID)
- { GetComponent().color = Constants.ColorGoldYellow; }
-
- else
- { GetComponent().color = Constants.ColorMidGrey; }
- }
-
public void InitiateUpdateOfGhostFrames()
{
- //if (AnimationController.Instance.IsTimelineDirty()) return;
-
BroadcastMessage("UpdateGhostFrames");
}
diff --git a/Assets/Scripts/GUI/Cards/ActorKeyframeCard.cs b/Assets/Scripts/GUI/Cards/ActorKeyframeCard.cs
index a2c61b5a..e5d7f7e0 100644
--- a/Assets/Scripts/GUI/Cards/ActorKeyframeCard.cs
+++ b/Assets/Scripts/GUI/Cards/ActorKeyframeCard.cs
@@ -48,8 +48,9 @@ namespace RimWorldAnimationStudio
keyframe.GenitalAngle = float.Parse(appendageRotationField.text);
Workspace.GetCurrentPawnAnimationClip().BuildSimpleCurves();
-
Workspace.RecordEvent("Actor position / orientation");
+
+ UpdateGUI();
}
public void UpdateGUI()
diff --git a/Assets/Scripts/GUI/Cards/AnimationControlCard.cs b/Assets/Scripts/GUI/Cards/AnimationControlCard.cs
index 16fe082c..5e190954 100644
--- a/Assets/Scripts/GUI/Cards/AnimationControlCard.cs
+++ b/Assets/Scripts/GUI/Cards/AnimationControlCard.cs
@@ -8,67 +8,52 @@ namespace RimWorldAnimationStudio
{
public class AnimationControlCard : MonoBehaviour
{
- public Dropdown stageLoopDropdown;
- public InputField animationClipTimeField;
- public InputField animationClipLengthField;
- public Toggle stretchKeyframesToggle;
+ public InputField currentTimeField;
+ public InputField stageWindowLengthField;
public InputField playBackSpeedField;
public Button playToggleButton;
public Slider stageTimelineSlider;
private void Start()
{
- EventsManager.onStageTickChanged.AddListener(delegate
- {
- animationClipTimeField.SetTextWithoutNotify(Workspace.StageTick.ToString());
- stageTimelineSlider.SetValueWithoutNotify(Workspace.StageTick);
- });
+ EventsManager.onAnimationChanged.AddListener(delegate { UpdateGUI(); });
+ EventsManager.onStageIDChanged.AddListener(delegate { UpdateGUI(); });
+ EventsManager.onStageTickChanged.AddListener(delegate { UpdateGUI(); });
+ EventsManager.onAnimationToggled.AddListener(delegate { playToggleButton.image.color = Workspace.IsAnimating ? Constants.ColorGoldYellow : Constants.ColorWhite; });
- EventsManager.onAnimationToggled.AddListener(delegate
- {
- playToggleButton.image.color = Workspace.isAnimating ? Constants.ColorGoldYellow : Constants.ColorWhite;
- });
+ stageTimelineSlider.onValueChanged.AddListener(delegate { OnStageTimelineSliderChange(); });
+ currentTimeField.onEndEdit.AddListener(delegate { OnCurrentTimeFieldChange(); });
+ stageWindowLengthField.onEndEdit.AddListener(delegate { OnStageWindowLengthFieldChange(); });
+ playBackSpeedField.onEndEdit.AddListener(delegate { OnPlayBackSpeedChange(); });
- animationClipLengthField.text = Workspace.StageWindowSize.ToString();
- stageTimelineSlider.maxValue = Workspace.StageWindowSize;
- }
-
- public void ToggleAnimation(bool forceOff = false)
- {
- Workspace.isAnimating = !Workspace.isAnimating;
- if (forceOff) Workspace.isAnimating = false;
+ UpdateGUI();
}
public void OnStageTimelineSliderChange()
{
- if (Workspace.animationDef == null) return;
-
- if (Workspace.StageTick != (int)stageTimelineSlider.value)
- {
- Workspace.StageTick = (int)stageTimelineSlider.value;
- animationClipTimeField.text = Workspace.StageTick.ToString();
- }
+ Workspace.StageTick = (int)stageTimelineSlider.value;
}
- public void OnAnimationClipTimeFieldChange()
+ public void OnPlayBackSpeedChange()
{
- if (Workspace.animationDef == null) return;
-
- int.TryParse(animationClipTimeField.text, out int newStageTick);
- Workspace.StageTick = Mathf.Clamp(newStageTick, Constants.minTick, Workspace.StageWindowSize);
- stageTimelineSlider.value = Workspace.StageTick;
+ Workspace.PlayBackSpeed = float.Parse(playBackSpeedField.text);
}
- public void OnAnimationClipLengthFieldChange()
+ public void OnCurrentTimeFieldChange()
{
- if (Workspace.animationDef == null) return;
+ Workspace.StageTick = Mathf.Clamp(int.Parse(currentTimeField.text), Constants.minTick, Workspace.StageWindowSize);
- int.TryParse(animationClipLengthField.text, out int newStageWindowSize);
+ UpdateGUI();
+ }
+
+ public void OnStageWindowLengthFieldChange()
+ {
+ int.TryParse(stageWindowLengthField.text, out int newStageWindowSize);
newStageWindowSize = Mathf.Clamp(newStageWindowSize, Constants.minAnimationClipLength, Constants.maxAnimationClipLength);
Debug.Log("Resizing animation clip length to " + newStageWindowSize.ToString() + " ticks.");
- if (stretchKeyframesToggle.isOn)
+ if (Workspace.stretchKeyframes)
{ Workspace.GetCurrentAnimationStage().StretchStageWindow(newStageWindowSize); }
else
@@ -92,11 +77,16 @@ namespace RimWorldAnimationStudio
Workspace.GetCurrentAnimationStage().ResizeStageWindow(newStageWindowSize);
Workspace.RecordEvent("Stage length");
+
+ UpdateGUI();
}
- public void OnPlayBackSpeedChange()
+ public void UpdateGUI()
{
- Workspace.PlayBackSpeed = float.Parse(playBackSpeedField.text);
+ stageTimelineSlider.maxValue = Workspace.StageWindowSize;
+ stageTimelineSlider.SetValueWithoutNotify(Workspace.StageTick);
+ currentTimeField.SetTextWithoutNotify(Workspace.StageTick.ToString());
+ stageWindowLengthField.SetTextWithoutNotify(Workspace.StageWindowSize.ToString());
playBackSpeedField.SetTextWithoutNotify(Workspace.PlayBackSpeed.ToString());
}
}
diff --git a/Assets/Scripts/GUI/Cards/StageLoopsCard.cs b/Assets/Scripts/GUI/Cards/StageLoopsCard.cs
index 6b7e7fd0..a36e12c6 100644
--- a/Assets/Scripts/GUI/Cards/StageLoopsCard.cs
+++ b/Assets/Scripts/GUI/Cards/StageLoopsCard.cs
@@ -15,14 +15,13 @@ namespace RimWorldAnimationStudio
public void Start()
{
- EventsManager.onAnimationChanged.AddListener(delegate { UpdateInputFields(); });
- EventsManager.onStageIDChanged.AddListener(delegate { UpdateInputFields(); });
- EventsManager.onAnimationStageChanged.AddListener(delegate { UpdateInputFields(); });
+ EventsManager.onAnimationTimelinesChanged.AddListener(delegate { UpdateGUI(); });
+ EventsManager.onStageWindowSizeChanged.AddListener(delegate { UpdateGUI(); });
stageLoopsNormalField.onEndEdit.AddListener(delegate { OnStageLoopsNormalFieldChange(); });
stageLoopsQuickField.onEndEdit.AddListener(delegate { OnStageLoopsFastFieldChange(); });
- UpdateInputFields();
+ UpdateGUI();
}
public void OnStageLoopsNormalFieldChange()
@@ -33,8 +32,6 @@ namespace RimWorldAnimationStudio
EventsManager.OnAnimationStageChanged(Workspace.GetCurrentAnimationStage());
Workspace.RecordEvent("Cycle count (normal)");
-
- UpdateInputFields();
}
public void OnStageLoopsFastFieldChange()
@@ -45,11 +42,9 @@ namespace RimWorldAnimationStudio
EventsManager.OnAnimationStageChanged(Workspace.GetCurrentAnimationStage());
Workspace.RecordEvent("Cycle count (fast)");
-
- UpdateInputFields();
}
- public void UpdateInputFields()
+ public void UpdateGUI()
{
stageLoopsNormalField.SetTextWithoutNotify(Workspace.GetCurrentAnimationStage().StageLoopsNormal.ToString());
stageLoopsQuickField.SetTextWithoutNotify(Workspace.GetCurrentAnimationStage().StageLoopsQuick.ToString());
diff --git a/Assets/Scripts/GUI/DialogBoxes/SelectActorAddonsDialog.cs b/Assets/Scripts/GUI/DialogBoxes/SelectActorAddonsDialog.cs
index 26058b57..a33a48b3 100644
--- a/Assets/Scripts/GUI/DialogBoxes/SelectActorAddonsDialog.cs
+++ b/Assets/Scripts/GUI/DialogBoxes/SelectActorAddonsDialog.cs
@@ -10,6 +10,28 @@ namespace RimWorldAnimationStudio
{
public class SelectActorAddonsDialog : DialogBox
{
+ public class AddonDef
+ {
+ public string addonName;
+ public Toggle toggle;
+ public Dropdown anchor;
+ public InputField anchoringPawn;
+ public Dropdown layer;
+ public GameObject controls;
+
+ public AddonDef(string addonName, Toggle toggle, Dropdown anchor, InputField anchoringPawn, Dropdown layer, GameObject controls)
+ {
+ this.addonName = addonName;
+ this.toggle = toggle;
+ this.anchor = anchor;
+ this.anchoringPawn = anchoringPawn;
+ this.layer = layer;
+ this.controls = controls;
+ }
+ }
+
+ private List addonDefs = new List();
+
public Toggle handLeftToggle;
public Toggle handRightToggle;
public Toggle sexToyToggle;
@@ -30,92 +52,70 @@ namespace RimWorldAnimationStudio
public GameObject handRightControls;
public GameObject sexToyControls;
+ private PawnAnimationClip clip { get { return Workspace.GetCurrentPawnAnimationClip(); } }
+
+ private void Start()
+ {
+ EventsManager.onAnimationChanged.AddListener(delegate { UpdateGUI(); });
+ EventsManager.onActorIDChanged.AddListener(delegate { UpdateGUI(); });
+
+ InitializeAddonDefs();
+ UpdateGUI();
+ }
+
+ // temp code
+ public void InitializeAddonDefs()
+ {
+ if (addonDefs.NotNullOrEmpty()) return;
+
+ addonDefs.Add(new AddonDef("left hand", handLeftToggle, handLeftAnchor, handLeftAnchoringPawn, handLeftLayer, handLeftControls));
+ addonDefs.Add(new AddonDef("right hand", handRightToggle, handRightAnchor, handRightAnchoringPawn, handRightLayer, handRightControls));
+ addonDefs.Add(new AddonDef("dildo", sexToyToggle, sexToyAnchor, sexToyAnchoringPawn, sexToyLayer, sexToyControls));
+ }
+
public override void Initialize(bool addedNewTag = false)
+ {
+ InitializeAddonDefs();
+ }
+
+ public void UpdateGUI()
{
if (Workspace.animationDef == null) return;
- PawnAnimationClip clip = Workspace.GetCurrentPawnAnimationClip();
- if (clip?.GetActorAddon("left hand") != null)
+ Debug.Log("Actor: " + clip.GetOwningActorID());
+
+ foreach (AddonDef addonDef in addonDefs)
{
- switch (clip.GetActorAddon("left hand").AnchorName)
+ if (clip?.GetActorAddon(addonDef.addonName) != null)
{
- case "torso": handLeftAnchor.value = 1; break;
- case "head": handLeftAnchor.value = 2; break;
- case "groin": handLeftAnchor.value = 3; break;
- case "left breast": handLeftAnchor.value = 4; break;
- case "right breast": handLeftAnchor.value = 5; break;
- default: handLeftAnchor.value = 0; break;
+ switch (clip.GetActorAddon(addonDef.addonName).AnchorName)
+ {
+ case "torso": addonDef.anchor.SetValueWithoutNotify(1); break;
+ case "head": addonDef.anchor.SetValueWithoutNotify(2); break;
+ case "groin": addonDef.anchor.SetValueWithoutNotify(3); break;
+ case "left breast": addonDef.anchor.SetValueWithoutNotify(4); break;
+ case "right breast": addonDef.anchor.SetValueWithoutNotify(5); break;
+ default: addonDef.anchor.SetValueWithoutNotify(0); break;
+ }
+
+ addonDef.layer.SetValueWithoutNotify(addonDef.layer.options.IndexOf(addonDef.layer.options.First(x => x.text == clip.GetActorAddon(addonDef.addonName).Layer)));
+ addonDef.anchoringPawn.SetTextWithoutNotify(clip.GetActorAddon(addonDef.addonName).AnchoringActor.ToString());
+ addonDef.toggle.SetIsOnWithoutNotify(clip.IsActorAddonVisible(addonDef.addonName));
}
}
-
- if (clip?.GetActorAddon("right hand") != null)
- {
- switch (clip.GetActorAddon("right hand").AnchorName)
- {
- case "torso": handRightAnchor.value = 1; break;
- case "head": handRightAnchor.value = 2; break;
- case "groin": handRightAnchor.value = 3; break;
- case "left breast": handRightAnchor.value = 4; break;
- case "right breast": handRightAnchor.value = 5; break;
- default: handRightAnchor.value = 0; break;
- }
- }
-
- if (clip?.GetActorAddon("dildo") != null)
- {
- switch (clip.GetActorAddon("dildo").AnchorName)
- {
- case "torso": sexToyAnchor.value = 1; break;
- case "head": sexToyAnchor.value = 2; break;
- case "groin": sexToyAnchor.value = 3; break;
- case "left breast": sexToyAnchor.value = 4; break;
- case "right breast": sexToyAnchor.value = 5; break;
- default: sexToyAnchor.value = 0; break;
- }
- }
-
- if (clip?.GetActorAddon("left hand") != null)
- {
- handLeftLayer.value = handLeftLayer.options.IndexOf(handLeftLayer.options.First(x => x.text == clip.GetActorAddon("left hand").Layer));
- handLeftAnchoringPawn.text = clip.GetActorAddon("left hand").AnchoringActor.ToString();
- }
-
- if (clip?.GetActorAddon("right hand") != null)
- {
- handRightLayer.value = handRightLayer.options.IndexOf(handRightLayer.options.First(x => x.text == clip.GetActorAddon("right hand").Layer));
- handRightAnchoringPawn.text = clip.GetActorAddon("right hand").AnchoringActor.ToString();
- }
-
- if (clip?.GetActorAddon("dildo") != null)
- {
- sexToyLayer.value = sexToyLayer.options.IndexOf(sexToyLayer.options.First(x => x.text == clip.GetActorAddon("dildo").Layer));
- sexToyAnchoringPawn.text = clip.GetActorAddon("dildo").AnchoringActor.ToString();
- }
-
- handLeftToggle.isOn = clip.IsActorAddonVisible("left hand");
- handRightToggle.isOn = clip.IsActorAddonVisible("right hand");
- sexToyToggle.isOn = clip.IsActorAddonVisible("dildo");
-
- //handLeftControls.SetActive(handLeftToggle.isOn);
- //handRightControls.SetActive(handRightToggle.isOn);
- //sexToyControls.SetActive(sexToyToggle.isOn);
}
public void OnToggleChanged()
{
- PawnAnimationClip clip = Workspace.GetCurrentPawnAnimationClip();
-
clip.ShowOrHideActorAddon("left hand", handLeftToggle.isOn);
clip.ShowOrHideActorAddon("right hand", handRightToggle.isOn);
clip.ShowOrHideActorAddon("dildo", sexToyToggle.isOn);
- //Initialize();
+ UpdateGUI();
}
public void OnValueChanged()
{
- PawnAnimationClip clip = Workspace.GetCurrentPawnAnimationClip();
-
if (clip?.GetActorAddon("left hand") != null)
{
switch (handLeftAnchor.value)
@@ -155,13 +155,11 @@ namespace RimWorldAnimationStudio
}
}
- //Initialize();
+ UpdateGUI();
}
public void OnLayerChanged()
{
- PawnAnimationClip clip = Workspace.GetCurrentPawnAnimationClip();
-
if (clip?.GetActorAddon("left hand") != null)
{ clip.GetActorAddon("left hand").Layer = handLeftLayer.options[handLeftLayer.value].text; }
@@ -171,13 +169,11 @@ namespace RimWorldAnimationStudio
if (clip?.GetActorAddon("dildo") != null)
{ clip.GetActorAddon("dildo").Layer = sexToyLayer.options[sexToyLayer.value].text; }
- //Initialize();
+ UpdateGUI();
}
public void OnAnchoringPawnChanged()
{
- PawnAnimationClip clip = Workspace.GetCurrentPawnAnimationClip();
-
if (clip?.GetActorAddon("left hand") != null)
{
int i = int.Parse(handLeftAnchoringPawn.text);
@@ -210,6 +206,8 @@ namespace RimWorldAnimationStudio
clip.GetActorAddon("dildo").AnchoringActor = i;
sexToyAnchoringPawn.SetTextWithoutNotify(i.ToString());
}
+
+ UpdateGUI();
}
}
}
diff --git a/Assets/Scripts/GUI/KeyframeSlider.cs b/Assets/Scripts/GUI/KeyframeSlider.cs
index 403d80cc..0c3cf61c 100644
--- a/Assets/Scripts/GUI/KeyframeSlider.cs
+++ b/Assets/Scripts/GUI/KeyframeSlider.cs
@@ -11,6 +11,7 @@ namespace RimWorldAnimationStudio
{
public class KeyframeSlider : Slider, IPointerClickHandler, IBeginDragHandler, IEndDragHandler
{
+ public int keyframeID;
public AnimationTimeline timeline;
public Transform ghostSliders;
public Slider ghostSliderPrefab;
@@ -18,33 +19,32 @@ namespace RimWorldAnimationStudio
public GameObject soundIcon;
public int maxGhosts = 4;
- public int actorID;
- public int keyframeID;
-
- private PawnAnimationClip clip;
- private PawnKeyframe keyframe;
-
- private float dragTimeStart = -1f;
- private int dragTickStart = -1;
-
public KeyframeSlider linkedSlider;
public PawnKeyframe pivotKeyframe;
public int linkedOffset;
+ private PawnAnimationClip clip { get { return Workspace.GetPawnAnimationClip(actorID); } }
+ private PawnKeyframe keyframe { get { return Workspace.GetPawnKeyframe(keyframeID); } }
+
+ private int actorID;
+ private float dragTimeStart = -1f;
+ private int dragTickStart = -1;
+
+ protected override void Start()
+ {
+ base.Start();
+
+ onValueChanged.AddListener(delegate (float value) { OnValueChanged(); });
+ }
+
public void Initialize(AnimationTimeline timeline, int actorID, int keyframeID)
{
this.timeline = timeline;
- this.clip = Workspace.GetPawnAnimationClip(actorID);
- this.keyframe = Workspace.GetPawnKeyframe(keyframeID);
-
this.actorID = actorID;
this.keyframeID = keyframeID;
- PawnKeyframe keyframe = Workspace.GetPawnKeyframe(keyframeID);
maxValue = Workspace.StageWindowSize;
value = keyframe.atTick.Value;
-
- onValueChanged.AddListener(delegate (float value) { OnValueChanged(); });
}
public void OnValueChanged()
@@ -119,7 +119,7 @@ namespace RimWorldAnimationStudio
List selectedKeyframes = Workspace.GetPawnKeyframesByID(Workspace.keyframeID).Except(new List() { keyframe })?.ToList();
- // Link other slected keyframes to the movement of this one
+ // Link other selected keyframes to the movement of this one
if (selectedKeyframes.NotNullOrEmpty())
{
pivotKeyframe = keyframe.atTick <= selectedKeyframes.Min(x => x.atTick) ?
@@ -215,6 +215,8 @@ namespace RimWorldAnimationStudio
{
base.Update();
+ if (keyframe == null) return;
+
// Update outdated values
if (Workspace.keyframeID.NullOrEmpty() || Workspace.keyframeID.Contains(keyframeID) == false)
{ linkedSlider = null; }
diff --git a/Assets/Scripts/GUI/LinearScale.cs b/Assets/Scripts/GUI/LinearScale.cs
index 7dceb0e7..e8b698c1 100644
--- a/Assets/Scripts/GUI/LinearScale.cs
+++ b/Assets/Scripts/GUI/LinearScale.cs
@@ -10,6 +10,7 @@ namespace RimWorldAnimationStudio
{
public class LinearScale : Singleton
{
+ public Transform animationTimelines;
public int targetDivisions = 30;
public List divisionBands = new List() { 5, 10, 25, 50, 100, 250, 500, 1000 };
public GameObject linearScaleTickPrefab;
@@ -19,13 +20,18 @@ namespace RimWorldAnimationStudio
public void Start()
{
+ EventsManager.onAnimationChanged.AddListener(delegate { UpdateLinearScale(); });
+ EventsManager.onStageIDChanged.AddListener(delegate { UpdateLinearScale(); });
EventsManager.onStageWindowSizeChanged.AddListener(delegate { UpdateLinearScale(); });
+
+ UpdateLinearScale();
}
public void UpdateLinearScale()
{
if (Workspace.animationDef == null) return;
+ LayoutRebuilder.ForceRebuildLayoutImmediate(animationTimelines.GetComponent());
minDiff = -1f;
foreach (int division in divisionBands)
diff --git a/Assets/Scripts/GUI/SelfContained/InactiveDuringAnimationPreview.cs b/Assets/Scripts/GUI/SelfContained/InactiveDuringAnimationPreview.cs
index 66817c26..ef7007e0 100644
--- a/Assets/Scripts/GUI/SelfContained/InactiveDuringAnimationPreview.cs
+++ b/Assets/Scripts/GUI/SelfContained/InactiveDuringAnimationPreview.cs
@@ -16,7 +16,7 @@ namespace RimWorldAnimationStudio
private void Update()
{
- inputfield.interactable = AnimationController.Instance.isAnimating == false;
+ inputfield.interactable = Workspace.IsAnimating == false;
}
}
}
diff --git a/Assets/Scripts/GUI/SelfContained/RequiresAnimationDef.cs b/Assets/Scripts/GUI/SelfContained/RequiresAnimationDef.cs
index c2923a7a..bdf985df 100644
--- a/Assets/Scripts/GUI/SelfContained/RequiresAnimationDef.cs
+++ b/Assets/Scripts/GUI/SelfContained/RequiresAnimationDef.cs
@@ -12,7 +12,7 @@ namespace RimWorldAnimationStudio
private List buttonText;
private List buttonTextColor = new List();
- public void Start()
+ private void Start()
{
button = GetComponent