diff --git a/.vs/RimWorld-Animation-Studio/v16/.suo b/.vs/RimWorld-Animation-Studio/v16/.suo
index 4407ca6c..f6edf7aa 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 df8f7e6f..62cf9a0b 100644
--- a/Assembly-CSharp.csproj
+++ b/Assembly-CSharp.csproj
@@ -75,6 +75,7 @@
+
@@ -87,12 +88,15 @@
+
-
+
+
+
@@ -109,15 +113,16 @@
+
+
+
-
-
diff --git a/Assets/Resources/Prefabs/ActorBody.prefab b/Assets/Resources/Prefabs/ActorBody.prefab
index 5a46c031..bd8f84fe 100644
--- a/Assets/Resources/Prefabs/ActorBody.prefab
+++ b/Assets/Resources/Prefabs/ActorBody.prefab
@@ -173,9 +173,7 @@ MonoBehaviour:
m_EditorClassIdentifier:
bodyPartRenderer: {fileID: 3345967395353432914}
parent: {fileID: -4411442180840688308}
- isHead: 0
- addonName: right hand
- isSelected: 0
+ bodyPart: right hand
--- !u!1 &2846713953308910856
GameObject:
m_ObjectHideFlags: 0
@@ -340,9 +338,7 @@ MonoBehaviour:
m_EditorClassIdentifier:
bodyPartRenderer: {fileID: 4070361490379091543}
parent: {fileID: -4411442180840688308}
- isHead: 0
- addonName: left hand
- isSelected: 0
+ bodyPart: left hand
--- !u!1 &3158459618386162366
GameObject:
m_ObjectHideFlags: 0
@@ -658,9 +654,7 @@ MonoBehaviour:
m_EditorClassIdentifier:
bodyPartRenderer: {fileID: 7367385255154626542}
parent: {fileID: -4411442180840688308}
- isHead: 0
- addonName: dildo
- isSelected: 0
+ bodyPart: dildo
--- !u!1 &7929422519883802246
GameObject:
m_ObjectHideFlags: 0
@@ -818,9 +812,7 @@ MonoBehaviour:
m_EditorClassIdentifier:
bodyPartRenderer: {fileID: 7929422519883802244}
parent: {fileID: -4411442180840688308}
- isHead: 1
- addonName:
- isSelected: 0
+ bodyPart: head
--- !u!1 &7929422520673851210
GameObject:
m_ObjectHideFlags: 0
@@ -871,10 +863,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
actorID: 0
- isSelected: 0
bodyRenderer: {fileID: 5996161745621340017}
- headRenderer: {fileID: 7929422519883802244}
- appendageRenderer: {fileID: 4251726083449519904}
--- !u!1 &9122292209377678227
GameObject:
m_ObjectHideFlags: 0
@@ -1048,6 +1037,4 @@ MonoBehaviour:
m_EditorClassIdentifier:
bodyPartRenderer: {fileID: 4251726083449519904}
parent: {fileID: -4411442180840688308}
- isHead: 0
- addonName:
- isSelected: 0
+ bodyPart: appendage
diff --git a/Assets/Resources/Prefabs/StageCard.prefab b/Assets/Resources/Prefabs/StageCard.prefab
index ebaafd48..ca582328 100644
--- a/Assets/Resources/Prefabs/StageCard.prefab
+++ b/Assets/Resources/Prefabs/StageCard.prefab
@@ -77,7 +77,7 @@ MonoBehaviour:
m_HorizontalOverflow: 0
m_VerticalOverflow: 0
m_LineSpacing: 1
- m_Text: New Stage
+ m_Text: Empty
--- !u!1 &533195464737222177
GameObject:
m_ObjectHideFlags: 0
@@ -207,18 +207,7 @@ MonoBehaviour:
m_CharacterLimit: 0
m_OnEndEdit:
m_PersistentCalls:
- m_Calls:
- - m_Target: {fileID: 2278168916950142456}
- m_MethodName: OnNameChange
- 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: []
diff --git a/Assets/Scenes/MainScene.unity b/Assets/Scenes/MainScene.unity
index d98b2448..285473d1 100644
--- a/Assets/Scenes/MainScene.unity
+++ b/Assets/Scenes/MainScene.unity
@@ -133,7 +133,6 @@ GameObject:
- component: {fileID: 11575770}
- component: {fileID: 11575769}
- component: {fileID: 11575768}
- - component: {fileID: 11575767}
m_Layer: 5
m_Name: SelectRaceDropdown
m_TagString: Untagged
@@ -163,21 +162,6 @@ RectTransform:
m_AnchoredPosition: {x: 10, y: -150}
m_SizeDelta: {x: 120, y: 30}
m_Pivot: {x: 0, y: 1}
---- !u!114 &11575767
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 11575765}
- m_Enabled: 0
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 0ba5b69d448f9434ca7d74d4022f3dcd, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- dropdown: {fileID: 0}
- label: {fileID: 0}
- hashcode: -1
--- !u!114 &11575768
MonoBehaviour:
m_ObjectHideFlags: 0
@@ -454,6 +438,7 @@ GameObject:
- component: {fileID: 40289126}
- component: {fileID: 40289125}
- component: {fileID: 40289124}
+ - component: {fileID: 40289128}
m_Layer: 5
m_Name: posOffsetXField
m_TagString: Untagged
@@ -606,6 +591,18 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 40289122}
m_CullTransparentMesh: 0
+--- !u!114 &40289128
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 40289122}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 92068b39ed172084296a595f5a09e54b, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
--- !u!1 &40775274
GameObject:
m_ObjectHideFlags: 0
@@ -3563,6 +3560,7 @@ GameObject:
- component: {fileID: 254347859}
- component: {fileID: 254347858}
- component: {fileID: 254347862}
+ - component: {fileID: 254347863}
m_Layer: 5
m_Name: headBobField
m_TagString: Untagged
@@ -3622,18 +3620,7 @@ MonoBehaviour:
m_CharacterLimit: 0
m_OnEndEdit:
m_PersistentCalls:
- m_Calls:
- - m_Target: {fileID: 629081417}
- m_MethodName: OnValueChanged
- 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: []
@@ -3715,6 +3702,18 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
valiationType: 2
+--- !u!114 &254347863
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 254347857}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 92068b39ed172084296a595f5a09e54b, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
--- !u!1 &257134980
GameObject:
m_ObjectHideFlags: 0
@@ -7825,6 +7824,7 @@ GameObject:
- component: {fileID: 444811204}
- component: {fileID: 444811203}
- component: {fileID: 444811202}
+ - component: {fileID: 444811206}
m_Layer: 5
m_Name: rotationField
m_TagString: Untagged
@@ -7977,6 +7977,18 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 444811200}
m_CullTransparentMesh: 0
+--- !u!114 &444811206
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 444811200}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 92068b39ed172084296a595f5a09e54b, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
--- !u!1 &448745871
GameObject:
m_ObjectHideFlags: 0
@@ -8253,8 +8265,9 @@ GameObject:
serializedVersion: 6
m_Component:
- component: {fileID: 468781281}
+ - component: {fileID: 468781282}
m_Layer: 5
- m_Name: StageCycleCard
+ m_Name: StageLoopsCard
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
@@ -8281,6 +8294,20 @@ RectTransform:
m_AnchoredPosition: {x: 155, y: -315}
m_SizeDelta: {x: 310, y: 70}
m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &468781282
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 468781280}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 38691dc973d99734f8f0f2a240df73fe, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ stageLoopsNormalField: {fileID: 74082975}
+ stageLoopsQuickField: {fileID: 1463915054}
--- !u!1 &476324336
GameObject:
m_ObjectHideFlags: 0
@@ -9638,23 +9665,9 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
isAnimating: 0
- stageTimelineSlider: {fileID: 1289465655}
- stageLoopDropdown: {fileID: 429161118}
- cyclesNormalField: {fileID: 74082975}
- cyclesFastField: {fileID: 1463915054}
- animationClipTimeField: {fileID: 760297267}
- animationClipLengthField: {fileID: 1676585155}
- actorCard: {fileID: 0}
animationTimelines: {fileID: 1100016168}
actorBodies: {fileID: 1828035561}
- stretchKeyframesToggle: {fileID: 462332576}
- playBackSpeedField: {fileID: 1579799916}
- playToggleButton: {fileID: 79733375}
- stageLengthText: {fileID: 1137451986}
- animationLengthText: {fileID: 1293297801}
- handLeftControls: {fileID: 374385281}
- handRightControls: {fileID: 613856053}
- sexToyControls: {fileID: 2069775739}
+ stageLoopDropdown: {fileID: 429161118}
actorBodyPrefab: {fileID: -4411442180840688308, guid: dc4c8b005322f3b46a2f122a55f38db2,
type: 3}
animationTimelinePrefab: {fileID: 3541467645058788217, guid: eac2d5e7275f9064facfeb818ee30308,
@@ -10201,8 +10214,9 @@ GameObject:
- component: {fileID: 539052777}
- component: {fileID: 539052779}
- component: {fileID: 539052781}
+ - component: {fileID: 539052778}
m_Layer: 5
- m_Name: AnimControlPanel
+ m_Name: AnimControlCard
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
@@ -10236,6 +10250,25 @@ RectTransform:
m_AnchoredPosition: {x: 10, y: -22.5}
m_SizeDelta: {x: 1375.8606, y: 45}
m_Pivot: {x: 0, y: 0.5}
+--- !u!114 &539052778
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 539052776}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 6b414452bfd6c9b4bb99542a51d77468, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ stageLoopDropdown: {fileID: 429161118}
+ animationClipTimeField: {fileID: 760297267}
+ animationClipLengthField: {fileID: 1676585155}
+ stretchKeyframesToggle: {fileID: 462332576}
+ playBackSpeedField: {fileID: 1579799916}
+ playToggleButton: {fileID: 79733375}
+ stageTimelineSlider: {fileID: 1289465655}
--- !u!222 &539052779
CanvasRenderer:
m_ObjectHideFlags: 0
@@ -10916,8 +10949,8 @@ MonoBehaviour:
m_OnClick:
m_PersistentCalls:
m_Calls:
- - m_Target: {fileID: 542629604}
- m_MethodName: OnNewStage
+ - m_Target: {fileID: 1335076905}
+ m_MethodName: AddStage
m_Mode: 1
m_Arguments:
m_ObjectArgument: {fileID: 0}
@@ -12096,6 +12129,7 @@ GameObject:
- component: {fileID: 619777500}
- component: {fileID: 619777499}
- component: {fileID: 619777498}
+ - component: {fileID: 619777502}
m_Layer: 5
m_Name: posOffsetZField
m_TagString: Untagged
@@ -12237,6 +12271,18 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 619777496}
m_CullTransparentMesh: 0
+--- !u!114 &619777502
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 619777496}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 92068b39ed172084296a595f5a09e54b, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
--- !u!1 &620055138
GameObject:
m_ObjectHideFlags: 0
@@ -12823,9 +12869,9 @@ RectTransform:
m_Father: {fileID: 935483303140078260}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 0}
- m_AnchorMax: {x: 0, y: 0}
- m_AnchoredPosition: {x: 0, y: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 155, y: -166.98029}
m_SizeDelta: {x: 310, y: 65.97644}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!1 &658284331
@@ -14056,6 +14102,7 @@ GameObject:
- component: {fileID: 725162533}
- component: {fileID: 725162532}
- component: {fileID: 725162535}
+ - component: {fileID: 725162536}
m_Layer: 5
m_Name: rotationField
m_TagString: Untagged
@@ -14135,18 +14182,7 @@ MonoBehaviour:
m_CharacterLimit: 0
m_OnEndEdit:
m_PersistentCalls:
- m_Calls:
- - m_Target: {fileID: 629081417}
- m_MethodName: OnValueChanged
- 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: []
@@ -14208,6 +14244,18 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
valiationType: 2
+--- !u!114 &725162536
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 725162530}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 92068b39ed172084296a595f5a09e54b, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
--- !u!1 &726027038
GameObject:
m_ObjectHideFlags: 0
@@ -14651,6 +14699,7 @@ GameObject:
- component: {fileID: 760297268}
- component: {fileID: 760297267}
- component: {fileID: 760297270}
+ - component: {fileID: 760297271}
m_Layer: 5
m_Name: AnimationClipTimeField
m_TagString: Untagged
@@ -14803,6 +14852,18 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
valiationType: 1
+--- !u!114 &760297271
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 760297265}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 92068b39ed172084296a595f5a09e54b, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
--- !u!1 &763620509
GameObject:
m_ObjectHideFlags: 0
@@ -16809,6 +16870,7 @@ GameObject:
- component: {fileID: 891720216}
- component: {fileID: 891720215}
- component: {fileID: 891720218}
+ - component: {fileID: 891720219}
m_Layer: 5
m_Name: posOffsetXField
m_TagString: Untagged
@@ -16888,18 +16950,7 @@ MonoBehaviour:
m_CharacterLimit: 0
m_OnEndEdit:
m_PersistentCalls:
- m_Calls:
- - m_Target: {fileID: 629081417}
- m_MethodName: OnValueChanged
- 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: []
@@ -16961,6 +17012,18 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
valiationType: 2
+--- !u!114 &891720219
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 891720213}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 92068b39ed172084296a595f5a09e54b, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
--- !u!1 &898059650
GameObject:
m_ObjectHideFlags: 0
@@ -17256,6 +17319,7 @@ GameObject:
- component: {fileID: 906179602}
- component: {fileID: 906179601}
- component: {fileID: 906179600}
+ - component: {fileID: 906179604}
m_Layer: 5
m_Name: rotationField
m_TagString: Untagged
@@ -17408,6 +17472,18 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 906179598}
m_CullTransparentMesh: 0
+--- !u!114 &906179604
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 906179598}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 92068b39ed172084296a595f5a09e54b, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
--- !u!1 &911162557
GameObject:
m_ObjectHideFlags: 0
@@ -17648,7 +17724,7 @@ RectTransform:
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
- m_AnchorMax: {x: 1, y: 0.99997056}
+ m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 20, y: 20}
m_Pivot: {x: 0.5, y: 0.5}
@@ -21067,6 +21143,7 @@ GameObject:
- component: {fileID: 1152532962}
- component: {fileID: 1152532961}
- component: {fileID: 1152532960}
+ - component: {fileID: 1152532964}
m_Layer: 5
m_Name: posOffsetXField
m_TagString: Untagged
@@ -21219,6 +21296,18 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1152532958}
m_CullTransparentMesh: 0
+--- !u!114 &1152532964
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1152532958}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 92068b39ed172084296a595f5a09e54b, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
--- !u!1 &1153227822
GameObject:
m_ObjectHideFlags: 0
@@ -21301,7 +21390,7 @@ MonoBehaviour:
m_HandleRect: {fileID: 922060209}
m_Direction: 2
m_Value: 0
- m_Size: 0.99997056
+ m_Size: 1
m_NumberOfSteps: 0
m_OnValueChanged:
m_PersistentCalls:
@@ -21667,8 +21756,8 @@ MonoBehaviour:
m_OnClick:
m_PersistentCalls:
m_Calls:
- - m_Target: {fileID: 542629604}
- m_MethodName: OnRemoveStage
+ - m_Target: {fileID: 1335076905}
+ m_MethodName: RemoveStage
m_Mode: 1
m_Arguments:
m_ObjectArgument: {fileID: 0}
@@ -22802,9 +22891,9 @@ RectTransform:
m_Father: {fileID: 935483303140078260}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 0}
- m_AnchorMax: {x: 0, y: 0}
- m_AnchoredPosition: {x: 0, y: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 155, y: -337.8237}
m_SizeDelta: {x: 310, y: 275.7104}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &1216651061
@@ -23154,12 +23243,12 @@ PrefabInstance:
type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[1].m_Target
value:
- objectReference: {fileID: 1567848590}
+ objectReference: {fileID: 0}
- target: {fileID: 7715503544528335667, guid: 8b89f6c9e5f696c4997760829c45a505,
type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[2].m_Target
value:
- objectReference: {fileID: 11575767}
+ objectReference: {fileID: 0}
- target: {fileID: 7715503544528335667, guid: 8b89f6c9e5f696c4997760829c45a505,
type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[1].m_CallState
@@ -25222,7 +25311,7 @@ GameObject:
- component: {fileID: 1335076900}
- component: {fileID: 1335076905}
m_Layer: 5
- m_Name: Workspace
+ m_Name: WorkspaceAndGUI
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
@@ -29764,8 +29853,8 @@ MonoBehaviour:
m_OnClick:
m_PersistentCalls:
m_Calls:
- - m_Target: {fileID: 542629604}
- m_MethodName: OnCloneStage
+ - m_Target: {fileID: 1335076905}
+ m_MethodName: CloneStage
m_Mode: 1
m_Arguments:
m_ObjectArgument: {fileID: 0}
@@ -29825,6 +29914,7 @@ GameObject:
- component: {fileID: 1518099309}
- component: {fileID: 1518099308}
- component: {fileID: 1518099311}
+ - component: {fileID: 1518099312}
m_Layer: 5
m_Name: posOffsetZField
m_TagString: Untagged
@@ -29904,18 +29994,7 @@ MonoBehaviour:
m_CharacterLimit: 0
m_OnEndEdit:
m_PersistentCalls:
- m_Calls:
- - m_Target: {fileID: 629081417}
- m_MethodName: OnValueChanged
- 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: []
@@ -29977,6 +30056,18 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
valiationType: 2
+--- !u!114 &1518099312
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1518099306}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 92068b39ed172084296a595f5a09e54b, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
--- !u!1 &1522728394
GameObject:
m_ObjectHideFlags: 0
@@ -30299,6 +30390,7 @@ GameObject:
- component: {fileID: 1560400021}
- component: {fileID: 1560400020}
- component: {fileID: 1560400019}
+ - component: {fileID: 1560400023}
m_Layer: 5
m_Name: posOffsetZField
m_TagString: Untagged
@@ -30451,6 +30543,18 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1560400017}
m_CullTransparentMesh: 0
+--- !u!114 &1560400023
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1560400017}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 92068b39ed172084296a595f5a09e54b, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
--- !u!1 &1561986055
GameObject:
m_ObjectHideFlags: 0
@@ -30697,7 +30801,6 @@ GameObject:
- component: {fileID: 1567848593}
- component: {fileID: 1567848592}
- component: {fileID: 1567848591}
- - component: {fileID: 1567848590}
m_Layer: 5
m_Name: RaceSelectDropdown
m_TagString: Untagged
@@ -30727,21 +30830,6 @@ RectTransform:
m_AnchoredPosition: {x: 178, y: 0}
m_SizeDelta: {x: 160, y: 30}
m_Pivot: {x: 0.5, y: 0.5}
---- !u!114 &1567848590
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1567848588}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 0ba5b69d448f9434ca7d74d4022f3dcd, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- dropdown: {fileID: 0}
- label: {fileID: 0}
- hashcode: -1
--- !u!114 &1567848591
MonoBehaviour:
m_ObjectHideFlags: 0
@@ -31888,6 +31976,7 @@ GameObject:
- component: {fileID: 1668270819}
- component: {fileID: 1668270818}
- component: {fileID: 1668270821}
+ - component: {fileID: 1668270822}
m_Layer: 5
m_Name: appendageRotationField
m_TagString: Untagged
@@ -32040,6 +32129,18 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
valiationType: 2
+--- !u!114 &1668270822
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1668270816}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 92068b39ed172084296a595f5a09e54b, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
--- !u!1 &1670013372
GameObject:
m_ObjectHideFlags: 0
@@ -32245,6 +32346,7 @@ GameObject:
- component: {fileID: 1676585156}
- component: {fileID: 1676585155}
- component: {fileID: 1676585158}
+ - component: {fileID: 1676585159}
m_Layer: 5
m_Name: AnimationClipLengthField
m_TagString: Untagged
@@ -32397,6 +32499,18 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
valiationType: 1
+--- !u!114 &1676585159
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1676585153}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 92068b39ed172084296a595f5a09e54b, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
--- !u!1 &1685703671
GameObject:
m_ObjectHideFlags: 0
@@ -33698,6 +33812,7 @@ GameObject:
- component: {fileID: 1767445798}
- component: {fileID: 1767445797}
- component: {fileID: 1767445801}
+ - component: {fileID: 1767445802}
m_Layer: 5
m_Name: headRotationField
m_TagString: Untagged
@@ -33757,18 +33872,7 @@ MonoBehaviour:
m_CharacterLimit: 0
m_OnEndEdit:
m_PersistentCalls:
- m_Calls:
- - m_Target: {fileID: 629081417}
- m_MethodName: OnValueChanged
- 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: []
@@ -33850,6 +33954,18 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
valiationType: 2
+--- !u!114 &1767445802
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1767445796}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 92068b39ed172084296a595f5a09e54b, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
--- !u!1 &1776904761
GameObject:
m_ObjectHideFlags: 0
@@ -36271,6 +36387,7 @@ GameObject:
- component: {fileID: 1899457113}
- component: {fileID: 1899457112}
- component: {fileID: 1899457111}
+ - component: {fileID: 1899457115}
m_Layer: 5
m_Name: rotationField
m_TagString: Untagged
@@ -36412,6 +36529,18 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1899457109}
m_CullTransparentMesh: 0
+--- !u!114 &1899457115
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1899457109}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 92068b39ed172084296a595f5a09e54b, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
--- !u!1 &1900570404
GameObject:
m_ObjectHideFlags: 0
@@ -36981,6 +37110,7 @@ GameObject:
- component: {fileID: 1925610721}
- component: {fileID: 1925610720}
- component: {fileID: 1925610719}
+ - component: {fileID: 1925610723}
m_Layer: 5
m_Name: posOffsetZField
m_TagString: Untagged
@@ -37133,6 +37263,18 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1925610717}
m_CullTransparentMesh: 0
+--- !u!114 &1925610723
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1925610717}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 92068b39ed172084296a595f5a09e54b, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
--- !u!1 &1928565389
GameObject:
m_ObjectHideFlags: 0
@@ -39224,6 +39366,7 @@ GameObject:
- component: {fileID: 2114146443}
- component: {fileID: 2114146442}
- component: {fileID: 2114146441}
+ - component: {fileID: 2114146445}
m_Layer: 5
m_Name: posOffsetXField
m_TagString: Untagged
@@ -39365,6 +39508,18 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2114146439}
m_CullTransparentMesh: 0
+--- !u!114 &2114146445
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2114146439}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 92068b39ed172084296a595f5a09e54b, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
--- !u!1 &2114503331
GameObject:
m_ObjectHideFlags: 0
@@ -39679,9 +39834,9 @@ RectTransform:
m_Father: {fileID: 935483303140078260}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 0}
- m_AnchorMax: {x: 0, y: 0}
- m_AnchoredPosition: {x: 0, y: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 155, y: -66.99603}
m_SizeDelta: {x: 310, y: 133.99207}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &2130812670
@@ -40435,7 +40590,7 @@ GameObject:
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
- m_IsActive: 1
+ m_IsActive: 0
--- !u!222 &935483303140078262
CanvasRenderer:
m_ObjectHideFlags: 0
@@ -42532,7 +42687,7 @@ MonoBehaviour:
m_StringArgument:
m_BoolArgument: 0
m_CallState: 2
- - m_Target: {fileID: 1567848590}
+ - m_Target: {fileID: 0}
m_MethodName: UpdateDropdown
m_Mode: 1
m_Arguments:
@@ -42543,7 +42698,7 @@ MonoBehaviour:
m_StringArgument:
m_BoolArgument: 0
m_CallState: 2
- - m_Target: {fileID: 11575767}
+ - m_Target: {fileID: 0}
m_MethodName: UpdateDropdown
m_Mode: 1
m_Arguments:
diff --git a/Assets/Scripts/AnimationComponents/Actor.cs b/Assets/Scripts/AnimationComponents/Actor.cs
index af479d7c..ad47af99 100644
--- a/Assets/Scripts/AnimationComponents/Actor.cs
+++ b/Assets/Scripts/AnimationComponents/Actor.cs
@@ -36,60 +36,60 @@ namespace RimWorldAnimationStudio
[XmlIgnore] public List DefNames
{
get { return defNames.NullOrEmpty() ? defNames = new List() : defNames; }
- set { defNames = value.NotNullOrEmpty() ? value : null; EventsManager.OnActorChanged(this); }
+ set { defNames = value.NotNullOrEmpty() ? value : null; }
}
[XmlIgnore] public List BodyDefTypes
{
get { return bodyDefTypes.NullOrEmpty() ? bodyDefTypes = new List() : bodyDefTypes; }
- set { bodyDefTypes = value.NotNullOrEmpty() ? value : null; EventsManager.OnActorChanged(this); }
+ set { bodyDefTypes = value.NotNullOrEmpty() ? value : null; }
}
[XmlIgnore] public List RequiredGenitals
{
get { return requiredGenitals.NullOrEmpty() ? requiredGenitals = new List() : requiredGenitals; }
- set { requiredGenitals = value.NotNullOrEmpty() ? value : null; EventsManager.OnActorChanged(this); }
+ set { requiredGenitals = value.NotNullOrEmpty() ? value : null; }
}
[XmlIgnore] public List RaceOffsets {
get { return raceOffsets.NullOrEmpty() ? raceOffsets = new List() : raceOffsets; }
- set { raceOffsets = value.NotNullOrEmpty() ? value : null; EventsManager.OnActorChanged(this); }
+ set { raceOffsets = value.NotNullOrEmpty() ? value : null; }
}
[XmlIgnore] public List Tags
{
get { return tags.NullOrEmpty() ? tags = new List() : tags; }
- set { tags = value.NotNullOrEmpty() ? value : null; EventsManager.OnActorChanged(this); }
+ set { tags = value.NotNullOrEmpty() ? value : null; }
}
[XmlIgnore] public BodyTypeOffset BodyTypeOffset
{
get { return bodyTypeOffset == null ? bodyTypeOffset = new BodyTypeOffset() : bodyTypeOffset; }
- set { bodyTypeOffset = value; EventsManager.OnActorChanged(this); }
+ set { bodyTypeOffset = value; }
}
[XmlIgnore] public bool Initiator
{
get { return initiator == true; }
- set { if (value) { initiator = true; } else initiator = null; EventsManager.OnActorChanged(this); }
+ set { if (value) { initiator = true; } else initiator = null; }
}
[XmlIgnore] public bool ControlGenitalAngle
{
get { return controlGenitalAngle == true; }
- set { if (value) { controlGenitalAngle = true; } else controlGenitalAngle = null; EventsManager.OnActorChanged(this); }
+ set { if (value) { controlGenitalAngle = true; } else controlGenitalAngle = null; }
}
[XmlIgnore] public bool IsFucking
{
get { return isFucking == true; }
- set { if (value) { isFucking = true; } else isFucking = null; EventsManager.OnActorChanged(this); }
+ set { if (value) { isFucking = true; } else isFucking = null; }
}
[XmlIgnore] public bool IsFucked
{
get { return isFucked == true; }
- set { if (value) { isFucked = true; } else isFucked = null; EventsManager.OnActorChanged(this); }
+ set { if (value) { isFucked = true; } else isFucked = null; }
}
// Local data
@@ -163,6 +163,16 @@ namespace RimWorldAnimationStudio
return Workspace.animationDef.Actors.IndexOf(this);
}
+ public ActorPosition GetCurrentPosition()
+ {
+ return GetPositionAtTick(Workspace.StageTick);
+ }
+
+ public ActorPosition GetPositionAtTick(int atTick)
+ {
+ return new ActorPosition(GetActorID(), atTick);
+ }
+
// Pre-save / post-load
public void OnPreSave()
{
diff --git a/Assets/Scripts/AnimationComponents/ActorAddon.cs b/Assets/Scripts/AnimationComponents/ActorAddon.cs
index 94a4189a..7d8c5a41 100644
--- a/Assets/Scripts/AnimationComponents/ActorAddon.cs
+++ b/Assets/Scripts/AnimationComponents/ActorAddon.cs
@@ -28,31 +28,31 @@ namespace RimWorldAnimationStudio
[XmlIgnore] public int AnchoringActor
{
get { return anchoringActor.HasValue ? anchoringActor.Value : 0; }
- set { anchoringActor = value; EventsManager.OnActorAddonChanged(this); }
+ set { anchoringActor = value; }
}
[XmlIgnore] public string AnchorName
{
get { return anchorName; }
- set { anchorName = value; EventsManager.OnActorAddonChanged(this); }
+ set { anchorName = value; }
}
[XmlIgnore] public string Layer
{
get { return layer; }
- set { layer = value; EventsManager.OnActorAddonChanged(this); }
+ set { layer = value; }
}
[XmlIgnore] public float Scale
{
get { return scale.HasValue ? scale.Value : 0f; }
- set { scale = value; EventsManager.OnActorAddonChanged(this); }
+ set { scale = value; }
}
[XmlIgnore] public bool Render
{
get { return render == true; }
- set { render = value; EventsManager.OnActorAddonChanged(this); }
+ set { render = value; }
}
// Simple curves
diff --git a/Assets/Scripts/AnimationComponents/AddonKeyFrame.cs b/Assets/Scripts/AnimationComponents/AddonKeyFrame.cs
index 0a0f2fa0..2ad72b7c 100644
--- a/Assets/Scripts/AnimationComponents/AddonKeyFrame.cs
+++ b/Assets/Scripts/AnimationComponents/AddonKeyFrame.cs
@@ -23,19 +23,19 @@ namespace RimWorldAnimationStudio
[XmlIgnore] public float PosX
{
get { return posX.HasValue ? posX.Value : 0f; }
- set { posX = value; EventsManager.OnAddonKeyframeChanged(this); }
+ set { posX = value; }
}
[XmlIgnore] public float PosZ
{
get { return posZ.HasValue ? posZ.Value : 0f; }
- set { posZ = value; EventsManager.OnAddonKeyframeChanged(this); }
+ set { posZ = value; }
}
[XmlIgnore] public float Rotation
{
get { return rotation.HasValue ? rotation.Value : 0f; }
- set { rotation = value; EventsManager.OnAddonKeyframeChanged(this); }
+ set { rotation = value; }
}
// Constructors
diff --git a/Assets/Scripts/AnimationComponents/AnimationDef.cs b/Assets/Scripts/AnimationComponents/AnimationDef.cs
index 8ecd4677..f599a556 100644
--- a/Assets/Scripts/AnimationComponents/AnimationDef.cs
+++ b/Assets/Scripts/AnimationComponents/AnimationDef.cs
@@ -28,37 +28,37 @@ namespace RimWorldAnimationStudio
[XmlIgnore] public string DefName
{
get { return defName != null && defName != "" ? defName : "newAnimation"; }
- set { defName = value; EventsManager.OnAnimationDefChanged(); }
+ set { defName = value; }
}
[XmlIgnore] public string Label
{
get { return label != null && label != "" ? label : "newAnimation"; }
- set { label = value; EventsManager.OnAnimationDefChanged(); }
+ set { label = value; }
}
[XmlIgnore] public List SexTypes
{
get { return sexTypes.NullOrEmpty() ? sexTypes = new List() : sexTypes; }
- set { sexTypes = value.NotNullOrEmpty() ? value : null; EventsManager.OnAnimationDefChanged(); }
+ set { sexTypes = value.NotNullOrEmpty() ? value : null; }
}
[XmlIgnore] public List InteractionDefTypes
{
get { return interactionDefTypes.NullOrEmpty() ? interactionDefTypes = new List() : interactionDefTypes; }
- set { interactionDefTypes = value.NotNullOrEmpty() ? value : null; EventsManager.OnAnimationDefChanged(); }
+ set { interactionDefTypes = value.NotNullOrEmpty() ? value : null; }
}
[XmlIgnore] public List Actors
{
get { return actors.NullOrEmpty() ? actors = new List() : actors; }
- set { actors = value.NotNullOrEmpty() ? value : null; EventsManager.OnAnimationDefChanged(); }
+ set { actors = value.NotNullOrEmpty() ? value : null; }
}
[XmlIgnore] public List AnimationStages
{
get { if (animationStages.NullOrEmpty()){ animationStages = new List(); } return animationStages; }
- set { animationStages = value.NotNullOrEmpty() ? value : null; EventsManager.OnAnimationDefChanged(); }
+ set { animationStages = value.NotNullOrEmpty() ? value : null; }
}
// Local data
@@ -83,12 +83,13 @@ namespace RimWorldAnimationStudio
Actor actor = new Actor();
Actors.Add(actor);
+ foreach (AnimationStage stage in Workspace.animationDef.AnimationStages)
+ { stage.AddAnimationClip(Workspace.animationDef.Actors.Count - 1); }
+
+ Initialize();
Workspace.ActorID = Workspace.animationDef.Actors.Count - 1;
- foreach (AnimationStage stage in Workspace.animationDef.AnimationStages)
- { stage.AddAnimationClip(Workspace.ActorID); }
-
- EventsManager.OnActorCountChanged();
+ EventsManager.OnActorCountChanged();
Workspace.RecordEvent("Actor addition");
}
@@ -119,7 +120,9 @@ namespace RimWorldAnimationStudio
{ stage.AddAnimationClip(actor.GetActorID()); }
Initialize();
+ Workspace.StageID = Workspace.animationDef.AnimationStages.Count - 1;
+ EventsManager.OnStageCountChanged();
Workspace.RecordEvent("Stage addition");
}
@@ -127,9 +130,11 @@ namespace RimWorldAnimationStudio
{
AnimationStage stage = Workspace.GetCurrentAnimationStage().Copy();
stage.StageName += " (Clone)";
- stage.Initialize();
Workspace.animationDef.AnimationStages.Insert(Workspace.StageID + 1, stage);
+ Initialize();
+
+ EventsManager.OnStageCountChanged();
Workspace.RecordEvent("Stage clone");
}
@@ -154,8 +159,9 @@ namespace RimWorldAnimationStudio
}
AnimationStages.RemoveAt(Workspace.StageID);
-
Workspace.StageID--;
+
+ EventsManager.OnStageCountChanged();
Workspace.RecordEvent("Stage deletion");
}
diff --git a/Assets/Scripts/AnimationComponents/AnimationStage.cs b/Assets/Scripts/AnimationComponents/AnimationStage.cs
index 3b966185..5bb85e4c 100644
--- a/Assets/Scripts/AnimationComponents/AnimationStage.cs
+++ b/Assets/Scripts/AnimationComponents/AnimationStage.cs
@@ -10,11 +10,11 @@ namespace RimWorldAnimationStudio
public class AnimationStage
{
// Data to/from animationDef
- [SerializeField] private string stageName;
- [SerializeField] private int? playTimeTicks;
- [SerializeField] private int? playTimeTicksQuick;
- [SerializeField] private bool? isLooping;
- [SerializeField, XmlArray("animationClips"), XmlArrayItem("li")] public List animationClips;
+ public string stageName;
+ public int? playTimeTicks;
+ public int? playTimeTicksQuick;
+ public bool? isLooping;
+ [XmlArray("animationClips"), XmlArrayItem("li")] public List animationClips;
// Data serialization control
public bool ShouldSerializeanimationClips() { return animationClips.NotNullOrEmpty(); }
@@ -22,32 +22,44 @@ namespace RimWorldAnimationStudio
// Data helper functions
[XmlIgnore] public string StageName
{
- get { return stageName != null && stageName != "" ? stageName : "NewStage"; }
- set { stageName = value; EventsManager.OnAnimationStageChanged(this); }
+ get { return string.IsNullOrEmpty(stageName) ? stageName = "NewStage" : stageName; }
+ set { stageName = value; }
}
[XmlIgnore] public int PlayTimeTicks
{
get { return playTimeTicks.HasValue ? playTimeTicks.Value : 0; }
- set { playTimeTicks = value; EventsManager.OnAnimationStageChanged(this); }
+ set { playTimeTicks = value; }
}
[XmlIgnore] public int PlayTimeTicksQuick
{
get { return playTimeTicksQuick.HasValue ? playTimeTicksQuick.Value : 0; }
- set { playTimeTicksQuick = value; EventsManager.OnAnimationStageChanged(this); }
+ set { playTimeTicksQuick = value; }
}
[XmlIgnore] public bool IsLooping
{
get { return isLooping == true; }
- set { isLooping = value; EventsManager.OnAnimationStageChanged(this); }
+ set { isLooping = value; }
}
[XmlIgnore] public List AnimationClips
{
get { return animationClips.NullOrEmpty() ? animationClips = new List() : animationClips; }
- set { animationClips = value.NotNullOrEmpty() ? value : null; EventsManager.OnAnimationStageChanged(this); }
+ set { animationClips = value.NotNullOrEmpty() ? value : null; }
+ }
+
+ [XmlIgnore] public int StageLoopsNormal
+ {
+ get { return Mathf.CeilToInt(PlayTimeTicks / Workspace.StageWindowSize); }
+ set { value = Math.Max(1, value); PlayTimeTicks = value * Workspace.StageWindowSize; IsLooping = value > 1; }
+ }
+
+ [XmlIgnore] public int StageLoopsQuick
+ {
+ get { return Mathf.CeilToInt(PlayTimeTicksQuick / Workspace.StageWindowSize); }
+ set { value = Math.Max(0, Math.Min(value, StageLoopsNormal)); PlayTimeTicksQuick = value * Workspace.StageWindowSize; IsLooping = value > 1; }
}
// Local data
@@ -63,8 +75,6 @@ namespace RimWorldAnimationStudio
if (clip.duration > PlayTimeTicks)
{ PlayTimeTicks = clip.duration; }
}
-
- PlayTimeTicksQuick = PlayTimeTicks;
}
public int GetStageID()
@@ -78,7 +88,7 @@ namespace RimWorldAnimationStudio
{
float scale = (float)newStageWindowSize / Workspace.StageWindowSize;
- foreach (PawnAnimationClip clip in Workspace.animationDef.AnimationStages[Workspace.StageID].AnimationClips)
+ foreach (PawnAnimationClip clip in AnimationClips)
{
foreach (PawnKeyframe keyframe in clip.Keyframes)
{
@@ -93,8 +103,8 @@ namespace RimWorldAnimationStudio
public void ResizeStageWindow(int newStageWindowSize)
{
Workspace.GetCurrentAnimationStage().stageWindowSize = newStageWindowSize;
- Workspace.GetCurrentAnimationStage().PlayTimeTicks = newStageWindowSize * Workspace.stageLoopsNormal;
- Workspace.GetCurrentAnimationStage().PlayTimeTicksQuick = newStageWindowSize * Workspace.stageLoopsQuick;
+ Workspace.GetCurrentAnimationStage().PlayTimeTicks = newStageWindowSize * StageLoopsNormal;
+ Workspace.GetCurrentAnimationStage().PlayTimeTicksQuick = newStageWindowSize * StageLoopsQuick;
}
public void AddAnimationClip(int actorID = -1)
@@ -134,7 +144,7 @@ namespace RimWorldAnimationStudio
clip.Keyframes.Add(keyframeB);
}
- clip.BuildSimpleCurves();
+ animationClips.Add(clip);
}
// Pre-save / post-load
diff --git a/Assets/Scripts/AnimationComponents/PawnAnimationClip.cs b/Assets/Scripts/AnimationComponents/PawnAnimationClip.cs
index 629dee64..54575122 100644
--- a/Assets/Scripts/AnimationComponents/PawnAnimationClip.cs
+++ b/Assets/Scripts/AnimationComponents/PawnAnimationClip.cs
@@ -31,20 +31,20 @@ namespace RimWorldAnimationStudio
[XmlIgnore] public List Addons
{
get { return addons.NullOrEmpty() ? addons = new List() : addons; }
- set { addons = value.NotNullOrEmpty() ? value : null; EventsManager.OnPawnAnimationClipChanged(this); }
+ set { addons = value.NotNullOrEmpty() ? value : null; }
}
[XmlIgnore] public List Keyframes
{
get { return keyframes.NullOrEmpty() ? keyframes = new List() : keyframes; }
- set { keyframes = value.NotNullOrEmpty() ? value : null; EventsManager.OnPawnAnimationClipChanged(this); }
+ set { keyframes = value.NotNullOrEmpty() ? value : null; }
}
[XmlIgnore]
public List Tags
{
get { return tags.NullOrEmpty() ? tags = new List() : tags; }
- set { tags = value.NotNullOrEmpty() ? value : null; EventsManager.OnPawnAnimationClipChanged(this); }
+ set { tags = value.NotNullOrEmpty() ? value : null; }
}
// Local data
@@ -235,7 +235,7 @@ namespace RimWorldAnimationStudio
foreach (PawnKeyframe keyframe in keyframesToClone)
{
- PawnAnimationClip clip = Workspace.GetAnimationClipThatOwnsKeyframe(keyframe.keyframeID, out int clipID);
+ PawnAnimationClip clip = Workspace.GetAnimationClipThatOwnsKeyframe(keyframe.keyframeID);
if (clip == null)
{ Debug.LogWarning("Cannot clone pawn keyframe - no clip owns this keyframe"); continue; }
@@ -244,7 +244,7 @@ namespace RimWorldAnimationStudio
{ Debug.LogWarning("Cannot clone pawn keyframe - a keyframe already exists at this tick"); return; }
PawnKeyframe cloneFrame = keyframe.Copy();
- cloneFrame.GenerateKeyframeID(clipID);
+ cloneFrame.GenerateKeyframeID(clip.GetOwningActorID());
cloneFrame.atTick = Workspace.StageTick;
PawnKeyframe nextKeyframe = clip.Keyframes.FirstOrDefault(x => x.atTick > Workspace.StageTick);
@@ -301,8 +301,8 @@ namespace RimWorldAnimationStudio
if (Workspace.DoesPawnKeyframeExistAtTick(Workspace.StageID, targetActorID, tickToPasteAt))
{
- PawnKeyframe oldKeyframe = Workspace.animationDef.AnimationStages[Workspace.StageID].AnimationClips[targetActorID].Keyframes.First(x => x.atTick == tickToPasteAt);
- RemovePawnKeyframe(targetActorID, oldKeyframe.keyframeID, true);
+ PawnKeyframe oldKeyframe = Workspace.GetPawnAnimationClip(targetActorID).Keyframes.First(x => x.atTick == tickToPasteAt);
+ Workspace.GetAnimationClipThatOwnsKeyframe(oldKeyframe.keyframeID).RemovePawnKeyframe(oldKeyframe.keyframeID, true);
}
PawnKeyframe clonedKeyframe = copiedKeyframe.Copy();
@@ -330,34 +330,28 @@ namespace RimWorldAnimationStudio
Workspace.RecordEvent("Keyframe pasted");
}
- public void RemovePawnKeyframe()
+ public void RemovePawnKeyframe(int keyframeID, bool force = false)
{
- foreach (int keyframeID in Workspace.keyframeID)
- {
- if (Workspace.GetAnimationClipThatOwnsKeyframe(keyframeID, out int clipID) != null)
- { RemovePawnKeyframe(clipID, keyframeID); }
- }
- }
-
- public void RemovePawnKeyframe(int actorID, int keyframeID, bool force = false)
- {
- PawnKeyframe keyframe = Workspace.GetPawnKeyframe(actorID, keyframeID);
- PawnAnimationClip clip = Workspace.animationDef.AnimationStages[Workspace.StageID].AnimationClips[actorID];
-
- if (keyframe == null || clip == null) return;
+ PawnKeyframe keyframe = Workspace.GetPawnKeyframe(keyframeID);
+ if (keyframe == null || IsOwnerOfKeyframe(keyframeID) == false) return;
if (keyframe.atTick == Constants.minTick && force == false)
{ Debug.LogWarning("Cannot delete key frame - the first key frame of an animation clip cannot be deleted"); return; }
- if (clip.Keyframes.Count <= 2 && force == false)
+ if (Keyframes.Count <= 2 && force == false)
{ Debug.LogWarning("Cannot delete key frame - an animation clip must have two or more keyframes"); return; }
- clip.Keyframes.Remove(keyframe);
- clip.BuildSimpleCurves();
+ Keyframes.Remove(keyframe);
+ BuildSimpleCurves();
Workspace.RecordEvent("Keyframe deletion");
}
+ public bool IsOwnerOfKeyframe(int keyframeID)
+ {
+ return Keyframes.Any(x => x.keyframeID == keyframeID);
+ }
+
public float GetStageTickPercentage()
{
return (float)(Workspace.StageTick % duration) / duration;
diff --git a/Assets/Scripts/AnimationComponents/PawnKeyframe.cs b/Assets/Scripts/AnimationComponents/PawnKeyframe.cs
index 67775372..08930dce 100644
--- a/Assets/Scripts/AnimationComponents/PawnKeyframe.cs
+++ b/Assets/Scripts/AnimationComponents/PawnKeyframe.cs
@@ -40,79 +40,79 @@ namespace RimWorldAnimationStudio
[XmlIgnore] public float BodyAngle
{
get { return bodyAngle.HasValue ? bodyAngle.Value : 0f; }
- set { bodyAngle = value; EventsManager.OnPawnKeyframeChanged(this); }
+ set { bodyAngle = value; }
}
[XmlIgnore] public float HeadAngle
{
get { return headAngle.HasValue ? headAngle.Value : (float)(headAngle = 0f); }
- set { headAngle = value; EventsManager.OnPawnKeyframeChanged(this); }
+ set { headAngle = value; }
}
[XmlIgnore] public float HeadBob
{
get { return headBob.HasValue ? headBob.Value : (float)(headBob = 0f); }
- set { headBob = value; EventsManager.OnPawnKeyframeChanged(this); }
+ set { headBob = value; }
}
[XmlIgnore] public float BodyOffsetX
{
get { return bodyOffsetX.HasValue ? bodyOffsetX.Value : (float)(bodyOffsetX = 0f); }
- set { bodyOffsetX = value; EventsManager.OnPawnKeyframeChanged(this); }
+ set { bodyOffsetX = value; }
}
[XmlIgnore] public float BodyOffsetZ
{
get { return bodyOffsetZ.HasValue ? bodyOffsetZ.Value : (float)(bodyOffsetZ = 0f); }
- set { bodyOffsetZ = value; EventsManager.OnPawnKeyframeChanged(this); }
+ set { bodyOffsetZ = value; }
}
[XmlIgnore] public int HeadFacing
{
get { return headFacing.HasValue ? headFacing.Value : (int)(headFacing = 2); }
- set { headFacing = value; EventsManager.OnPawnKeyframeChanged(this); }
+ set { headFacing = value; }
}
[XmlIgnore] public int BodyFacing
{
get { return bodyFacing.HasValue ? bodyFacing.Value : (int)(bodyFacing = 2); }
- set { bodyFacing = value; EventsManager.OnPawnKeyframeChanged(this); }
+ set { bodyFacing = value; }
}
[XmlIgnore] public float GenitalAngle
{
get { return genitalAngle.HasValue ? genitalAngle.Value : (float)(genitalAngle = 0f); }
- set { genitalAngle = value; EventsManager.OnPawnKeyframeChanged(this); }
+ set { genitalAngle = value; }
}
[XmlIgnore] public bool Quiver
{
get { return quiver == true; }
- set { quiver = value; EventsManager.OnPawnKeyframeChanged(this); }
+ set { quiver = value; }
}
[XmlIgnore] public int TickDuration
{
get { return tickDuration.HasValue ? tickDuration.Value : (int)(tickDuration = 0); }
- set { tickDuration = value; EventsManager.OnPawnKeyframeChanged(this); }
+ set { tickDuration = value; }
}
[XmlIgnore] public string SoundEffect
{
get { return soundEffect; }
- set { soundEffect = value; EventsManager.OnPawnKeyframeChanged(this); }
+ set { soundEffect = value; }
}
[XmlIgnore] public List Tags
{
get { return tags.NullOrEmpty() ? tags = new List() : tags; }
- set { tags = value.NotNullOrEmpty() ? value : null; EventsManager.OnPawnKeyframeChanged(this); }
+ set { tags = value.NotNullOrEmpty() ? value : null; }
}
[XmlIgnore] public List AddonKeyframes
{
get { return addonKeyframes.NullOrEmpty() ? addonKeyframes = new List() : addonKeyframes; }
- set { addonKeyframes = value.NotNullOrEmpty()? value : null; EventsManager.OnPawnKeyframeChanged(this); }
+ set { addonKeyframes = value.NotNullOrEmpty()? value : null; }
}
// Local data
@@ -148,6 +148,63 @@ namespace RimWorldAnimationStudio
return AddonKeyframes.FirstOrDefault(x => x.AddonName == addonName);
}
+ public void AdjustActor(Vector2 deltaOffset)
+ {
+ float deltaAngle = -deltaOffset.x * 33.3333f + deltaOffset.y * 33.3333f;
+ int facing = deltaOffset.x < 0 ? 3 : deltaOffset.y < 0 ? 2 : deltaOffset.x > 0 ? 1 : 0;
+
+ switch (Workspace.actorManipulationMode)
+ {
+ case ActorManipulationMode.Pan: MoveActor(deltaOffset); break;
+ case ActorManipulationMode.Rotate: RotateActor(deltaAngle); break;
+ case ActorManipulationMode.Face: FaceActor(facing); break;
+ }
+ }
+
+ public void MoveActor(Vector2 deltaOffset)
+ {
+ if (Workspace.selectedBodyPart == null)
+ {
+ BodyOffsetX += deltaOffset.x;
+ BodyOffsetZ += deltaOffset.y;
+ }
+
+ else if (Workspace.selectedBodyPart.bodyPart.ToLower() == "head")
+ { HeadBob += deltaOffset.y; }
+
+ Workspace.GetCurrentPawnAnimationClip().BuildSimpleCurves();
+ Workspace.RecordEvent("Actor position / orientation");
+ }
+
+ public void RotateActor(float deltaAngle)
+ {
+ if (Workspace.selectedBodyPart == null)
+ { BodyAngle += deltaAngle; }
+
+ else if (Workspace.selectedBodyPart.bodyPart.ToLower() == "head")
+ { HeadAngle += deltaAngle; }
+
+ else if (Workspace.selectedBodyPart.bodyPart.ToLower() == "appendage")
+ { GenitalAngle -= deltaAngle; }
+
+ Workspace.GetCurrentPawnAnimationClip().BuildSimpleCurves();
+ Workspace.RecordEvent("Actor position / orientation");
+ }
+
+ public void FaceActor(int facing)
+ {
+ PawnKeyframe keyframe = Workspace.GetCurrentPawnKeyframe(true);
+
+ if (Workspace.selectedBodyPart == null)
+ { keyframe.BodyFacing = facing; }
+
+ else if (Workspace.selectedBodyPart.bodyPart.ToLower() == "head")
+ { keyframe.HeadFacing = facing; }
+
+ Workspace.GetCurrentPawnAnimationClip().BuildSimpleCurves();
+ Workspace.RecordEvent("Actor position / orientation");
+ }
+
// Pre-save / post-load
public void OnPreSave()
{
@@ -157,7 +214,7 @@ namespace RimWorldAnimationStudio
foreach (AddonKeyframe addonKeyframe in AddonKeyframes)
{
- ActorAddon addon = Workspace.GetAnimationClipThatOwnsKeyframe(keyframeID, out int clipID).GetActorAddon(addonKeyframe.AddonName);
+ ActorAddon addon = Workspace.GetAnimationClipThatOwnsKeyframe(keyframeID).GetActorAddon(addonKeyframe.AddonName);
if (addon.Render)
{ addonKeyframes.Add(addonKeyframe.Copy()); }
diff --git a/Assets/Scripts/Data/ActorPosition.cs b/Assets/Scripts/Data/ActorPosition.cs
new file mode 100644
index 00000000..7f86b12f
--- /dev/null
+++ b/Assets/Scripts/Data/ActorPosition.cs
@@ -0,0 +1,44 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using UnityEngine;
+
+namespace RimWorldAnimationStudio
+{
+ public class ActorPosition
+ {
+ public float bodyOffsetX;
+ public float bodyOffsetZ;
+ public float bodyAngle;
+ public float headBob;
+ public float headAngle;
+ public float genitalAngle;
+
+ public int bodyFacing;
+ public int headFacing;
+
+ public ActorPosition(int actorID, int atTick)
+ {
+ Actor actor = Workspace.GetActor(actorID);
+ PawnAnimationClip clip = Workspace.GetPawnAnimationClip(actorID);
+
+ float clipPercent = atTick / Workspace.StageWindowSize;
+ if (atTick > Constants.minTick && atTick == clip.duration) clipPercent = 1f;
+
+ if (Workspace.GetCurrentAnimationStage().IsLooping == false)
+ { clipPercent = (float)atTick / clip.duration; }
+
+ bodyOffsetX = clip.BodyOffsetX.Evaluate(clipPercent);
+ bodyOffsetZ = clip.BodyOffsetZ.Evaluate(clipPercent);
+ bodyAngle = clip.BodyAngle.Evaluate(clipPercent);
+ headBob = clip.HeadBob.Evaluate(clipPercent);
+ headAngle = clip.HeadAngle.Evaluate(clipPercent);
+ genitalAngle = clip.GenitalAngle.Evaluate(clipPercent);
+
+ bodyFacing = (int)clip.BodyFacing.Evaluate(clipPercent);
+ headFacing = (int)clip.HeadFacing.Evaluate(clipPercent);
+ }
+ }
+}
diff --git a/Assets/Scripts/Data/ActorPosition.cs.meta b/Assets/Scripts/Data/ActorPosition.cs.meta
new file mode 100644
index 00000000..219921a1
--- /dev/null
+++ b/Assets/Scripts/Data/ActorPosition.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: e2a9b0bb71978ea49909b3e1814303a5
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Data/Constants.cs b/Assets/Scripts/Data/Constants.cs
index 1a24cdb0..727c6daa 100644
--- a/Assets/Scripts/Data/Constants.cs
+++ b/Assets/Scripts/Data/Constants.cs
@@ -24,6 +24,7 @@ namespace RimWorldAnimationStudio
// Colors used
public static Color ColorWhite = new Color(1f, 1f, 1f);
public static Color ColorGreen = new Color(0f, 1f, 0f);
+ public static Color ColorLightGreen = new Color(0.75f, 1f, 0.75f);
public static Color ColorGoldYellow = new Color(1f, 0.85f, 0f);
public static Color ColorDarkGold = new Color(0.75f, 0.64f, 0f);
public static Color ColorLightGrey = new Color(0.9f, 0.9f, 0.9f);
diff --git a/Assets/Scripts/GUI/Actors/ActorBody.cs b/Assets/Scripts/GUI/Actors/ActorBody.cs
index 1eb6558e..0ae4ce1c 100644
--- a/Assets/Scripts/GUI/Actors/ActorBody.cs
+++ b/Assets/Scripts/GUI/Actors/ActorBody.cs
@@ -9,34 +9,40 @@ namespace RimWorldAnimationStudio
public class ActorBody : MonoBehaviour, IPointerClickHandler, IDragHandler, IEndDragHandler
{
public int actorID;
- public bool isSelected = false;
-
public SpriteRenderer bodyRenderer;
- public SpriteRenderer headRenderer;
- public SpriteRenderer appendageRenderer;
- private Vector3 delta = new Vector3();
+ private Vector3 dragDelta = new Vector3();
- public bool actorBodyPartSelected { get { return GetComponentsInChildren().Any(x => x.isSelected); } }
-
- public void Initialize(int actorID)
+ private void Start()
{
- this.actorID = actorID;
+ EventsManager.onActorBodyPartSelected.AddListener(delegate(ActorBodyPart bodyPart) { OnActorBodyPartSelected(bodyPart); });
+ EventsManager.onActorBodySelected.AddListener(delegate(ActorBody actorBody) { OnActorBodySelected(actorBody); });
}
- public void Update()
+ public void OnActorBodySelected(ActorBody actorBody)
{
- if (Workspace.ActorID == actorID && Workspace.selectedBodyPart == null)
+ if (actorBody == this)
{ bodyRenderer.color = Constants.ColorGreen; }
else
{ bodyRenderer.color = Constants.ColorWhite; }
+ }
- foreach (ActorAddon addon in Workspace.GetCurrentAnimationStage().AnimationClips[actorID].Addons)
- {
- ActorBodyPart bodyPart = GetComponentsInChildren(true).FirstOrDefault(x => x.addonName == addon.AddonName);
- bodyPart?.gameObject?.SetActive(addon.Render);
- }
+ public void OnActorBodyPartSelected(ActorBodyPart bodyPart)
+ {
+ if (bodyPart.parent == this)
+ { bodyRenderer.color = Constants.ColorLightGreen; }
+
+ else
+ { bodyRenderer.color = Constants.ColorWhite; }
+ }
+
+ public void Initialize(int actorID)
+ {
+ this.actorID = actorID;
+
+ if (actorID == Workspace.ActorID)
+ { Activate(); }
}
public void OnPointerClick(PointerEventData eventData)
@@ -52,19 +58,15 @@ namespace RimWorldAnimationStudio
Activate();
PawnKeyframe keyframe = Workspace.GetCurrentPawnKeyframe(true);
-
- if (keyframe == null)
- { Debug.LogWarning("Cannot alter actor - no keyframe data available"); return; }
-
Vector3 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
- if (delta == Vector3.zero)
- { delta = mousePosition - transform.position; }
+ if (dragDelta == Vector3.zero)
+ { dragDelta = mousePosition - transform.position; }
if (Workspace.actorManipulationMode == ActorManipulationMode.Pan)
{
- keyframe.BodyOffsetX = mousePosition.x - delta.x - Workspace.animationDef.Actors[actorID].GetFinalTransformOffset().x;
- keyframe.BodyOffsetZ = mousePosition.y - delta.y - Workspace.animationDef.Actors[actorID].GetFinalTransformOffset().y;
+ keyframe.BodyOffsetX = mousePosition.x - dragDelta.x - Workspace.GetActor(actorID).GetFinalTransformOffset().x;
+ keyframe.BodyOffsetZ = mousePosition.y - dragDelta.y - Workspace.GetActor(actorID).GetFinalTransformOffset().y;
}
else if (Workspace.actorManipulationMode == ActorManipulationMode.Rotate)
@@ -84,18 +86,27 @@ namespace RimWorldAnimationStudio
PawnAnimationClip clip = Workspace.GetPawnAnimationClip(actorID);
clip.BuildSimpleCurves();
+
+ EventsManager.OnPawnKeyframeChanged(keyframe);
}
public void OnEndDrag(PointerEventData eventData)
{
Workspace.RecordEvent("Actor position / orientation");
- delta = Vector3.zero;
+ dragDelta = Vector3.zero;
+ }
+
+ public ActorBodyPart GetBodyPart(string bodyPart)
+ {
+ return GetComponentsInChildren(true)?.FirstOrDefault(x => x.bodyPart.ToLower() == bodyPart);
}
public void Activate()
{
Workspace.ActorID = actorID;
Workspace.selectedBodyPart = null;
+
+ EventsManager.OnActorBodySelected(this);
}
}
}
diff --git a/Assets/Scripts/GUI/Actors/ActorBodyPart.cs b/Assets/Scripts/GUI/Actors/ActorBodyPart.cs
index 11b57d55..bdbfc23e 100644
--- a/Assets/Scripts/GUI/Actors/ActorBodyPart.cs
+++ b/Assets/Scripts/GUI/Actors/ActorBodyPart.cs
@@ -10,22 +10,39 @@ namespace RimWorldAnimationStudio
{
public SpriteRenderer bodyPartRenderer;
public ActorBody parent;
- public bool isHead = false;
- public string addonName;
- public bool isSelected = false;
+ public string bodyPart;
- private Vector3 delta = new Vector3();
+ private Vector3 dragDelta = new Vector3();
public void Start()
{
- //Workspace.onActorChanged.AddListener(delegate { });
+ EventsManager.onActorBodyPartSelected.AddListener(delegate (ActorBodyPart bodyPart) { OnActorBodyPartSelected(bodyPart); });
+ EventsManager.onActorBodySelected.AddListener(delegate (ActorBody actorBody) { OnActorBodySelected(actorBody); });
}
- public void Update()
+ public void OnActorAddonChange(ActorAddon actorAddon)
{
- if ((Workspace.ActorID == parent.actorID && Workspace.selectedBodyPart == null) || Workspace.selectedBodyPart == this)
+ if (actorAddon.AddonName == bodyPart)
+ { gameObject?.SetActive(actorAddon.Render); }
+ }
+
+ public void OnActorBodySelected(ActorBody actorBody)
+ {
+ if (actorBody == parent)
+ { bodyPartRenderer.color = Constants.ColorLightGreen; }
+
+ else
+ { bodyPartRenderer.color = Constants.ColorWhite; }
+ }
+
+ public void OnActorBodyPartSelected(ActorBodyPart bodyPart)
+ {
+ if (bodyPart == this)
{ bodyPartRenderer.color = Constants.ColorGreen; }
+ else if (bodyPart.parent == parent)
+ { bodyPartRenderer.color = Constants.ColorLightGreen; }
+
else
{ bodyPartRenderer.color = Constants.ColorWhite; }
}
@@ -43,71 +60,18 @@ namespace RimWorldAnimationStudio
Activate();
PawnKeyframe keyframe = Workspace.GetCurrentPawnKeyframe(true);
-
- if (keyframe == null)
- { Debug.LogWarning("Cannot alter actor - no keyframe data available"); return; }
-
Vector3 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
- if (delta == Vector3.zero)
- { delta = mousePosition - transform.position; }
+ if (dragDelta == Vector3.zero)
+ { dragDelta = mousePosition - transform.position; }
- if (addonName != null && addonName != "")
- {
- AddonKeyframe addonKeyframe = keyframe.GetAddonKeyframe(addonName);
- ActorAddon addon = Workspace.GetCurrentPawnAnimationClip().GetActorAddon(addonName);
-
- if (Workspace.actorManipulationMode == ActorManipulationMode.Pan)
- {
- Vector3 anchor;
-
- ActorBody anchoringActorBody = AnimationController.Instance.actorBodies.GetComponentsInChildren()?.FirstOrDefault(x => x.actorID == addon.AnchoringActor);
- Vector3 bodyPos = new Vector3(anchoringActorBody.transform.position.x, anchoringActorBody.transform.position.y, 0);
- PawnRaceDef pawnRaceDef = Workspace.animationDef.Actors[addon.AnchoringActor].GetPawnRaceDef();
- Actor anchoringActor = Workspace.animationDef.Actors[addon.AnchoringActor];
- int bodyFacing = (int)Workspace.GetCurrentAnimationStage().AnimationClips[addon.AnchoringActor].BodyFacing.Evaluate((float)Workspace.StageTick / Workspace.StageWindowSize);
-
- switch (addon.AnchorName)
- {
- case "torso": anchor = bodyPos; break;
- case "head": anchor = new Vector3(anchoringActorBody.transform.Find("ActorHead").position.x, anchoringActorBody.transform.Find("ActorHead").position.y, 0); break;
- case "groin": anchor = bodyPos + Quaternion.AngleAxis(anchoringActorBody.transform.rotation.eulerAngles.z, Vector3.forward) * PawnUtility.GroinOffsetAt(anchoringActor.bodyType, bodyFacing).FlipAxes(); break;
- case "left breast": anchor = bodyPos + Quaternion.AngleAxis(anchoringActorBody.transform.rotation.eulerAngles.z, Vector3.forward) * PawnUtility.BreastLeftOffsetAt(anchoringActor.bodyType, bodyFacing).FlipAxes(); break;
- case "right breast": anchor = bodyPos + Quaternion.AngleAxis(anchoringActorBody.transform.rotation.eulerAngles.z, Vector3.forward) * PawnUtility.BreastRightOffsetAt(anchoringActor.bodyType, bodyFacing).FlipAxes(); break;
- default: anchor = new Vector3(); break;
- }
-
- transform.position = new Vector3(mousePosition.x, mousePosition.y, 0f);
-
- addonKeyframe.PosX = transform.position.x - anchor.x;
- addonKeyframe.PosZ = transform.position.y - anchor.y;
-
- ActorKeyframeCard.Instance.transform.GetComponentsInChildren()?.FirstOrDefault(x => x.addonName == addonName)?.OnKeyframeValueChanged();
- }
-
- else if (Workspace.actorManipulationMode == ActorManipulationMode.Rotate)
- {
- float angle = -Vector2.SignedAngle(Vector2.down, (Vector2)mousePosition - (Vector2)transform.position);
- addonKeyframe.Rotation = angle;
- }
-
- else if (Workspace.actorManipulationMode == ActorManipulationMode.Face)
- {
- //float angle = Vector2.SignedAngle(Vector2.up, (Vector2)mousePosition - (Vector2)transform.position);
- //int facing = -Mathf.RoundToInt(angle / 90f);
- //facing = facing < 0 ? facing + 4 : facing;
-
- //keyframe.headFacing = facing;
- }
- }
-
- else if (isHead)
+ if (bodyPart.ToLower() == "head")
{
if (Workspace.actorManipulationMode == ActorManipulationMode.Pan)
{
- // It's stupid but it works
+ // It's stupid, but it works
Vector3 localPosA = transform.localPosition;
- transform.position = mousePosition - delta;
+ transform.position = mousePosition - dragDelta;
Vector3 localPosB = transform.localPosition;
transform.localPosition = localPosA;
@@ -130,31 +94,55 @@ namespace RimWorldAnimationStudio
}
}
- else
+ else if (bodyPart.ToLower() == "appendage")
{
if (Workspace.actorManipulationMode == ActorManipulationMode.Rotate)
{
float angle = -Vector2.SignedAngle(Vector2.up, (Vector2)mousePosition - (Vector2)transform.position);
keyframe.GenitalAngle = angle;
+ }
+ }
- Workspace.GetCurrentActor().ControlGenitalAngle = Workspace.animationDef.AnimationStages.Any(x => x.AnimationClips[Workspace.ActorID].Keyframes.Any(y => y.GenitalAngle != 0));
+ else
+ {
+ AddonKeyframe addonKeyframe = keyframe.GetAddonKeyframe(bodyPart);
+ ActorAddon addon = Workspace.GetCurrentPawnAnimationClip().GetActorAddon(bodyPart);
+
+ if (Workspace.actorManipulationMode == ActorManipulationMode.Pan)
+ {
+ ActorBody anchoringActorBody = AnimationController.Instance.actorBodies.GetComponentsInChildren()?.FirstOrDefault(x => x.actorID == addon.AnchoringActor);
+ Vector3 anchor = PawnUtility.GetBodyPartAnchor(anchoringActorBody, addon.addonName);
+ transform.position = new Vector3(mousePosition.x, mousePosition.y, 0f);
+
+ addonKeyframe.PosX = transform.position.x - anchor.x;
+ addonKeyframe.PosZ = transform.position.y - anchor.y;
+ }
+
+ else if (Workspace.actorManipulationMode == ActorManipulationMode.Rotate)
+ {
+ float angle = -Vector2.SignedAngle(Vector2.down, (Vector2)mousePosition - (Vector2)transform.position);
+ addonKeyframe.Rotation = angle;
}
}
PawnAnimationClip clip = Workspace.GetPawnAnimationClip(parent.actorID);
clip.BuildSimpleCurves();
+
+ EventsManager.OnPawnKeyframeChanged(keyframe);
}
public void OnEndDrag(PointerEventData eventData)
{
Workspace.RecordEvent("Actor position / orientation");
- delta = Vector3.zero;
+ dragDelta = Vector3.zero;
}
public void Activate()
{
Workspace.ActorID = parent.actorID;
Workspace.selectedBodyPart = this;
+
+ EventsManager.OnActorBodyPartSelected(this);
}
}
}
diff --git a/Assets/Scripts/GUI/AnimationLengthDisplay.cs b/Assets/Scripts/GUI/AnimationLengthDisplay.cs
new file mode 100644
index 00000000..7e58ceb0
--- /dev/null
+++ b/Assets/Scripts/GUI/AnimationLengthDisplay.cs
@@ -0,0 +1,35 @@
+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/AnimationLengthDisplay.cs.meta b/Assets/Scripts/GUI/AnimationLengthDisplay.cs.meta
new file mode 100644
index 00000000..40d4cd95
--- /dev/null
+++ b/Assets/Scripts/GUI/AnimationLengthDisplay.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 060e49b40b1097e46b662059e4e29cdf
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/GUI/AnimationTimeline.cs b/Assets/Scripts/GUI/AnimationTimeline.cs
index b5724802..217f57ac 100644
--- a/Assets/Scripts/GUI/AnimationTimeline.cs
+++ b/Assets/Scripts/GUI/AnimationTimeline.cs
@@ -75,7 +75,7 @@ namespace RimWorldAnimationStudio
public void InitiateUpdateOfGhostFrames()
{
- if (AnimationController.Instance.IsTimelineDirty()) return;
+ //if (AnimationController.Instance.IsTimelineDirty()) return;
BroadcastMessage("UpdateGhostFrames");
}
@@ -86,7 +86,7 @@ namespace RimWorldAnimationStudio
int? siblingCount = anchorTransform.parent.GetComponentsInChildren()?.ToList()?.Count();
if (siblingIndex != null && siblingCount != null && MoveAnimationTimeline(siblingIndex.Value, delta))
- { AnimationController.Instance.InitializeAnimationTimeline(); }
+ { AnimationController.Instance.Initialize(); }
}
public bool MoveAnimationTimeline(int startIndex, int delta)
diff --git a/Assets/Scripts/GUI/Cards/ActorAddonCard.cs b/Assets/Scripts/GUI/Cards/ActorAddonKeyframeCard.cs
similarity index 63%
rename from Assets/Scripts/GUI/Cards/ActorAddonCard.cs
rename to Assets/Scripts/GUI/Cards/ActorAddonKeyframeCard.cs
index 84110297..a79d6ed6 100644
--- a/Assets/Scripts/GUI/Cards/ActorAddonCard.cs
+++ b/Assets/Scripts/GUI/Cards/ActorAddonKeyframeCard.cs
@@ -8,7 +8,7 @@ using UnityEngine.UI;
namespace RimWorldAnimationStudio
{
- public class ActorAddonCard : MonoBehaviour
+ public class ActorAddonKeyframeCard : MonoBehaviour
{
public string addonName;
public InputField xOffsetField;
@@ -17,30 +17,33 @@ namespace RimWorldAnimationStudio
public void Start()
{
- xOffsetField.onEndEdit.AddListener(delegate { OnFieldValueChanged(); });
- zOffsetField.onEndEdit.AddListener(delegate { OnFieldValueChanged(); });
- rotationField.onEndEdit.AddListener(delegate { OnFieldValueChanged(); });
+ EventsManager.onAnimationChanged.AddListener(delegate { UpdateGUI(); });
+ EventsManager.onStageIDChanged.AddListener(delegate { UpdateGUI(); });
+ EventsManager.onActorIDChanged.AddListener(delegate { UpdateGUI(); });
+ EventsManager.onStageTickChanged.AddListener(delegate { Debug.Log("stagetick"); UpdateGUI(); });
- AnimationController.Instance.animationClipTimeField.onValueChanged.AddListener(delegate { OnKeyframeValueChanged(); });
+ xOffsetField.onEndEdit.AddListener(delegate { OnValueChanged(); });
+ zOffsetField.onEndEdit.AddListener(delegate { OnValueChanged(); });
+ rotationField.onEndEdit.AddListener(delegate { OnValueChanged(); });
+
+ UpdateGUI();
}
- public void OnFieldValueChanged()
+ public void OnValueChanged()
{
- if (Workspace.animationDef == null) return;
- PawnAnimationClip clip = Workspace.GetCurrentPawnAnimationClip();
PawnKeyframe keyframe = Workspace.GetCurrentPawnKeyframe(true);
keyframe.GetAddonKeyframe(addonName).PosX = float.Parse(xOffsetField.text);
keyframe.GetAddonKeyframe(addonName).PosZ = float.Parse(zOffsetField.text);
keyframe.GetAddonKeyframe(addonName).Rotation = float.Parse(rotationField.text);
- clip.BuildSimpleCurves();
+ Workspace.GetCurrentPawnAnimationClip().BuildSimpleCurves();
+
Workspace.RecordEvent("Actor addon position / orientation");
}
- public void OnKeyframeValueChanged()
+ public void UpdateGUI()
{
- if (Workspace.animationDef == null) return;
PawnAnimationClip clip = Workspace.GetCurrentPawnAnimationClip();
xOffsetField.SetTextWithoutNotify(clip.GetActorAddon(addonName).PosX.Evaluate((float)Workspace.StageTick / Workspace.StageWindowSize).ToString());
diff --git a/Assets/Scripts/GUI/Cards/ActorAddonCard.cs.meta b/Assets/Scripts/GUI/Cards/ActorAddonKeyframeCard.cs.meta
similarity index 100%
rename from Assets/Scripts/GUI/Cards/ActorAddonCard.cs.meta
rename to Assets/Scripts/GUI/Cards/ActorAddonKeyframeCard.cs.meta
diff --git a/Assets/Scripts/GUI/Cards/ActorCard.cs b/Assets/Scripts/GUI/Cards/ActorCard.cs
index 211b9219..9ec1a120 100644
--- a/Assets/Scripts/GUI/Cards/ActorCard.cs
+++ b/Assets/Scripts/GUI/Cards/ActorCard.cs
@@ -28,7 +28,7 @@ namespace RimWorldAnimationStudio
public void Start()
{
// General events
- EventsManager.onAnimationDefChanged.AddListener(delegate { UpdateGUI(); });
+ EventsManager.onAnimationChanged.AddListener(delegate { UpdateGUI(); });
EventsManager.onActorIDChanged.AddListener(delegate { UpdateGUI(); });
EventsManager.onDefNamesChanged.AddListener(delegate { UpdateRaceDropdown(); });
@@ -69,6 +69,8 @@ namespace RimWorldAnimationStudio
actor.SetPawnRaceOffset(new Vector2(x, z));
Workspace.RecordEvent("Actor offset");
+
+ UpdateGUI();
}
public void OnDropdownChanged()
@@ -107,8 +109,8 @@ namespace RimWorldAnimationStudio
string bodyType = actor.bodyType;
bodyTypeDropdown.SetValueWithoutNotify(bodyTypeDropdown.options.FindIndex(x => x.text == bodyType));
- bodyOffsetXField.SetTextWithoutNotify(string.Format("{0:0.000}", actor.BodyTypeOffset.GetOffset(bodyType).x.ToString()));
- bodyOffsetZField.SetTextWithoutNotify(string.Format("{0:0.000}", actor.BodyTypeOffset.GetOffset(bodyType).z.ToString()));
+ bodyOffsetXField.SetTextWithoutNotify(string.Format("{0:0.000}", actor.BodyTypeOffset.GetOffset(bodyType).x));
+ bodyOffsetZField.SetTextWithoutNotify(string.Format("{0:0.000}", actor.BodyTypeOffset.GetOffset(bodyType).z));
bodyTypeDropdown.interactable = actor.GetPawnRaceDef().isHumanoid;
bodyOffsetXField.interactable = actor.GetPawnRaceDef().isHumanoid;
@@ -117,8 +119,8 @@ namespace RimWorldAnimationStudio
string race = actor.GetPawnRaceDef().defName;
raceDropdown.SetValueWithoutNotify(raceDropdown.options.FindIndex(x => x.text == race));
- raceOffsetXField.SetTextWithoutNotify(string.Format("{0:0.000}", actor.GetPawnRaceOffset().x.ToString()));
- raceOffsetZField.SetTextWithoutNotify(string.Format("{0:0.000}", actor.GetPawnRaceOffset().z.ToString()));
+ raceOffsetXField.SetTextWithoutNotify(string.Format("{0:0.000}", actor.GetPawnRaceOffset().x));
+ raceOffsetZField.SetTextWithoutNotify(string.Format("{0:0.000}", actor.GetPawnRaceOffset().z));
}
}
}
diff --git a/Assets/Scripts/GUI/Cards/ActorKeyframeCard.cs b/Assets/Scripts/GUI/Cards/ActorKeyframeCard.cs
index 98ff43f3..a2c61b5a 100644
--- a/Assets/Scripts/GUI/Cards/ActorKeyframeCard.cs
+++ b/Assets/Scripts/GUI/Cards/ActorKeyframeCard.cs
@@ -15,17 +15,25 @@ namespace RimWorldAnimationStudio
public InputField headRotationField;
public InputField appendageRotationField;
- public void Update()
- {
- if (Workspace.animationDef == null)
- { return; }
+ private Actor actor { get { return Workspace.GetCurrentActor(); } }
- positionXField.interactable = AnimationController.Instance.isAnimating == false;
- positionZField.interactable = AnimationController.Instance.isAnimating == false;
- rotationField.interactable = AnimationController.Instance.isAnimating == false;
- headBobField.interactable = AnimationController.Instance.isAnimating == false;
- headRotationField.interactable = AnimationController.Instance.isAnimating == false;
- appendageRotationField.interactable = AnimationController.Instance.isAnimating == false;
+ private void Start()
+ {
+ EventsManager.onAnimationChanged.AddListener(delegate { UpdateGUI(); });
+ EventsManager.onStageIDChanged.AddListener(delegate { UpdateGUI(); });
+ EventsManager.onActorIDChanged.AddListener(delegate { UpdateGUI(); });
+ EventsManager.onStageTickChanged.AddListener(delegate { UpdateGUI(); });
+ EventsManager.onKeyframeCountChanged.AddListener(delegate { UpdateGUI(); });
+ EventsManager.onPawnKeyframeChanged.AddListener(delegate { UpdateGUI(); });
+
+ positionXField.onEndEdit.AddListener(delegate { OnValueChanged(); });
+ positionZField.onEndEdit.AddListener(delegate { OnValueChanged(); });
+ rotationField.onEndEdit.AddListener(delegate { OnValueChanged(); });
+ headBobField.onEndEdit.AddListener(delegate { OnValueChanged(); });
+ headRotationField.onEndEdit.AddListener(delegate { OnValueChanged(); });
+ appendageRotationField.onEndEdit.AddListener(delegate { OnValueChanged(); });
+
+ UpdateGUI();
}
public void OnValueChanged()
@@ -39,70 +47,21 @@ namespace RimWorldAnimationStudio
keyframe.HeadAngle = float.Parse(headRotationField.text);
keyframe.GenitalAngle = float.Parse(appendageRotationField.text);
- Workspace.animationDef.Actors[Workspace.ActorID].ControlGenitalAngle = keyframe.GenitalAngle != 0;
- Workspace.GetPawnAnimationClip(Workspace.ActorID).BuildSimpleCurves();
- Workspace.RecordEvent("Actor position / orientation");
- }
-
- public void AdjustActor(Vector2 deltaOffset)
- {
- float deltaAngle = -deltaOffset.x * 33.3333f + deltaOffset.y * 33.3333f;
- int facing = deltaOffset.x < 0 ? 3 : deltaOffset.y < 0 ? 2 : deltaOffset.x > 0 ? 1 : 0;
-
- switch (Workspace.actorManipulationMode)
- {
- case ActorManipulationMode.Pan: MoveActor(deltaOffset); break;
- case ActorManipulationMode.Rotate: RotateActor(deltaAngle); break;
- case ActorManipulationMode.Face: FaceActor(facing); break;
- }
- }
-
- public void MoveActor(Vector2 deltaOffset)
- {
- PawnKeyframe keyframe = Workspace.GetCurrentPawnKeyframe(true);
-
- if (Workspace.selectedBodyPart == null)
- {
- keyframe.BodyOffsetX += deltaOffset.x;
- keyframe.BodyOffsetZ += deltaOffset.y;
- }
-
- else if (Workspace.selectedBodyPart.isHead)
- { keyframe.HeadBob += deltaOffset.y; }
-
Workspace.GetCurrentPawnAnimationClip().BuildSimpleCurves();
+
Workspace.RecordEvent("Actor position / orientation");
}
- public void RotateActor(float deltaAngle)
+ public void UpdateGUI()
{
- PawnKeyframe keyframe = Workspace.GetCurrentPawnKeyframe(true);
+ ActorPosition actorPosition = actor.GetCurrentPosition();
- if (Workspace.selectedBodyPart == null)
- { keyframe.BodyAngle += deltaAngle; }
-
- else if (Workspace.selectedBodyPart.isHead)
- { keyframe.HeadAngle += deltaAngle; }
-
- else
- { keyframe.GenitalAngle -= deltaAngle; }
-
- Workspace.GetCurrentPawnAnimationClip().BuildSimpleCurves();
- Workspace.RecordEvent("Actor position / orientation");
- }
-
- public void FaceActor(int facing)
- {
- PawnKeyframe keyframe = Workspace.GetCurrentPawnKeyframe(true);
-
- if (Workspace.selectedBodyPart == null)
- { keyframe.BodyFacing = facing; }
-
- else if (Workspace.selectedBodyPart.isHead)
- { keyframe.HeadFacing = facing; }
-
- Workspace.GetCurrentPawnAnimationClip().BuildSimpleCurves();
- Workspace.RecordEvent("Actor position / orientation");
+ positionXField.SetTextWithoutNotify(string.Format("{0:0.000}", actorPosition.bodyOffsetX));
+ positionZField.SetTextWithoutNotify(string.Format("{0:0.000}", actorPosition.bodyOffsetZ));
+ rotationField.SetTextWithoutNotify(string.Format("{0:0.000}", actorPosition.bodyAngle));
+ headBobField.SetTextWithoutNotify(string.Format("{0:0.000}", actorPosition.headBob));
+ headRotationField.SetTextWithoutNotify(string.Format("{0:0.000}", actorPosition.headAngle));
+ appendageRotationField.SetTextWithoutNotify(string.Format("{0:0.000}", actorPosition.genitalAngle));
}
}
}
\ No newline at end of file
diff --git a/Assets/Scripts/GUI/Cards/AnimationControlCard.cs b/Assets/Scripts/GUI/Cards/AnimationControlCard.cs
new file mode 100644
index 00000000..16fe082c
--- /dev/null
+++ b/Assets/Scripts/GUI/Cards/AnimationControlCard.cs
@@ -0,0 +1,103 @@
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+using UnityEngine.UI;
+
+namespace RimWorldAnimationStudio
+{
+ public class AnimationControlCard : MonoBehaviour
+ {
+ public Dropdown stageLoopDropdown;
+ public InputField animationClipTimeField;
+ public InputField animationClipLengthField;
+ public Toggle stretchKeyframesToggle;
+ 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.onAnimationToggled.AddListener(delegate
+ {
+ playToggleButton.image.color = Workspace.isAnimating ? Constants.ColorGoldYellow : Constants.ColorWhite;
+ });
+
+ animationClipLengthField.text = Workspace.StageWindowSize.ToString();
+ stageTimelineSlider.maxValue = Workspace.StageWindowSize;
+ }
+
+ public void ToggleAnimation(bool forceOff = false)
+ {
+ Workspace.isAnimating = !Workspace.isAnimating;
+ if (forceOff) Workspace.isAnimating = false;
+ }
+
+ public void OnStageTimelineSliderChange()
+ {
+ if (Workspace.animationDef == null) return;
+
+ if (Workspace.StageTick != (int)stageTimelineSlider.value)
+ {
+ Workspace.StageTick = (int)stageTimelineSlider.value;
+ animationClipTimeField.text = Workspace.StageTick.ToString();
+ }
+ }
+
+ public void OnAnimationClipTimeFieldChange()
+ {
+ 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;
+ }
+
+ public void OnAnimationClipLengthFieldChange()
+ {
+ if (Workspace.animationDef == null) return;
+
+ int.TryParse(animationClipLengthField.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)
+ { Workspace.GetCurrentAnimationStage().StretchStageWindow(newStageWindowSize); }
+
+ else
+ {
+ foreach (PawnAnimationClip clip in Workspace.GetCurrentAnimationStage().AnimationClips)
+ {
+ List keyframes = clip.Keyframes.Where(x => x.atTick > newStageWindowSize)?.ToList();
+
+ if (keyframes.NullOrEmpty())
+ { continue; }
+
+ foreach (PawnKeyframe keyframe in keyframes)
+ {
+ if (clip.Keyframes.Count <= 2)
+ { break; }
+
+ clip.RemovePawnKeyframe(keyframe.keyframeID);
+ }
+ }
+ }
+
+ Workspace.GetCurrentAnimationStage().ResizeStageWindow(newStageWindowSize);
+ Workspace.RecordEvent("Stage length");
+ }
+
+ public void OnPlayBackSpeedChange()
+ {
+ Workspace.PlayBackSpeed = float.Parse(playBackSpeedField.text);
+ playBackSpeedField.SetTextWithoutNotify(Workspace.PlayBackSpeed.ToString());
+ }
+ }
+}
diff --git a/Assets/Scripts/GUI/Cards/AnimationControlCard.cs.meta b/Assets/Scripts/GUI/Cards/AnimationControlCard.cs.meta
new file mode 100644
index 00000000..bd32a2f7
--- /dev/null
+++ b/Assets/Scripts/GUI/Cards/AnimationControlCard.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 6b414452bfd6c9b4bb99542a51d77468
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/GUI/Cards/AnimationDefCard.cs b/Assets/Scripts/GUI/Cards/AnimationDefCard.cs
index 015eb7b0..c0f05f37 100644
--- a/Assets/Scripts/GUI/Cards/AnimationDefCard.cs
+++ b/Assets/Scripts/GUI/Cards/AnimationDefCard.cs
@@ -15,7 +15,7 @@ namespace RimWorldAnimationStudio
public void Start()
{
- EventsManager.onAnimationDefChanged.AddListener(delegate { UpdateInputFields(); });
+ EventsManager.onAnimationChanged.AddListener(delegate { UpdateInputFields(); });
defNameField.onEndEdit.AddListener(delegate {
Workspace.animationDef.DefName = defNameField.text;
diff --git a/Assets/Scripts/GUI/Cards/StageCard.cs b/Assets/Scripts/GUI/Cards/StageCard.cs
index 10bfe5d2..59923255 100644
--- a/Assets/Scripts/GUI/Cards/StageCard.cs
+++ b/Assets/Scripts/GUI/Cards/StageCard.cs
@@ -12,6 +12,30 @@ namespace RimWorldAnimationStudio
public InputField stageNameField;
public Image banner;
+ private int stageID { get { return transform.GetSiblingIndex(); } }
+
+ public void Start()
+ {
+ EventsManager.onStageIDChanged.AddListener(delegate { Initialize(stageName.text); });
+ stageNameField.onEndEdit.AddListener(delegate { OnNameChange(); });
+ }
+
+ public void Initialize(string stageName)
+ {
+ this.stageName.text = stageName;
+
+ if (Workspace.StageID == transform.GetSiblingIndex())
+ {
+ banner.gameObject.SetActive(true);
+ }
+
+ else
+ {
+ banner.gameObject.SetActive(false);
+ stageNameField.gameObject.SetActive(false);
+ }
+ }
+
public void OnNameChange()
{
stageName.text = stageNameField.text;
@@ -23,27 +47,7 @@ namespace RimWorldAnimationStudio
public void OnMoveStage(int delta)
{
- int siblingCount = transform.parent.childCount;
- int index = Mathf.Clamp(transform.GetSiblingIndex() + delta, 0, siblingCount - 1);
-
- transform.SetSiblingIndex(index);
- }
-
- public void Initialize(string stageName)
- {
- this.stageName.text = stageName;
- }
-
- public void Update()
- {
- if (Workspace.StageID == transform.GetSiblingIndex())
- { banner.gameObject.SetActive(true); }
-
- else
- {
- banner.gameObject.SetActive(false);
- stageNameField.gameObject.SetActive(false);
- }
+ Workspace.animationDef.MoveAnimationStage(stageID, delta);
}
public void OnPointerClick(PointerEventData eventData)
diff --git a/Assets/Scripts/GUI/Cards/StageLoopsCard.cs b/Assets/Scripts/GUI/Cards/StageLoopsCard.cs
new file mode 100644
index 00000000..6b7e7fd0
--- /dev/null
+++ b/Assets/Scripts/GUI/Cards/StageLoopsCard.cs
@@ -0,0 +1,58 @@
+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 StageLoopsCard : MonoBehaviour
+ {
+ public InputField stageLoopsNormalField;
+ public InputField stageLoopsQuickField;
+
+ public void Start()
+ {
+ EventsManager.onAnimationChanged.AddListener(delegate { UpdateInputFields(); });
+ EventsManager.onStageIDChanged.AddListener(delegate { UpdateInputFields(); });
+ EventsManager.onAnimationStageChanged.AddListener(delegate { UpdateInputFields(); });
+
+ stageLoopsNormalField.onEndEdit.AddListener(delegate { OnStageLoopsNormalFieldChange(); });
+ stageLoopsQuickField.onEndEdit.AddListener(delegate { OnStageLoopsFastFieldChange(); });
+
+ UpdateInputFields();
+ }
+
+ public void OnStageLoopsNormalFieldChange()
+ {
+ if (Workspace.animationDef == null) return;
+
+ Workspace.GetCurrentAnimationStage().StageLoopsNormal = int.Parse(stageLoopsNormalField.text);
+
+ EventsManager.OnAnimationStageChanged(Workspace.GetCurrentAnimationStage());
+ Workspace.RecordEvent("Cycle count (normal)");
+
+ UpdateInputFields();
+ }
+
+ public void OnStageLoopsFastFieldChange()
+ {
+ if (Workspace.animationDef == null) return;
+
+ Workspace.GetCurrentAnimationStage().StageLoopsQuick = int.Parse(stageLoopsQuickField.text);
+
+ EventsManager.OnAnimationStageChanged(Workspace.GetCurrentAnimationStage());
+ Workspace.RecordEvent("Cycle count (fast)");
+
+ UpdateInputFields();
+ }
+
+ public void UpdateInputFields()
+ {
+ stageLoopsNormalField.SetTextWithoutNotify(Workspace.GetCurrentAnimationStage().StageLoopsNormal.ToString());
+ stageLoopsQuickField.SetTextWithoutNotify(Workspace.GetCurrentAnimationStage().StageLoopsQuick.ToString());
+ }
+ }
+}
diff --git a/Assets/Scripts/GUI/Cards/StageLoopsCard.cs.meta b/Assets/Scripts/GUI/Cards/StageLoopsCard.cs.meta
new file mode 100644
index 00000000..9cdcd40e
--- /dev/null
+++ b/Assets/Scripts/GUI/Cards/StageLoopsCard.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 38691dc973d99734f8f0f2a240df73fe
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/GUI/KeyframeSlider.cs b/Assets/Scripts/GUI/KeyframeSlider.cs
index 0d28257f..403d80cc 100644
--- a/Assets/Scripts/GUI/KeyframeSlider.cs
+++ b/Assets/Scripts/GUI/KeyframeSlider.cs
@@ -35,12 +35,12 @@ namespace RimWorldAnimationStudio
{
this.timeline = timeline;
this.clip = Workspace.GetPawnAnimationClip(actorID);
- this.keyframe = Workspace.GetPawnKeyframe(actorID, keyframeID);
+ this.keyframe = Workspace.GetPawnKeyframe(keyframeID);
this.actorID = actorID;
this.keyframeID = keyframeID;
- PawnKeyframe keyframe = Workspace.GetPawnKeyframe(actorID, keyframeID);
+ PawnKeyframe keyframe = Workspace.GetPawnKeyframe(keyframeID);
maxValue = Workspace.StageWindowSize;
value = keyframe.atTick.Value;
@@ -132,7 +132,7 @@ namespace RimWorldAnimationStudio
if (unlinkedSlider != null)
{
- if (AnimationController.Instance.stretchKeyframesToggle.isOn && unlinkedSlider.keyframe.atTick == pivotKeyframe.atTick) continue;
+ if (Workspace.stretchKeyframes && unlinkedSlider.keyframe.atTick == pivotKeyframe.atTick) continue;
unlinkedSlider.linkedSlider = this;
unlinkedSlider.linkedOffset = unlinkedSlider.keyframe.atTick.Value - keyframe.atTick.Value;
@@ -176,7 +176,7 @@ namespace RimWorldAnimationStudio
foreach (PawnKeyframe _keyframe in keyframesToCheck)
{
if (_keyframe != keyframe)
- { Workspace.GetCurrentPawnAnimationClip().RemovePawnKeyframe(actorID, _keyframe.keyframeID); }
+ { Workspace.GetAnimationClipThatOwnsKeyframe(_keyframe.keyframeID).RemovePawnKeyframe(_keyframe.keyframeID); }
}
}
@@ -196,7 +196,7 @@ namespace RimWorldAnimationStudio
foreach (PawnKeyframe _keyframe in keyframesToCheck)
{
if (_keyframe.keyframeID != linkedKeyframe.keyframeID)
- { Workspace.GetCurrentPawnAnimationClip().RemovePawnKeyframe(actorID, _keyframe.keyframeID); Debug.Log("delete"); }
+ { Workspace.GetAnimationClipThatOwnsKeyframe(_keyframe.keyframeID).RemovePawnKeyframe(_keyframe.keyframeID); }
}
}
}
@@ -219,10 +219,10 @@ namespace RimWorldAnimationStudio
if (Workspace.keyframeID.NullOrEmpty() || Workspace.keyframeID.Contains(keyframeID) == false)
{ linkedSlider = null; }
- else if (AnimationController.Instance.stretchKeyframesToggle.isOn && linkedSlider != null)
+ else if (Workspace.stretchKeyframes && linkedSlider != null)
{ value = Mathf.CeilToInt(linkedSlider.keyframe.atTick.Value + linkedOffset * linkedSlider.ScaledOffsetFromPivot()); }
- else if (AnimationController.Instance.stretchKeyframesToggle.isOn == false && linkedSlider != null)
+ else if (Workspace.stretchKeyframes == false && linkedSlider != null)
{ value = Mathf.Clamp(linkedSlider.keyframe.atTick.Value + linkedOffset, Constants.minTick + 1, Workspace.StageWindowSize); }
else if (keyframe.atTick.Value != value)
@@ -242,7 +242,7 @@ namespace RimWorldAnimationStudio
{ handleImage.color = Constants.ColorGrey; }
// Show sound symbol
- string soundDef = Workspace.GetPawnKeyframe(actorID, keyframeID)?.SoundEffect;
+ string soundDef = Workspace.GetPawnKeyframe(keyframeID)?.SoundEffect;
soundIcon.SetActive(soundDef != null && soundDef != "" && soundDef != "None");
}
diff --git a/Assets/Scripts/GUI/LinearScale.cs b/Assets/Scripts/GUI/LinearScale.cs
index 93d23927..7dceb0e7 100644
--- a/Assets/Scripts/GUI/LinearScale.cs
+++ b/Assets/Scripts/GUI/LinearScale.cs
@@ -16,21 +16,10 @@ namespace RimWorldAnimationStudio
private List divisions = new List();
private float minDiff = -1f;
- private RectTransform rect;
- private int lastStageWindowSize = -1;
-
+
public void Start()
{
- rect = GetComponent();
- }
-
- public void Update()
- {
- if (lastStageWindowSize != Workspace.StageWindowSize)
- {
- UpdateLinearScale();
- lastStageWindowSize = Workspace.StageWindowSize;
- }
+ EventsManager.onStageWindowSizeChanged.AddListener(delegate { UpdateLinearScale(); });
}
public void UpdateLinearScale()
diff --git a/Assets/Scripts/GUI/SexProps.meta b/Assets/Scripts/GUI/Props.meta
similarity index 100%
rename from Assets/Scripts/GUI/SexProps.meta
rename to Assets/Scripts/GUI/Props.meta
diff --git a/Assets/Scripts/GUI/SexProps/SexProp.cs b/Assets/Scripts/GUI/Props/SexProp.cs
similarity index 100%
rename from Assets/Scripts/GUI/SexProps/SexProp.cs
rename to Assets/Scripts/GUI/Props/SexProp.cs
diff --git a/Assets/Scripts/GUI/SexProps/SexProp.cs.meta b/Assets/Scripts/GUI/Props/SexProp.cs.meta
similarity index 100%
rename from Assets/Scripts/GUI/SexProps/SexProp.cs.meta
rename to Assets/Scripts/GUI/Props/SexProp.cs.meta
diff --git a/Assets/Scripts/GUI/SexProps/SexPropManager.cs b/Assets/Scripts/GUI/Props/SexPropManager.cs
similarity index 100%
rename from Assets/Scripts/GUI/SexProps/SexPropManager.cs
rename to Assets/Scripts/GUI/Props/SexPropManager.cs
diff --git a/Assets/Scripts/GUI/SexProps/SexPropManager.cs.meta b/Assets/Scripts/GUI/Props/SexPropManager.cs.meta
similarity index 100%
rename from Assets/Scripts/GUI/SexProps/SexPropManager.cs.meta
rename to Assets/Scripts/GUI/Props/SexPropManager.cs.meta
diff --git a/Assets/Scripts/GUI/SelfContained/InactiveDuringAnimationPreview.cs b/Assets/Scripts/GUI/SelfContained/InactiveDuringAnimationPreview.cs
new file mode 100644
index 00000000..66817c26
--- /dev/null
+++ b/Assets/Scripts/GUI/SelfContained/InactiveDuringAnimationPreview.cs
@@ -0,0 +1,22 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+namespace RimWorldAnimationStudio
+{
+ public class InactiveDuringAnimationPreview : MonoBehaviour
+ {
+ private InputField inputfield;
+
+ private void Start()
+ {
+ inputfield = GetComponent();
+ }
+
+ private void Update()
+ {
+ inputfield.interactable = AnimationController.Instance.isAnimating == false;
+ }
+ }
+}
diff --git a/Assets/Scripts/GUI/SelfContained/InactiveDuringAnimationPreview.cs.meta b/Assets/Scripts/GUI/SelfContained/InactiveDuringAnimationPreview.cs.meta
new file mode 100644
index 00000000..8dd34ed9
--- /dev/null
+++ b/Assets/Scripts/GUI/SelfContained/InactiveDuringAnimationPreview.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 92068b39ed172084296a595f5a09e54b
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Managers/AnimationController.cs b/Assets/Scripts/Managers/AnimationController.cs
index 8e65ab1e..9feba2d8 100644
--- a/Assets/Scripts/Managers/AnimationController.cs
+++ b/Assets/Scripts/Managers/AnimationController.cs
@@ -14,81 +14,32 @@ namespace RimWorldAnimationStudio
[Header("Animation settings")]
public bool isAnimating = false;
-
[Header("Object references")]
- public Slider stageTimelineSlider;
- public Dropdown stageLoopDropdown;
- public InputField cyclesNormalField;
- public InputField cyclesFastField;
- public InputField animationClipTimeField;
- public InputField animationClipLengthField;
- public ActorCard actorCard;
public Transform animationTimelines;
public Transform actorBodies;
- public Toggle stretchKeyframesToggle;
- public InputField playBackSpeedField;
- public Button playToggleButton;
- public Text stageLengthText;
- public Text animationLengthText;
- public GameObject handLeftControls;
- public GameObject handRightControls;
- public GameObject sexToyControls;
+ public Dropdown stageLoopDropdown;
[Header("Prefabs")]
public ActorBody actorBodyPrefab;
public GameObject animationTimelinePrefab;
// Private timing variables
- private int lastStageTick = Constants.minTick;
private float timeSinceLastUpdate = 0;
- private int cycleIndex = 0;
- private bool isDirty = true;
- private bool isTimelineDirty = true;
+ private int loopCount = 0;
private float playBackSpeed = 1f;
- public void MakeDirty()
- { isDirty = true; isTimelineDirty = true; }
-
- public void MakeTimelineDirty()
- { isTimelineDirty = true; }
-
- public bool IsDirty()
- { return isDirty; }
-
- public bool IsTimelineDirty()
- { return isTimelineDirty; }
+ public void Start()
+ {
+ EventsManager.onAnimationChanged.AddListener(delegate{ Initialize(); });
+ EventsManager.onStageIDChanged.AddListener(delegate { Initialize(); });
+ EventsManager.onActorCountChanged.AddListener(delegate { Initialize(); });
+ }
public void Update()
{
- // No animation, exit
- if (Workspace.animationDef == null) { return; }
-
- // Dirty animation, reset
- if (Workspace.animationDef != null && isDirty)
- { Initialize(); }
-
- // Update animation lengths
- if (stageLoopDropdown.value == 3)
- {
- stageLengthText.text = "Stage length (quickie): " + Workspace.GetCurrentAnimationStage().PlayTimeTicksQuick + " (" + Workspace.animationDef.AnimationStages[Workspace.StageID].PlayTimeTicksQuick / 60f + " s)";
- animationLengthText.text = "Animation length (quickie): " + Workspace.animationDef.animationTimeTicksQuick + " (" + Workspace.animationDef.animationTimeTicksQuick / 60f + " s)";
-
- LayoutRebuilder.ForceRebuildLayoutImmediate(stageLengthText.GetComponent());
- LayoutRebuilder.ForceRebuildLayoutImmediate(animationLengthText.GetComponent());
- }
-
- else
- {
- stageLengthText.text = "Stage length (normal): " + Workspace.animationDef.AnimationStages[Workspace.StageID].PlayTimeTicks + " (" + Workspace.animationDef.AnimationStages[Workspace.StageID].PlayTimeTicks / 60f + " s)";
- animationLengthText.text = "Animation length (normal): " + Workspace.animationDef.animationTimeTicks + " (" + Workspace.animationDef.animationTimeTicks / 60f + " s)";
-
- LayoutRebuilder.ForceRebuildLayoutImmediate(stageLengthText.GetComponent());
- LayoutRebuilder.ForceRebuildLayoutImmediate(animationLengthText.GetComponent());
- }
-
- // Update tick if animating
- Workspace.StageTick = Mathf.Clamp(Workspace.StageTick, Constants.minTick, Workspace.StageWindowSize);
+ if (Workspace.animationDef == null) return;
+ // Update stage tick / loop count if animating
if (isAnimating)
{
timeSinceLastUpdate += Time.deltaTime;
@@ -101,204 +52,150 @@ namespace RimWorldAnimationStudio
if (Workspace.StageTick > Workspace.StageWindowSize)
{
- if (stageLoopDropdown.value == 1)
- { Workspace.StageTick = Constants.minTick; }
-
- else if (stageLoopDropdown.value >= 2)
+ switch (stageLoopDropdown.value)
{
- ++cycleIndex;
- Workspace.StageTick = Constants.minTick;
-
- if ((stageLoopDropdown.value == 2 && cycleIndex >= int.Parse(cyclesNormalField.text)) ||
- (stageLoopDropdown.value == 3 && cycleIndex >= int.Parse(cyclesFastField.text)))
- {
- ++Workspace.StageID;
- cycleIndex = 0;
- }
-
- if (Workspace.StageID > Workspace.animationDef.AnimationStages.Count - 1)
- {
- Workspace.StageID = Workspace.animationDef.AnimationStages.Count - 1;
- Workspace.StageTick = Workspace.StageWindowSize;
- isAnimating = false;
- }
- }
-
- else
- {
- //stageTick = Workspace.StageWindowSize;
- //isAnimating = false;
+ case 1: Workspace.StageTick = Constants.minTick; break;
+ case 2: UpdateLoopCount(Workspace.GetCurrentAnimationStage().StageLoopsNormal); break;
+ case 3: UpdateLoopCount(Workspace.GetCurrentAnimationStage().StageLoopsQuick); break;
+ default: break;
}
}
}
- // Update stage timeline
- animationClipTimeField.interactable = isAnimating == false;
- animationClipLengthField.interactable = isAnimating == false;
-
- if (lastStageTick != Workspace.StageTick)
- {
- stageTimelineSlider.value = Workspace.StageTick;
- animationClipTimeField.text = Workspace.StageTick.ToString();
-
- lastStageTick = Workspace.StageTick;
- }
-
- playToggleButton.image.color = isAnimating ? Constants.ColorGoldYellow : Constants.ColorWhite;
-
- // Update animation
- UpdateAnimation();
+ // Update animation preview
+ UpdateAnimationPReview();
}
- public void UpdateAnimation()
+ public void UpdateLoopCount(int stageLoops)
{
- List _actorBodies = actorBodies.GetComponentsInChildren().ToList();
+ ++loopCount;
+ Workspace.StageTick = Constants.minTick;
- for (int actorID = 0; actorID < _actorBodies.Count; actorID++)
+ if (loopCount >= stageLoops)
{
- if (Workspace.StageID >= Workspace.animationDef?.AnimationStages.Count) return;
+ ++Workspace.StageID;
+ loopCount = 0;
+ }
+ if (Workspace.StageID >= Workspace.animationDef.AnimationStages.Count - 1)
+ {
+ Workspace.StageTick = Workspace.StageWindowSize;
+ Workspace.isAnimating = false;
+ }
+ }
+
+ public void UpdateAnimationPReview()
+ {
+ if (Workspace.animationDef == null || Workspace.StageID >= Workspace.animationDef?.AnimationStages.Count) return;
+
+ List actorBodiesList = actorBodies.GetComponentsInChildren().ToList();
+
+ for (int actorID = 0; actorID < actorBodiesList.Count; actorID++)
+ {
+ // Get the current actor and their animation clip
Actor actor = Workspace.GetActor(actorID);
PawnAnimationClip clip = Workspace.GetPawnAnimationClip(actorID);
+ // Get flags
bool quiver = isAnimating && Workspace.GetCurrentOrPreviousKeyframe(actorID).Quiver == true;
bool requiresGenitals = actor.RequiredGenitals.Any(x => x == "Penis") || actor.IsFucking;
+ // Get clip percentage
float clipPercent = clip.GetStageTickPercentage();
if (Workspace.StageTick > Constants.minTick && Workspace.StageTick == clip.duration) clipPercent = 1f;
if (Workspace.GetCurrentAnimationStage().IsLooping == false)
{ clipPercent = (float)Workspace.StageTick / clip.duration; }
- PawnRaceDef pawnRaceDef = actor.GetPawnRaceDef();
- ActorBody actorBody = _actorBodies[actorID];
+ // Get the actors race and body type
+ PawnRaceDef pawnRaceDef = actor.GetPawnRaceDef();
string bodyType = pawnRaceDef.isHumanoid ? actor.bodyType : "None";
- Vector3 deltaPos = new Vector3(clip.BodyOffsetX.Evaluate(clipPercent), 0, clip.BodyOffsetZ.Evaluate(clipPercent));
+ // Evalute the actor's basic offsets and facing
+ ActorPosition actorPosition = actor.GetCurrentPosition();
- float bodyAngle = clip.BodyAngle.Evaluate(clipPercent);
- bodyAngle += quiver ? UnityEngine.Random.value * 2f - 1f : 0f;
-
- float headAngle = clip.HeadAngle.Evaluate(clipPercent);
-
- int bodyFacing = (int)clip.BodyFacing.Evaluate(clipPercent);
- int headFacing = (int)clip.HeadFacing.Evaluate(clipPercent);
-
- float headBob = clip.HeadBob.Evaluate(clipPercent);
- Vector3 headOffset = new Vector3(0, 0, headBob) + PawnUtility.BaseHeadOffsetAt(bodyType, bodyFacing);
-
- Vector3 bodyPos = new Vector3(deltaPos.x, deltaPos.z, 0);
- Vector3 headPos = new Vector3(headOffset.x, headOffset.z, 0);
+ float bodyPosX = actorPosition.bodyOffsetX;
+ float bodyPosZ = actorPosition.bodyOffsetZ;
+ float bodyAngle = actorPosition.bodyAngle + (quiver ? UnityEngine.Random.value * 2f - 1f : 0f);
+ float headBob = actorPosition.headBob;
+ float headAngle = actorPosition.headAngle;
+ float genitalAngle = actorPosition.genitalAngle;
+ int bodyFacing = actorPosition.bodyFacing;
+ int headFacing = actorPosition.headFacing;
+
+ // Convert values to world coordinates
+ Vector3 bodyPos = new Vector3(bodyPosX, bodyPosZ, 0f);
+ Vector3 headPos = new Vector3(0f, headBob, 0f) + PawnUtility.BaseHeadOffsetAt(bodyType, bodyFacing);
Vector3 appendagePos = PawnUtility.GroinOffsetAt(bodyType, bodyFacing);
- float appendageRotation = clip.GenitalAngle.Evaluate(clipPercent);
- actorBody.transform.position = bodyPos + actor.GetFinalTransformOffset();
- actorBody.transform.eulerAngles = new Vector3(0, 0, -bodyAngle);
-
- actorBody.headRenderer.transform.localPosition = headPos;
- actorBody.headRenderer.transform.eulerAngles = new Vector3(0, 0, -headAngle);
-
- actorBody.appendageRenderer.transform.localPosition = new Vector3(appendagePos.x, appendagePos.z, 0f);
- actorBody.appendageRenderer.transform.eulerAngles = new Vector3(0, 0, -appendageRotation);
-
- actorBody.bodyRenderer.sprite = pawnRaceDef.GetBodyTypeGraphic((CardinalDirection)bodyFacing, bodyType);
- actorBody.headRenderer.sprite = pawnRaceDef.isHumanoid ? pawnRaceDef.GetHeadGraphic((CardinalDirection)headFacing) : null;
- actorBody.appendageRenderer.sprite = requiresGenitals && pawnRaceDef.isHumanoid && bodyFacing != 0 ? Resources.Load("Textures/Humanlike/Appendages/Appendage" + bodyFacing) : null;
-
- actorBody.bodyRenderer.gameObject.SetActive(actorBody.bodyRenderer.sprite != null);
- actorBody.headRenderer.gameObject.SetActive(actorBody.headRenderer.sprite != null);
- actorBody.appendageRenderer.gameObject.SetActive(actorBody.appendageRenderer.sprite != null);
-
- actorBody.bodyRenderer.sortingLayerName = clip.Layer;
- actorBody.headRenderer.sortingLayerName = clip.Layer;
- actorBody.headRenderer.sortingOrder = bodyFacing == 0 ? -1 : 1;
- actorBody.appendageRenderer.sortingLayerName = clip.Layer;
-
- actorBody.bodyRenderer.flipX = bodyFacing == 3;
- actorBody.headRenderer.flipX = headFacing == 3;
- //actorBody.appendageRenderer.flipX = bodyFacing == 3;
+ // Update actorbody
+ ActorBody actorBody = actorBodiesList[actorID];
+ ActorBodyPart actorBodypart;
actorBody.transform.localScale = new Vector3(pawnRaceDef.scale, pawnRaceDef.scale, pawnRaceDef.scale);
- // ActorKeyframeCard update
- if (actorID != Workspace.ActorID) continue;
- if (ActorKeyframeCard.Instance.positionXField.isFocused == false) { ActorKeyframeCard.Instance.positionXField.text = bodyPos.x.ToString("0.000"); }
- if (ActorKeyframeCard.Instance.positionZField.isFocused == false) { ActorKeyframeCard.Instance.positionZField.text = bodyPos.y.ToString("0.000"); }
- if (ActorKeyframeCard.Instance.rotationField.isFocused == false) { ActorKeyframeCard.Instance.rotationField.text = bodyAngle.ToString("0.000"); }
- if (ActorKeyframeCard.Instance.headBobField.isFocused == false) { ActorKeyframeCard.Instance.headBobField.text = headBob.ToString("0.000"); }
- if (ActorKeyframeCard.Instance.headRotationField.isFocused == false) { ActorKeyframeCard.Instance.headRotationField.text = headAngle.ToString("0.000"); }
- if (ActorKeyframeCard.Instance.appendageRotationField.isFocused == false) { ActorKeyframeCard.Instance.appendageRotationField.text = appendageRotation.ToString("0.000"); }
+ // Body
+ actorBody.transform.position = bodyPos + actor.GetFinalTransformOffset();
+ actorBody.transform.eulerAngles = new Vector3(0, 0, -bodyAngle);
- if (actorID == Workspace.ActorID)
- {
- //handLeftControls.SetActive(clip.GetActorAddon("left hand").Render);
- //handRightControls.SetActive(clip.GetActorAddon("right hand").Render);
- //sexToyControls.SetActive(clip.GetActorAddon("dildo").Render);
- }
+ actorBody.bodyRenderer.sortingLayerName = clip.Layer;
+ actorBody.bodyRenderer.sprite = pawnRaceDef.GetBodyTypeGraphic((CardinalDirection)bodyFacing, bodyType);
+ actorBody.bodyRenderer.flipX = bodyFacing == 3;
+ actorBody.bodyRenderer.gameObject.SetActive(actorBody.bodyRenderer.sprite != null);
+
+ // Head
+ actorBodypart = actorBody.GetBodyPart("head");
+
+ actorBodypart.transform.localPosition = headPos;
+ actorBodypart.transform.eulerAngles = new Vector3(0, 0, -headAngle);
+
+ actorBodypart.bodyPartRenderer.sortingLayerName = clip.Layer;
+ actorBodypart.bodyPartRenderer.sortingOrder = bodyFacing == 0 ? -1 : 1;
+ actorBodypart.bodyPartRenderer.sprite = pawnRaceDef.isHumanoid ? pawnRaceDef.GetHeadGraphic((CardinalDirection)headFacing) : null;
+ actorBodypart.bodyPartRenderer.flipX = headFacing == 3;
+
+ actorBodypart.gameObject.SetActive(actorBodypart.bodyPartRenderer.sprite != null);
+
+ // Appendage
+ actorBodypart = actorBody.GetBodyPart("appendage");
+
+ actorBodypart.transform.localPosition = new Vector3(appendagePos.x, appendagePos.z, 0f);
+ actorBodypart.transform.eulerAngles = new Vector3(0, 0, -genitalAngle);
+
+ actorBodypart.bodyPartRenderer.sortingLayerName = clip.Layer;
+ actorBodypart.bodyPartRenderer.sprite = requiresGenitals && pawnRaceDef.isHumanoid && bodyFacing != 0 ? Resources.Load("Textures/Humanlike/Appendages/Appendage" + bodyFacing) : null;
+ //actorBody.appendageRenderer.flipX = bodyFacing == 3;
+
+ actorBodypart.gameObject.SetActive(actorBodypart.bodyPartRenderer.sprite != null);
+
+ // Add-ons
foreach (ActorAddon addon in clip.Addons)
{
- ActorBodyPart bodyPart = actorBody.GetComponentsInChildren()?.FirstOrDefault(x => x.addonName == addon.AddonName);
- if (bodyPart == null) continue;
-
- Vector3 anchor;
-
+ actorBodypart = actorBody.GetBodyPart(addon.AddonName);
+
ActorBody anchoringActorBody = actorBodies.GetComponentsInChildren()?.FirstOrDefault(x => x.actorID == addon.AnchoringActor);
- bodyPos = new Vector3(anchoringActorBody.transform.position.x, anchoringActorBody.transform.position.y, 0);
- pawnRaceDef = Workspace.animationDef.Actors[addon.AnchoringActor].GetPawnRaceDef();
- Actor anchoringActor = Workspace.animationDef.Actors[addon.AnchoringActor];
- bodyFacing = (int)Workspace.animationDef.AnimationStages[Workspace.StageID].AnimationClips[addon.AnchoringActor].BodyFacing.Evaluate(clipPercent);
+ Vector3 anchor = PawnUtility.GetBodyPartAnchor(anchoringActorBody, addon.addonName);
- switch (addon.AnchorName)
- {
- case "torso": anchor = bodyPos; break;
- case "head": anchor = new Vector3(anchoringActorBody.transform.Find("ActorHead").position.x, anchoringActorBody.transform.Find("ActorHead").position.y, 0); break;
- case "groin": anchor = bodyPos + Quaternion.AngleAxis(anchoringActorBody.transform.rotation.eulerAngles.z, Vector3.forward) * PawnUtility.GroinOffsetAt(anchoringActor.bodyType, bodyFacing).FlipAxes(); break;
- case "left breast": anchor = bodyPos + Quaternion.AngleAxis(anchoringActorBody.transform.rotation.eulerAngles.z, Vector3.forward) * PawnUtility.BreastLeftOffsetAt(anchoringActor.bodyType, bodyFacing).FlipAxes(); break;
- case "right breast": anchor = bodyPos + Quaternion.AngleAxis(anchoringActorBody.transform.rotation.eulerAngles.z, Vector3.forward) * PawnUtility.BreastRightOffsetAt(anchoringActor.bodyType, bodyFacing).FlipAxes(); break;
- default: anchor = new Vector3(); break;
- }
+ actorBodypart.transform.position = anchor + new Vector3(addon.PosX.Evaluate(clipPercent), addon.PosZ.Evaluate(clipPercent), 0);
+ actorBodypart.transform.eulerAngles = new Vector3(0, 0, -addon.Rotation.Evaluate(clipPercent));
- bodyPart.transform.position = anchor + new Vector3(addon.PosX.Evaluate(clipPercent), addon.PosZ.Evaluate(clipPercent), 0);
- bodyPart.transform.eulerAngles = new Vector3(0, 0, -addon.Rotation.Evaluate(clipPercent));
- bodyPart.GetComponent().sortingLayerName = addon.Layer;
+ actorBodypart.bodyPartRenderer.sortingLayerName = addon.Layer;
+ //actorBodypart.bodyPartRenderer.sprite
+
+ actorBodypart.gameObject.SetActive(addon.Render);
}
}
}
public void Initialize()
{
- isDirty = true;
Debug.Log("Initializing animation preview");
foreach (Transform child in transform)
{ child.gameObject.SetActive(true); }
- InitializeAnimationTimeline();
- StageCardManager.Instance.Initialize();
-
- isDirty = false;
- }
-
- public void Reset()
- {
- isAnimating = false;
- timeSinceLastUpdate = 0;
- cycleIndex = 0;
-
- MakeDirty();
- }
-
- public void InitializeAnimationTimeline()
- {
- isTimelineDirty = true;
-
- cyclesNormalField.text = Mathf.Max(Mathf.CeilToInt((float)Workspace.animationDef.AnimationStages[Workspace.StageID].PlayTimeTicks / Workspace.StageWindowSize), 1).ToString();
- cyclesFastField.text = Mathf.Max(Mathf.CeilToInt((float)Workspace.animationDef.AnimationStages[Workspace.StageID].PlayTimeTicksQuick / Workspace.StageWindowSize), 0).ToString();
-
- Workspace.animationDef.AnimationStages[Workspace.StageID].IsLooping = int.Parse(cyclesNormalField.text) > 1 ? true : false;
-
int actorCount = Workspace.animationDef.Actors.Count;
int childCount = animationTimelines.GetComponentsInChildren().Count();
@@ -306,7 +203,7 @@ namespace RimWorldAnimationStudio
{
// Add new actors as required
if (actorID >= childCount)
- {
+ {
Instantiate(animationTimelinePrefab, animationTimelines);
Instantiate(actorBodyPrefab, actorBodies.transform);
}
@@ -324,125 +221,21 @@ namespace RimWorldAnimationStudio
// Remove excess objects as required
else
- {
+ {
Destroy(animationTimeline.transform.parent.gameObject);
Destroy(actorBody.gameObject);
}
}
- animationClipLengthField.text = Workspace.StageWindowSize.ToString();
- stageTimelineSlider.maxValue = Workspace.StageWindowSize;
-
- isTimelineDirty = false;
-
foreach (AnimationTimeline timeline in animationTimelines.GetComponentsInChildren())
{ timeline.InitiateUpdateOfGhostFrames(); }
}
- public void ToggleAnimation()
+ public void Reset()
{
- isAnimating = !isAnimating;
- }
-
- public void OnStageTimelineSliderChange()
- {
- if (Workspace.animationDef == null) return;
-
- if (Workspace.StageTick != (int)stageTimelineSlider.value)
- {
- Workspace.StageTick = (int)stageTimelineSlider.value;
- animationClipTimeField.text = Workspace.StageTick.ToString();
- }
- }
-
- public void OnAnimationClipTimeFieldChange()
- {
- 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;
- }
-
- public void OnAnimationClipLengthFieldChange()
- {
- if (Workspace.animationDef == null) return;
-
- int.TryParse(animationClipLengthField.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)
- { Workspace.GetCurrentAnimationStage().StretchStageWindow(newStageWindowSize); }
-
- else
- {
- for (int i = 0; i < Workspace.animationDef.AnimationStages[Workspace.StageID].AnimationClips.Count; i++)
- {
- PawnAnimationClip clip = Workspace.animationDef.AnimationStages[Workspace.StageID].AnimationClips[i];
- List keyframes = clip.Keyframes.Where(x => x.atTick > newStageWindowSize)?.ToList();
-
- if (keyframes.NullOrEmpty())
- { continue; }
-
- foreach (PawnKeyframe keyframe in keyframes)
- {
- clip.RemovePawnKeyframe(i, keyframe.keyframeID);
-
- if (Workspace.animationDef.AnimationStages[Workspace.StageID].AnimationClips[i].Keyframes.Count <= 2)
- { break; }
- }
- }
- }
-
- Workspace.GetCurrentAnimationStage().ResizeStageWindow(newStageWindowSize);
- Workspace.RecordEvent("Stage length");
- }
-
- public void OnCycleNormalFieldChange()
- {
- if (Workspace.animationDef == null) return;
-
- if (int.TryParse(cyclesNormalField.text, out int cycles))
- {
- cycles = cycles <= 0 ? 1 : cycles;
- cyclesNormalField.text = cycles.ToString();
-
- Workspace.animationDef.AnimationStages[Workspace.StageID].PlayTimeTicks = cycles * Workspace.StageWindowSize;
- Workspace.animationDef.AnimationStages[Workspace.StageID].IsLooping = cycles > 1;
-
- foreach(AnimationTimeline animationTimeline in animationTimelines.GetComponentsInChildren())
- { animationTimeline.InitiateUpdateOfGhostFrames(); }
- }
-
- Workspace.RecordEvent("Cycle count (normal)");
- }
-
- public void OnCycleFastFieldChange()
- {
- if (Workspace.animationDef == null) return;
-
- if (int.TryParse(cyclesFastField.text, out int fastCycles))
- {
- fastCycles = fastCycles < 0 ? 0 : fastCycles;
-
- int.TryParse(cyclesNormalField.text, out int cycles);
- if (fastCycles > cycles) fastCycles = cycles;
- cyclesFastField.text = fastCycles.ToString();
-
- Workspace.animationDef.AnimationStages[Workspace.StageID].PlayTimeTicksQuick = fastCycles * Workspace.StageWindowSize;
- }
-
- Workspace.RecordEvent("Cycle count (fast)");
- }
-
- public void OnPlayBackSpeedChange()
- {
- if (float.TryParse(playBackSpeedField.text, out playBackSpeed))
- { playBackSpeed = Mathf.Clamp(playBackSpeed, 0.01f, 16f); }
-
- playBackSpeedField.text = playBackSpeed.ToString();
+ Workspace.isAnimating = false;
+ timeSinceLastUpdate = 0;
+ loopCount = 0;
}
}
}
diff --git a/Assets/Scripts/Managers/ApplicationManager.cs b/Assets/Scripts/Managers/ApplicationManager.cs
index 061bd0d6..31bee981 100644
--- a/Assets/Scripts/Managers/ApplicationManager.cs
+++ b/Assets/Scripts/Managers/ApplicationManager.cs
@@ -73,7 +73,7 @@ namespace RimWorldAnimationStudio
AnimationController.Instance.Reset();
Workspace.Reset();
- EventsManager.OnAnimationDefChanged();
+ EventsManager.OnAnimationChanged();
Workspace.RecordEvent("AnimationDef loaded");
}
diff --git a/Assets/Scripts/Managers/InputManager.cs b/Assets/Scripts/Managers/InputManager.cs
index 50a37fee..612a393d 100644
--- a/Assets/Scripts/Managers/InputManager.cs
+++ b/Assets/Scripts/Managers/InputManager.cs
@@ -204,7 +204,7 @@ namespace RimWorldAnimationStudio
public void ToggleAnimationPreview()
{
if (Workspace.animationDef == null) return;
- AnimationController.Instance.ToggleAnimation();
+ Workspace.isAnimating = !Workspace.isAnimating;
}
public void AddKeyframe()
@@ -228,7 +228,9 @@ namespace RimWorldAnimationStudio
public void DeleteKeyframes()
{
if (Workspace.animationDef == null) return;
- Workspace.GetCurrentPawnAnimationClip().RemovePawnKeyframe();
+
+ foreach (int keyframeID in Workspace.keyframeID)
+ { Workspace.GetAnimationClipThatOwnsKeyframe(keyframeID).RemovePawnKeyframe(keyframeID); }
}
public void ActorMovementMode()
@@ -249,49 +251,65 @@ namespace RimWorldAnimationStudio
public void AdjustActorUpward()
{
if (Workspace.animationDef == null) return;
- ActorKeyframeCard.Instance.AdjustActor(Vector2.up * largeStep);
+
+ PawnKeyframe keyframe = Workspace.GetCurrentPawnKeyframe(true);
+ keyframe.AdjustActor(Vector2.up * largeStep);
}
public void AdjustActorDownward()
{
if (Workspace.animationDef == null) return;
- ActorKeyframeCard.Instance.AdjustActor(Vector2.down * largeStep);
+
+ PawnKeyframe keyframe = Workspace.GetCurrentPawnKeyframe(true);
+ keyframe.AdjustActor(Vector2.down * largeStep);
}
public void AdjustActorLeftward()
{
if (Workspace.animationDef == null) return;
- ActorKeyframeCard.Instance.AdjustActor(Vector2.left * largeStep);
+
+ PawnKeyframe keyframe = Workspace.GetCurrentPawnKeyframe(true);
+ keyframe.AdjustActor(Vector2.left * largeStep);
}
public void AdjustActorRightward()
{
if (Workspace.animationDef == null) return;
- ActorKeyframeCard.Instance.AdjustActor(Vector2.right * largeStep);
+
+ PawnKeyframe keyframe = Workspace.GetCurrentPawnKeyframe(true);
+ keyframe.AdjustActor(Vector2.right * largeStep);
}
public void AdjustActorUpwardSmall()
{
if (Workspace.animationDef == null) return;
- ActorKeyframeCard.Instance.AdjustActor(Vector2.up * smallStep);
+
+ PawnKeyframe keyframe = Workspace.GetCurrentPawnKeyframe(true);
+ keyframe.AdjustActor(Vector2.up * smallStep);
}
public void AdjustActorDownwardSmall()
{
if (Workspace.animationDef == null) return;
- ActorKeyframeCard.Instance.AdjustActor(Vector2.down * smallStep);
+
+ PawnKeyframe keyframe = Workspace.GetCurrentPawnKeyframe(true);
+ keyframe.AdjustActor(Vector2.down * smallStep);
}
public void AdjustActorLeftwardSmall()
{
if (Workspace.animationDef == null) return;
- ActorKeyframeCard.Instance.AdjustActor(Vector2.left * smallStep);
+
+ PawnKeyframe keyframe = Workspace.GetCurrentPawnKeyframe(true);
+ keyframe.AdjustActor(Vector2.left * smallStep);
}
public void AdjustActorRightwardSmall()
{
if (Workspace.animationDef == null) return;
- ActorKeyframeCard.Instance.AdjustActor(Vector2.right * smallStep);
+
+ PawnKeyframe keyframe = Workspace.GetCurrentPawnKeyframe(true);
+ keyframe.AdjustActor(Vector2.right * smallStep);
}
public void CycleActorBodyPartSelecion()
@@ -407,7 +425,7 @@ namespace RimWorldAnimationStudio
public void StretchKeyframesToggle()
{
- AnimationController.Instance.stretchKeyframesToggle.isOn = !AnimationController.Instance.stretchKeyframesToggle.isOn;
+ Workspace.stretchKeyframes = !Workspace.stretchKeyframes;
}
public void OpenProjectHome()
@@ -435,5 +453,26 @@ namespace RimWorldAnimationStudio
Workspace.animationDef.RemoveActor();
}
+
+ public void AddStage()
+ {
+ if (Workspace.animationDef == null) return;
+
+ Workspace.animationDef.AddAnimationStage();
+ }
+
+ public void CloneStage()
+ {
+ if (Workspace.animationDef == null) return;
+
+ Workspace.animationDef.CloneAnimationStage();
+ }
+
+ public void RemoveStage()
+ {
+ if (Workspace.animationDef == null) return;
+
+ Workspace.animationDef.RemoveAnimationStage();
+ }
}
}
diff --git a/Assets/Scripts/Managers/StageCardManager.cs b/Assets/Scripts/Managers/StageCardManager.cs
index 7ccddac2..db5c1c30 100644
--- a/Assets/Scripts/Managers/StageCardManager.cs
+++ b/Assets/Scripts/Managers/StageCardManager.cs
@@ -13,7 +13,11 @@ namespace RimWorldAnimationStudio
public void Start()
{
+ EventsManager.onAnimationChanged.AddListener(delegate { Initialize(); });
+ EventsManager.onStageIDChanged.AddListener(delegate { Initialize(); });
EventsManager.onStageCountChanged.AddListener(delegate { Initialize(); });
+
+ Initialize();
}
public void Initialize()
diff --git a/Assets/Scripts/Utilities/PawnUtility.cs b/Assets/Scripts/Utilities/PawnUtility.cs
index 9c4d906e..2616471d 100644
--- a/Assets/Scripts/Utilities/PawnUtility.cs
+++ b/Assets/Scripts/Utilities/PawnUtility.cs
@@ -24,10 +24,10 @@ namespace RimWorldAnimationStudio
switch (rotation)
{
- case 0: return new Vector3(0f, 0f, headOffset.y);
- case 1: return new Vector3(headOffset.x, 0f, headOffset.y);
- case 2: return new Vector3(0f, 0f, headOffset.y);
- case 3: return new Vector3(-headOffset.x, 0f, headOffset.y);
+ case 0: return new Vector3(0f, headOffset.y, 0);
+ case 1: return new Vector3(headOffset.x, headOffset.y, 0);
+ case 2: return new Vector3(0f, headOffset.y, 0f);
+ case 3: return new Vector3(-headOffset.x, headOffset.y, 0f);
default: return Vector3.zero;
}
}
@@ -161,5 +161,23 @@ namespace RimWorldAnimationStudio
}
}
}
+
+ public static Vector3 GetBodyPartAnchor(ActorBody anchoringActorBody, string anchorName)
+ {
+ Actor anchoringActor = Workspace.GetActor(anchoringActorBody.actorID);
+ Vector3 anchoringActorBodyPos = anchoringActorBody.transform.position;
+ Quaternion anchoringActorBodyQuad = Quaternion.AngleAxis(anchoringActorBody.transform.rotation.eulerAngles.z, Vector3.forward);
+ int anchoringActorFacing = anchoringActor.GetCurrentPosition().bodyFacing;
+
+ switch (anchorName)
+ {
+ case "torso": return anchoringActorBodyPos;
+ case "head": return anchoringActorBody.GetComponentsInChildren().FirstOrDefault(x => x.bodyPart.ToLower() == "head").transform.position;
+ case "groin": return anchoringActorBodyPos + anchoringActorBodyQuad * PawnUtility.GroinOffsetAt(anchoringActor.bodyType, anchoringActorFacing).FlipAxes();
+ case "left breast": return anchoringActorBodyPos + anchoringActorBodyQuad * PawnUtility.BreastLeftOffsetAt(anchoringActor.bodyType, anchoringActorFacing).FlipAxes();
+ case "right breast": return anchoringActorBodyPos + anchoringActorBodyQuad * PawnUtility.BreastRightOffsetAt(anchoringActor.bodyType, anchoringActorFacing).FlipAxes();
+ default: return new Vector3();
+ }
+ }
}
}
diff --git a/Assets/Scripts/Workspace/EventsManager.cs b/Assets/Scripts/Workspace/EventsManager.cs
index 14b8de5b..ebd70a10 100644
--- a/Assets/Scripts/Workspace/EventsManager.cs
+++ b/Assets/Scripts/Workspace/EventsManager.cs
@@ -18,8 +18,12 @@ namespace RimWorldAnimationStudio
public class PawnKeyframeEvent : UnityEvent { }
public class ActorAddonEvent : UnityEvent { }
public class AddonKeyframeEvent : UnityEvent { }
+ public class ActorBodyEvent : UnityEvent { }
+ public class ActorBodyPartEvent : UnityEvent { }
// Event list
+ public static UnityEvent onAnimationToggled = new UnityEvent();
+ public static UnityEvent onAnimationChanged = new UnityEvent();
public static UnityEvent onAnimationDefChanged = new UnityEvent();
public static WorkspaceIntEvent onActorIDChanged = new WorkspaceIntEvent();
public static WorkspaceIntEvent onStageIDChanged = new WorkspaceIntEvent();
@@ -29,13 +33,18 @@ namespace RimWorldAnimationStudio
public static WorkspaceIntEvent onKeyframeCountChanged = new WorkspaceIntEvent();
public static ActorEvent onActorChanged = new ActorEvent();
public static AnimationStageEvent onAnimationStageChanged = new AnimationStageEvent();
+ public static AnimationStageEvent onStageWindowSizeChanged = new AnimationStageEvent();
public static PawnAnimationClipEvent onPawnAnimationClipChanged = new PawnAnimationClipEvent();
public static PawnKeyframeEvent onPawnKeyframeChanged = new PawnKeyframeEvent();
public static ActorAddonEvent onActorAddonChanged = new ActorAddonEvent();
public static AddonKeyframeEvent onAddonKeyframeChanged = new AddonKeyframeEvent();
public static UnityEvent onDefNamesChanged = new UnityEvent();
+ public static ActorBodyEvent onActorBodySelected = new ActorBodyEvent();
+ public static ActorBodyPartEvent onActorBodyPartSelected = new ActorBodyPartEvent();
// Event invoking
+ public static void OnAnimationToggled() { onAnimationToggled.Invoke(); }
+ public static void OnAnimationChanged() { onAnimationChanged.Invoke(); }
public static void OnAnimationDefChanged() { onAnimationDefChanged.Invoke(); }
public static void OnActorIDChanged() { onActorIDChanged.Invoke(Workspace.ActorID); }
public static void OnStageIDChanged() { onStageIDChanged.Invoke(Workspace.ActorID); }
@@ -45,10 +54,13 @@ namespace RimWorldAnimationStudio
public static void OnKeyframeCountChanged(PawnAnimationClip clip) { onKeyframeCountChanged.Invoke(clip.Keyframes.Count); }
public static void OnActorChanged(Actor actor) { onActorChanged.Invoke(actor); }
public static void OnAnimationStageChanged(AnimationStage stage) { onAnimationStageChanged.Invoke(stage); }
+ public static void OnStageWindowSizeChanged(AnimationStage stage) { onStageWindowSizeChanged.Invoke(stage); }
public static void OnPawnAnimationClipChanged(PawnAnimationClip clip) { onPawnAnimationClipChanged.Invoke(clip); }
public static void OnPawnKeyframeChanged(PawnKeyframe keyframe) { onPawnKeyframeChanged.Invoke(keyframe); }
public static void OnActorAddonChanged(ActorAddon actorAddon) { onActorAddonChanged.Invoke(actorAddon); }
public static void OnAddonKeyframeChanged(AddonKeyframe addonKeyframe) { onAddonKeyframeChanged.Invoke(addonKeyframe); }
public static void OnDefNamesChanged() { onDefNamesChanged.Invoke(); }
+ public static void OnActorBodySelected(ActorBody actorBody) { onActorBodySelected.Invoke(actorBody); }
+ public static void OnActorBodyPartSelected(ActorBodyPart bodyPart) { onActorBodyPartSelected.Invoke(bodyPart); }
}
}
diff --git a/Assets/Scripts/Workspace/Workspace.cs b/Assets/Scripts/Workspace/Workspace.cs
index c782d8eb..c8757e5d 100644
--- a/Assets/Scripts/Workspace/Workspace.cs
+++ b/Assets/Scripts/Workspace/Workspace.cs
@@ -22,11 +22,7 @@ namespace RimWorldAnimationStudio
bool triggerEvent = stageID != value;
stageID = value;
- if (triggerEvent)
- {
- StageTick = Constants.minTick;
- EventsManager.OnStageIDChanged();
- }
+ if (triggerEvent) { StageTick = Constants.minTick; EventsManager.OnStageIDChanged(); }
}
}
@@ -78,12 +74,15 @@ namespace RimWorldAnimationStudio
// Current save path
public static string animationSavePath;
-
- // Stage loop counts and stretching
- public static int stageLoopsNormal = 1;
- public static int stageLoopsQuick = 1;
+
+ // Stage controls
+ private static float playBackSpeed = 1f;
+ public static bool isAnimating;
public static bool stretchKeyframes;
+ // Stage controls set / get
+ public static float PlayBackSpeed { get { return playBackSpeed; } set { Mathf.Clamp(Workspace.playBackSpeed, 0.01f, 10f); } }
+
// Animation indices
private static int stageID = 0;
private static int actorID = 0;
@@ -96,17 +95,17 @@ namespace RimWorldAnimationStudio
public static Actor GetCurrentActor()
{
- return animationDef?.Actors[ActorID];
+ return GetActor(ActorID);
}
public static AnimationStage GetCurrentAnimationStage()
{
- return animationDef?.AnimationStages[StageID];
+ return GetAnimationStage(StageID);
}
public static PawnAnimationClip GetCurrentPawnAnimationClip()
{
- return animationDef?.AnimationStages[StageID]?.AnimationClips[ActorID];
+ return GetPawnAnimationClip(ActorID);
}
public static PawnKeyframe GetCurrentPawnKeyframe(bool makeKeyframe = false)
@@ -122,28 +121,47 @@ namespace RimWorldAnimationStudio
public static Actor GetActor(int actorID)
{
- return animationDef?.Actors[actorID];
+ return animationDef?.Actors.ElementAtOrDefault(actorID);
}
public static AnimationStage GetAnimationStage(int stageID)
{
- return animationDef?.AnimationStages[stageID];
+ return animationDef?.AnimationStages.ElementAtOrDefault(stageID);
}
public static PawnAnimationClip GetPawnAnimationClip(int actorID)
{
- return animationDef?.AnimationStages[StageID]?.AnimationClips[actorID];
+ return GetCurrentAnimationStage()?.AnimationClips.ElementAtOrDefault(actorID);
}
- public static PawnKeyframe GetPawnKeyframe(int actorID, int keyframeID)
+ public static PawnKeyframe GetPawnKeyframe(int keyframeID)
{
- if (StageID < 0) return null;
- if (actorID < 0) return null;
+ foreach (AnimationStage stage in animationDef?.AnimationStages)
+ {
+ foreach (PawnAnimationClip clip in stage.animationClips)
+ {
+ PawnKeyframe keyframe = clip.Keyframes.FirstOrDefault(x => x.keyframeID == keyframeID);
- if (StageID >= animationDef.AnimationStages.Count) return null;
- if (actorID >= animationDef.AnimationStages[StageID].AnimationClips.Count) return null;
+ if (keyframe != null) return keyframe;
+ }
+ }
- return animationDef.AnimationStages[StageID].AnimationClips[actorID].Keyframes.FirstOrDefault(x => x.keyframeID == keyframeID);
+ return null;
+ }
+
+ public static PawnAnimationClip GetAnimationClipThatOwnsKeyframe(int keyframeID)
+ {
+ foreach (AnimationStage stage in animationDef?.AnimationStages)
+ {
+ foreach (PawnAnimationClip clip in stage.animationClips)
+ {
+ PawnKeyframe keyframe = clip.Keyframes.FirstOrDefault(x => x.keyframeID == keyframeID);
+
+ if (keyframe != null) return clip;
+ }
+ }
+
+ return null;
}
public static List GetAllPawnKeyframesAtTick(int actorID, int atTick)
@@ -167,24 +185,6 @@ namespace RimWorldAnimationStudio
return pawnKeyframes;
}
- public static PawnAnimationClip GetAnimationClipThatOwnsKeyframe(int keyframeID, out int clipID)
- {
- clipID = -1;
-
- for (int i = 0; i < animationDef.AnimationStages[StageID].AnimationClips.Count; i++)
- {
- PawnAnimationClip clip = animationDef.AnimationStages[StageID].AnimationClips[i];
-
- if (clip.Keyframes.Any(x => x.keyframeID == keyframeID))
- {
- clipID = i;
- return clip;
- }
- }
-
- return null;
- }
-
public static bool DoesPawnKeyframeExistAtTick(int stageID, int actorID, int atTick)
{
return animationDef.AnimationStages[stageID].AnimationClips[actorID].Keyframes.Any(x => x.atTick == atTick);
@@ -195,11 +195,9 @@ namespace RimWorldAnimationStudio
PawnKeyframe pawnKeyframe = null;
PawnAnimationClip clip = GetPawnAnimationClip(actorID);
- int stageTick = Workspace.StageTick;
-
foreach (PawnKeyframe keyframe in clip.Keyframes)
{
- if (keyframe.atTick > stageTick)
+ if (keyframe.atTick > StageTick)
{ pawnKeyframe = keyframe; break; }
}
@@ -211,11 +209,9 @@ namespace RimWorldAnimationStudio
PawnKeyframe pawnKeyframe = null;
PawnAnimationClip clip = GetPawnAnimationClip(actorID);
- int stageTick = Workspace.StageTick;
-
foreach (PawnKeyframe keyframe in clip.Keyframes)
{
- if (keyframe.atTick < stageTick)
+ if (keyframe.atTick < StageTick)
{ pawnKeyframe = keyframe; }
}
@@ -227,11 +223,9 @@ namespace RimWorldAnimationStudio
PawnKeyframe pawnKeyframe = null;
PawnAnimationClip clip = GetPawnAnimationClip(actorID);
- int stageTick = Workspace.StageTick;
-
foreach (PawnKeyframe keyframe in clip.Keyframes)
{
- if (keyframe.atTick <= stageTick)
+ if (keyframe.atTick <= StageTick)
{ pawnKeyframe = keyframe; }
}
@@ -310,7 +304,6 @@ namespace RimWorldAnimationStudio
animationDef = record.animationDef.Copy();
StageID = record.stageID;
- AnimationController.Instance.MakeTimelineDirty();
StageCardManager.Instance.Initialize();
}
@@ -327,7 +320,7 @@ namespace RimWorldAnimationStudio
RestoreToHistoricRecord(recordToRead);
Debug.Log("Undoing : " + recordToStore.eventDesc);
- EventsManager.OnAnimationDefChanged();
+ EventsManager.OnAnimationChanged();
}
public static void Redo()
@@ -342,7 +335,7 @@ namespace RimWorldAnimationStudio
RestoreToHistoricRecord(recordToReadAndStore);
Debug.Log("Redoing : " + recordToReadAndStore.eventDesc);
- EventsManager.OnAnimationDefChanged();
+ EventsManager.OnAnimationChanged();
}
public static void ClearHistory()
diff --git a/Library/ArtifactDB b/Library/ArtifactDB
index ea65b6fd..40eaf917 100644
Binary files a/Library/ArtifactDB and b/Library/ArtifactDB differ
diff --git a/Library/Artifacts/00/0027cb53ba0c6636a5ec422fbac2ed82 b/Library/Artifacts/00/0027cb53ba0c6636a5ec422fbac2ed82
deleted file mode 100644
index 46304fb7..00000000
Binary files a/Library/Artifacts/00/0027cb53ba0c6636a5ec422fbac2ed82 and /dev/null differ
diff --git a/Library/Artifacts/66/66b122f5842cca4183f0d5009caa1327 b/Library/Artifacts/01/0168a2e695761cb5dcf91d869225bcd3
similarity index 93%
rename from Library/Artifacts/66/66b122f5842cca4183f0d5009caa1327
rename to Library/Artifacts/01/0168a2e695761cb5dcf91d869225bcd3
index d7bc2836..c54f0065 100644
Binary files a/Library/Artifacts/66/66b122f5842cca4183f0d5009caa1327 and b/Library/Artifacts/01/0168a2e695761cb5dcf91d869225bcd3 differ
diff --git a/Library/Artifacts/05/05ad68c281bd54caa4fa4000f5f9c92d b/Library/Artifacts/05/05ad68c281bd54caa4fa4000f5f9c92d
new file mode 100644
index 00000000..5d3c96fc
Binary files /dev/null and b/Library/Artifacts/05/05ad68c281bd54caa4fa4000f5f9c92d differ
diff --git a/Library/Artifacts/05/05d40869a880f0cdfc62d514be500749 b/Library/Artifacts/05/05d40869a880f0cdfc62d514be500749
new file mode 100644
index 00000000..5608d459
Binary files /dev/null and b/Library/Artifacts/05/05d40869a880f0cdfc62d514be500749 differ
diff --git a/Library/Artifacts/50/50a64145390f825ee8b2b9fbc3c69335 b/Library/Artifacts/06/06d5e9f9cadfc67456bdd567dab98fa9
similarity index 89%
rename from Library/Artifacts/50/50a64145390f825ee8b2b9fbc3c69335
rename to Library/Artifacts/06/06d5e9f9cadfc67456bdd567dab98fa9
index 49ed042f..60bb97d1 100644
Binary files a/Library/Artifacts/50/50a64145390f825ee8b2b9fbc3c69335 and b/Library/Artifacts/06/06d5e9f9cadfc67456bdd567dab98fa9 differ
diff --git a/Library/Artifacts/07/07fde1c2452eb27afe21fbcd8504fc91 b/Library/Artifacts/07/07fde1c2452eb27afe21fbcd8504fc91
deleted file mode 100644
index 0b8b634b..00000000
Binary files a/Library/Artifacts/07/07fde1c2452eb27afe21fbcd8504fc91 and /dev/null differ
diff --git a/Library/Artifacts/08/085178422e4479afa28168cfe7de0e16 b/Library/Artifacts/08/085178422e4479afa28168cfe7de0e16
deleted file mode 100644
index 8b722aed..00000000
Binary files a/Library/Artifacts/08/085178422e4479afa28168cfe7de0e16 and /dev/null differ
diff --git a/Library/Artifacts/08/08e27f70105584f4d9ab2dc8dc9249d9 b/Library/Artifacts/08/08e27f70105584f4d9ab2dc8dc9249d9
new file mode 100644
index 00000000..fb0035b2
Binary files /dev/null and b/Library/Artifacts/08/08e27f70105584f4d9ab2dc8dc9249d9 differ
diff --git a/Library/Artifacts/0a/0a7cc2dbd61b9a1657802bd704f4b7f1 b/Library/Artifacts/0a/0a7cc2dbd61b9a1657802bd704f4b7f1
new file mode 100644
index 00000000..d89a5df4
Binary files /dev/null and b/Library/Artifacts/0a/0a7cc2dbd61b9a1657802bd704f4b7f1 differ
diff --git a/Library/Artifacts/0b/0b67a1c17136bd9afa79e057edf21c7c b/Library/Artifacts/0b/0b67a1c17136bd9afa79e057edf21c7c
new file mode 100644
index 00000000..9b51ca43
Binary files /dev/null and b/Library/Artifacts/0b/0b67a1c17136bd9afa79e057edf21c7c differ
diff --git a/Library/Artifacts/0c/0c7accbfac2bf14bb7674f01e728f3a7 b/Library/Artifacts/0c/0c7accbfac2bf14bb7674f01e728f3a7
deleted file mode 100644
index 5f9523d6..00000000
Binary files a/Library/Artifacts/0c/0c7accbfac2bf14bb7674f01e728f3a7 and /dev/null differ
diff --git a/Library/Artifacts/0c/0c8739cd590d104e54c127427a4b6a27 b/Library/Artifacts/0c/0c8739cd590d104e54c127427a4b6a27
deleted file mode 100644
index 1af77f91..00000000
Binary files a/Library/Artifacts/0c/0c8739cd590d104e54c127427a4b6a27 and /dev/null differ
diff --git a/Library/Artifacts/0c/0caea0aa396b9c2fb62d0b9bb3b9746f b/Library/Artifacts/0c/0caea0aa396b9c2fb62d0b9bb3b9746f
deleted file mode 100644
index 4294807d..00000000
Binary files a/Library/Artifacts/0c/0caea0aa396b9c2fb62d0b9bb3b9746f and /dev/null differ
diff --git a/Library/Artifacts/85/858b519f42847f1f0375aad5c12ff9e5 b/Library/Artifacts/0c/0ce712a9cbf8d8a453830731f126d39c
similarity index 92%
rename from Library/Artifacts/85/858b519f42847f1f0375aad5c12ff9e5
rename to Library/Artifacts/0c/0ce712a9cbf8d8a453830731f126d39c
index a00dbbbf..a9f2c682 100644
Binary files a/Library/Artifacts/85/858b519f42847f1f0375aad5c12ff9e5 and b/Library/Artifacts/0c/0ce712a9cbf8d8a453830731f126d39c differ
diff --git a/Library/Artifacts/0e/0ed2550ae64a07d9579a63864a809b7d b/Library/Artifacts/0e/0ed2550ae64a07d9579a63864a809b7d
new file mode 100644
index 00000000..9573b6ca
Binary files /dev/null and b/Library/Artifacts/0e/0ed2550ae64a07d9579a63864a809b7d differ
diff --git a/Library/Artifacts/bb/bb489ecbb333b263ea941f2011fcadbe b/Library/Artifacts/0f/0f686fec4e19e48653609a6451ecdc29
similarity index 90%
rename from Library/Artifacts/bb/bb489ecbb333b263ea941f2011fcadbe
rename to Library/Artifacts/0f/0f686fec4e19e48653609a6451ecdc29
index c80beea0..2bed0fbe 100644
Binary files a/Library/Artifacts/bb/bb489ecbb333b263ea941f2011fcadbe and b/Library/Artifacts/0f/0f686fec4e19e48653609a6451ecdc29 differ
diff --git a/Library/Artifacts/0f/0fcf8c0d3cc76769c9837c7b6630f3f3 b/Library/Artifacts/0f/0fcf8c0d3cc76769c9837c7b6630f3f3
new file mode 100644
index 00000000..1864461b
Binary files /dev/null and b/Library/Artifacts/0f/0fcf8c0d3cc76769c9837c7b6630f3f3 differ
diff --git a/Library/Artifacts/ab/ab3ed0ac05de3443ab38665f5770609b b/Library/Artifacts/11/11526600dfd7ab30f57c2e48e34eb78c
similarity index 75%
rename from Library/Artifacts/ab/ab3ed0ac05de3443ab38665f5770609b
rename to Library/Artifacts/11/11526600dfd7ab30f57c2e48e34eb78c
index 2f1de928..722f6c3b 100644
Binary files a/Library/Artifacts/ab/ab3ed0ac05de3443ab38665f5770609b and b/Library/Artifacts/11/11526600dfd7ab30f57c2e48e34eb78c differ
diff --git a/Library/Artifacts/80/8077836a8f0f5d082208169cd6d30ea9 b/Library/Artifacts/12/124a2fe5d65c30ce8a1859fc1facc37e
similarity index 68%
rename from Library/Artifacts/80/8077836a8f0f5d082208169cd6d30ea9
rename to Library/Artifacts/12/124a2fe5d65c30ce8a1859fc1facc37e
index 9e3046d7..fe1697b1 100644
Binary files a/Library/Artifacts/80/8077836a8f0f5d082208169cd6d30ea9 and b/Library/Artifacts/12/124a2fe5d65c30ce8a1859fc1facc37e differ
diff --git a/Library/Artifacts/13/133c1343c2be5a5ef3fae879ca5bed15 b/Library/Artifacts/13/133c1343c2be5a5ef3fae879ca5bed15
new file mode 100644
index 00000000..2bd2119b
Binary files /dev/null and b/Library/Artifacts/13/133c1343c2be5a5ef3fae879ca5bed15 differ
diff --git a/Library/Artifacts/14/1488b3d8d5e48285bc90505a763a0772 b/Library/Artifacts/14/1488b3d8d5e48285bc90505a763a0772
new file mode 100644
index 00000000..253b3570
Binary files /dev/null and b/Library/Artifacts/14/1488b3d8d5e48285bc90505a763a0772 differ
diff --git a/Library/Artifacts/ed/edd2a71b758d6a6babeab68f11fa61f1 b/Library/Artifacts/16/1687a43cbccb81d83a957abed68b296f
similarity index 90%
rename from Library/Artifacts/ed/edd2a71b758d6a6babeab68f11fa61f1
rename to Library/Artifacts/16/1687a43cbccb81d83a957abed68b296f
index 58ef3196..05486e24 100644
Binary files a/Library/Artifacts/ed/edd2a71b758d6a6babeab68f11fa61f1 and b/Library/Artifacts/16/1687a43cbccb81d83a957abed68b296f differ
diff --git a/Library/Artifacts/17/17388a70976ec90c6b6bccd347412218 b/Library/Artifacts/17/17388a70976ec90c6b6bccd347412218
new file mode 100644
index 00000000..4c1e3302
Binary files /dev/null and b/Library/Artifacts/17/17388a70976ec90c6b6bccd347412218 differ
diff --git a/Library/Artifacts/1b/1b280738486ca03fb83f4c3d6204b407 b/Library/Artifacts/1b/1b280738486ca03fb83f4c3d6204b407
new file mode 100644
index 00000000..498624c1
Binary files /dev/null and b/Library/Artifacts/1b/1b280738486ca03fb83f4c3d6204b407 differ
diff --git a/Library/Artifacts/1b/1b8228a0ec5a49534dc02236522609eb b/Library/Artifacts/1b/1b8228a0ec5a49534dc02236522609eb
new file mode 100644
index 00000000..1ea0fae2
Binary files /dev/null and b/Library/Artifacts/1b/1b8228a0ec5a49534dc02236522609eb differ
diff --git a/Library/Artifacts/33/3354b778f99cc1e753c7117fe7244bb1 b/Library/Artifacts/1c/1c0611b62fec2abfce4536e5ed15c80e
similarity index 87%
rename from Library/Artifacts/33/3354b778f99cc1e753c7117fe7244bb1
rename to Library/Artifacts/1c/1c0611b62fec2abfce4536e5ed15c80e
index 53b5f931..9a9678a8 100644
Binary files a/Library/Artifacts/33/3354b778f99cc1e753c7117fe7244bb1 and b/Library/Artifacts/1c/1c0611b62fec2abfce4536e5ed15c80e differ
diff --git a/Library/Artifacts/20/20946a2fa7004b2e5216c07df5199e71 b/Library/Artifacts/1c/1ce9276bfedf59f68c53be96714279d5
similarity index 68%
rename from Library/Artifacts/20/20946a2fa7004b2e5216c07df5199e71
rename to Library/Artifacts/1c/1ce9276bfedf59f68c53be96714279d5
index ed60fc0d..006d1a67 100644
Binary files a/Library/Artifacts/20/20946a2fa7004b2e5216c07df5199e71 and b/Library/Artifacts/1c/1ce9276bfedf59f68c53be96714279d5 differ
diff --git a/Library/Artifacts/1e/1e8456072527d971fab7dbd8d841ea75 b/Library/Artifacts/1e/1e8456072527d971fab7dbd8d841ea75
new file mode 100644
index 00000000..54b6caea
Binary files /dev/null and b/Library/Artifacts/1e/1e8456072527d971fab7dbd8d841ea75 differ
diff --git a/Library/Artifacts/1f/1ff46d39cbf3665262f47411f1d0d2b6 b/Library/Artifacts/1f/1ff46d39cbf3665262f47411f1d0d2b6
new file mode 100644
index 00000000..5ef1e725
Binary files /dev/null and b/Library/Artifacts/1f/1ff46d39cbf3665262f47411f1d0d2b6 differ
diff --git a/Library/Artifacts/23/23bc926a0c6b9ba04ea361185c740f21 b/Library/Artifacts/23/23bc926a0c6b9ba04ea361185c740f21
new file mode 100644
index 00000000..82615f1a
Binary files /dev/null and b/Library/Artifacts/23/23bc926a0c6b9ba04ea361185c740f21 differ
diff --git a/Library/Artifacts/f0/f0371e9af91efd80bd236bafcf284862 b/Library/Artifacts/23/23cda1775f6e6cfe614a6e2311179663
similarity index 79%
rename from Library/Artifacts/f0/f0371e9af91efd80bd236bafcf284862
rename to Library/Artifacts/23/23cda1775f6e6cfe614a6e2311179663
index 9b6145c5..93fddbbd 100644
Binary files a/Library/Artifacts/f0/f0371e9af91efd80bd236bafcf284862 and b/Library/Artifacts/23/23cda1775f6e6cfe614a6e2311179663 differ
diff --git a/Library/Artifacts/25/25302e2dccc0e213f900291a81c3689c b/Library/Artifacts/25/25302e2dccc0e213f900291a81c3689c
new file mode 100644
index 00000000..5f7dceee
Binary files /dev/null and b/Library/Artifacts/25/25302e2dccc0e213f900291a81c3689c differ
diff --git a/Library/Artifacts/a9/a929d521d0780880c964fd0d3de905f2 b/Library/Artifacts/27/277262088fbc255bc77a1a28d238e23c
similarity index 93%
rename from Library/Artifacts/a9/a929d521d0780880c964fd0d3de905f2
rename to Library/Artifacts/27/277262088fbc255bc77a1a28d238e23c
index 710eaeda..11caf930 100644
Binary files a/Library/Artifacts/a9/a929d521d0780880c964fd0d3de905f2 and b/Library/Artifacts/27/277262088fbc255bc77a1a28d238e23c differ
diff --git a/Library/Artifacts/28/28003a33a95100d9956dfbdb10ccdf10 b/Library/Artifacts/28/28003a33a95100d9956dfbdb10ccdf10
new file mode 100644
index 00000000..f0acd520
Binary files /dev/null and b/Library/Artifacts/28/28003a33a95100d9956dfbdb10ccdf10 differ
diff --git a/Library/Artifacts/af/af1ba00bcd3b54e607fb4fd6ba862fce b/Library/Artifacts/28/28473a64b7d16278f4fc147d3730f40a
similarity index 68%
rename from Library/Artifacts/af/af1ba00bcd3b54e607fb4fd6ba862fce
rename to Library/Artifacts/28/28473a64b7d16278f4fc147d3730f40a
index 1d1335be..edd9aa49 100644
Binary files a/Library/Artifacts/af/af1ba00bcd3b54e607fb4fd6ba862fce and b/Library/Artifacts/28/28473a64b7d16278f4fc147d3730f40a differ
diff --git a/Library/Artifacts/ea/eadf674d8304672684a075b7abe0f02e b/Library/Artifacts/28/28c3ceff69864ebf8a58881bf4a7a663
similarity index 93%
rename from Library/Artifacts/ea/eadf674d8304672684a075b7abe0f02e
rename to Library/Artifacts/28/28c3ceff69864ebf8a58881bf4a7a663
index 9768460a..1fe27e2f 100644
Binary files a/Library/Artifacts/ea/eadf674d8304672684a075b7abe0f02e and b/Library/Artifacts/28/28c3ceff69864ebf8a58881bf4a7a663 differ
diff --git a/Library/Artifacts/29/2954690bf6a0166cc4c4250f458a94c4 b/Library/Artifacts/29/2954690bf6a0166cc4c4250f458a94c4
new file mode 100644
index 00000000..cfec5d98
Binary files /dev/null and b/Library/Artifacts/29/2954690bf6a0166cc4c4250f458a94c4 differ
diff --git a/Library/Artifacts/29/29d7823a9cabaf3c81afadbec7320985 b/Library/Artifacts/29/29d7823a9cabaf3c81afadbec7320985
new file mode 100644
index 00000000..f2196acf
Binary files /dev/null and b/Library/Artifacts/29/29d7823a9cabaf3c81afadbec7320985 differ
diff --git a/Library/Artifacts/2d/2d6d6d28932733e02697cded1902cc67 b/Library/Artifacts/2d/2d6d6d28932733e02697cded1902cc67
new file mode 100644
index 00000000..837d6733
Binary files /dev/null and b/Library/Artifacts/2d/2d6d6d28932733e02697cded1902cc67 differ
diff --git a/Library/Artifacts/2f/2f91f2435e3fa541a93a827e35f7f3a2 b/Library/Artifacts/2f/2f91f2435e3fa541a93a827e35f7f3a2
new file mode 100644
index 00000000..5ba23c19
Binary files /dev/null and b/Library/Artifacts/2f/2f91f2435e3fa541a93a827e35f7f3a2 differ
diff --git a/Library/Artifacts/32/32db8c8b40211c54a7a3d64afdf5f1ff b/Library/Artifacts/32/32db8c8b40211c54a7a3d64afdf5f1ff
new file mode 100644
index 00000000..7c94f381
Binary files /dev/null and b/Library/Artifacts/32/32db8c8b40211c54a7a3d64afdf5f1ff differ
diff --git a/Library/Artifacts/35/35e203d048e16e9e759001f0069f891a b/Library/Artifacts/35/35e203d048e16e9e759001f0069f891a
new file mode 100644
index 00000000..2f7badaa
Binary files /dev/null and b/Library/Artifacts/35/35e203d048e16e9e759001f0069f891a differ
diff --git a/Library/Artifacts/38/38b774042e0ea1ef3fda8c679d1a26d6 b/Library/Artifacts/38/38b774042e0ea1ef3fda8c679d1a26d6
new file mode 100644
index 00000000..27730808
Binary files /dev/null and b/Library/Artifacts/38/38b774042e0ea1ef3fda8c679d1a26d6 differ
diff --git a/Library/Artifacts/38/38f747d653db8eef1519541af3cd2306 b/Library/Artifacts/38/38f747d653db8eef1519541af3cd2306
deleted file mode 100644
index 0410c488..00000000
Binary files a/Library/Artifacts/38/38f747d653db8eef1519541af3cd2306 and /dev/null differ
diff --git a/Library/Artifacts/39/39699d27989ae7571067707c63c95428 b/Library/Artifacts/39/39699d27989ae7571067707c63c95428
new file mode 100644
index 00000000..e71c4d95
Binary files /dev/null and b/Library/Artifacts/39/39699d27989ae7571067707c63c95428 differ
diff --git a/Library/Artifacts/0d/0df543ee31ea4d33fc0c82c39a05f492 b/Library/Artifacts/39/39c1a10ff1acdbaa6546285a4cd9a61b
similarity index 91%
rename from Library/Artifacts/0d/0df543ee31ea4d33fc0c82c39a05f492
rename to Library/Artifacts/39/39c1a10ff1acdbaa6546285a4cd9a61b
index 78f46b27..c56a3613 100644
Binary files a/Library/Artifacts/0d/0df543ee31ea4d33fc0c82c39a05f492 and b/Library/Artifacts/39/39c1a10ff1acdbaa6546285a4cd9a61b differ
diff --git a/Library/Artifacts/3e/3e8f5bc95adea8eb7dc938a3a840b9b4 b/Library/Artifacts/3e/3e8f5bc95adea8eb7dc938a3a840b9b4
new file mode 100644
index 00000000..30d0ef4d
Binary files /dev/null and b/Library/Artifacts/3e/3e8f5bc95adea8eb7dc938a3a840b9b4 differ
diff --git a/Library/Artifacts/3e/3ec17e71dc4a75090372b92b617b45ea b/Library/Artifacts/3e/3ec17e71dc4a75090372b92b617b45ea
new file mode 100644
index 00000000..1a3b64d8
Binary files /dev/null and b/Library/Artifacts/3e/3ec17e71dc4a75090372b92b617b45ea differ
diff --git a/Library/Artifacts/3e/3ee67d544fcb265af9b8322b49eee6f5 b/Library/Artifacts/3e/3ee67d544fcb265af9b8322b49eee6f5
deleted file mode 100644
index 634663cf..00000000
Binary files a/Library/Artifacts/3e/3ee67d544fcb265af9b8322b49eee6f5 and /dev/null differ
diff --git a/Library/Artifacts/41/419ded9da1895da224cf4f7a6c9ee227 b/Library/Artifacts/41/419ded9da1895da224cf4f7a6c9ee227
new file mode 100644
index 00000000..7d6b6c0f
Binary files /dev/null and b/Library/Artifacts/41/419ded9da1895da224cf4f7a6c9ee227 differ
diff --git a/Library/Artifacts/41/41a31b67d9d9f20452c18241f45660ad b/Library/Artifacts/41/41a31b67d9d9f20452c18241f45660ad
new file mode 100644
index 00000000..0f3851b3
Binary files /dev/null and b/Library/Artifacts/41/41a31b67d9d9f20452c18241f45660ad differ
diff --git a/Library/Artifacts/42/42921da555d0fc8eb7495f8e0a710cf1 b/Library/Artifacts/42/42921da555d0fc8eb7495f8e0a710cf1
new file mode 100644
index 00000000..8d01492c
Binary files /dev/null and b/Library/Artifacts/42/42921da555d0fc8eb7495f8e0a710cf1 differ
diff --git a/Library/Artifacts/42/42e27dc25a9bb827b9bb7edd679a1d80 b/Library/Artifacts/42/42e27dc25a9bb827b9bb7edd679a1d80
new file mode 100644
index 00000000..45a2ec53
Binary files /dev/null and b/Library/Artifacts/42/42e27dc25a9bb827b9bb7edd679a1d80 differ
diff --git a/Library/Artifacts/45/450f76bae16098d55d150195f57d2c50 b/Library/Artifacts/45/450f76bae16098d55d150195f57d2c50
new file mode 100644
index 00000000..94c02aef
Binary files /dev/null and b/Library/Artifacts/45/450f76bae16098d55d150195f57d2c50 differ
diff --git a/Library/Artifacts/84/84d53ed6f63721723ac2dcada6a05241 b/Library/Artifacts/46/46f07913f84998d7f3668c50f2ec7f03
similarity index 52%
rename from Library/Artifacts/84/84d53ed6f63721723ac2dcada6a05241
rename to Library/Artifacts/46/46f07913f84998d7f3668c50f2ec7f03
index 32635de8..f6a3de27 100644
Binary files a/Library/Artifacts/84/84d53ed6f63721723ac2dcada6a05241 and b/Library/Artifacts/46/46f07913f84998d7f3668c50f2ec7f03 differ
diff --git a/Library/Artifacts/4a/4a14f9a83fadbe66de22e4715dbc3e93 b/Library/Artifacts/4a/4a14f9a83fadbe66de22e4715dbc3e93
deleted file mode 100644
index a31ed2b4..00000000
Binary files a/Library/Artifacts/4a/4a14f9a83fadbe66de22e4715dbc3e93 and /dev/null differ
diff --git a/Library/Artifacts/4a/4a67f0723df38fef31a03efc9b8cba8d b/Library/Artifacts/4a/4a67f0723df38fef31a03efc9b8cba8d
new file mode 100644
index 00000000..76ff9fad
Binary files /dev/null and b/Library/Artifacts/4a/4a67f0723df38fef31a03efc9b8cba8d differ
diff --git a/Library/Artifacts/31/31d2f0b77d3a470410e1cf13e5a42652 b/Library/Artifacts/4c/4c067678f767cdeef6792c26af139aa2
similarity index 98%
rename from Library/Artifacts/31/31d2f0b77d3a470410e1cf13e5a42652
rename to Library/Artifacts/4c/4c067678f767cdeef6792c26af139aa2
index a7cdb2bd..db610dcc 100644
Binary files a/Library/Artifacts/31/31d2f0b77d3a470410e1cf13e5a42652 and b/Library/Artifacts/4c/4c067678f767cdeef6792c26af139aa2 differ
diff --git a/Library/Artifacts/4c/4caae8653baf67ecf2d83e6559a82828 b/Library/Artifacts/4c/4caae8653baf67ecf2d83e6559a82828
new file mode 100644
index 00000000..5cb67ee2
Binary files /dev/null and b/Library/Artifacts/4c/4caae8653baf67ecf2d83e6559a82828 differ
diff --git a/Library/Artifacts/4d/4de547e45f62ed384c2ec1465e00db3f b/Library/Artifacts/4d/4de547e45f62ed384c2ec1465e00db3f
new file mode 100644
index 00000000..0247af70
Binary files /dev/null and b/Library/Artifacts/4d/4de547e45f62ed384c2ec1465e00db3f differ
diff --git a/Library/Artifacts/db/dbf3ec5c8bf66a6c0438cb5b5d3c85ce b/Library/Artifacts/50/5060228b11eb43a196ea4eb9f71c02eb
similarity index 97%
rename from Library/Artifacts/db/dbf3ec5c8bf66a6c0438cb5b5d3c85ce
rename to Library/Artifacts/50/5060228b11eb43a196ea4eb9f71c02eb
index 0e1471e9..785f4263 100644
Binary files a/Library/Artifacts/db/dbf3ec5c8bf66a6c0438cb5b5d3c85ce and b/Library/Artifacts/50/5060228b11eb43a196ea4eb9f71c02eb differ
diff --git a/Library/Artifacts/50/50bdb3ba0f2272b9330bad100d377959 b/Library/Artifacts/50/50bdb3ba0f2272b9330bad100d377959
deleted file mode 100644
index 87c6dd29..00000000
Binary files a/Library/Artifacts/50/50bdb3ba0f2272b9330bad100d377959 and /dev/null differ
diff --git a/Library/Artifacts/51/512c5c83207dd9de86e7e5c28bfa4431 b/Library/Artifacts/51/512c5c83207dd9de86e7e5c28bfa4431
new file mode 100644
index 00000000..ea5dca12
Binary files /dev/null and b/Library/Artifacts/51/512c5c83207dd9de86e7e5c28bfa4431 differ
diff --git a/Library/Artifacts/52/52557b52ce59bc7394de4806ab52faf1 b/Library/Artifacts/52/52557b52ce59bc7394de4806ab52faf1
new file mode 100644
index 00000000..2e90542c
Binary files /dev/null and b/Library/Artifacts/52/52557b52ce59bc7394de4806ab52faf1 differ
diff --git a/Library/Artifacts/54/54534aac997566aa9d8e104ab5cec8da b/Library/Artifacts/54/54534aac997566aa9d8e104ab5cec8da
new file mode 100644
index 00000000..bd691329
Binary files /dev/null and b/Library/Artifacts/54/54534aac997566aa9d8e104ab5cec8da differ
diff --git a/Library/Artifacts/5d/5d1489e74deecc1b0b55462cf2d44def b/Library/Artifacts/56/561ff4992e8978116bac283968c9f98c
similarity index 95%
rename from Library/Artifacts/5d/5d1489e74deecc1b0b55462cf2d44def
rename to Library/Artifacts/56/561ff4992e8978116bac283968c9f98c
index b0cf2822..e2b2e26e 100644
Binary files a/Library/Artifacts/5d/5d1489e74deecc1b0b55462cf2d44def and b/Library/Artifacts/56/561ff4992e8978116bac283968c9f98c differ
diff --git a/Library/Artifacts/57/572b149842bb1e9d787fba352b25debb b/Library/Artifacts/57/572b149842bb1e9d787fba352b25debb
deleted file mode 100644
index 0e7e5d15..00000000
Binary files a/Library/Artifacts/57/572b149842bb1e9d787fba352b25debb and /dev/null differ
diff --git a/Library/Artifacts/57/5781cff7f6d8d859501a9ca7c20623f3 b/Library/Artifacts/57/5781cff7f6d8d859501a9ca7c20623f3
new file mode 100644
index 00000000..10cdec74
Binary files /dev/null and b/Library/Artifacts/57/5781cff7f6d8d859501a9ca7c20623f3 differ
diff --git a/Library/Artifacts/59/59324be8e013b81f3671c3513df71d2d b/Library/Artifacts/59/59324be8e013b81f3671c3513df71d2d
new file mode 100644
index 00000000..d6a9ee91
Binary files /dev/null and b/Library/Artifacts/59/59324be8e013b81f3671c3513df71d2d differ
diff --git a/Library/Artifacts/59/597eb5765ebdcdbe4c11579f3aa0a4b6 b/Library/Artifacts/59/597eb5765ebdcdbe4c11579f3aa0a4b6
new file mode 100644
index 00000000..670ee1ed
Binary files /dev/null and b/Library/Artifacts/59/597eb5765ebdcdbe4c11579f3aa0a4b6 differ
diff --git a/Library/Artifacts/5c/5cacadb257b4fb225da711da76bb1212 b/Library/Artifacts/5c/5cacadb257b4fb225da711da76bb1212
new file mode 100644
index 00000000..48dd90a8
Binary files /dev/null and b/Library/Artifacts/5c/5cacadb257b4fb225da711da76bb1212 differ
diff --git a/Library/Artifacts/5d/5d8924bb952a95b9388212f7c1fd0c85 b/Library/Artifacts/5d/5d8924bb952a95b9388212f7c1fd0c85
new file mode 100644
index 00000000..f2e88ccd
Binary files /dev/null and b/Library/Artifacts/5d/5d8924bb952a95b9388212f7c1fd0c85 differ
diff --git a/Library/Artifacts/5e/5e9ce2b94d57ae495179d7a7fae9ce48 b/Library/Artifacts/5e/5e9ce2b94d57ae495179d7a7fae9ce48
new file mode 100644
index 00000000..a44e33c4
Binary files /dev/null and b/Library/Artifacts/5e/5e9ce2b94d57ae495179d7a7fae9ce48 differ
diff --git a/Library/Artifacts/5e/5ea692c7ad5a0c7771e31bd8cebfc8a6 b/Library/Artifacts/5e/5ea692c7ad5a0c7771e31bd8cebfc8a6
deleted file mode 100644
index c631e6b7..00000000
Binary files a/Library/Artifacts/5e/5ea692c7ad5a0c7771e31bd8cebfc8a6 and /dev/null differ
diff --git a/Library/Artifacts/61/612b4c3566e379d40d2305f11ec17025 b/Library/Artifacts/61/612b4c3566e379d40d2305f11ec17025
new file mode 100644
index 00000000..7c65d40a
Binary files /dev/null and b/Library/Artifacts/61/612b4c3566e379d40d2305f11ec17025 differ
diff --git a/Library/Artifacts/61/615e3795ca9bcb55000f294a769d8f4c b/Library/Artifacts/61/615e3795ca9bcb55000f294a769d8f4c
new file mode 100644
index 00000000..3ab550a3
Binary files /dev/null and b/Library/Artifacts/61/615e3795ca9bcb55000f294a769d8f4c differ
diff --git a/Library/Artifacts/62/62c4fa679f42a53182621822ec59bf1c b/Library/Artifacts/62/62c4fa679f42a53182621822ec59bf1c
new file mode 100644
index 00000000..dd910968
Binary files /dev/null and b/Library/Artifacts/62/62c4fa679f42a53182621822ec59bf1c differ
diff --git a/Library/Artifacts/62/62dd0f7b6ddaa9efd4249151ec13e012 b/Library/Artifacts/62/62dd0f7b6ddaa9efd4249151ec13e012
deleted file mode 100644
index da0273e3..00000000
Binary files a/Library/Artifacts/62/62dd0f7b6ddaa9efd4249151ec13e012 and /dev/null differ
diff --git a/Library/Artifacts/63/636c156ec8f9222892f2956bd39403b4 b/Library/Artifacts/63/636c156ec8f9222892f2956bd39403b4
new file mode 100644
index 00000000..93017d3f
Binary files /dev/null and b/Library/Artifacts/63/636c156ec8f9222892f2956bd39403b4 differ
diff --git a/Library/Artifacts/64/64ecb5ea5c65bdca7f3477d50981ab92 b/Library/Artifacts/64/64ecb5ea5c65bdca7f3477d50981ab92
deleted file mode 100644
index 70371933..00000000
Binary files a/Library/Artifacts/64/64ecb5ea5c65bdca7f3477d50981ab92 and /dev/null differ
diff --git a/Library/Artifacts/99/99002924e8668972c17697fb65a198a8 b/Library/Artifacts/65/65abfb605629a4847fbf8bd2f7704b5f
similarity index 53%
rename from Library/Artifacts/99/99002924e8668972c17697fb65a198a8
rename to Library/Artifacts/65/65abfb605629a4847fbf8bd2f7704b5f
index 017383da..37baeb8a 100644
Binary files a/Library/Artifacts/99/99002924e8668972c17697fb65a198a8 and b/Library/Artifacts/65/65abfb605629a4847fbf8bd2f7704b5f differ
diff --git a/Library/Artifacts/69/694040adaa7d7dfa92cb3759459f0688 b/Library/Artifacts/69/694040adaa7d7dfa92cb3759459f0688
new file mode 100644
index 00000000..9103f0d0
Binary files /dev/null and b/Library/Artifacts/69/694040adaa7d7dfa92cb3759459f0688 differ
diff --git a/Library/Artifacts/5a/5a73eba595fc7798a349f35671da608b b/Library/Artifacts/69/6995137658d32078cffe108d53e799d8
similarity index 96%
rename from Library/Artifacts/5a/5a73eba595fc7798a349f35671da608b
rename to Library/Artifacts/69/6995137658d32078cffe108d53e799d8
index cd169be3..b8ffadd3 100644
Binary files a/Library/Artifacts/5a/5a73eba595fc7798a349f35671da608b and b/Library/Artifacts/69/6995137658d32078cffe108d53e799d8 differ
diff --git a/Library/Artifacts/6b/6b8219dc2b0561f78e49c194d47e7aad b/Library/Artifacts/6b/6b8219dc2b0561f78e49c194d47e7aad
new file mode 100644
index 00000000..35d113c4
Binary files /dev/null and b/Library/Artifacts/6b/6b8219dc2b0561f78e49c194d47e7aad differ
diff --git a/Library/Artifacts/6b/6bb8cf60a399c5da4980704ed847541f b/Library/Artifacts/6b/6bb8cf60a399c5da4980704ed847541f
new file mode 100644
index 00000000..d5a38e20
Binary files /dev/null and b/Library/Artifacts/6b/6bb8cf60a399c5da4980704ed847541f differ
diff --git a/Library/Artifacts/6d/6d8e7e960088816160bfd15026b0bdf6 b/Library/Artifacts/6d/6d8e7e960088816160bfd15026b0bdf6
deleted file mode 100644
index 1445b48f..00000000
Binary files a/Library/Artifacts/6d/6d8e7e960088816160bfd15026b0bdf6 and /dev/null differ
diff --git a/Library/Artifacts/72/72a148dcaa45bcd9dbe58a164ad10ed9 b/Library/Artifacts/72/72a148dcaa45bcd9dbe58a164ad10ed9
new file mode 100644
index 00000000..6c161da7
Binary files /dev/null and b/Library/Artifacts/72/72a148dcaa45bcd9dbe58a164ad10ed9 differ
diff --git a/Library/Artifacts/11/11095d5db6184bfa9d4cf6c0a29f157a b/Library/Artifacts/73/73f2b1d09594bc6bc445de2644f27e79
similarity index 91%
rename from Library/Artifacts/11/11095d5db6184bfa9d4cf6c0a29f157a
rename to Library/Artifacts/73/73f2b1d09594bc6bc445de2644f27e79
index 418fa126..9760b851 100644
Binary files a/Library/Artifacts/11/11095d5db6184bfa9d4cf6c0a29f157a and b/Library/Artifacts/73/73f2b1d09594bc6bc445de2644f27e79 differ
diff --git a/Library/Artifacts/77/7752e033620bc32d292327afd7b05288 b/Library/Artifacts/77/7752e033620bc32d292327afd7b05288
new file mode 100644
index 00000000..bfe0ca33
Binary files /dev/null and b/Library/Artifacts/77/7752e033620bc32d292327afd7b05288 differ
diff --git a/Library/Artifacts/78/789fca5305ac019829ee4312f61af7af b/Library/Artifacts/78/789fca5305ac019829ee4312f61af7af
new file mode 100644
index 00000000..1567836f
Binary files /dev/null and b/Library/Artifacts/78/789fca5305ac019829ee4312f61af7af differ
diff --git a/Library/Artifacts/79/7903532e0815ca4c99f98b372089ab47 b/Library/Artifacts/79/7903532e0815ca4c99f98b372089ab47
deleted file mode 100644
index a81db7c2..00000000
Binary files a/Library/Artifacts/79/7903532e0815ca4c99f98b372089ab47 and /dev/null differ
diff --git a/Library/Artifacts/ae/ae5ce04d6c18d23f396e95d1592db174 b/Library/Artifacts/7a/7a0c7e3c977b0d24a79fb6e367ea824b
similarity index 87%
rename from Library/Artifacts/ae/ae5ce04d6c18d23f396e95d1592db174
rename to Library/Artifacts/7a/7a0c7e3c977b0d24a79fb6e367ea824b
index b4ca8630..b557c410 100644
Binary files a/Library/Artifacts/ae/ae5ce04d6c18d23f396e95d1592db174 and b/Library/Artifacts/7a/7a0c7e3c977b0d24a79fb6e367ea824b differ
diff --git a/Library/Artifacts/7b/7b105e072ce99610d36ad170d4451ffd b/Library/Artifacts/7b/7b105e072ce99610d36ad170d4451ffd
new file mode 100644
index 00000000..f6847a79
Binary files /dev/null and b/Library/Artifacts/7b/7b105e072ce99610d36ad170d4451ffd differ
diff --git a/Library/Artifacts/16/1610538f1ce9097e63824d7c77e72906 b/Library/Artifacts/7f/7f15ecd6e02045fa0f777d0e21b6c0fb
similarity index 90%
rename from Library/Artifacts/16/1610538f1ce9097e63824d7c77e72906
rename to Library/Artifacts/7f/7f15ecd6e02045fa0f777d0e21b6c0fb
index 47467871..5a82514f 100644
Binary files a/Library/Artifacts/16/1610538f1ce9097e63824d7c77e72906 and b/Library/Artifacts/7f/7f15ecd6e02045fa0f777d0e21b6c0fb differ
diff --git a/Library/Artifacts/99/9991dcdb93b7af9c923288d50af3a59f b/Library/Artifacts/7f/7ffda39d138755ccd1dd229a1918e7f7
similarity index 75%
rename from Library/Artifacts/99/9991dcdb93b7af9c923288d50af3a59f
rename to Library/Artifacts/7f/7ffda39d138755ccd1dd229a1918e7f7
index 64e2bb57..940bc5b8 100644
Binary files a/Library/Artifacts/99/9991dcdb93b7af9c923288d50af3a59f and b/Library/Artifacts/7f/7ffda39d138755ccd1dd229a1918e7f7 differ
diff --git a/Library/Artifacts/b1/b1e2361ab9906f719638ba0256aa0c99 b/Library/Artifacts/80/804337ebaddfa117b0c29bcf8cb7ad01
similarity index 97%
rename from Library/Artifacts/b1/b1e2361ab9906f719638ba0256aa0c99
rename to Library/Artifacts/80/804337ebaddfa117b0c29bcf8cb7ad01
index e87716e1..0cdb8c9a 100644
Binary files a/Library/Artifacts/b1/b1e2361ab9906f719638ba0256aa0c99 and b/Library/Artifacts/80/804337ebaddfa117b0c29bcf8cb7ad01 differ
diff --git a/Library/Artifacts/80/80f482ef6133f069ea357e1a17da773f b/Library/Artifacts/80/80f482ef6133f069ea357e1a17da773f
new file mode 100644
index 00000000..37ba82ac
Binary files /dev/null and b/Library/Artifacts/80/80f482ef6133f069ea357e1a17da773f differ
diff --git a/Library/Artifacts/82/8277e75a78383b68c3be7d8b404e868c b/Library/Artifacts/82/8277e75a78383b68c3be7d8b404e868c
new file mode 100644
index 00000000..b96697a1
Binary files /dev/null and b/Library/Artifacts/82/8277e75a78383b68c3be7d8b404e868c differ
diff --git a/Library/Artifacts/82/829608b656e7c833da7bd5410701b5ca b/Library/Artifacts/82/829608b656e7c833da7bd5410701b5ca
new file mode 100644
index 00000000..4f4fae8e
Binary files /dev/null and b/Library/Artifacts/82/829608b656e7c833da7bd5410701b5ca differ
diff --git a/Library/Artifacts/83/83fd4c0041987eb7128e4339550dcdb2 b/Library/Artifacts/83/83fd4c0041987eb7128e4339550dcdb2
new file mode 100644
index 00000000..81ad82ba
Binary files /dev/null and b/Library/Artifacts/83/83fd4c0041987eb7128e4339550dcdb2 differ
diff --git a/Library/Artifacts/86/866fcd5df1d742d4013fb8e7a53dd141 b/Library/Artifacts/86/866fcd5df1d742d4013fb8e7a53dd141
new file mode 100644
index 00000000..e4f4ff82
Binary files /dev/null and b/Library/Artifacts/86/866fcd5df1d742d4013fb8e7a53dd141 differ
diff --git a/Library/Artifacts/87/878244047ed1bef113475ffea8d4017c b/Library/Artifacts/87/878244047ed1bef113475ffea8d4017c
new file mode 100644
index 00000000..aaaf9d5b
Binary files /dev/null and b/Library/Artifacts/87/878244047ed1bef113475ffea8d4017c differ
diff --git a/Library/Artifacts/88/88737adbe8a0db2c88fcf5fa426c9852 b/Library/Artifacts/88/88737adbe8a0db2c88fcf5fa426c9852
new file mode 100644
index 00000000..2a3d76ad
Binary files /dev/null and b/Library/Artifacts/88/88737adbe8a0db2c88fcf5fa426c9852 differ
diff --git a/Library/Artifacts/8d/8de93a9da2a311240a6af4646a3bc46f b/Library/Artifacts/8d/8de93a9da2a311240a6af4646a3bc46f
new file mode 100644
index 00000000..3e25c54f
Binary files /dev/null and b/Library/Artifacts/8d/8de93a9da2a311240a6af4646a3bc46f differ
diff --git a/Library/Artifacts/91/91c0c84843c9518a47b1ab83781c9969 b/Library/Artifacts/91/91c0c84843c9518a47b1ab83781c9969
new file mode 100644
index 00000000..4076ccdc
Binary files /dev/null and b/Library/Artifacts/91/91c0c84843c9518a47b1ab83781c9969 differ
diff --git a/Library/Artifacts/93/93105f762dbb794bc691ebb09bee2a96 b/Library/Artifacts/93/93105f762dbb794bc691ebb09bee2a96
deleted file mode 100644
index 2cea25ed..00000000
Binary files a/Library/Artifacts/93/93105f762dbb794bc691ebb09bee2a96 and /dev/null differ
diff --git a/Library/Artifacts/99/99232e726b70fac26a01638e3751b75f b/Library/Artifacts/99/99232e726b70fac26a01638e3751b75f
deleted file mode 100644
index 3f5cc6f5..00000000
Binary files a/Library/Artifacts/99/99232e726b70fac26a01638e3751b75f and /dev/null differ
diff --git a/Library/Artifacts/aa/aa8f8df0cfe247e9a168c4fa63b7f919 b/Library/Artifacts/9a/9a68d44afa2400fe0dadb18f2284a274
similarity index 55%
rename from Library/Artifacts/aa/aa8f8df0cfe247e9a168c4fa63b7f919
rename to Library/Artifacts/9a/9a68d44afa2400fe0dadb18f2284a274
index c1fef6af..5651384f 100644
Binary files a/Library/Artifacts/aa/aa8f8df0cfe247e9a168c4fa63b7f919 and b/Library/Artifacts/9a/9a68d44afa2400fe0dadb18f2284a274 differ
diff --git a/Library/Artifacts/4e/4e037fe46697280cde9c905749385e72 b/Library/Artifacts/9b/9b9ef59f2d0682c31ad66e3a618f235c
similarity index 92%
rename from Library/Artifacts/4e/4e037fe46697280cde9c905749385e72
rename to Library/Artifacts/9b/9b9ef59f2d0682c31ad66e3a618f235c
index 587f623f..0cc267e3 100644
Binary files a/Library/Artifacts/4e/4e037fe46697280cde9c905749385e72 and b/Library/Artifacts/9b/9b9ef59f2d0682c31ad66e3a618f235c differ
diff --git a/Library/Artifacts/9c/9c16d981db7cfc0a1902353678fa1c18 b/Library/Artifacts/9c/9c16d981db7cfc0a1902353678fa1c18
new file mode 100644
index 00000000..fda9a1b9
Binary files /dev/null and b/Library/Artifacts/9c/9c16d981db7cfc0a1902353678fa1c18 differ
diff --git a/Library/Artifacts/9c/9c6b491d61d526896ee3dc015955a210 b/Library/Artifacts/9c/9c6b491d61d526896ee3dc015955a210
new file mode 100644
index 00000000..899ddbe8
Binary files /dev/null and b/Library/Artifacts/9c/9c6b491d61d526896ee3dc015955a210 differ
diff --git a/Library/Artifacts/9c/9cf63e226eb8cf486c358ec7e309445e b/Library/Artifacts/9c/9cf63e226eb8cf486c358ec7e309445e
new file mode 100644
index 00000000..e6fc95a9
Binary files /dev/null and b/Library/Artifacts/9c/9cf63e226eb8cf486c358ec7e309445e differ
diff --git a/Library/Artifacts/9f/9f9128583ad095fbb2d1d76d32d29e5b b/Library/Artifacts/9f/9f9128583ad095fbb2d1d76d32d29e5b
new file mode 100644
index 00000000..1c545c92
Binary files /dev/null and b/Library/Artifacts/9f/9f9128583ad095fbb2d1d76d32d29e5b differ
diff --git a/Library/Artifacts/a0/a0c704042d112c29a4680f55638b916c b/Library/Artifacts/a0/a0c704042d112c29a4680f55638b916c
deleted file mode 100644
index 8f72cbf6..00000000
Binary files a/Library/Artifacts/a0/a0c704042d112c29a4680f55638b916c and /dev/null differ
diff --git a/Library/Artifacts/b2/b28b812b1c4b059bdbe08ec197b67b1b b/Library/Artifacts/a1/a11fab3425907a51c66f7baef23ea228
similarity index 94%
rename from Library/Artifacts/b2/b28b812b1c4b059bdbe08ec197b67b1b
rename to Library/Artifacts/a1/a11fab3425907a51c66f7baef23ea228
index 3e0f01f6..1e6f0968 100644
Binary files a/Library/Artifacts/b2/b28b812b1c4b059bdbe08ec197b67b1b and b/Library/Artifacts/a1/a11fab3425907a51c66f7baef23ea228 differ
diff --git a/Library/Artifacts/a3/a36ca1076aa2facbef00ba5b6f4c8922 b/Library/Artifacts/a3/a36ca1076aa2facbef00ba5b6f4c8922
new file mode 100644
index 00000000..d82929c4
Binary files /dev/null and b/Library/Artifacts/a3/a36ca1076aa2facbef00ba5b6f4c8922 differ
diff --git a/Library/Artifacts/a7/a75a1f402798cd684c34aab987edb6d9 b/Library/Artifacts/a7/a75a1f402798cd684c34aab987edb6d9
new file mode 100644
index 00000000..04b35ffa
Binary files /dev/null and b/Library/Artifacts/a7/a75a1f402798cd684c34aab987edb6d9 differ
diff --git a/Library/Artifacts/a8/a89f4f979a5b85b16f58d61d89c7b64e b/Library/Artifacts/a8/a89f4f979a5b85b16f58d61d89c7b64e
new file mode 100644
index 00000000..852a354b
Binary files /dev/null and b/Library/Artifacts/a8/a89f4f979a5b85b16f58d61d89c7b64e differ
diff --git a/Library/Artifacts/ef/ef628c714be4e202be07b343637c67e8 b/Library/Artifacts/a8/a8a9b05043ad37f2fcf37c9de134125d
similarity index 88%
rename from Library/Artifacts/ef/ef628c714be4e202be07b343637c67e8
rename to Library/Artifacts/a8/a8a9b05043ad37f2fcf37c9de134125d
index 2319a5b6..2b29ddda 100644
Binary files a/Library/Artifacts/ef/ef628c714be4e202be07b343637c67e8 and b/Library/Artifacts/a8/a8a9b05043ad37f2fcf37c9de134125d differ
diff --git a/Library/Artifacts/ac/ac8125046b2297f6d29fd17abd6406f7 b/Library/Artifacts/ac/ac8125046b2297f6d29fd17abd6406f7
new file mode 100644
index 00000000..95db37d7
Binary files /dev/null and b/Library/Artifacts/ac/ac8125046b2297f6d29fd17abd6406f7 differ
diff --git a/Library/Artifacts/ad/add16aa1419ea8f0d89bf0d4d1e16d09 b/Library/Artifacts/ad/add16aa1419ea8f0d89bf0d4d1e16d09
deleted file mode 100644
index 407de746..00000000
Binary files a/Library/Artifacts/ad/add16aa1419ea8f0d89bf0d4d1e16d09 and /dev/null differ
diff --git a/Library/Artifacts/ae/ae5d2dd88fbb253b7b893d9c0b714f31 b/Library/Artifacts/ae/ae5d2dd88fbb253b7b893d9c0b714f31
deleted file mode 100644
index c3442b1c..00000000
Binary files a/Library/Artifacts/ae/ae5d2dd88fbb253b7b893d9c0b714f31 and /dev/null differ
diff --git a/Library/Artifacts/af/afcff917c72f5e956a6893f48ed45c70 b/Library/Artifacts/af/afcff917c72f5e956a6893f48ed45c70
deleted file mode 100644
index 0cdce846..00000000
Binary files a/Library/Artifacts/af/afcff917c72f5e956a6893f48ed45c70 and /dev/null differ
diff --git a/Library/Artifacts/b0/b017c56197d00a8f72cd19af788b3c40 b/Library/Artifacts/b0/b017c56197d00a8f72cd19af788b3c40
deleted file mode 100644
index 97c430d6..00000000
Binary files a/Library/Artifacts/b0/b017c56197d00a8f72cd19af788b3c40 and /dev/null differ
diff --git a/Library/Artifacts/b1/b10b3a334a3db14d6be5efdc30e4ee28 b/Library/Artifacts/b1/b10b3a334a3db14d6be5efdc30e4ee28
new file mode 100644
index 00000000..45d0018a
Binary files /dev/null and b/Library/Artifacts/b1/b10b3a334a3db14d6be5efdc30e4ee28 differ
diff --git a/Library/Artifacts/7f/7f9e219f61afdd285073fda21bbf1ffd b/Library/Artifacts/b2/b2559869a75185d08e577ec2625e0d37
similarity index 50%
rename from Library/Artifacts/7f/7f9e219f61afdd285073fda21bbf1ffd
rename to Library/Artifacts/b2/b2559869a75185d08e577ec2625e0d37
index b9d466df..6443b738 100644
Binary files a/Library/Artifacts/7f/7f9e219f61afdd285073fda21bbf1ffd and b/Library/Artifacts/b2/b2559869a75185d08e577ec2625e0d37 differ
diff --git a/Library/Artifacts/03/03cd127bb37f089a0d02d1dbb56f8835 b/Library/Artifacts/b6/b6f546df35b4ded7cf68a4bc8408285c
similarity index 90%
rename from Library/Artifacts/03/03cd127bb37f089a0d02d1dbb56f8835
rename to Library/Artifacts/b6/b6f546df35b4ded7cf68a4bc8408285c
index f670e438..89dea527 100644
Binary files a/Library/Artifacts/03/03cd127bb37f089a0d02d1dbb56f8835 and b/Library/Artifacts/b6/b6f546df35b4ded7cf68a4bc8408285c differ
diff --git a/Library/Artifacts/b7/b77440d8fcf94ceb192fcffdc4102f8b b/Library/Artifacts/b7/b77440d8fcf94ceb192fcffdc4102f8b
deleted file mode 100644
index bbbb766f..00000000
Binary files a/Library/Artifacts/b7/b77440d8fcf94ceb192fcffdc4102f8b and /dev/null differ
diff --git a/Library/Artifacts/b9/b91d85ca85cbc6c076f9bcbf409652a7 b/Library/Artifacts/b9/b91d85ca85cbc6c076f9bcbf409652a7
new file mode 100644
index 00000000..6c34051e
Binary files /dev/null and b/Library/Artifacts/b9/b91d85ca85cbc6c076f9bcbf409652a7 differ
diff --git a/Library/Artifacts/79/796c3bb3a7dae077404194e6a3dcb1e7 b/Library/Artifacts/b9/b92c07ccb57f4eaf09492c9d3d3ef181
similarity index 79%
rename from Library/Artifacts/79/796c3bb3a7dae077404194e6a3dcb1e7
rename to Library/Artifacts/b9/b92c07ccb57f4eaf09492c9d3d3ef181
index 1cee7e28..d448f2c5 100644
Binary files a/Library/Artifacts/79/796c3bb3a7dae077404194e6a3dcb1e7 and b/Library/Artifacts/b9/b92c07ccb57f4eaf09492c9d3d3ef181 differ
diff --git a/Library/Artifacts/bb/bb6f1bf895bb8b2ea872153ec8501d72 b/Library/Artifacts/bb/bb6f1bf895bb8b2ea872153ec8501d72
new file mode 100644
index 00000000..51fda048
Binary files /dev/null and b/Library/Artifacts/bb/bb6f1bf895bb8b2ea872153ec8501d72 differ
diff --git a/Library/Artifacts/bd/bdbb2c03378096c53dec52a21a548fbe b/Library/Artifacts/bd/bdbb2c03378096c53dec52a21a548fbe
deleted file mode 100644
index e5741737..00000000
Binary files a/Library/Artifacts/bd/bdbb2c03378096c53dec52a21a548fbe and /dev/null differ
diff --git a/Library/Artifacts/be/bee0c8629c7583e44e0760927610bf6a b/Library/Artifacts/be/bee0c8629c7583e44e0760927610bf6a
new file mode 100644
index 00000000..c5a76289
Binary files /dev/null and b/Library/Artifacts/be/bee0c8629c7583e44e0760927610bf6a differ
diff --git a/Library/Artifacts/c1/c1c3898f354e5030e728ed6a34843661 b/Library/Artifacts/c1/c1c3898f354e5030e728ed6a34843661
new file mode 100644
index 00000000..41aa2c97
Binary files /dev/null and b/Library/Artifacts/c1/c1c3898f354e5030e728ed6a34843661 differ
diff --git a/Library/Artifacts/bf/bf7c4c76693fb5bdfd8bef94ac466d07 b/Library/Artifacts/c4/c48f88ed327f0215ea2ff4da25f7b5b3
similarity index 93%
rename from Library/Artifacts/bf/bf7c4c76693fb5bdfd8bef94ac466d07
rename to Library/Artifacts/c4/c48f88ed327f0215ea2ff4da25f7b5b3
index 36cd7bf1..d1d1e0c8 100644
Binary files a/Library/Artifacts/bf/bf7c4c76693fb5bdfd8bef94ac466d07 and b/Library/Artifacts/c4/c48f88ed327f0215ea2ff4da25f7b5b3 differ
diff --git a/Library/Artifacts/c6/c618fa74c6fae8ec18b71cea9b908bf7 b/Library/Artifacts/c6/c618fa74c6fae8ec18b71cea9b908bf7
new file mode 100644
index 00000000..352fe691
Binary files /dev/null and b/Library/Artifacts/c6/c618fa74c6fae8ec18b71cea9b908bf7 differ
diff --git a/Library/Artifacts/c6/c6c9684c2498ec4134afe766017f2805 b/Library/Artifacts/c6/c6c9684c2498ec4134afe766017f2805
new file mode 100644
index 00000000..ff8e32f8
Binary files /dev/null and b/Library/Artifacts/c6/c6c9684c2498ec4134afe766017f2805 differ
diff --git a/Library/Artifacts/c8/c85465427dbcaf9f7bc9d0aa8e0df43f b/Library/Artifacts/c8/c85465427dbcaf9f7bc9d0aa8e0df43f
new file mode 100644
index 00000000..e13332e1
Binary files /dev/null and b/Library/Artifacts/c8/c85465427dbcaf9f7bc9d0aa8e0df43f differ
diff --git a/Library/Artifacts/cb/cb980a6d53391356616508510af0e8ab b/Library/Artifacts/cb/cb980a6d53391356616508510af0e8ab
new file mode 100644
index 00000000..572469e3
Binary files /dev/null and b/Library/Artifacts/cb/cb980a6d53391356616508510af0e8ab differ
diff --git a/Library/Artifacts/dd/dd7a0ae85f5306ba339e21264b49b390 b/Library/Artifacts/cd/cd0524fe2647a80a2660d2f809be7a04
similarity index 51%
rename from Library/Artifacts/dd/dd7a0ae85f5306ba339e21264b49b390
rename to Library/Artifacts/cd/cd0524fe2647a80a2660d2f809be7a04
index baf2ecd9..b24c5bb6 100644
Binary files a/Library/Artifacts/dd/dd7a0ae85f5306ba339e21264b49b390 and b/Library/Artifacts/cd/cd0524fe2647a80a2660d2f809be7a04 differ
diff --git a/Library/Artifacts/48/489a9a7c06f87b88abb6a024635b717b b/Library/Artifacts/d0/d0cb3ddfd742ee17094c148cd4a84baf
similarity index 53%
rename from Library/Artifacts/48/489a9a7c06f87b88abb6a024635b717b
rename to Library/Artifacts/d0/d0cb3ddfd742ee17094c148cd4a84baf
index ffd7cbe4..2b4918e0 100644
Binary files a/Library/Artifacts/48/489a9a7c06f87b88abb6a024635b717b and b/Library/Artifacts/d0/d0cb3ddfd742ee17094c148cd4a84baf differ
diff --git a/Library/Artifacts/d1/d1b02ca39be02c9294339eba51dbe8f4 b/Library/Artifacts/d1/d1b02ca39be02c9294339eba51dbe8f4
deleted file mode 100644
index 8d301cd0..00000000
Binary files a/Library/Artifacts/d1/d1b02ca39be02c9294339eba51dbe8f4 and /dev/null differ
diff --git a/Library/Artifacts/55/55ea23367855499bc59f3527e033f960 b/Library/Artifacts/d1/d1ff0feddb866031fe0b83edb78750cd
similarity index 89%
rename from Library/Artifacts/55/55ea23367855499bc59f3527e033f960
rename to Library/Artifacts/d1/d1ff0feddb866031fe0b83edb78750cd
index 8159fef5..0f63c95f 100644
Binary files a/Library/Artifacts/55/55ea23367855499bc59f3527e033f960 and b/Library/Artifacts/d1/d1ff0feddb866031fe0b83edb78750cd differ
diff --git a/Library/Artifacts/d2/d2bc4ef22ffbcbbf2d424639b658bee4 b/Library/Artifacts/d2/d2bc4ef22ffbcbbf2d424639b658bee4
new file mode 100644
index 00000000..07629ff4
Binary files /dev/null and b/Library/Artifacts/d2/d2bc4ef22ffbcbbf2d424639b658bee4 differ
diff --git a/Library/Artifacts/d4/d435474bf7ea3beb0cc797cebe2f50c1 b/Library/Artifacts/d4/d435474bf7ea3beb0cc797cebe2f50c1
deleted file mode 100644
index 86ab73e3..00000000
Binary files a/Library/Artifacts/d4/d435474bf7ea3beb0cc797cebe2f50c1 and /dev/null differ
diff --git a/Library/Artifacts/5b/5b68c6c0aad55e9ebe9c091bfa4539ba b/Library/Artifacts/d6/d69fb17a91612c624770ca249bf85806
similarity index 92%
rename from Library/Artifacts/5b/5b68c6c0aad55e9ebe9c091bfa4539ba
rename to Library/Artifacts/d6/d69fb17a91612c624770ca249bf85806
index 621d5d90..470b713d 100644
Binary files a/Library/Artifacts/5b/5b68c6c0aad55e9ebe9c091bfa4539ba and b/Library/Artifacts/d6/d69fb17a91612c624770ca249bf85806 differ
diff --git a/Library/Artifacts/d7/d711a7fe542b3e10ee8dd9befb3e815a b/Library/Artifacts/d7/d711a7fe542b3e10ee8dd9befb3e815a
new file mode 100644
index 00000000..99fe68c3
Binary files /dev/null and b/Library/Artifacts/d7/d711a7fe542b3e10ee8dd9befb3e815a differ
diff --git a/Library/Artifacts/d7/d75a6a4488699b3a51d3714df39b89c7 b/Library/Artifacts/d7/d75a6a4488699b3a51d3714df39b89c7
deleted file mode 100644
index ad1c8f40..00000000
Binary files a/Library/Artifacts/d7/d75a6a4488699b3a51d3714df39b89c7 and /dev/null differ
diff --git a/Library/Artifacts/d9/d91a31db4314aa6f37f97af2f0879e99 b/Library/Artifacts/d9/d91a31db4314aa6f37f97af2f0879e99
new file mode 100644
index 00000000..43568603
Binary files /dev/null and b/Library/Artifacts/d9/d91a31db4314aa6f37f97af2f0879e99 differ
diff --git a/Library/Artifacts/d9/d93f50d6dde2152fdc829462e3623ba7 b/Library/Artifacts/d9/d93f50d6dde2152fdc829462e3623ba7
deleted file mode 100644
index 292cef0d..00000000
Binary files a/Library/Artifacts/d9/d93f50d6dde2152fdc829462e3623ba7 and /dev/null differ
diff --git a/Library/Artifacts/dc/dcac788eab5dfa5125ce88d827454ab3 b/Library/Artifacts/dc/dcac788eab5dfa5125ce88d827454ab3
new file mode 100644
index 00000000..d8b38f86
Binary files /dev/null and b/Library/Artifacts/dc/dcac788eab5dfa5125ce88d827454ab3 differ
diff --git a/Library/Artifacts/dd/ddeab847a3840aa9d1632e1cc36ddd2e b/Library/Artifacts/dd/ddeab847a3840aa9d1632e1cc36ddd2e
new file mode 100644
index 00000000..d1e13892
Binary files /dev/null and b/Library/Artifacts/dd/ddeab847a3840aa9d1632e1cc36ddd2e differ
diff --git a/Library/Artifacts/de/dedc0ce59033c1e8670a06ebdcc7f2c9 b/Library/Artifacts/de/dedc0ce59033c1e8670a06ebdcc7f2c9
deleted file mode 100644
index bac35ea3..00000000
Binary files a/Library/Artifacts/de/dedc0ce59033c1e8670a06ebdcc7f2c9 and /dev/null differ
diff --git a/Library/Artifacts/de/dee5d8c16ed5173fb1aac990c044d722 b/Library/Artifacts/de/dee5d8c16ed5173fb1aac990c044d722
deleted file mode 100644
index 696ea4a7..00000000
Binary files a/Library/Artifacts/de/dee5d8c16ed5173fb1aac990c044d722 and /dev/null differ
diff --git a/Library/Artifacts/e1/e16e1969806c8e9634376ed271357bcc b/Library/Artifacts/e1/e16e1969806c8e9634376ed271357bcc
deleted file mode 100644
index 873c7c92..00000000
Binary files a/Library/Artifacts/e1/e16e1969806c8e9634376ed271357bcc and /dev/null differ
diff --git a/Library/Artifacts/e3/e3ba062b7b2b1469cd72d5e659a62e33 b/Library/Artifacts/e3/e3ba062b7b2b1469cd72d5e659a62e33
new file mode 100644
index 00000000..c43fdd03
Binary files /dev/null and b/Library/Artifacts/e3/e3ba062b7b2b1469cd72d5e659a62e33 differ
diff --git a/Library/Artifacts/e3/e3dd43f8ed577ebd9a448a47c5c0ffbe b/Library/Artifacts/e3/e3dd43f8ed577ebd9a448a47c5c0ffbe
new file mode 100644
index 00000000..a80238f7
Binary files /dev/null and b/Library/Artifacts/e3/e3dd43f8ed577ebd9a448a47c5c0ffbe differ
diff --git a/Library/Artifacts/e8/e8e9043726365905a05e1887e64a5188 b/Library/Artifacts/e8/e8e9043726365905a05e1887e64a5188
new file mode 100644
index 00000000..1edd1a26
Binary files /dev/null and b/Library/Artifacts/e8/e8e9043726365905a05e1887e64a5188 differ
diff --git a/Library/Artifacts/b1/b146b1cbdb4c0a1f9fff54cdbc612210 b/Library/Artifacts/eb/eb6bdb3325d88f79df2f0b269fe11127
similarity index 68%
rename from Library/Artifacts/b1/b146b1cbdb4c0a1f9fff54cdbc612210
rename to Library/Artifacts/eb/eb6bdb3325d88f79df2f0b269fe11127
index e8314037..a0256bfd 100644
Binary files a/Library/Artifacts/b1/b146b1cbdb4c0a1f9fff54cdbc612210 and b/Library/Artifacts/eb/eb6bdb3325d88f79df2f0b269fe11127 differ
diff --git a/Library/Artifacts/ec/ec3b358b957f4ed45e0b7b0105fc3c2e b/Library/Artifacts/ec/ec3b358b957f4ed45e0b7b0105fc3c2e
new file mode 100644
index 00000000..b8746500
Binary files /dev/null and b/Library/Artifacts/ec/ec3b358b957f4ed45e0b7b0105fc3c2e differ
diff --git a/Library/Artifacts/71/713958508c0bd9ae305238513e8d9452 b/Library/Artifacts/ee/eeaa5acc354fe3c324aa19740637306f
similarity index 96%
rename from Library/Artifacts/71/713958508c0bd9ae305238513e8d9452
rename to Library/Artifacts/ee/eeaa5acc354fe3c324aa19740637306f
index 0b407641..a3d0b01b 100644
Binary files a/Library/Artifacts/71/713958508c0bd9ae305238513e8d9452 and b/Library/Artifacts/ee/eeaa5acc354fe3c324aa19740637306f differ
diff --git a/Library/Artifacts/ef/effd29a30595768a39967ded9dc15a98 b/Library/Artifacts/ef/effd29a30595768a39967ded9dc15a98
new file mode 100644
index 00000000..7a5c73d7
Binary files /dev/null and b/Library/Artifacts/ef/effd29a30595768a39967ded9dc15a98 differ
diff --git a/Library/Artifacts/f0/f0f3cc2669a8817a8648b1f2a4d15a9b b/Library/Artifacts/f0/f0f3cc2669a8817a8648b1f2a4d15a9b
new file mode 100644
index 00000000..b05fa570
Binary files /dev/null and b/Library/Artifacts/f0/f0f3cc2669a8817a8648b1f2a4d15a9b differ
diff --git a/Library/Artifacts/f1/f19669b97ef07a092404eb3b45936080 b/Library/Artifacts/f1/f19669b97ef07a092404eb3b45936080
new file mode 100644
index 00000000..2fc7f8c3
Binary files /dev/null and b/Library/Artifacts/f1/f19669b97ef07a092404eb3b45936080 differ
diff --git a/Library/Artifacts/f2/f2e807404654f9c597524d67f667be72 b/Library/Artifacts/f2/f2e807404654f9c597524d67f667be72
new file mode 100644
index 00000000..62634880
Binary files /dev/null and b/Library/Artifacts/f2/f2e807404654f9c597524d67f667be72 differ
diff --git a/Library/Artifacts/f4/f475ac3f65ce6bfe8584f1e4c43530f2 b/Library/Artifacts/f4/f475ac3f65ce6bfe8584f1e4c43530f2
deleted file mode 100644
index 09768a15..00000000
Binary files a/Library/Artifacts/f4/f475ac3f65ce6bfe8584f1e4c43530f2 and /dev/null differ
diff --git a/Library/Artifacts/2b/2b4995803d77205ea0104d4a22d185b4 b/Library/Artifacts/f5/f552e4e2cf861a4930dbbc532377abc6
similarity index 98%
rename from Library/Artifacts/2b/2b4995803d77205ea0104d4a22d185b4
rename to Library/Artifacts/f5/f552e4e2cf861a4930dbbc532377abc6
index caefc11f..2b5e5e0e 100644
Binary files a/Library/Artifacts/2b/2b4995803d77205ea0104d4a22d185b4 and b/Library/Artifacts/f5/f552e4e2cf861a4930dbbc532377abc6 differ
diff --git a/Library/Artifacts/f6/f67a6e831458419c89daf5f46d0c98c6 b/Library/Artifacts/f6/f67a6e831458419c89daf5f46d0c98c6
new file mode 100644
index 00000000..cd5c35d8
Binary files /dev/null and b/Library/Artifacts/f6/f67a6e831458419c89daf5f46d0c98c6 differ
diff --git a/Library/Artifacts/f6/f6a40951d47d6df7995330e584c9b950 b/Library/Artifacts/f6/f6a40951d47d6df7995330e584c9b950
new file mode 100644
index 00000000..b4929015
Binary files /dev/null and b/Library/Artifacts/f6/f6a40951d47d6df7995330e584c9b950 differ
diff --git a/Library/Artifacts/f7/f70985f948a184ef7965383a126bd396 b/Library/Artifacts/f7/f70985f948a184ef7965383a126bd396
new file mode 100644
index 00000000..87a19b8e
Binary files /dev/null and b/Library/Artifacts/f7/f70985f948a184ef7965383a126bd396 differ
diff --git a/Library/Artifacts/f7/f76226e6aa0f869ffc574b7a8185a7b9 b/Library/Artifacts/f7/f76226e6aa0f869ffc574b7a8185a7b9
new file mode 100644
index 00000000..5296c5c4
Binary files /dev/null and b/Library/Artifacts/f7/f76226e6aa0f869ffc574b7a8185a7b9 differ
diff --git a/Library/Artifacts/f8/f800a4ba9b1481092c25626ff9433644 b/Library/Artifacts/f8/f800a4ba9b1481092c25626ff9433644
new file mode 100644
index 00000000..8b6efc3a
Binary files /dev/null and b/Library/Artifacts/f8/f800a4ba9b1481092c25626ff9433644 differ
diff --git a/Library/Artifacts/fe/fe5a0eae7926d4756dc1e241800de17a b/Library/Artifacts/fe/fe5a0eae7926d4756dc1e241800de17a
new file mode 100644
index 00000000..c426d413
Binary files /dev/null and b/Library/Artifacts/fe/fe5a0eae7926d4756dc1e241800de17a differ
diff --git a/Library/Artifacts/ff/ffda3c1f6abf175c7c73dfe7ec7cde25 b/Library/Artifacts/ff/ffda3c1f6abf175c7c73dfe7ec7cde25
deleted file mode 100644
index d1cabe90..00000000
Binary files a/Library/Artifacts/ff/ffda3c1f6abf175c7c73dfe7ec7cde25 and /dev/null differ
diff --git a/Library/CurrentLayout-default.dwlt b/Library/CurrentLayout-default.dwlt
index 9d2caa2b..9c27cf74 100644
--- a/Library/CurrentLayout-default.dwlt
+++ b/Library/CurrentLayout-default.dwlt
@@ -21,7 +21,7 @@ MonoBehaviour:
m_ShowMode: 4
m_Title:
m_RootView: {fileID: 2}
- m_MinSize: {x: 875, y: 371}
+ m_MinSize: {x: 875, y: 300}
m_MaxSize: {x: 10000, y: 10000}
m_Maximized: 1
--- !u!114 &2
@@ -46,7 +46,7 @@ MonoBehaviour:
y: 0
width: 1920
height: 997
- m_MinSize: {x: 875, y: 371}
+ m_MinSize: {x: 875, y: 300}
m_MaxSize: {x: 10000, y: 10000}
--- !u!114 &3
MonoBehaviour:
@@ -112,10 +112,10 @@ MonoBehaviour:
y: 30
width: 1920
height: 947
- m_MinSize: {x: 678, y: 321}
- m_MaxSize: {x: 12003, y: 8021}
+ m_MinSize: {x: 679, y: 492}
+ m_MaxSize: {x: 14002, y: 14042}
vertical: 0
- controlID: 19216
+ controlID: 28175
--- !u!114 &6
MonoBehaviour:
m_ObjectHideFlags: 52
@@ -137,10 +137,10 @@ MonoBehaviour:
y: 0
width: 1414
height: 947
- m_MinSize: {x: 402, y: 321}
- m_MaxSize: {x: 8002, y: 8021}
+ m_MinSize: {x: 403, y: 492}
+ m_MaxSize: {x: 10001, y: 14042}
vertical: 1
- controlID: 19217
+ controlID: 28176
--- !u!114 &7
MonoBehaviour:
m_ObjectHideFlags: 52
@@ -162,10 +162,10 @@ MonoBehaviour:
y: 0
width: 1414
height: 671
- m_MinSize: {x: 402, y: 221}
- m_MaxSize: {x: 8002, y: 4021}
+ m_MinSize: {x: 403, y: 221}
+ m_MaxSize: {x: 8003, y: 4021}
vertical: 0
- controlID: 19218
+ controlID: 28177
--- !u!114 &8
MonoBehaviour:
m_ObjectHideFlags: 52
@@ -231,7 +231,7 @@ MonoBehaviour:
m_Enabled: 1
m_EditorHideFlags: 1
m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0}
- m_Name: ConsoleWindow
+ m_Name: ProjectBrowser
m_EditorClassIdentifier:
m_Children: []
m_Position:
@@ -240,15 +240,15 @@ MonoBehaviour:
y: 671
width: 1414
height: 276
- m_MinSize: {x: 101, y: 121}
- m_MaxSize: {x: 4001, y: 4021}
- m_ActualView: {fileID: 18}
+ m_MinSize: {x: 231, y: 271}
+ m_MaxSize: {x: 10001, y: 10021}
+ m_ActualView: {fileID: 17}
m_Panes:
- {fileID: 17}
- {fileID: 18}
- {fileID: 19}
- m_Selected: 1
- m_LastSelected: 0
+ m_Selected: 0
+ m_LastSelected: 1
--- !u!114 &11
MonoBehaviour:
m_ObjectHideFlags: 52
@@ -268,8 +268,8 @@ MonoBehaviour:
y: 0
width: 506
height: 947
- m_MinSize: {x: 276, y: 71}
- m_MaxSize: {x: 4001, y: 4021}
+ m_MinSize: {x: 275, y: 50}
+ m_MaxSize: {x: 4000, y: 4000}
m_ActualView: {fileID: 20}
m_Panes:
- {fileID: 20}
@@ -324,10 +324,10 @@ MonoBehaviour:
m_VRangeLocked: 0
hZoomLockedByDefault: 0
vZoomLockedByDefault: 0
- m_HBaseRangeMin: -960
- m_HBaseRangeMax: 960
- m_VBaseRangeMin: -453.5
- m_VBaseRangeMax: 453.5
+ m_HBaseRangeMin: -537.5
+ m_HBaseRangeMax: 537.5
+ m_VBaseRangeMin: -314.5
+ m_VBaseRangeMax: 314.5
m_HAllowExceedBaseRangeMin: 1
m_HAllowExceedBaseRangeMax: 1
m_VAllowExceedBaseRangeMin: 1
@@ -345,23 +345,23 @@ MonoBehaviour:
serializedVersion: 2
x: 0
y: 21
- width: 1920
- height: 907
+ width: 1075
+ height: 629
m_Scale: {x: 1, y: 1}
- m_Translation: {x: 960, y: 453.5}
+ m_Translation: {x: 537.5, y: 314.5}
m_MarginLeft: 0
m_MarginRight: 0
m_MarginTop: 0
m_MarginBottom: 0
m_LastShownAreaInsideMargins:
serializedVersion: 2
- x: -960
- y: -453.5
- width: 1920
- height: 907
+ x: -537.5
+ y: -314.5
+ width: 1075
+ height: 629
m_MinimalGUI: 1
m_defaultScale: 1
- m_LastWindowPixelSize: {x: 1920, y: 928}
+ m_LastWindowPixelSize: {x: 1075, y: 650}
m_ClearInEditMode: 1
m_NoCameraWarning: 1
m_LowResolutionForAspectRatios: 01000000000000000000
@@ -395,10 +395,10 @@ MonoBehaviour:
m_ViewDataDictionary: {fileID: 0}
m_SceneHierarchy:
m_TreeViewState:
- scrollPos: {x: 0, y: 0}
- m_SelectedIDs:
- m_LastClickedID: 0
- m_ExpandedIDs: 62fbffffe23c00005e3d0000123e00004e410000e64200003a480000
+ scrollPos: {x: 0, y: 300}
+ m_SelectedIDs: 923d0000
+ m_LastClickedID: 15762
+ m_ExpandedIDs: f668fdff7878fdff62fbffffc43a00005c3d0000923d0000583e0000623e0000ac3e0000de3e0000283f00001a410000584200008c420000ee42000028440000ec45000024460000b647000042480000ee480000
m_RenameOverlay:
m_UserAcceptedRename: 0
m_Name:
@@ -458,9 +458,9 @@ MonoBehaviour:
m_PlayAudio: 0
m_AudioPlay: 0
m_Position:
- m_Target: {x: 305.976, y: 305.10596, z: -38.525288}
+ m_Target: {x: 558.63934, y: 208.42484, z: -38.5}
speed: 2
- m_Value: {x: 310.36136, y: 298.19485, z: -36.78535}
+ m_Value: {x: 558.63934, y: 208.42484, z: -38.5}
m_RenderMode: 0
m_CameraMode:
drawMode: 0
@@ -512,7 +512,7 @@ MonoBehaviour:
m_Size:
m_Target: 404.12747
speed: 2
- m_Value: 386.72485
+ m_Value: 404.12747
m_Ortho:
m_Target: 1
speed: 2
@@ -1104,20 +1104,20 @@ MonoBehaviour:
m_SkipHidden: 0
m_SearchArea: 1
m_Folders:
- - Assets/StreamingAssets
+ - Assets/Resources/Prefabs
m_ViewMode: 1
m_StartGridSize: 67
m_LastFolders:
- - Assets/StreamingAssets
+ - Assets/Resources/Prefabs
m_LastFoldersGridSize: 67
m_LastProjectPath: C:\UnityDev\rimworld-animation-studio
m_LockTracker:
m_IsLocked: 0
m_FolderTreeState:
scrollPos: {x: 0, y: 41}
- m_SelectedIDs: c64e0000
- m_LastClickedID: 20166
- m_ExpandedIDs: 00000000984e00009a4e00009c4e00009e4e0000a04e0000a24e0000a44e0000
+ m_SelectedIDs: ae4e0000
+ m_LastClickedID: 20142
+ m_ExpandedIDs: 00000000a24e0000a44e0000a64e0000a84e0000aa4e0000ac4e0000ae4e000000ca9a3b
m_RenameOverlay:
m_UserAcceptedRename: 0
m_Name:
@@ -1145,7 +1145,7 @@ MonoBehaviour:
scrollPos: {x: 0, y: 0}
m_SelectedIDs:
m_LastClickedID: 0
- m_ExpandedIDs: 00000000984e00009a4e00009c4e00009e4e0000a04e0000a24e0000a44e0000
+ m_ExpandedIDs: 00000000a24e0000a44e0000a64e0000a84e0000aa4e0000ac4e0000ae4e000000ca9a3b
m_RenameOverlay:
m_UserAcceptedRename: 0
m_Name:
@@ -1170,8 +1170,8 @@ MonoBehaviour:
m_Icon: {fileID: 0}
m_ResourceFile:
m_ListAreaState:
- m_SelectedInstanceIDs: 524f0000
- m_LastClickedInstanceID: 20306
+ m_SelectedInstanceIDs:
+ m_LastClickedInstanceID: 0
m_HadKeyboardFocusLastEvent: 0
m_ExpandedInstanceIDs: c6230000303a0000063a0000a83d00005c66000000870000f8860000004a00004a4600000c430000004900007e9800000249000086980000000000007a140100
m_RenameOverlay:
diff --git a/Library/CurrentMaximizeLayout.dwlt b/Library/CurrentMaximizeLayout.dwlt
index 23c68877..34bc550e 100644
--- a/Library/CurrentMaximizeLayout.dwlt
+++ b/Library/CurrentMaximizeLayout.dwlt
@@ -21,10 +21,10 @@ MonoBehaviour:
y: 30
width: 1920
height: 947
- m_MinSize: {x: 678, y: 321}
- m_MaxSize: {x: 12003, y: 8021}
+ m_MinSize: {x: 679, y: 492}
+ m_MaxSize: {x: 14002, y: 14042}
vertical: 0
- controlID: 19046
+ controlID: 28002
--- !u!114 &2
MonoBehaviour:
m_ObjectHideFlags: 52
@@ -138,10 +138,10 @@ MonoBehaviour:
y: 0
width: 1414
height: 947
- m_MinSize: {x: 402, y: 321}
- m_MaxSize: {x: 8002, y: 8021}
+ m_MinSize: {x: 403, y: 492}
+ m_MaxSize: {x: 10001, y: 14042}
vertical: 1
- controlID: 19001
+ controlID: 28003
--- !u!114 &4
MonoBehaviour:
m_ObjectHideFlags: 52
@@ -163,10 +163,10 @@ MonoBehaviour:
y: 0
width: 1414
height: 671
- m_MinSize: {x: 402, y: 221}
- m_MaxSize: {x: 8002, y: 4021}
+ m_MinSize: {x: 403, y: 221}
+ m_MaxSize: {x: 8003, y: 4021}
vertical: 0
- controlID: 19002
+ controlID: 28004
--- !u!114 &5
MonoBehaviour:
m_ObjectHideFlags: 52
@@ -221,10 +221,10 @@ MonoBehaviour:
m_ViewDataDictionary: {fileID: 0}
m_SceneHierarchy:
m_TreeViewState:
- scrollPos: {x: 0, y: 0}
+ scrollPos: {x: 0, y: 300}
m_SelectedIDs:
m_LastClickedID: 0
- m_ExpandedIDs: 62fbffffe23c00005e3d0000123e0000e64200003a480000
+ m_ExpandedIDs: f668fdff7878fdff62fbffffc43a00005c3d0000923d0000583e0000623e0000ac3e0000de3e0000283f00001a410000584200008c420000ee42000028440000ec45000024460000b647000042480000ee480000
m_RenameOverlay:
m_UserAcceptedRename: 0
m_Name:
@@ -313,9 +313,9 @@ MonoBehaviour:
m_PlayAudio: 0
m_AudioPlay: 0
m_Position:
- m_Target: {x: 458.48782, y: 305.65033, z: 0}
+ m_Target: {x: 558.63934, y: 208.42484, z: -38.5}
speed: 2
- m_Value: {x: 458.48782, y: 305.65033, z: 0}
+ m_Value: {x: 558.63934, y: 208.42484, z: -38.5}
m_RenderMode: 0
m_CameraMode:
drawMode: 0
@@ -365,9 +365,9 @@ MonoBehaviour:
speed: 2
m_Value: {x: 0, y: 0, z: 0, w: 1}
m_Size:
- m_Target: 348.6405
+ m_Target: 404.12747
speed: 2
- m_Value: 348.6405
+ m_Value: 404.12747
m_Ortho:
m_Target: 1
speed: 2
@@ -930,7 +930,7 @@ MonoBehaviour:
m_Enabled: 1
m_EditorHideFlags: 1
m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0}
- m_Name: ConsoleWindow
+ m_Name: ProjectBrowser
m_EditorClassIdentifier:
m_Children: []
m_Position:
@@ -939,15 +939,15 @@ MonoBehaviour:
y: 671
width: 1414
height: 276
- m_MinSize: {x: 100, y: 100}
- m_MaxSize: {x: 4000, y: 4000}
- m_ActualView: {fileID: 13}
+ m_MinSize: {x: 230, y: 250}
+ m_MaxSize: {x: 10000, y: 10000}
+ m_ActualView: {fileID: 12}
m_Panes:
- {fileID: 12}
- {fileID: 13}
- {fileID: 14}
- m_Selected: 1
- m_LastSelected: 0
+ m_Selected: 0
+ m_LastSelected: 1
--- !u!114 &12
MonoBehaviour:
m_ObjectHideFlags: 52
@@ -987,20 +987,20 @@ MonoBehaviour:
m_SkipHidden: 0
m_SearchArea: 1
m_Folders:
- - Assets/StreamingAssets
+ - Assets/Resources/Prefabs
m_ViewMode: 1
m_StartGridSize: 67
m_LastFolders:
- - Assets/StreamingAssets
+ - Assets/Resources/Prefabs
m_LastFoldersGridSize: 67
m_LastProjectPath: C:\UnityDev\rimworld-animation-studio
m_LockTracker:
m_IsLocked: 0
m_FolderTreeState:
scrollPos: {x: 0, y: 41}
- m_SelectedIDs: c64e0000
- m_LastClickedID: 20166
- m_ExpandedIDs: 00000000984e00009a4e00009c4e00009e4e0000a04e0000a24e0000a44e0000
+ m_SelectedIDs: ae4e0000
+ m_LastClickedID: 20142
+ m_ExpandedIDs: 00000000a24e0000a44e0000a64e0000a84e0000aa4e0000ac4e0000ae4e000000ca9a3b
m_RenameOverlay:
m_UserAcceptedRename: 0
m_Name:
@@ -1028,7 +1028,7 @@ MonoBehaviour:
scrollPos: {x: 0, y: 0}
m_SelectedIDs:
m_LastClickedID: 0
- m_ExpandedIDs: 00000000984e00009a4e00009c4e00009e4e0000a04e0000a24e0000a44e0000
+ m_ExpandedIDs: 00000000a24e0000a44e0000a64e0000a84e0000aa4e0000ac4e0000ae4e000000ca9a3b
m_RenameOverlay:
m_UserAcceptedRename: 0
m_Name:
@@ -1053,8 +1053,8 @@ MonoBehaviour:
m_Icon: {fileID: 0}
m_ResourceFile:
m_ListAreaState:
- m_SelectedInstanceIDs: 524f0000
- m_LastClickedInstanceID: 20306
+ m_SelectedInstanceIDs: 923d0000
+ m_LastClickedInstanceID: 15762
m_HadKeyboardFocusLastEvent: 0
m_ExpandedInstanceIDs: c6230000303a0000063a0000a83d00005c66000000870000f8860000004a00004a4600000c430000004900007e9800000249000086980000000000007a140100
m_RenameOverlay:
@@ -1203,5 +1203,5 @@ MonoBehaviour:
m_ControlHash: -371814159
m_PrefName: Preview_InspectorPreview
m_PreviewWindow: {fileID: 0}
- m_LastInspectedObjectInstanceID: 18490
+ m_LastInspectedObjectInstanceID: 15762
m_LastVerticalScrollValue: 0
diff --git a/Library/InspectorExpandedItems.asset b/Library/InspectorExpandedItems.asset
index 4fada9e7..e6fdabf3 100644
Binary files a/Library/InspectorExpandedItems.asset and b/Library/InspectorExpandedItems.asset differ
diff --git a/Library/ScriptAssemblies/Assembly-CSharp-Editor.dll b/Library/ScriptAssemblies/Assembly-CSharp-Editor.dll
index 988d6f50..44675b9c 100644
Binary files a/Library/ScriptAssemblies/Assembly-CSharp-Editor.dll and b/Library/ScriptAssemblies/Assembly-CSharp-Editor.dll differ
diff --git a/Library/ScriptAssemblies/Assembly-CSharp.dll b/Library/ScriptAssemblies/Assembly-CSharp.dll
index c01e9093..035b927f 100644
Binary files a/Library/ScriptAssemblies/Assembly-CSharp.dll and b/Library/ScriptAssemblies/Assembly-CSharp.dll differ
diff --git a/Library/ScriptAssemblies/Assembly-CSharp.pdb b/Library/ScriptAssemblies/Assembly-CSharp.pdb
index c5b5b5f7..4ce1ef0d 100644
Binary files a/Library/ScriptAssemblies/Assembly-CSharp.pdb and b/Library/ScriptAssemblies/Assembly-CSharp.pdb differ
diff --git a/Library/SourceAssetDB b/Library/SourceAssetDB
index fb4ffd67..dad58907 100644
Binary files a/Library/SourceAssetDB and b/Library/SourceAssetDB differ
diff --git a/Library/StateCache/Hierarchy/8cbfdc-378b361fe27c31b458.json b/Library/StateCache/Hierarchy/8cbfdc-378b361fe27c31b458.json
index 5bace9fc..bd3748b0 100644
--- a/Library/StateCache/Hierarchy/8cbfdc-378b361fe27c31b458.json
+++ b/Library/StateCache/Hierarchy/8cbfdc-378b361fe27c31b458.json
@@ -1 +1 @@
-{"m_ExpandedPrefabGameObjectFileIDs":[4855549260496161365],"m_ExpandedSceneGameObjectInstanceIDs":[],"m_ScrollY":0.0,"m_LastClickedFileID":4855549260496161365,"m_LastClickedInstanceID":0}
\ No newline at end of file
+{"m_ExpandedPrefabGameObjectFileIDs":[4855549260496161365],"m_ExpandedSceneGameObjectInstanceIDs":[],"m_ScrollY":0.0,"m_LastClickedFileID":6116381454766586175,"m_LastClickedInstanceID":0}
\ No newline at end of file
diff --git a/Library/StateCache/Hierarchy/8cbfdc-dc4c8b005322f3b46a.json b/Library/StateCache/Hierarchy/8cbfdc-dc4c8b005322f3b46a.json
index b77f0e7e..0b5f8edd 100644
--- a/Library/StateCache/Hierarchy/8cbfdc-dc4c8b005322f3b46a.json
+++ b/Library/StateCache/Hierarchy/8cbfdc-dc4c8b005322f3b46a.json
@@ -1 +1 @@
-{"m_ExpandedPrefabGameObjectFileIDs":[7929422520673851210],"m_ExpandedSceneGameObjectInstanceIDs":[],"m_ScrollY":0.0,"m_LastClickedFileID":111030959124096607,"m_LastClickedInstanceID":0}
\ No newline at end of file
+{"m_ExpandedPrefabGameObjectFileIDs":[7929422520673851210],"m_ExpandedSceneGameObjectInstanceIDs":[],"m_ScrollY":0.0,"m_LastClickedFileID":9122292209377678227,"m_LastClickedInstanceID":0}
\ No newline at end of file
diff --git a/Library/StateCache/SceneView/352ee9-mainStage.json b/Library/StateCache/SceneView/352ee9-mainStage.json
index 11ab059a..940005e5 100644
--- a/Library/StateCache/SceneView/352ee9-mainStage.json
+++ b/Library/StateCache/SceneView/352ee9-mainStage.json
@@ -1 +1 @@
-{"cameraMode":{"drawMode":0,"name":"Shaded","section":"Shading Mode"},"sceneLighting":true,"audioPlay":false,"sceneViewState":{"showFog":true,"showMaterialUpdate":false,"showSkybox":true,"showFlares":true,"showImageEffects":true,"showParticleSystems":true},"in2DMode":true,"pivot":{"x":305.97601318359377,"y":305.10595703125,"z":-38.52528762817383},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0},"size":404.1274719238281,"orthographic":true}
\ No newline at end of file
+{"cameraMode":{"drawMode":0,"name":"Shaded","section":"Shading Mode"},"sceneLighting":true,"audioPlay":false,"sceneViewState":{"showFog":true,"showMaterialUpdate":false,"showSkybox":true,"showFlares":true,"showImageEffects":true,"showParticleSystems":true},"in2DMode":true,"pivot":{"x":558.6393432617188,"y":208.42483520507813,"z":-38.5},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0},"size":404.1274719238281,"orthographic":true}
\ No newline at end of file
diff --git a/obj/Debug/Assembly-CSharp.csprojAssemblyReference.cache b/obj/Debug/Assembly-CSharp.csprojAssemblyReference.cache
index c1d0c890..da9220b0 100644
Binary files a/obj/Debug/Assembly-CSharp.csprojAssemblyReference.cache and b/obj/Debug/Assembly-CSharp.csprojAssemblyReference.cache differ