mirror of
				https://gitgud.io/AbstractConcept/rimworld-animation-studio.git
				synced 2024-08-15 00:43:27 +00:00 
			
		
		
		
	Remove and save custom tags
This commit is contained in:
		
							parent
							
								
									e36ef6a368
								
							
						
					
					
						commit
						2f3f807911
					
				
					 264 changed files with 1118 additions and 498 deletions
				
			
		
										
											Binary file not shown.
										
									
								
							| 
						 | 
				
			
			@ -63,7 +63,6 @@
 | 
			
		|||
    </Reference>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <Compile Include="Assets\DecimalValidator.cs" />
 | 
			
		||||
    <Compile Include="Assets\Scripts\AdvancedPolygonCollider\AdvancedPolygonCollider.cs" />
 | 
			
		||||
    <Compile Include="Assets\Scripts\AdvancedPolygonCollider\AdvancedPolygonColliderUtilities.cs" />
 | 
			
		||||
    <Compile Include="Assets\Scripts\AnimationComponents\Actor.cs" />
 | 
			
		||||
| 
						 | 
				
			
			@ -97,6 +96,7 @@
 | 
			
		|||
    <Compile Include="Assets\Scripts\GUI\DialogBoxes\SelectBodyPartsDialog.cs" />
 | 
			
		||||
    <Compile Include="Assets\Scripts\GUI\DialogBoxes\SelectDefNamesDialog.cs" />
 | 
			
		||||
    <Compile Include="Assets\Scripts\GUI\DialogBoxes\SelectInteractionDefsDialog.cs" />
 | 
			
		||||
    <Compile Include="Assets\Scripts\GUI\DialogBoxes\SelectRaceDialog.cs" />
 | 
			
		||||
    <Compile Include="Assets\Scripts\GUI\DialogBoxes\SelectSexTypesDialog.cs" />
 | 
			
		||||
    <Compile Include="Assets\Scripts\GUI\DialogBoxes\SelectSoundDefDialog.cs" />
 | 
			
		||||
    <Compile Include="Assets\Scripts\GUI\KeyframeSlider.cs" />
 | 
			
		||||
| 
						 | 
				
			
			@ -112,6 +112,7 @@
 | 
			
		|||
    <Compile Include="Assets\Scripts\Math\CurvePoint.cs" />
 | 
			
		||||
    <Compile Include="Assets\Scripts\Math\GenMath.cs" />
 | 
			
		||||
    <Compile Include="Assets\Scripts\Math\SimpleCurve.cs" />
 | 
			
		||||
    <Compile Include="Assets\Scripts\NumberValidator.cs" />
 | 
			
		||||
    <Compile Include="Assets\Scripts\RequiresAnimationDef.cs" />
 | 
			
		||||
    <Compile Include="Assets\Scripts\Singleton.cs" />
 | 
			
		||||
    <Compile Include="Assets\Scripts\StandaloneFileBrowser\IStandaloneFileBrowser.cs" />
 | 
			
		||||
| 
						 | 
				
			
			@ -131,6 +132,7 @@
 | 
			
		|||
    <Compile Include="Assets\Scripts\Workspace\HistoricRecord.cs" />
 | 
			
		||||
    <Compile Include="Assets\Scripts\Workspace\Workspace.cs" />
 | 
			
		||||
    <None Include="Assets\StreamingAssets\AnimationDefs\newAnimationDef.xml" />
 | 
			
		||||
    <None Include="Assets\StreamingAssets\customTags.xml" />
 | 
			
		||||
    <Reference Include="UnityEngine">
 | 
			
		||||
      <HintPath>C:/Program Files/Unity/Hub/Editor/2019.4.20f1/Editor/Data/Managed/UnityEngine/UnityEngine.dll</HintPath>
 | 
			
		||||
    </Reference>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,26 +0,0 @@
 | 
			
		|||
using System.Collections;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using UnityEngine;
 | 
			
		||||
using UnityEngine.UI;
 | 
			
		||||
 | 
			
		||||
public class DecimalValidator : MonoBehaviour
 | 
			
		||||
{
 | 
			
		||||
    public void Start()
 | 
			
		||||
    {
 | 
			
		||||
        InputField inputField = GetComponent<InputField>();
 | 
			
		||||
 | 
			
		||||
        if (inputField)
 | 
			
		||||
        { 
 | 
			
		||||
            inputField.characterValidation = InputField.CharacterValidation.Decimal;
 | 
			
		||||
            inputField.onEndEdit.AddListener(delegate { MakeDecimal(); });
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void MakeDecimal()
 | 
			
		||||
    {
 | 
			
		||||
        InputField inputField = GetComponent<InputField>();
 | 
			
		||||
 | 
			
		||||
        if (inputField)
 | 
			
		||||
        { inputField.text = string.Format("{0:0.00}", float.Parse(inputField.text)); }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -149,6 +149,124 @@ MonoBehaviour:
 | 
			
		|||
  m_FillOrigin: 0
 | 
			
		||||
  m_UseSpriteMesh: 0
 | 
			
		||||
  m_PixelsPerUnitMultiplier: 1
 | 
			
		||||
--- !u!1 &1523116857268836976
 | 
			
		||||
GameObject:
 | 
			
		||||
  m_ObjectHideFlags: 0
 | 
			
		||||
  m_CorrespondingSourceObject: {fileID: 0}
 | 
			
		||||
  m_PrefabInstance: {fileID: 0}
 | 
			
		||||
  m_PrefabAsset: {fileID: 0}
 | 
			
		||||
  serializedVersion: 6
 | 
			
		||||
  m_Component:
 | 
			
		||||
  - component: {fileID: 6027415342802426294}
 | 
			
		||||
  - component: {fileID: 6467300103242436351}
 | 
			
		||||
  - component: {fileID: 4878850006335192594}
 | 
			
		||||
  - component: {fileID: 2208470949959229117}
 | 
			
		||||
  m_Layer: 5
 | 
			
		||||
  m_Name: DeleteButton
 | 
			
		||||
  m_TagString: Untagged
 | 
			
		||||
  m_Icon: {fileID: 0}
 | 
			
		||||
  m_NavMeshLayer: 0
 | 
			
		||||
  m_StaticEditorFlags: 0
 | 
			
		||||
  m_IsActive: 0
 | 
			
		||||
--- !u!224 &6027415342802426294
 | 
			
		||||
RectTransform:
 | 
			
		||||
  m_ObjectHideFlags: 0
 | 
			
		||||
  m_CorrespondingSourceObject: {fileID: 0}
 | 
			
		||||
  m_PrefabInstance: {fileID: 0}
 | 
			
		||||
  m_PrefabAsset: {fileID: 0}
 | 
			
		||||
  m_GameObject: {fileID: 1523116857268836976}
 | 
			
		||||
  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
 | 
			
		||||
  m_LocalPosition: {x: 0, y: 0, z: 0}
 | 
			
		||||
  m_LocalScale: {x: 1, y: 1, z: 1}
 | 
			
		||||
  m_Children: []
 | 
			
		||||
  m_Father: {fileID: 8789161981077347466}
 | 
			
		||||
  m_RootOrder: 2
 | 
			
		||||
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 | 
			
		||||
  m_AnchorMin: {x: 1, y: 0.5}
 | 
			
		||||
  m_AnchorMax: {x: 1, y: 0.5}
 | 
			
		||||
  m_AnchoredPosition: {x: -20, y: 0}
 | 
			
		||||
  m_SizeDelta: {x: 20, y: 20}
 | 
			
		||||
  m_Pivot: {x: 0.5, y: 0.5}
 | 
			
		||||
--- !u!222 &6467300103242436351
 | 
			
		||||
CanvasRenderer:
 | 
			
		||||
  m_ObjectHideFlags: 0
 | 
			
		||||
  m_CorrespondingSourceObject: {fileID: 0}
 | 
			
		||||
  m_PrefabInstance: {fileID: 0}
 | 
			
		||||
  m_PrefabAsset: {fileID: 0}
 | 
			
		||||
  m_GameObject: {fileID: 1523116857268836976}
 | 
			
		||||
  m_CullTransparentMesh: 0
 | 
			
		||||
--- !u!114 &4878850006335192594
 | 
			
		||||
MonoBehaviour:
 | 
			
		||||
  m_ObjectHideFlags: 0
 | 
			
		||||
  m_CorrespondingSourceObject: {fileID: 0}
 | 
			
		||||
  m_PrefabInstance: {fileID: 0}
 | 
			
		||||
  m_PrefabAsset: {fileID: 0}
 | 
			
		||||
  m_GameObject: {fileID: 1523116857268836976}
 | 
			
		||||
  m_Enabled: 1
 | 
			
		||||
  m_EditorHideFlags: 0
 | 
			
		||||
  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
 | 
			
		||||
  m_Name: 
 | 
			
		||||
  m_EditorClassIdentifier: 
 | 
			
		||||
  m_Material: {fileID: 0}
 | 
			
		||||
  m_Color: {r: 1, g: 1, b: 1, a: 1}
 | 
			
		||||
  m_RaycastTarget: 1
 | 
			
		||||
  m_Maskable: 1
 | 
			
		||||
  m_OnCullStateChanged:
 | 
			
		||||
    m_PersistentCalls:
 | 
			
		||||
      m_Calls: []
 | 
			
		||||
  m_Sprite: {fileID: 21300000, guid: b0310c99dea57fb4d94c4d001d8e0ccf, type: 3}
 | 
			
		||||
  m_Type: 0
 | 
			
		||||
  m_PreserveAspect: 0
 | 
			
		||||
  m_FillCenter: 1
 | 
			
		||||
  m_FillMethod: 4
 | 
			
		||||
  m_FillAmount: 1
 | 
			
		||||
  m_FillClockwise: 1
 | 
			
		||||
  m_FillOrigin: 0
 | 
			
		||||
  m_UseSpriteMesh: 0
 | 
			
		||||
  m_PixelsPerUnitMultiplier: 1
 | 
			
		||||
--- !u!114 &2208470949959229117
 | 
			
		||||
MonoBehaviour:
 | 
			
		||||
  m_ObjectHideFlags: 0
 | 
			
		||||
  m_CorrespondingSourceObject: {fileID: 0}
 | 
			
		||||
  m_PrefabInstance: {fileID: 0}
 | 
			
		||||
  m_PrefabAsset: {fileID: 0}
 | 
			
		||||
  m_GameObject: {fileID: 1523116857268836976}
 | 
			
		||||
  m_Enabled: 1
 | 
			
		||||
  m_EditorHideFlags: 0
 | 
			
		||||
  m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
 | 
			
		||||
  m_Name: 
 | 
			
		||||
  m_EditorClassIdentifier: 
 | 
			
		||||
  m_Navigation:
 | 
			
		||||
    m_Mode: 3
 | 
			
		||||
    m_SelectOnUp: {fileID: 0}
 | 
			
		||||
    m_SelectOnDown: {fileID: 0}
 | 
			
		||||
    m_SelectOnLeft: {fileID: 0}
 | 
			
		||||
    m_SelectOnRight: {fileID: 0}
 | 
			
		||||
  m_Transition: 1
 | 
			
		||||
  m_Colors:
 | 
			
		||||
    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
 | 
			
		||||
    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
 | 
			
		||||
    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
 | 
			
		||||
    m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
 | 
			
		||||
    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
 | 
			
		||||
    m_ColorMultiplier: 1
 | 
			
		||||
    m_FadeDuration: 0.1
 | 
			
		||||
  m_SpriteState:
 | 
			
		||||
    m_HighlightedSprite: {fileID: 0}
 | 
			
		||||
    m_PressedSprite: {fileID: 0}
 | 
			
		||||
    m_SelectedSprite: {fileID: 0}
 | 
			
		||||
    m_DisabledSprite: {fileID: 0}
 | 
			
		||||
  m_AnimationTriggers:
 | 
			
		||||
    m_NormalTrigger: Normal
 | 
			
		||||
    m_HighlightedTrigger: Highlighted
 | 
			
		||||
    m_PressedTrigger: Pressed
 | 
			
		||||
    m_SelectedTrigger: Selected
 | 
			
		||||
    m_DisabledTrigger: Disabled
 | 
			
		||||
  m_Interactable: 1
 | 
			
		||||
  m_TargetGraphic: {fileID: 4878850006335192594}
 | 
			
		||||
  m_OnClick:
 | 
			
		||||
    m_PersistentCalls:
 | 
			
		||||
      m_Calls: []
 | 
			
		||||
--- !u!1 &5741932533636286456
 | 
			
		||||
GameObject:
 | 
			
		||||
  m_ObjectHideFlags: 0
 | 
			
		||||
| 
						 | 
				
			
			@ -258,6 +376,7 @@ RectTransform:
 | 
			
		|||
  m_Children:
 | 
			
		||||
  - {fileID: 9117359654058994387}
 | 
			
		||||
  - {fileID: 7815899355165658205}
 | 
			
		||||
  - {fileID: 6027415342802426294}
 | 
			
		||||
  m_Father: {fileID: 0}
 | 
			
		||||
  m_RootOrder: 0
 | 
			
		||||
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -503,6 +503,7 @@ GameObject:
 | 
			
		|||
  - component: {fileID: 74082977}
 | 
			
		||||
  - component: {fileID: 74082976}
 | 
			
		||||
  - component: {fileID: 74082975}
 | 
			
		||||
  - component: {fileID: 74082978}
 | 
			
		||||
  m_Layer: 5
 | 
			
		||||
  m_Name: CyclesNormalField
 | 
			
		||||
  m_TagString: Untagged
 | 
			
		||||
| 
						 | 
				
			
			@ -642,6 +643,19 @@ CanvasRenderer:
 | 
			
		|||
  m_PrefabAsset: {fileID: 0}
 | 
			
		||||
  m_GameObject: {fileID: 74082973}
 | 
			
		||||
  m_CullTransparentMesh: 0
 | 
			
		||||
--- !u!114 &74082978
 | 
			
		||||
MonoBehaviour:
 | 
			
		||||
  m_ObjectHideFlags: 0
 | 
			
		||||
  m_CorrespondingSourceObject: {fileID: 0}
 | 
			
		||||
  m_PrefabInstance: {fileID: 0}
 | 
			
		||||
  m_PrefabAsset: {fileID: 0}
 | 
			
		||||
  m_GameObject: {fileID: 74082973}
 | 
			
		||||
  m_Enabled: 1
 | 
			
		||||
  m_EditorHideFlags: 0
 | 
			
		||||
  m_Script: {fileID: 11500000, guid: 1f3886223a697384abc8109a51c855e2, type: 3}
 | 
			
		||||
  m_Name: 
 | 
			
		||||
  m_EditorClassIdentifier: 
 | 
			
		||||
  valiationType: 1
 | 
			
		||||
--- !u!1 &77649835
 | 
			
		||||
GameObject:
 | 
			
		||||
  m_ObjectHideFlags: 0
 | 
			
		||||
| 
						 | 
				
			
			@ -1961,6 +1975,7 @@ GameObject:
 | 
			
		|||
  - component: {fileID: 254347860}
 | 
			
		||||
  - component: {fileID: 254347859}
 | 
			
		||||
  - component: {fileID: 254347858}
 | 
			
		||||
  - component: {fileID: 254347862}
 | 
			
		||||
  m_Layer: 5
 | 
			
		||||
  m_Name: headBobField
 | 
			
		||||
  m_TagString: Untagged
 | 
			
		||||
| 
						 | 
				
			
			@ -2100,6 +2115,19 @@ RectTransform:
 | 
			
		|||
  m_AnchoredPosition: {x: 150, y: -24}
 | 
			
		||||
  m_SizeDelta: {x: 56.79773, y: 30}
 | 
			
		||||
  m_Pivot: {x: 0.5, y: 0.5}
 | 
			
		||||
--- !u!114 &254347862
 | 
			
		||||
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: 1f3886223a697384abc8109a51c855e2, type: 3}
 | 
			
		||||
  m_Name: 
 | 
			
		||||
  m_EditorClassIdentifier: 
 | 
			
		||||
  valiationType: 2
 | 
			
		||||
--- !u!1 &257242825
 | 
			
		||||
GameObject:
 | 
			
		||||
  m_ObjectHideFlags: 0
 | 
			
		||||
| 
						 | 
				
			
			@ -2397,6 +2425,84 @@ CanvasRenderer:
 | 
			
		|||
  m_PrefabAsset: {fileID: 0}
 | 
			
		||||
  m_GameObject: {fileID: 276491993}
 | 
			
		||||
  m_CullTransparentMesh: 0
 | 
			
		||||
--- !u!1 &278535031
 | 
			
		||||
GameObject:
 | 
			
		||||
  m_ObjectHideFlags: 0
 | 
			
		||||
  m_CorrespondingSourceObject: {fileID: 0}
 | 
			
		||||
  m_PrefabInstance: {fileID: 0}
 | 
			
		||||
  m_PrefabAsset: {fileID: 0}
 | 
			
		||||
  serializedVersion: 6
 | 
			
		||||
  m_Component:
 | 
			
		||||
  - component: {fileID: 278535032}
 | 
			
		||||
  - component: {fileID: 278535034}
 | 
			
		||||
  - component: {fileID: 278535033}
 | 
			
		||||
  m_Layer: 5
 | 
			
		||||
  m_Name: SelectRaceText
 | 
			
		||||
  m_TagString: Untagged
 | 
			
		||||
  m_Icon: {fileID: 0}
 | 
			
		||||
  m_NavMeshLayer: 0
 | 
			
		||||
  m_StaticEditorFlags: 0
 | 
			
		||||
  m_IsActive: 1
 | 
			
		||||
--- !u!224 &278535032
 | 
			
		||||
RectTransform:
 | 
			
		||||
  m_ObjectHideFlags: 0
 | 
			
		||||
  m_CorrespondingSourceObject: {fileID: 0}
 | 
			
		||||
  m_PrefabInstance: {fileID: 0}
 | 
			
		||||
  m_PrefabAsset: {fileID: 0}
 | 
			
		||||
  m_GameObject: {fileID: 278535031}
 | 
			
		||||
  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
 | 
			
		||||
  m_LocalPosition: {x: 0, y: 0, z: 0}
 | 
			
		||||
  m_LocalScale: {x: 1, y: 1, z: 1}
 | 
			
		||||
  m_Children: []
 | 
			
		||||
  m_Father: {fileID: 935483303140078260}
 | 
			
		||||
  m_RootOrder: 15
 | 
			
		||||
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 | 
			
		||||
  m_AnchorMin: {x: 0.5, y: 0.5}
 | 
			
		||||
  m_AnchorMax: {x: 0.5, y: 0.5}
 | 
			
		||||
  m_AnchoredPosition: {x: -121.45, y: -153}
 | 
			
		||||
  m_SizeDelta: {x: 160, y: 30}
 | 
			
		||||
  m_Pivot: {x: 0.5, y: 0.5}
 | 
			
		||||
--- !u!114 &278535033
 | 
			
		||||
MonoBehaviour:
 | 
			
		||||
  m_ObjectHideFlags: 0
 | 
			
		||||
  m_CorrespondingSourceObject: {fileID: 0}
 | 
			
		||||
  m_PrefabInstance: {fileID: 0}
 | 
			
		||||
  m_PrefabAsset: {fileID: 0}
 | 
			
		||||
  m_GameObject: {fileID: 278535031}
 | 
			
		||||
  m_Enabled: 1
 | 
			
		||||
  m_EditorHideFlags: 0
 | 
			
		||||
  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
 | 
			
		||||
  m_Name: 
 | 
			
		||||
  m_EditorClassIdentifier: 
 | 
			
		||||
  m_Material: {fileID: 0}
 | 
			
		||||
  m_Color: {r: 1, g: 1, b: 1, a: 1}
 | 
			
		||||
  m_RaycastTarget: 1
 | 
			
		||||
  m_Maskable: 1
 | 
			
		||||
  m_OnCullStateChanged:
 | 
			
		||||
    m_PersistentCalls:
 | 
			
		||||
      m_Calls: []
 | 
			
		||||
  m_FontData:
 | 
			
		||||
    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
 | 
			
		||||
    m_FontSize: 14
 | 
			
		||||
    m_FontStyle: 0
 | 
			
		||||
    m_BestFit: 0
 | 
			
		||||
    m_MinSize: 10
 | 
			
		||||
    m_MaxSize: 40
 | 
			
		||||
    m_Alignment: 0
 | 
			
		||||
    m_AlignByGeometry: 0
 | 
			
		||||
    m_RichText: 1
 | 
			
		||||
    m_HorizontalOverflow: 0
 | 
			
		||||
    m_VerticalOverflow: 0
 | 
			
		||||
    m_LineSpacing: 1
 | 
			
		||||
  m_Text: Select race
 | 
			
		||||
--- !u!222 &278535034
 | 
			
		||||
CanvasRenderer:
 | 
			
		||||
  m_ObjectHideFlags: 0
 | 
			
		||||
  m_CorrespondingSourceObject: {fileID: 0}
 | 
			
		||||
  m_PrefabInstance: {fileID: 0}
 | 
			
		||||
  m_PrefabAsset: {fileID: 0}
 | 
			
		||||
  m_GameObject: {fileID: 278535031}
 | 
			
		||||
  m_CullTransparentMesh: 0
 | 
			
		||||
--- !u!1 &284483058
 | 
			
		||||
GameObject:
 | 
			
		||||
  m_ObjectHideFlags: 0
 | 
			
		||||
| 
						 | 
				
			
			@ -3539,6 +3645,84 @@ Transform:
 | 
			
		|||
  m_Father: {fileID: 0}
 | 
			
		||||
  m_RootOrder: 1
 | 
			
		||||
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 | 
			
		||||
--- !u!1 &394719256
 | 
			
		||||
GameObject:
 | 
			
		||||
  m_ObjectHideFlags: 0
 | 
			
		||||
  m_CorrespondingSourceObject: {fileID: 0}
 | 
			
		||||
  m_PrefabInstance: {fileID: 0}
 | 
			
		||||
  m_PrefabAsset: {fileID: 0}
 | 
			
		||||
  serializedVersion: 6
 | 
			
		||||
  m_Component:
 | 
			
		||||
  - component: {fileID: 394719257}
 | 
			
		||||
  - component: {fileID: 394719259}
 | 
			
		||||
  - component: {fileID: 394719258}
 | 
			
		||||
  m_Layer: 5
 | 
			
		||||
  m_Name: Text
 | 
			
		||||
  m_TagString: Untagged
 | 
			
		||||
  m_Icon: {fileID: 0}
 | 
			
		||||
  m_NavMeshLayer: 0
 | 
			
		||||
  m_StaticEditorFlags: 0
 | 
			
		||||
  m_IsActive: 1
 | 
			
		||||
--- !u!224 &394719257
 | 
			
		||||
RectTransform:
 | 
			
		||||
  m_ObjectHideFlags: 0
 | 
			
		||||
  m_CorrespondingSourceObject: {fileID: 0}
 | 
			
		||||
  m_PrefabInstance: {fileID: 0}
 | 
			
		||||
  m_PrefabAsset: {fileID: 0}
 | 
			
		||||
  m_GameObject: {fileID: 394719256}
 | 
			
		||||
  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
 | 
			
		||||
  m_LocalPosition: {x: 0, y: 0, z: 0}
 | 
			
		||||
  m_LocalScale: {x: 1, y: 1, z: 1}
 | 
			
		||||
  m_Children: []
 | 
			
		||||
  m_Father: {fileID: 1845596333}
 | 
			
		||||
  m_RootOrder: 0
 | 
			
		||||
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 | 
			
		||||
  m_AnchorMin: {x: 0, y: 0}
 | 
			
		||||
  m_AnchorMax: {x: 1, y: 1}
 | 
			
		||||
  m_AnchoredPosition: {x: 0, y: 0}
 | 
			
		||||
  m_SizeDelta: {x: 0, y: 0}
 | 
			
		||||
  m_Pivot: {x: 0.5, y: 0.5}
 | 
			
		||||
--- !u!114 &394719258
 | 
			
		||||
MonoBehaviour:
 | 
			
		||||
  m_ObjectHideFlags: 0
 | 
			
		||||
  m_CorrespondingSourceObject: {fileID: 0}
 | 
			
		||||
  m_PrefabInstance: {fileID: 0}
 | 
			
		||||
  m_PrefabAsset: {fileID: 0}
 | 
			
		||||
  m_GameObject: {fileID: 394719256}
 | 
			
		||||
  m_Enabled: 1
 | 
			
		||||
  m_EditorHideFlags: 0
 | 
			
		||||
  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
 | 
			
		||||
  m_Name: 
 | 
			
		||||
  m_EditorClassIdentifier: 
 | 
			
		||||
  m_Material: {fileID: 0}
 | 
			
		||||
  m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
 | 
			
		||||
  m_RaycastTarget: 1
 | 
			
		||||
  m_Maskable: 1
 | 
			
		||||
  m_OnCullStateChanged:
 | 
			
		||||
    m_PersistentCalls:
 | 
			
		||||
      m_Calls: []
 | 
			
		||||
  m_FontData:
 | 
			
		||||
    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
 | 
			
		||||
    m_FontSize: 14
 | 
			
		||||
    m_FontStyle: 0
 | 
			
		||||
    m_BestFit: 0
 | 
			
		||||
    m_MinSize: 10
 | 
			
		||||
    m_MaxSize: 40
 | 
			
		||||
    m_Alignment: 4
 | 
			
		||||
    m_AlignByGeometry: 0
 | 
			
		||||
    m_RichText: 1
 | 
			
		||||
    m_HorizontalOverflow: 0
 | 
			
		||||
    m_VerticalOverflow: 0
 | 
			
		||||
    m_LineSpacing: 1
 | 
			
		||||
  m_Text: Human
 | 
			
		||||
--- !u!222 &394719259
 | 
			
		||||
CanvasRenderer:
 | 
			
		||||
  m_ObjectHideFlags: 0
 | 
			
		||||
  m_CorrespondingSourceObject: {fileID: 0}
 | 
			
		||||
  m_PrefabInstance: {fileID: 0}
 | 
			
		||||
  m_PrefabAsset: {fileID: 0}
 | 
			
		||||
  m_GameObject: {fileID: 394719256}
 | 
			
		||||
  m_CullTransparentMesh: 0
 | 
			
		||||
--- !u!1 &395375411
 | 
			
		||||
GameObject:
 | 
			
		||||
  m_ObjectHideFlags: 0
 | 
			
		||||
| 
						 | 
				
			
			@ -5314,7 +5498,7 @@ MonoBehaviour:
 | 
			
		|||
    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
 | 
			
		||||
    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
 | 
			
		||||
    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
 | 
			
		||||
    m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
 | 
			
		||||
    m_SelectedColor: {r: 1, g: 0, b: 0, a: 1}
 | 
			
		||||
    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
 | 
			
		||||
    m_ColorMultiplier: 1
 | 
			
		||||
    m_FadeDuration: 0.1
 | 
			
		||||
| 
						 | 
				
			
			@ -7773,6 +7957,7 @@ GameObject:
 | 
			
		|||
  - component: {fileID: 725162534}
 | 
			
		||||
  - component: {fileID: 725162533}
 | 
			
		||||
  - component: {fileID: 725162532}
 | 
			
		||||
  - component: {fileID: 725162535}
 | 
			
		||||
  m_Layer: 5
 | 
			
		||||
  m_Name: rotationField
 | 
			
		||||
  m_TagString: Untagged
 | 
			
		||||
| 
						 | 
				
			
			@ -7912,6 +8097,19 @@ CanvasRenderer:
 | 
			
		|||
  m_PrefabAsset: {fileID: 0}
 | 
			
		||||
  m_GameObject: {fileID: 725162530}
 | 
			
		||||
  m_CullTransparentMesh: 0
 | 
			
		||||
--- !u!114 &725162535
 | 
			
		||||
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: 1f3886223a697384abc8109a51c855e2, type: 3}
 | 
			
		||||
  m_Name: 
 | 
			
		||||
  m_EditorClassIdentifier: 
 | 
			
		||||
  valiationType: 2
 | 
			
		||||
--- !u!1 &740545694
 | 
			
		||||
GameObject:
 | 
			
		||||
  m_ObjectHideFlags: 0
 | 
			
		||||
| 
						 | 
				
			
			@ -7984,9 +8182,9 @@ RectTransform:
 | 
			
		|||
  m_RootOrder: 1
 | 
			
		||||
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 | 
			
		||||
  m_AnchorMin: {x: 0, y: 0}
 | 
			
		||||
  m_AnchorMax: {x: 1, y: 1}
 | 
			
		||||
  m_AnchorMax: {x: 0, y: 0}
 | 
			
		||||
  m_AnchoredPosition: {x: 0, y: 0}
 | 
			
		||||
  m_SizeDelta: {x: -17, y: 0}
 | 
			
		||||
  m_SizeDelta: {x: 0, y: 0}
 | 
			
		||||
  m_Pivot: {x: 0, y: 1}
 | 
			
		||||
--- !u!114 &749354208
 | 
			
		||||
MonoBehaviour:
 | 
			
		||||
| 
						 | 
				
			
			@ -8064,6 +8262,7 @@ GameObject:
 | 
			
		|||
  - component: {fileID: 760297269}
 | 
			
		||||
  - component: {fileID: 760297268}
 | 
			
		||||
  - component: {fileID: 760297267}
 | 
			
		||||
  - component: {fileID: 760297270}
 | 
			
		||||
  m_Layer: 5
 | 
			
		||||
  m_Name: AnimationClipTimeField
 | 
			
		||||
  m_TagString: Untagged
 | 
			
		||||
| 
						 | 
				
			
			@ -8203,6 +8402,19 @@ CanvasRenderer:
 | 
			
		|||
  m_PrefabAsset: {fileID: 0}
 | 
			
		||||
  m_GameObject: {fileID: 760297265}
 | 
			
		||||
  m_CullTransparentMesh: 0
 | 
			
		||||
--- !u!114 &760297270
 | 
			
		||||
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: 1f3886223a697384abc8109a51c855e2, type: 3}
 | 
			
		||||
  m_Name: 
 | 
			
		||||
  m_EditorClassIdentifier: 
 | 
			
		||||
  valiationType: 1
 | 
			
		||||
--- !u!1 &765752266
 | 
			
		||||
GameObject:
 | 
			
		||||
  m_ObjectHideFlags: 0
 | 
			
		||||
| 
						 | 
				
			
			@ -8789,6 +9001,7 @@ GameObject:
 | 
			
		|||
  - component: {fileID: 891720217}
 | 
			
		||||
  - component: {fileID: 891720216}
 | 
			
		||||
  - component: {fileID: 891720215}
 | 
			
		||||
  - component: {fileID: 891720218}
 | 
			
		||||
  m_Layer: 5
 | 
			
		||||
  m_Name: posOffsetXField
 | 
			
		||||
  m_TagString: Untagged
 | 
			
		||||
| 
						 | 
				
			
			@ -8928,6 +9141,19 @@ CanvasRenderer:
 | 
			
		|||
  m_PrefabAsset: {fileID: 0}
 | 
			
		||||
  m_GameObject: {fileID: 891720213}
 | 
			
		||||
  m_CullTransparentMesh: 0
 | 
			
		||||
--- !u!114 &891720218
 | 
			
		||||
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: 1f3886223a697384abc8109a51c855e2, type: 3}
 | 
			
		||||
  m_Name: 
 | 
			
		||||
  m_EditorClassIdentifier: 
 | 
			
		||||
  valiationType: 2
 | 
			
		||||
--- !u!1 &898059650
 | 
			
		||||
GameObject:
 | 
			
		||||
  m_ObjectHideFlags: 0
 | 
			
		||||
| 
						 | 
				
			
			@ -11587,7 +11813,7 @@ MonoBehaviour:
 | 
			
		|||
  m_TargetGraphic: {fileID: 922060210}
 | 
			
		||||
  m_HandleRect: {fileID: 922060209}
 | 
			
		||||
  m_Direction: 2
 | 
			
		||||
  m_Value: 1
 | 
			
		||||
  m_Value: 0
 | 
			
		||||
  m_Size: 1
 | 
			
		||||
  m_NumberOfSteps: 0
 | 
			
		||||
  m_OnValueChanged:
 | 
			
		||||
| 
						 | 
				
			
			@ -14723,7 +14949,7 @@ MonoBehaviour:
 | 
			
		|||
    m_HorizontalOverflow: 1
 | 
			
		||||
    m_VerticalOverflow: 0
 | 
			
		||||
    m_LineSpacing: 1
 | 
			
		||||
  m_Text: 1.00
 | 
			
		||||
  m_Text: 1.000
 | 
			
		||||
--- !u!222 &1410953726
 | 
			
		||||
CanvasRenderer:
 | 
			
		||||
  m_ObjectHideFlags: 0
 | 
			
		||||
| 
						 | 
				
			
			@ -15288,6 +15514,7 @@ GameObject:
 | 
			
		|||
  - component: {fileID: 1463915056}
 | 
			
		||||
  - component: {fileID: 1463915055}
 | 
			
		||||
  - component: {fileID: 1463915054}
 | 
			
		||||
  - component: {fileID: 1463915057}
 | 
			
		||||
  m_Layer: 5
 | 
			
		||||
  m_Name: CyclesFastField
 | 
			
		||||
  m_TagString: Untagged
 | 
			
		||||
| 
						 | 
				
			
			@ -15427,6 +15654,19 @@ CanvasRenderer:
 | 
			
		|||
  m_PrefabAsset: {fileID: 0}
 | 
			
		||||
  m_GameObject: {fileID: 1463915052}
 | 
			
		||||
  m_CullTransparentMesh: 0
 | 
			
		||||
--- !u!114 &1463915057
 | 
			
		||||
MonoBehaviour:
 | 
			
		||||
  m_ObjectHideFlags: 0
 | 
			
		||||
  m_CorrespondingSourceObject: {fileID: 0}
 | 
			
		||||
  m_PrefabInstance: {fileID: 0}
 | 
			
		||||
  m_PrefabAsset: {fileID: 0}
 | 
			
		||||
  m_GameObject: {fileID: 1463915052}
 | 
			
		||||
  m_Enabled: 1
 | 
			
		||||
  m_EditorHideFlags: 0
 | 
			
		||||
  m_Script: {fileID: 11500000, guid: 1f3886223a697384abc8109a51c855e2, type: 3}
 | 
			
		||||
  m_Name: 
 | 
			
		||||
  m_EditorClassIdentifier: 
 | 
			
		||||
  valiationType: 1
 | 
			
		||||
--- !u!1 &1470448626
 | 
			
		||||
GameObject:
 | 
			
		||||
  m_ObjectHideFlags: 0
 | 
			
		||||
| 
						 | 
				
			
			@ -16302,6 +16542,7 @@ GameObject:
 | 
			
		|||
  - component: {fileID: 1518099310}
 | 
			
		||||
  - component: {fileID: 1518099309}
 | 
			
		||||
  - component: {fileID: 1518099308}
 | 
			
		||||
  - component: {fileID: 1518099311}
 | 
			
		||||
  m_Layer: 5
 | 
			
		||||
  m_Name: posOffsetZField
 | 
			
		||||
  m_TagString: Untagged
 | 
			
		||||
| 
						 | 
				
			
			@ -16441,6 +16682,19 @@ CanvasRenderer:
 | 
			
		|||
  m_PrefabAsset: {fileID: 0}
 | 
			
		||||
  m_GameObject: {fileID: 1518099306}
 | 
			
		||||
  m_CullTransparentMesh: 0
 | 
			
		||||
--- !u!114 &1518099311
 | 
			
		||||
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: 1f3886223a697384abc8109a51c855e2, type: 3}
 | 
			
		||||
  m_Name: 
 | 
			
		||||
  m_EditorClassIdentifier: 
 | 
			
		||||
  valiationType: 2
 | 
			
		||||
--- !u!1 &1525472286
 | 
			
		||||
GameObject:
 | 
			
		||||
  m_ObjectHideFlags: 0
 | 
			
		||||
| 
						 | 
				
			
			@ -17405,7 +17659,7 @@ MonoBehaviour:
 | 
			
		|||
  m_CaretColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
 | 
			
		||||
  m_CustomCaretColor: 0
 | 
			
		||||
  m_SelectionColor: {r: 0.65882355, g: 0.80784315, b: 1, a: 0.7529412}
 | 
			
		||||
  m_Text: 1.00
 | 
			
		||||
  m_Text: 1.000
 | 
			
		||||
  m_CaretBlinkRate: 0.85
 | 
			
		||||
  m_CaretWidth: 1
 | 
			
		||||
  m_ReadOnly: 0
 | 
			
		||||
| 
						 | 
				
			
			@ -17459,6 +17713,7 @@ MonoBehaviour:
 | 
			
		|||
  m_Script: {fileID: 11500000, guid: 1f3886223a697384abc8109a51c855e2, type: 3}
 | 
			
		||||
  m_Name: 
 | 
			
		||||
  m_EditorClassIdentifier: 
 | 
			
		||||
  valiationType: 2
 | 
			
		||||
--- !u!1 &1588340712
 | 
			
		||||
GameObject:
 | 
			
		||||
  m_ObjectHideFlags: 0
 | 
			
		||||
| 
						 | 
				
			
			@ -17922,6 +18177,7 @@ GameObject:
 | 
			
		|||
  - component: {fileID: 1668270820}
 | 
			
		||||
  - component: {fileID: 1668270819}
 | 
			
		||||
  - component: {fileID: 1668270818}
 | 
			
		||||
  - component: {fileID: 1668270821}
 | 
			
		||||
  m_Layer: 5
 | 
			
		||||
  m_Name: appendageRotationField
 | 
			
		||||
  m_TagString: Untagged
 | 
			
		||||
| 
						 | 
				
			
			@ -18061,6 +18317,19 @@ CanvasRenderer:
 | 
			
		|||
  m_PrefabAsset: {fileID: 0}
 | 
			
		||||
  m_GameObject: {fileID: 1668270816}
 | 
			
		||||
  m_CullTransparentMesh: 0
 | 
			
		||||
--- !u!114 &1668270821
 | 
			
		||||
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: 1f3886223a697384abc8109a51c855e2, type: 3}
 | 
			
		||||
  m_Name: 
 | 
			
		||||
  m_EditorClassIdentifier: 
 | 
			
		||||
  valiationType: 2
 | 
			
		||||
--- !u!1 &1670013372
 | 
			
		||||
GameObject:
 | 
			
		||||
  m_ObjectHideFlags: 0
 | 
			
		||||
| 
						 | 
				
			
			@ -18229,6 +18498,7 @@ GameObject:
 | 
			
		|||
  - component: {fileID: 1676585157}
 | 
			
		||||
  - component: {fileID: 1676585156}
 | 
			
		||||
  - component: {fileID: 1676585155}
 | 
			
		||||
  - component: {fileID: 1676585158}
 | 
			
		||||
  m_Layer: 5
 | 
			
		||||
  m_Name: AnimationClipLengthField
 | 
			
		||||
  m_TagString: Untagged
 | 
			
		||||
| 
						 | 
				
			
			@ -18368,6 +18638,19 @@ CanvasRenderer:
 | 
			
		|||
  m_PrefabAsset: {fileID: 0}
 | 
			
		||||
  m_GameObject: {fileID: 1676585153}
 | 
			
		||||
  m_CullTransparentMesh: 0
 | 
			
		||||
--- !u!114 &1676585158
 | 
			
		||||
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: 1f3886223a697384abc8109a51c855e2, type: 3}
 | 
			
		||||
  m_Name: 
 | 
			
		||||
  m_EditorClassIdentifier: 
 | 
			
		||||
  valiationType: 1
 | 
			
		||||
--- !u!1 &1697817321
 | 
			
		||||
GameObject:
 | 
			
		||||
  m_ObjectHideFlags: 0
 | 
			
		||||
| 
						 | 
				
			
			@ -18848,6 +19131,7 @@ GameObject:
 | 
			
		|||
  - component: {fileID: 1767445799}
 | 
			
		||||
  - component: {fileID: 1767445798}
 | 
			
		||||
  - component: {fileID: 1767445797}
 | 
			
		||||
  - component: {fileID: 1767445801}
 | 
			
		||||
  m_Layer: 5
 | 
			
		||||
  m_Name: headRotationField
 | 
			
		||||
  m_TagString: Untagged
 | 
			
		||||
| 
						 | 
				
			
			@ -18987,6 +19271,19 @@ RectTransform:
 | 
			
		|||
  m_AnchoredPosition: {x: 154.61, y: -62.3}
 | 
			
		||||
  m_SizeDelta: {x: 56.79773, y: 30}
 | 
			
		||||
  m_Pivot: {x: 0.5, y: 0.5}
 | 
			
		||||
--- !u!114 &1767445801
 | 
			
		||||
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: 1f3886223a697384abc8109a51c855e2, type: 3}
 | 
			
		||||
  m_Name: 
 | 
			
		||||
  m_EditorClassIdentifier: 
 | 
			
		||||
  valiationType: 2
 | 
			
		||||
--- !u!1 &1777266407
 | 
			
		||||
GameObject:
 | 
			
		||||
  m_ObjectHideFlags: 0
 | 
			
		||||
| 
						 | 
				
			
			@ -19613,6 +19910,125 @@ RectTransform:
 | 
			
		|||
  m_AnchoredPosition: {x: 0, y: 0}
 | 
			
		||||
  m_SizeDelta: {x: -20, y: -20}
 | 
			
		||||
  m_Pivot: {x: 0.5, y: 0.5}
 | 
			
		||||
--- !u!1 &1845596332
 | 
			
		||||
GameObject:
 | 
			
		||||
  m_ObjectHideFlags: 0
 | 
			
		||||
  m_CorrespondingSourceObject: {fileID: 0}
 | 
			
		||||
  m_PrefabInstance: {fileID: 0}
 | 
			
		||||
  m_PrefabAsset: {fileID: 0}
 | 
			
		||||
  serializedVersion: 6
 | 
			
		||||
  m_Component:
 | 
			
		||||
  - component: {fileID: 1845596333}
 | 
			
		||||
  - component: {fileID: 1845596336}
 | 
			
		||||
  - component: {fileID: 1845596335}
 | 
			
		||||
  - component: {fileID: 1845596334}
 | 
			
		||||
  m_Layer: 5
 | 
			
		||||
  m_Name: SelectRaceButton
 | 
			
		||||
  m_TagString: Untagged
 | 
			
		||||
  m_Icon: {fileID: 0}
 | 
			
		||||
  m_NavMeshLayer: 0
 | 
			
		||||
  m_StaticEditorFlags: 0
 | 
			
		||||
  m_IsActive: 1
 | 
			
		||||
--- !u!224 &1845596333
 | 
			
		||||
RectTransform:
 | 
			
		||||
  m_ObjectHideFlags: 0
 | 
			
		||||
  m_CorrespondingSourceObject: {fileID: 0}
 | 
			
		||||
  m_PrefabInstance: {fileID: 0}
 | 
			
		||||
  m_PrefabAsset: {fileID: 0}
 | 
			
		||||
  m_GameObject: {fileID: 1845596332}
 | 
			
		||||
  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
 | 
			
		||||
  m_LocalPosition: {x: 0, y: 0, z: 0}
 | 
			
		||||
  m_LocalScale: {x: 1, y: 1, z: 1}
 | 
			
		||||
  m_Children:
 | 
			
		||||
  - {fileID: 394719257}
 | 
			
		||||
  m_Father: {fileID: 935483303140078260}
 | 
			
		||||
  m_RootOrder: 14
 | 
			
		||||
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 | 
			
		||||
  m_AnchorMin: {x: 0.5, y: 0.5}
 | 
			
		||||
  m_AnchorMax: {x: 0.5, y: 0.5}
 | 
			
		||||
  m_AnchoredPosition: {x: -45.6, y: -153}
 | 
			
		||||
  m_SizeDelta: {x: 160, y: 30}
 | 
			
		||||
  m_Pivot: {x: 0.5, y: 0.5}
 | 
			
		||||
--- !u!114 &1845596334
 | 
			
		||||
MonoBehaviour:
 | 
			
		||||
  m_ObjectHideFlags: 0
 | 
			
		||||
  m_CorrespondingSourceObject: {fileID: 0}
 | 
			
		||||
  m_PrefabInstance: {fileID: 0}
 | 
			
		||||
  m_PrefabAsset: {fileID: 0}
 | 
			
		||||
  m_GameObject: {fileID: 1845596332}
 | 
			
		||||
  m_Enabled: 1
 | 
			
		||||
  m_EditorHideFlags: 0
 | 
			
		||||
  m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
 | 
			
		||||
  m_Name: 
 | 
			
		||||
  m_EditorClassIdentifier: 
 | 
			
		||||
  m_Navigation:
 | 
			
		||||
    m_Mode: 3
 | 
			
		||||
    m_SelectOnUp: {fileID: 0}
 | 
			
		||||
    m_SelectOnDown: {fileID: 0}
 | 
			
		||||
    m_SelectOnLeft: {fileID: 0}
 | 
			
		||||
    m_SelectOnRight: {fileID: 0}
 | 
			
		||||
  m_Transition: 1
 | 
			
		||||
  m_Colors:
 | 
			
		||||
    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
 | 
			
		||||
    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
 | 
			
		||||
    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
 | 
			
		||||
    m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
 | 
			
		||||
    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
 | 
			
		||||
    m_ColorMultiplier: 1
 | 
			
		||||
    m_FadeDuration: 0.1
 | 
			
		||||
  m_SpriteState:
 | 
			
		||||
    m_HighlightedSprite: {fileID: 0}
 | 
			
		||||
    m_PressedSprite: {fileID: 0}
 | 
			
		||||
    m_SelectedSprite: {fileID: 0}
 | 
			
		||||
    m_DisabledSprite: {fileID: 0}
 | 
			
		||||
  m_AnimationTriggers:
 | 
			
		||||
    m_NormalTrigger: Normal
 | 
			
		||||
    m_HighlightedTrigger: Highlighted
 | 
			
		||||
    m_PressedTrigger: Pressed
 | 
			
		||||
    m_SelectedTrigger: Selected
 | 
			
		||||
    m_DisabledTrigger: Disabled
 | 
			
		||||
  m_Interactable: 1
 | 
			
		||||
  m_TargetGraphic: {fileID: 1845596335}
 | 
			
		||||
  m_OnClick:
 | 
			
		||||
    m_PersistentCalls:
 | 
			
		||||
      m_Calls: []
 | 
			
		||||
--- !u!114 &1845596335
 | 
			
		||||
MonoBehaviour:
 | 
			
		||||
  m_ObjectHideFlags: 0
 | 
			
		||||
  m_CorrespondingSourceObject: {fileID: 0}
 | 
			
		||||
  m_PrefabInstance: {fileID: 0}
 | 
			
		||||
  m_PrefabAsset: {fileID: 0}
 | 
			
		||||
  m_GameObject: {fileID: 1845596332}
 | 
			
		||||
  m_Enabled: 1
 | 
			
		||||
  m_EditorHideFlags: 0
 | 
			
		||||
  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
 | 
			
		||||
  m_Name: 
 | 
			
		||||
  m_EditorClassIdentifier: 
 | 
			
		||||
  m_Material: {fileID: 0}
 | 
			
		||||
  m_Color: {r: 1, g: 1, b: 1, a: 1}
 | 
			
		||||
  m_RaycastTarget: 1
 | 
			
		||||
  m_Maskable: 1
 | 
			
		||||
  m_OnCullStateChanged:
 | 
			
		||||
    m_PersistentCalls:
 | 
			
		||||
      m_Calls: []
 | 
			
		||||
  m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
 | 
			
		||||
  m_Type: 1
 | 
			
		||||
  m_PreserveAspect: 0
 | 
			
		||||
  m_FillCenter: 1
 | 
			
		||||
  m_FillMethod: 4
 | 
			
		||||
  m_FillAmount: 1
 | 
			
		||||
  m_FillClockwise: 1
 | 
			
		||||
  m_FillOrigin: 0
 | 
			
		||||
  m_UseSpriteMesh: 0
 | 
			
		||||
  m_PixelsPerUnitMultiplier: 1
 | 
			
		||||
--- !u!222 &1845596336
 | 
			
		||||
CanvasRenderer:
 | 
			
		||||
  m_ObjectHideFlags: 0
 | 
			
		||||
  m_CorrespondingSourceObject: {fileID: 0}
 | 
			
		||||
  m_PrefabInstance: {fileID: 0}
 | 
			
		||||
  m_PrefabAsset: {fileID: 0}
 | 
			
		||||
  m_GameObject: {fileID: 1845596332}
 | 
			
		||||
  m_CullTransparentMesh: 0
 | 
			
		||||
--- !u!1 &1849536739
 | 
			
		||||
GameObject:
 | 
			
		||||
  m_ObjectHideFlags: 0
 | 
			
		||||
| 
						 | 
				
			
			@ -22159,6 +22575,8 @@ RectTransform:
 | 
			
		|||
  - {fileID: 4070467796814498374}
 | 
			
		||||
  - {fileID: 671921654}
 | 
			
		||||
  - {fileID: 1051936261}
 | 
			
		||||
  - {fileID: 1845596333}
 | 
			
		||||
  - {fileID: 278535032}
 | 
			
		||||
  m_Father: {fileID: 531246357}
 | 
			
		||||
  m_RootOrder: 5
 | 
			
		||||
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 | 
			
		||||
| 
						 | 
				
			
			@ -23449,6 +23867,7 @@ GameObject:
 | 
			
		|||
  - component: {fileID: 935483304128418016}
 | 
			
		||||
  - component: {fileID: 935483304128418017}
 | 
			
		||||
  - component: {fileID: 935483304128418022}
 | 
			
		||||
  - component: {fileID: 935483304128418021}
 | 
			
		||||
  m_Layer: 5
 | 
			
		||||
  m_Name: BodyOffsetZField
 | 
			
		||||
  m_TagString: Untagged
 | 
			
		||||
| 
						 | 
				
			
			@ -23456,6 +23875,19 @@ GameObject:
 | 
			
		|||
  m_NavMeshLayer: 0
 | 
			
		||||
  m_StaticEditorFlags: 0
 | 
			
		||||
  m_IsActive: 1
 | 
			
		||||
--- !u!114 &935483304128418021
 | 
			
		||||
MonoBehaviour:
 | 
			
		||||
  m_ObjectHideFlags: 0
 | 
			
		||||
  m_CorrespondingSourceObject: {fileID: 0}
 | 
			
		||||
  m_PrefabInstance: {fileID: 0}
 | 
			
		||||
  m_PrefabAsset: {fileID: 0}
 | 
			
		||||
  m_GameObject: {fileID: 935483304128418020}
 | 
			
		||||
  m_Enabled: 1
 | 
			
		||||
  m_EditorHideFlags: 0
 | 
			
		||||
  m_Script: {fileID: 11500000, guid: 1f3886223a697384abc8109a51c855e2, type: 3}
 | 
			
		||||
  m_Name: 
 | 
			
		||||
  m_EditorClassIdentifier: 
 | 
			
		||||
  valiationType: 2
 | 
			
		||||
--- !u!114 &935483304128418022
 | 
			
		||||
MonoBehaviour:
 | 
			
		||||
  m_ObjectHideFlags: 0
 | 
			
		||||
| 
						 | 
				
			
			@ -23803,6 +24235,7 @@ GameObject:
 | 
			
		|||
  - component: {fileID: 935483304332071715}
 | 
			
		||||
  - component: {fileID: 935483304332071712}
 | 
			
		||||
  - component: {fileID: 935483304332071713}
 | 
			
		||||
  - component: {fileID: 935483304332071720}
 | 
			
		||||
  m_Layer: 5
 | 
			
		||||
  m_Name: BodyOffsetXField
 | 
			
		||||
  m_TagString: Untagged
 | 
			
		||||
| 
						 | 
				
			
			@ -23810,6 +24243,19 @@ GameObject:
 | 
			
		|||
  m_NavMeshLayer: 0
 | 
			
		||||
  m_StaticEditorFlags: 0
 | 
			
		||||
  m_IsActive: 1
 | 
			
		||||
--- !u!114 &935483304332071720
 | 
			
		||||
MonoBehaviour:
 | 
			
		||||
  m_ObjectHideFlags: 0
 | 
			
		||||
  m_CorrespondingSourceObject: {fileID: 0}
 | 
			
		||||
  m_PrefabInstance: {fileID: 0}
 | 
			
		||||
  m_PrefabAsset: {fileID: 0}
 | 
			
		||||
  m_GameObject: {fileID: 935483304332071719}
 | 
			
		||||
  m_Enabled: 1
 | 
			
		||||
  m_EditorHideFlags: 0
 | 
			
		||||
  m_Script: {fileID: 11500000, guid: 1f3886223a697384abc8109a51c855e2, type: 3}
 | 
			
		||||
  m_Name: 
 | 
			
		||||
  m_EditorClassIdentifier: 
 | 
			
		||||
  valiationType: 2
 | 
			
		||||
--- !u!224 &935483304393168322
 | 
			
		||||
RectTransform:
 | 
			
		||||
  m_ObjectHideFlags: 0
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,5 @@
 | 
			
		|||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Xml;
 | 
			
		||||
using System.Xml.Serialization;
 | 
			
		||||
using UnityEngine;
 | 
			
		||||
| 
						 | 
				
			
			@ -16,11 +17,13 @@ namespace RimWorldAnimationStudio
 | 
			
		|||
        [XmlArray("tags"), XmlArrayItem("li")] public List<string> tags;
 | 
			
		||||
 | 
			
		||||
        [XmlIgnore] public ActorGender gender;
 | 
			
		||||
        [XmlIgnore] public string raceDef;
 | 
			
		||||
 | 
			
		||||
        public BodyTypeOffset bodyTypeOffset = new BodyTypeOffset();
 | 
			
		||||
        public bool initiator = false;
 | 
			
		||||
        public bool? controlGenitalAngle;
 | 
			
		||||
        public bool? isFucking;
 | 
			
		||||
        public bool? isFucked;
 | 
			
		||||
        public bool controlGenitalAngle;
 | 
			
		||||
        public bool isFucking;
 | 
			
		||||
        public bool isFucked;
 | 
			
		||||
 | 
			
		||||
        public bool ShouldSerializedefNames() { return defNames.NotNullOrEmpty(); }
 | 
			
		||||
        public bool ShouldSerializebodyDefTypes() { return bodyDefTypes.NotNullOrEmpty(); }
 | 
			
		||||
| 
						 | 
				
			
			@ -30,9 +33,16 @@ namespace RimWorldAnimationStudio
 | 
			
		|||
        public bool ShouldSerializeblacklistedRaces() { return blacklistedRaces.NotNullOrEmpty(); }
 | 
			
		||||
        public bool ShouldSerializetags() { return tags.NotNullOrEmpty(); }
 | 
			
		||||
 | 
			
		||||
        public bool ShouldSerializecontrolGenitalAngle() { return controlGenitalAngle != null; }
 | 
			
		||||
        public bool ShouldSerializeisFucking() { return isFucking != null; }
 | 
			
		||||
        public bool ShouldSerializeisFucked() { return isFucked != null; }
 | 
			
		||||
        public bool ShouldSerializecontrolGenitalAngle() { return controlGenitalAngle; }
 | 
			
		||||
        public bool ShouldSerializeisFucking() { return isFucking; }
 | 
			
		||||
        public bool ShouldSerializeisFucked() { return isFucked; }
 | 
			
		||||
 | 
			
		||||
        public void ValidateData()
 | 
			
		||||
        {
 | 
			
		||||
            defNames = defNames.Intersect(Tags.defNames.Concat(CustomTags.defNames))?.ToList();
 | 
			
		||||
            bodyDefTypes = bodyDefTypes.Intersect(Tags.bodyDefTypes.Concat(CustomTags.bodyDefTypes))?.ToList();
 | 
			
		||||
            requiredGenitals = requiredGenitals.Intersect(Tags.bodyParts.Concat(CustomTags.bodyParts))?.ToList();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool MakeNew()
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,5 +17,10 @@ namespace RimWorldAnimationStudio
 | 
			
		|||
        public abstract void BuildSimpleCurves();
 | 
			
		||||
 | 
			
		||||
        public bool ShouldSerializetags() { return tags.NotNullOrEmpty(); }
 | 
			
		||||
 | 
			
		||||
        public virtual void ValidateData()
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -88,6 +88,11 @@ namespace RimWorldAnimationStudio
 | 
			
		|||
            keyframes[keyframes.Count - 1].tickDuration = 1;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override void ValidateData()
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool MakeNew()
 | 
			
		||||
        {
 | 
			
		||||
            PawnKeyframe keyframeA = new PawnKeyframe();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,9 +14,8 @@ namespace RimWorldAnimationStudio
 | 
			
		|||
 | 
			
		||||
        [XmlArray("sexTypes"), XmlArrayItem("li")] public List<string> sexTypes = new List<string>();
 | 
			
		||||
        [XmlArray("interactionDefTypes"), XmlArrayItem("li")] public List<string> interactionDefTypes = new List<string>();
 | 
			
		||||
        [XmlArray("actors"), XmlArrayItem("li")] public List<Actor> actors = new List<Actor>();
 | 
			
		||||
        [XmlArray("actors"), XmlArrayItem("li")] public List<Actor> actors = new List<Actor>();     
 | 
			
		||||
        [XmlArray("animationStages"), XmlArrayItem("li")] public List<AnimationStage> animationStages = new List<AnimationStage>();
 | 
			
		||||
 | 
			
		||||
        [XmlIgnore] public int animationTimeTicks = 0;
 | 
			
		||||
 | 
			
		||||
        public void Initialize()
 | 
			
		||||
| 
						 | 
				
			
			@ -30,60 +29,10 @@ namespace RimWorldAnimationStudio
 | 
			
		|||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // move to app manager
 | 
			
		||||
        public void RunPreSaveOperations()
 | 
			
		||||
        public void ValidateData()
 | 
			
		||||
        {
 | 
			
		||||
            // Stage edits
 | 
			
		||||
            for (int i = 0; i < animationStages.Count; i++)
 | 
			
		||||
            {
 | 
			
		||||
                AnimationStage stage = animationStages[i];
 | 
			
		||||
 | 
			
		||||
                // Sort keyframes by atTick
 | 
			
		||||
                foreach (PawnAnimationClip clip in stage.animationClips)
 | 
			
		||||
                { clip.keyframes = clip.keyframes.OrderBy(x => x.atTick).ToList(); }
 | 
			
		||||
 | 
			
		||||
                // Check if looping
 | 
			
		||||
                int stageWindowSize = animationStages[i].stageWindowSize > 0 ? animationStages[i].stageWindowSize : animationStages[i].animationClips.Select(x => x.duration).Max();
 | 
			
		||||
                int cycles = Mathf.CeilToInt(animationStages[i].playTimeTicks / stageWindowSize);
 | 
			
		||||
 | 
			
		||||
                stage.isLooping = cycles > 1;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Actor edits
 | 
			
		||||
            for (int i = 0; i < actors.Count; i++)
 | 
			
		||||
            {
 | 
			
		||||
                Actor actor = actors[i];
 | 
			
		||||
 | 
			
		||||
                actor.isFucking = actor.requiredGenitals.Contains("Any appendage") ? (bool?)true : null;
 | 
			
		||||
 | 
			
		||||
                if (actor.isFucking == true)
 | 
			
		||||
                { actor.requiredGenitals.Remove("Any appendage"); }
 | 
			
		||||
 | 
			
		||||
                actor.isFucked = actor.requiredGenitals.Contains("Any orifice") ? (bool?)true : null;
 | 
			
		||||
 | 
			
		||||
                if (actor.isFucked == true)
 | 
			
		||||
                { actor.requiredGenitals.Remove("Any orifice"); }
 | 
			
		||||
            
 | 
			
		||||
                actor.controlGenitalAngle = animationStages.Any(x => x.animationClips[i].keyframes.Any(y => y.genitalAngle != 0)) ? (bool?)true : null;
 | 
			
		||||
 | 
			
		||||
                //if (actor.requiredGender.Contains("Female")) actor.gender = ActorGender.Female;
 | 
			
		||||
                //else if (actor.requiredGender.Contains("Male")) actor.gender = ActorGender.Male;
 | 
			
		||||
                //else actor.gender = ActorGender.None;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            //actors.OrderBy(x => (int)x.gender);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void RunPostLoadOperations()
 | 
			
		||||
        {
 | 
			
		||||
            foreach (Actor actor in actors)
 | 
			
		||||
            {
 | 
			
		||||
                if (actor.isFucking == true)
 | 
			
		||||
                { actor.requiredGenitals.Add("Any appendage"); }
 | 
			
		||||
 | 
			
		||||
                if (actor.isFucked == true)
 | 
			
		||||
                { actor.requiredGenitals.Add("Any orifice"); }
 | 
			
		||||
            }
 | 
			
		||||
            sexTypes = interactionDefTypes.Intersect(Tags.sexTypes.Concat(CustomTags.sexTypes))?.ToList();
 | 
			
		||||
            interactionDefTypes = interactionDefTypes.Intersect(Tags.interactionDefTypes.Concat(CustomTags.interactionDefTypes))?.ToList();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,5 @@
 | 
			
		|||
using System.Collections.Generic;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System.Xml;
 | 
			
		||||
using System.Xml.Serialization;
 | 
			
		||||
using UnityEngine;
 | 
			
		||||
| 
						 | 
				
			
			@ -28,6 +29,18 @@ namespace RimWorldAnimationStudio
 | 
			
		|||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void ValidateData()
 | 
			
		||||
        {
 | 
			
		||||
            // Sort keyframes by atTick
 | 
			
		||||
            foreach (PawnAnimationClip clip in animationClips)
 | 
			
		||||
            { clip.keyframes = clip.keyframes.OrderBy(x => x.atTick).ToList(); }
 | 
			
		||||
 | 
			
		||||
            // Check if looping
 | 
			
		||||
            stageWindowSize = stageWindowSize > 0 ? stageWindowSize : animationClips.Select(x => x.duration).Max();
 | 
			
		||||
            int cycles = Mathf.CeilToInt(playTimeTicks / stageWindowSize);
 | 
			
		||||
            isLooping = cycles > 1;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool MakeNew()
 | 
			
		||||
        {
 | 
			
		||||
            if (Workspace.animationDef == null)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,5 +14,10 @@ namespace RimWorldAnimationStudio
 | 
			
		|||
 | 
			
		||||
        public bool ShouldSerializeatTick() { return atTick != null; }
 | 
			
		||||
        public bool ShouldSerializetags() { return tags.NotNullOrEmpty(); }
 | 
			
		||||
 | 
			
		||||
        public virtual void ValidateData()
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,11 +18,15 @@ namespace RimWorldAnimationStudio
 | 
			
		|||
 | 
			
		||||
        public float genitalAngle;
 | 
			
		||||
        public bool? quiver;
 | 
			
		||||
        [XmlIgnore] public int keyframeID;
 | 
			
		||||
 | 
			
		||||
        public bool ShouldSerializegenitalAngle() { return genitalAngle != null; }
 | 
			
		||||
        public bool ShouldSerializegenitalAngle() { return genitalAngle != 0; }
 | 
			
		||||
        public bool ShouldSerializequiver() { return quiver != null; }
 | 
			
		||||
 | 
			
		||||
        [XmlIgnore] public int keyframeID;
 | 
			
		||||
        public override void ValidateData()
 | 
			
		||||
        {
 | 
			
		||||
            soundEffect = Tags.soundDefs.Concat(CustomTags.soundDefs).Contains(soundEffect) ? soundEffect : null;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void GenerateKeyframeID()
 | 
			
		||||
        { 
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,5 +15,22 @@ public static class IListExtensions
 | 
			
		|||
	{
 | 
			
		||||
		return NullOrEmpty<T>(list) == false;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public static void AddDistinct<T>(this IList<T> list, T item)
 | 
			
		||||
	{
 | 
			
		||||
		if (item == null || list.Contains(item))
 | 
			
		||||
		{ return; }
 | 
			
		||||
 | 
			
		||||
		list.Add(item);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public static void AddRangeDistinct<T>(this IList<T> list, IEnumerable<T> collection)
 | 
			
		||||
	{
 | 
			
		||||
		if (collection == null)
 | 
			
		||||
		{ return; }
 | 
			
		||||
 | 
			
		||||
		foreach(T item in collection)
 | 
			
		||||
		{ AddDistinct(list, item); }
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -31,7 +31,7 @@ namespace RimWorldAnimationStudio
 | 
			
		|||
            else
 | 
			
		||||
            { bodyRenderer.color = Constants.ColorWhite; }
 | 
			
		||||
 | 
			
		||||
            appendageRenderer.gameObject.SetActive(Workspace.animationDef.actors[actorID].requiredGenitals.Any(x => x == "Penis" || x == "Any appendage"));
 | 
			
		||||
            appendageRenderer.gameObject.SetActive(Workspace.animationDef.actors[actorID].requiredGenitals.Any(x => x == "Penis") || Workspace.animationDef.actors[actorID].isFucking);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void OnPointerClick(PointerEventData eventData)
 | 
			
		||||
| 
						 | 
				
			
			@ -87,27 +87,6 @@ namespace RimWorldAnimationStudio
 | 
			
		|||
        {
 | 
			
		||||
            Workspace.actorID = actorID;
 | 
			
		||||
            Workspace.selectedBodyPart = null;
 | 
			
		||||
 | 
			
		||||
            /*foreach (ActorBody actorBody in AnimationController.Instance.actorBodies.GetComponentsInChildren<ActorBody>())
 | 
			
		||||
            {
 | 
			
		||||
                if (actorBody == this)
 | 
			
		||||
                { continue; }
 | 
			
		||||
 | 
			
		||||
                actorBody.bodyRenderer.color = Constants.ColorWhite;
 | 
			
		||||
                actorBody.headRenderer.color = Constants.ColorWhite;
 | 
			
		||||
                actorBody.appendageRenderer.color = Constants.ColorWhite;
 | 
			
		||||
 | 
			
		||||
                actorBody.isSelected = false;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            bodyRenderer.color = Constants.ColorGreen;
 | 
			
		||||
            headRenderer.color = Constants.ColorGreen;
 | 
			
		||||
            appendageRenderer.color = Constants.ColorGreen;
 | 
			
		||||
 | 
			
		||||
            foreach (ActorBodyPart actorBodyPartSelected in GetComponentsInChildren<ActorBodyPart>())
 | 
			
		||||
            { actorBodyPartSelected.isSelected = false; }
 | 
			
		||||
 | 
			
		||||
            isSelected = true;*/
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -75,6 +75,8 @@ namespace RimWorldAnimationStudio
 | 
			
		|||
                {
 | 
			
		||||
                    float angle = Vector2.SignedAngle(Vector2.up, (Vector2)mousePosition - (Vector2)transform.position);
 | 
			
		||||
                    keyframe.genitalAngle = angle;
 | 
			
		||||
 | 
			
		||||
                    Workspace.animationDef.actors[Workspace.actorID].controlGenitalAngle = Workspace.animationDef.animationStages.Any(x => x.animationClips[Workspace.actorID].keyframes.Any(y => y.genitalAngle != 0));
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -91,22 +93,6 @@ namespace RimWorldAnimationStudio
 | 
			
		|||
        {
 | 
			
		||||
            Workspace.actorID = parent.actorID;
 | 
			
		||||
            Workspace.selectedBodyPart = this;
 | 
			
		||||
 | 
			
		||||
            /*foreach (ActorBodyPart actorBodyPart in AnimationController.Instance.actorBodies.GetComponentsInChildren<ActorBodyPart>())
 | 
			
		||||
            {
 | 
			
		||||
                actorBodyPart.isSelected = false;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            foreach (ActorBody actorBody in AnimationController.Instance.actorBodies.GetComponentsInChildren<ActorBody>())
 | 
			
		||||
            {
 | 
			
		||||
                actorBody.bodyRenderer.color = Constants.ColorWhite;
 | 
			
		||||
                actorBody.headRenderer.color = Constants.ColorWhite;
 | 
			
		||||
                actorBody.appendageRenderer.color = Constants.ColorWhite;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            bodyPartRenderer.color = Constants.ColorGreen;
 | 
			
		||||
 | 
			
		||||
            isSelected = true;*/
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,59 +6,26 @@ using UnityEngine.UI;
 | 
			
		|||
 | 
			
		||||
namespace RimWorldAnimationStudio
 | 
			
		||||
{
 | 
			
		||||
    public class ActorKeyframeCard : MonoBehaviour
 | 
			
		||||
    public class ActorKeyframeCard : Singleton<ActorKeyframeCard>
 | 
			
		||||
    {
 | 
			
		||||
        public InputField positionXField;
 | 
			
		||||
        public InputField positionZField;
 | 
			
		||||
        public InputField rotationField;
 | 
			
		||||
        public InputField headBobField;
 | 
			
		||||
        public InputField headRotationField;     
 | 
			
		||||
        public InputField headRotationField;
 | 
			
		||||
        public InputField appendageRotationField;
 | 
			
		||||
 | 
			
		||||
        private int lastTick = -1;
 | 
			
		||||
        private bool isDirty = false;
 | 
			
		||||
 | 
			
		||||
        // Move to anim controller
 | 
			
		||||
        public void Update()
 | 
			
		||||
        {
 | 
			
		||||
            if ((Workspace.animationDef == null || AnimationController.Instance.stageTick == lastTick) && isDirty == false)
 | 
			
		||||
            if (Workspace.animationDef == null)
 | 
			
		||||
            { return; }
 | 
			
		||||
 | 
			
		||||
            if (Workspace.actorID >= AnimationController.Instance.transform.childCount)
 | 
			
		||||
            { return; }
 | 
			
		||||
 | 
			
		||||
            ActorBody actorBody = AnimationController.Instance.actorBodies.GetComponentsInChildren<ActorBody>()[Workspace.actorID];
 | 
			
		||||
            string bodyType = actorBody.bodyType;
 | 
			
		||||
 | 
			
		||||
            PawnAnimationClip clip = Workspace.animationDef.animationStages[Workspace.stageID].animationClips[Workspace.actorID];
 | 
			
		||||
            float clipPercent = (float)(AnimationController.Instance.stageTick % clip.duration) / clip.duration;
 | 
			
		||||
 | 
			
		||||
            Vector3 deltaPos = new Vector3(clip.BodyOffsetX.Evaluate(clipPercent), 0, clip.BodyOffsetZ.Evaluate(clipPercent));
 | 
			
		||||
            deltaPos += Workspace.animationDef.actors[Workspace.actorID].bodyTypeOffset.GetOffset(bodyType);
 | 
			
		||||
 | 
			
		||||
            float bodyAngle = clip.BodyAngle.Evaluate(clipPercent);
 | 
			
		||||
            float headAngle = clip.HeadAngle.Evaluate(clipPercent);
 | 
			
		||||
 | 
			
		||||
            if (bodyAngle < 0) bodyAngle = 360 - ((-1f * bodyAngle) % 360);
 | 
			
		||||
            if (bodyAngle > 360) bodyAngle %= 360;
 | 
			
		||||
 | 
			
		||||
            if (headAngle < 0) headAngle = 360 - ((-1f * headAngle) % 360);
 | 
			
		||||
            if (headAngle > 360) headAngle %= 360;
 | 
			
		||||
 | 
			
		||||
            float headBob = clip.HeadBob.Evaluate(clipPercent);
 | 
			
		||||
            Vector3 bodyPos = new Vector3(deltaPos.x, deltaPos.z, 0);
 | 
			
		||||
 | 
			
		||||
            float appendageRotation = clip.GenitalAngle.Evaluate(clipPercent);
 | 
			
		||||
 | 
			
		||||
            positionXField.text = bodyPos.x.ToString("0.000");
 | 
			
		||||
            positionZField.text = bodyPos.y.ToString("0.000");
 | 
			
		||||
            rotationField.text = bodyAngle.ToString("0.000");
 | 
			
		||||
            headBobField.text = headBob.ToString("0.000");
 | 
			
		||||
            headRotationField.text = headAngle.ToString("0.000");
 | 
			
		||||
            appendageRotationField.text = appendageRotation.ToString("0.000");
 | 
			
		||||
 | 
			
		||||
            lastTick = AnimationController.Instance.stageTick;
 | 
			
		||||
            isDirty = false;
 | 
			
		||||
            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;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void OnValueChanged()
 | 
			
		||||
| 
						 | 
				
			
			@ -72,9 +39,8 @@ namespace RimWorldAnimationStudio
 | 
			
		|||
            keyframe.headAngle = float.Parse(headRotationField.text);
 | 
			
		||||
            keyframe.genitalAngle = float.Parse(appendageRotationField.text);
 | 
			
		||||
 | 
			
		||||
            Workspace.animationDef.actors[Workspace.actorID].controlGenitalAngle = keyframe.genitalAngle != 0;
 | 
			
		||||
            Workspace.Instance.GetPawnAnimationClip(Workspace.actorID).BuildSimpleCurves();
 | 
			
		||||
            isDirty = true;
 | 
			
		||||
 | 
			
		||||
            Workspace.Instance.RecordEvent("Actor position / orientation");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,6 +3,7 @@ using System.Collections.Generic;
 | 
			
		|||
using System.Linq;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using System.Reflection;
 | 
			
		||||
using UnityEngine;
 | 
			
		||||
using UnityEngine.UI;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -12,6 +13,11 @@ namespace RimWorldAnimationStudio
 | 
			
		|||
    {
 | 
			
		||||
        public List<GameObject> cloneObjects;
 | 
			
		||||
 | 
			
		||||
        public void OnEnable()
 | 
			
		||||
        {
 | 
			
		||||
            Initialize();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Pop()
 | 
			
		||||
        {
 | 
			
		||||
            gameObject.SetActive(gameObject.activeSelf == false);
 | 
			
		||||
| 
						 | 
				
			
			@ -32,5 +38,22 @@ namespace RimWorldAnimationStudio
 | 
			
		|||
 | 
			
		||||
            return cloneObject;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void AddCustomTag(InputField field, ref List<string> tags, ref List<string> customTags)
 | 
			
		||||
        {
 | 
			
		||||
            if (field?.text == null || field.text == "")
 | 
			
		||||
            { return; }
 | 
			
		||||
 | 
			
		||||
            if (tags.Contains(field.text) || customTags.Contains(field.text))
 | 
			
		||||
            { field.text = ""; return; }
 | 
			
		||||
 | 
			
		||||
            customTags.Add(field.text);
 | 
			
		||||
 | 
			
		||||
            ApplicationManager.Instance.SaveCustomArrays();
 | 
			
		||||
 | 
			
		||||
            Initialize(true);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public virtual void Initialize(bool addedNewTag = false) { }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -22,9 +22,9 @@ namespace RimWorldAnimationStudio
 | 
			
		|||
            Transform contentWindow = transform.FindDeepChild("Content");
 | 
			
		||||
            Reset();
 | 
			
		||||
 | 
			
		||||
            for (int i = 0; i < Workspace.actorLayers.Count; i++)
 | 
			
		||||
            for (int i = 0; i < Tags.actorLayers.Count; i++)
 | 
			
		||||
            {
 | 
			
		||||
                string actorLayer = Workspace.actorLayers[i];
 | 
			
		||||
                string actorLayer = Tags.actorLayers[i];
 | 
			
		||||
 | 
			
		||||
                Transform _optionToggle = AddCloneObjectToParent(contentWindow).transform;
 | 
			
		||||
                _optionToggle.Find("Text").GetComponent<Text>().text = actorLayer;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,66 +10,44 @@ namespace RimWorldAnimationStudio
 | 
			
		|||
{
 | 
			
		||||
    public class SelectBodyDefTypesDialog : DialogBox
 | 
			
		||||
    {
 | 
			
		||||
        public void OnEnable()
 | 
			
		||||
        public override void Initialize(bool addedNewTag = false)
 | 
			
		||||
        {
 | 
			
		||||
            Initialize();
 | 
			
		||||
        }
 | 
			
		||||
            IEnumerable<string> allTags = Tags.bodyDefTypes.Concat(CustomTags.interactionDefTypes);
 | 
			
		||||
            string placeHolderText = "Enter new body def type...";
 | 
			
		||||
 | 
			
		||||
        public void AddBodyDefType(InputField field)
 | 
			
		||||
        {
 | 
			
		||||
            if (field?.text == null || field.text == "")
 | 
			
		||||
            { return; }
 | 
			
		||||
 | 
			
		||||
            if (Workspace.bodyDefTypes.Contains(field.text))
 | 
			
		||||
            { field.text = "";  return; }
 | 
			
		||||
 | 
			
		||||
            Workspace.bodyDefTypes.Add(field.text);
 | 
			
		||||
 | 
			
		||||
            Initialize(true);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Initialize(bool addedNewTag = false)
 | 
			
		||||
        {
 | 
			
		||||
            Actor actor = Workspace.animationDef.actors[Workspace.actorID];
 | 
			
		||||
 | 
			
		||||
            foreach (string bodyDefType in actor.bodyDefTypes)
 | 
			
		||||
            {
 | 
			
		||||
                if (Workspace.bodyDefTypes.Contains(bodyDefType) == false)
 | 
			
		||||
                { Workspace.bodyDefTypes.Add(bodyDefType); }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            Transform contentWindow = transform.FindDeepChild("Content");
 | 
			
		||||
            Reset();
 | 
			
		||||
 | 
			
		||||
            for (int i = 0; i < Workspace.bodyDefTypes.Count; i++)
 | 
			
		||||
            for (int i = 0; i < allTags.Count(); i++)
 | 
			
		||||
            {
 | 
			
		||||
                string bodyDefType = Workspace.bodyDefTypes[i];
 | 
			
		||||
                string tag = allTags.ElementAt(i);
 | 
			
		||||
 | 
			
		||||
                Transform _optionToggle = AddCloneObjectToParent(contentWindow).transform;
 | 
			
		||||
                _optionToggle.Find("Text").GetComponent<Text>().text = bodyDefType;
 | 
			
		||||
                _optionToggle.Find("Text").GetComponent<Text>().text = tag;
 | 
			
		||||
 | 
			
		||||
                Toggle toggleComp = _optionToggle.GetComponent<Toggle>();
 | 
			
		||||
                toggleComp.isOn = actor.bodyDefTypes.Contains(bodyDefType);
 | 
			
		||||
                toggleComp.onValueChanged.AddListener(delegate { 
 | 
			
		||||
                    
 | 
			
		||||
                    if (toggleComp.isOn && actor.bodyDefTypes.Contains(bodyDefType) == false)
 | 
			
		||||
                    { actor.bodyDefTypes.Add(bodyDefType); }
 | 
			
		||||
                toggleComp.isOn = actor.bodyDefTypes.Contains(tag);
 | 
			
		||||
                toggleComp.onValueChanged.AddListener(delegate 
 | 
			
		||||
                {                     
 | 
			
		||||
                    if (toggleComp.isOn && actor.bodyDefTypes.Contains(tag) == false)
 | 
			
		||||
                    { actor.bodyDefTypes.Add(tag); }
 | 
			
		||||
 | 
			
		||||
                    else if (toggleComp.isOn == false && actor.bodyDefTypes.Contains(bodyDefType))
 | 
			
		||||
                    { actor.bodyDefTypes.Remove(bodyDefType); }
 | 
			
		||||
                    else if (toggleComp.isOn == false && actor.bodyDefTypes.Contains(tag))
 | 
			
		||||
                    { actor.bodyDefTypes.Remove(tag); }
 | 
			
		||||
 | 
			
		||||
                    Workspace.Instance.RecordEvent("Actor bodyDef type");
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
                if (addedNewTag && i == Workspace.sexTypes.Count - 1)
 | 
			
		||||
                if (addedNewTag && i == allTags.Count() - 1)
 | 
			
		||||
                { toggleComp.isOn = true; }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            Transform _optionField = AddCloneObjectToParent(contentWindow, 1).transform;
 | 
			
		||||
            _optionField.Find("Placeholder").GetComponent<Text>().text = "Enter new body def type...";
 | 
			
		||||
            _optionField.Find("Placeholder").GetComponent<Text>().text = placeHolderText;
 | 
			
		||||
 | 
			
		||||
            InputField fieldComp = _optionField.GetComponent<InputField>();
 | 
			
		||||
            fieldComp.onEndEdit.AddListener(delegate { AddBodyDefType(fieldComp); });
 | 
			
		||||
            fieldComp.onEndEdit.AddListener(delegate { AddCustomTag(fieldComp, ref Tags.bodyDefTypes, ref CustomTags.bodyDefTypes); });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Reset()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,69 +10,58 @@ namespace RimWorldAnimationStudio
 | 
			
		|||
{
 | 
			
		||||
    public class SelectBodyPartsDialog : DialogBox
 | 
			
		||||
    {
 | 
			
		||||
        public void OnEnable()
 | 
			
		||||
        public override void Initialize(bool addedNewTag = false)
 | 
			
		||||
        {
 | 
			
		||||
            Initialize();
 | 
			
		||||
        }
 | 
			
		||||
            IEnumerable<string> allTags = Tags.bodyParts.Concat(CustomTags.interactionDefTypes);
 | 
			
		||||
            string placeHolderText = "Enter new body part name...";
 | 
			
		||||
 | 
			
		||||
        public void AddBodyPart(InputField field)
 | 
			
		||||
        {
 | 
			
		||||
            Debug.Log("Attempting to add new body part");
 | 
			
		||||
 | 
			
		||||
            if (field?.text == null || field.text == "")
 | 
			
		||||
            { Debug.LogWarning("Input field is null"); return; }
 | 
			
		||||
 | 
			
		||||
            if (Workspace.bodyParts.Contains(field.text))
 | 
			
		||||
            { Debug.LogWarning("Body part is null"); field.text = "";  return; }
 | 
			
		||||
 | 
			
		||||
            Debug.Log("Add new body part: " + field.text);
 | 
			
		||||
            Workspace.bodyParts.Add(field.text);
 | 
			
		||||
 | 
			
		||||
            Initialize(true);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Initialize(bool addedNewTag = false)
 | 
			
		||||
        {
 | 
			
		||||
            Actor actor = Workspace.animationDef.actors[Workspace.actorID];
 | 
			
		||||
 | 
			
		||||
            foreach (string bodyPart in actor.requiredGenitals)
 | 
			
		||||
            {
 | 
			
		||||
                if (Workspace.bodyParts.Contains(bodyPart) == false)
 | 
			
		||||
                { Workspace.bodyParts.Add(bodyPart); }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            Transform contentWindow = transform.FindDeepChild("Content");
 | 
			
		||||
            Reset();
 | 
			
		||||
 | 
			
		||||
            for (int i = 0; i < Workspace.bodyParts.Count; i++)
 | 
			
		||||
            Transform _appendageToggle = AddCloneObjectToParent(contentWindow).transform;
 | 
			
		||||
            _appendageToggle.Find("Text").GetComponent<Text>().text = "Any appendage";
 | 
			
		||||
 | 
			
		||||
            Toggle appendageToggleComp = _appendageToggle.GetComponent<Toggle>();
 | 
			
		||||
            appendageToggleComp.isOn = actor.isFucking;
 | 
			
		||||
            appendageToggleComp.onValueChanged.AddListener(delegate { actor.isFucking = appendageToggleComp.isOn; Workspace.Instance.RecordEvent("Actor required body part");});
 | 
			
		||||
 | 
			
		||||
            Transform _orificeToggle = AddCloneObjectToParent(contentWindow).transform;
 | 
			
		||||
            _orificeToggle.Find("Text").GetComponent<Text>().text = "Any orifice";
 | 
			
		||||
 | 
			
		||||
            Toggle orificeToggleComp = _orificeToggle.GetComponent<Toggle>();
 | 
			
		||||
            orificeToggleComp.isOn = actor.isFucked;
 | 
			
		||||
            orificeToggleComp.onValueChanged.AddListener(delegate { actor.isFucked = orificeToggleComp.isOn; Workspace.Instance.RecordEvent("Actor required body part"); });
 | 
			
		||||
 | 
			
		||||
            for (int i = 0; i < allTags.Count(); i++)
 | 
			
		||||
            {
 | 
			
		||||
                string bodyPart = Workspace.bodyParts[i];
 | 
			
		||||
                string tag = allTags.ElementAt(i);
 | 
			
		||||
 | 
			
		||||
                Transform _optionToggle = AddCloneObjectToParent(contentWindow).transform;
 | 
			
		||||
                _optionToggle.Find("Text").GetComponent<Text>().text = bodyPart;
 | 
			
		||||
                _optionToggle.Find("Text").GetComponent<Text>().text = tag;
 | 
			
		||||
 | 
			
		||||
                Toggle toggleComp = _optionToggle.GetComponent<Toggle>();
 | 
			
		||||
                toggleComp.isOn = actor.requiredGenitals.Contains(bodyPart);
 | 
			
		||||
                toggleComp.onValueChanged.AddListener(delegate { 
 | 
			
		||||
                    
 | 
			
		||||
                    if (toggleComp.isOn && actor.requiredGenitals.Contains(bodyPart) == false)
 | 
			
		||||
                    { actor.requiredGenitals.Add(bodyPart); }
 | 
			
		||||
                toggleComp.isOn = actor.requiredGenitals.Contains(tag);
 | 
			
		||||
                toggleComp.onValueChanged.AddListener(delegate
 | 
			
		||||
                { 
 | 
			
		||||
                    if (toggleComp.isOn && actor.requiredGenitals.Contains(tag) == false)
 | 
			
		||||
                    { actor.requiredGenitals.Add(tag); }
 | 
			
		||||
 | 
			
		||||
                    else if (toggleComp.isOn == false && actor.requiredGenitals.Contains(bodyPart))
 | 
			
		||||
                    { actor.requiredGenitals.Remove(bodyPart); }
 | 
			
		||||
                    else if (toggleComp.isOn == false && actor.requiredGenitals.Contains(tag))
 | 
			
		||||
                    { actor.requiredGenitals.Remove(tag); }
 | 
			
		||||
 | 
			
		||||
                    Workspace.Instance.RecordEvent("Actor required body part");
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
                if (addedNewTag && i == Workspace.sexTypes.Count - 1)
 | 
			
		||||
                if (addedNewTag && i == allTags.Count() - 1)
 | 
			
		||||
                { toggleComp.isOn = true; }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            Transform _optionField = AddCloneObjectToParent(contentWindow, 1).transform;
 | 
			
		||||
            _optionField.Find("Placeholder").GetComponent<Text>().text = "Enter new body part name...";
 | 
			
		||||
            _optionField.Find("Placeholder").GetComponent<Text>().text = placeHolderText;
 | 
			
		||||
 | 
			
		||||
            InputField fieldComp = _optionField.GetComponent<InputField>();
 | 
			
		||||
            fieldComp.onEndEdit.AddListener(delegate { AddBodyPart(fieldComp); });
 | 
			
		||||
            fieldComp.onEndEdit.AddListener(delegate { AddCustomTag(fieldComp, ref Tags.bodyParts, ref CustomTags.bodyParts); });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Reset()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,67 +10,44 @@ namespace RimWorldAnimationStudio
 | 
			
		|||
{
 | 
			
		||||
    public class SelectDefNamesDialog : DialogBox
 | 
			
		||||
    {
 | 
			
		||||
        public void OnEnable()
 | 
			
		||||
        public override void Initialize(bool addedNewTag = false)
 | 
			
		||||
        {
 | 
			
		||||
            Debug.Log("enabled");
 | 
			
		||||
            Initialize();
 | 
			
		||||
        }
 | 
			
		||||
            IEnumerable<string> allTags = Tags.defNames.Concat(CustomTags.interactionDefTypes);
 | 
			
		||||
            string placeHolderText = "Enter new def name...";
 | 
			
		||||
 | 
			
		||||
        public void AddDefName(InputField field)
 | 
			
		||||
        {
 | 
			
		||||
            if (field?.text == null || field.text == "")
 | 
			
		||||
            { return; }
 | 
			
		||||
 | 
			
		||||
            if (Workspace.defNames.Contains(field.text))
 | 
			
		||||
            { field.text = "";  return; }
 | 
			
		||||
 | 
			
		||||
            Workspace.defNames.Add(field.text);
 | 
			
		||||
 | 
			
		||||
            Initialize(true);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Initialize(bool addedNewTag = false)
 | 
			
		||||
        {
 | 
			
		||||
            Actor actor = Workspace.animationDef.actors[Workspace.actorID];
 | 
			
		||||
 | 
			
		||||
            foreach (string defName in actor.defNames)
 | 
			
		||||
            {
 | 
			
		||||
                if (Workspace.defNames.Contains(defName) == false)
 | 
			
		||||
                { Workspace.defNames.Add(defName); }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            Transform contentWindow = transform.FindDeepChild("Content");
 | 
			
		||||
            Reset();
 | 
			
		||||
 | 
			
		||||
            for (int i = 0; i < Workspace.defNames.Count; i++)
 | 
			
		||||
            for (int i = 0; i < allTags.Count(); i++)
 | 
			
		||||
            {
 | 
			
		||||
                string defName = Workspace.defNames[i];
 | 
			
		||||
                string tag = allTags.ElementAt(i);
 | 
			
		||||
 | 
			
		||||
                Transform _optionToggle = AddCloneObjectToParent(contentWindow).transform;
 | 
			
		||||
                _optionToggle.Find("Text").GetComponent<Text>().text = defName;
 | 
			
		||||
                _optionToggle.Find("Text").GetComponent<Text>().text = tag;
 | 
			
		||||
 | 
			
		||||
                Toggle toggleComp = _optionToggle.GetComponent<Toggle>();
 | 
			
		||||
                toggleComp.isOn = actor.defNames.Contains(defName);
 | 
			
		||||
                toggleComp.onValueChanged.AddListener(delegate { 
 | 
			
		||||
                    
 | 
			
		||||
                    if (toggleComp.isOn && actor.defNames.Contains(defName) == false)
 | 
			
		||||
                    { actor.defNames.Add(defName); }
 | 
			
		||||
                toggleComp.isOn = actor.defNames.Contains(tag);
 | 
			
		||||
                toggleComp.onValueChanged.AddListener(delegate 
 | 
			
		||||
                {                     
 | 
			
		||||
                    if (toggleComp.isOn && actor.defNames.Contains(tag) == false)
 | 
			
		||||
                    { actor.defNames.Add(tag); }
 | 
			
		||||
 | 
			
		||||
                    else if (toggleComp.isOn == false && actor.defNames.Contains(defName))
 | 
			
		||||
                    { actor.defNames.Remove(defName); }
 | 
			
		||||
                    else if (toggleComp.isOn == false && actor.defNames.Contains(tag))
 | 
			
		||||
                    { actor.defNames.Remove(tag); }
 | 
			
		||||
 | 
			
		||||
                    Workspace.Instance.RecordEvent("Actor def name");
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
                if (addedNewTag && i == Workspace.sexTypes.Count - 1)
 | 
			
		||||
                if (addedNewTag && i == allTags.Count() - 1)
 | 
			
		||||
                { toggleComp.isOn = true; }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            Transform _optionField = AddCloneObjectToParent(contentWindow, 1).transform;
 | 
			
		||||
            _optionField.Find("Placeholder").GetComponent<Text>().text = "Enter new def name...";
 | 
			
		||||
            _optionField.Find("Placeholder").GetComponent<Text>().text = placeHolderText;
 | 
			
		||||
 | 
			
		||||
            InputField fieldComp = _optionField.GetComponent<InputField>();
 | 
			
		||||
            fieldComp.onEndEdit.AddListener(delegate { AddDefName(fieldComp); });
 | 
			
		||||
            fieldComp.onEndEdit.AddListener(delegate { AddCustomTag(fieldComp, ref Tags.defNames, ref CustomTags.defNames); });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Reset()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,66 +10,57 @@ namespace RimWorldAnimationStudio
 | 
			
		|||
{
 | 
			
		||||
    public class SelectInteractionDefsDialog : DialogBox
 | 
			
		||||
    {
 | 
			
		||||
        public void OnEnable()
 | 
			
		||||
        public override void Initialize(bool addedNewTag = false)
 | 
			
		||||
        {
 | 
			
		||||
            Initialize();
 | 
			
		||||
        }
 | 
			
		||||
            IEnumerable<string> allTags = Tags.interactionDefTypes.Concat(CustomTags.interactionDefTypes);
 | 
			
		||||
            string placeHolderText = "Enter new interaction def type...";
 | 
			
		||||
 | 
			
		||||
        public void AddInteractionDef(InputField field)
 | 
			
		||||
        {
 | 
			
		||||
            if (field?.text == null || field.text == "")
 | 
			
		||||
            { return; }
 | 
			
		||||
 | 
			
		||||
            if (Workspace.interactionDefTypes.Contains(field.text))
 | 
			
		||||
            { field.text = ""; return; }
 | 
			
		||||
 | 
			
		||||
            Workspace.interactionDefTypes.Add(field.text);
 | 
			
		||||
 | 
			
		||||
            Initialize(true);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Initialize(bool addedNewTag = false)
 | 
			
		||||
        {
 | 
			
		||||
            if (Workspace.animationDef == null) return;
 | 
			
		||||
 | 
			
		||||
            foreach (string interactionDefType in Workspace.animationDef.interactionDefTypes)
 | 
			
		||||
            {
 | 
			
		||||
                if (Workspace.interactionDefTypes.Contains(interactionDefType) == false)
 | 
			
		||||
                { Workspace.interactionDefTypes.Add(interactionDefType); }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            Transform contentWindow = transform.FindDeepChild("Content");
 | 
			
		||||
            Reset();
 | 
			
		||||
 | 
			
		||||
            for (int i = 0; i < Workspace.interactionDefTypes.Count; i++)
 | 
			
		||||
            for (int i = 0; i < allTags.Count(); i++)
 | 
			
		||||
            {
 | 
			
		||||
                string interactionDefType = Workspace.interactionDefTypes[i];
 | 
			
		||||
                string tag = allTags.ElementAt(i);
 | 
			
		||||
 | 
			
		||||
                Transform _optionToggle = AddCloneObjectToParent(contentWindow).transform;
 | 
			
		||||
                _optionToggle.Find("Text").GetComponent<Text>().text = interactionDefType;
 | 
			
		||||
                _optionToggle.Find("Text").GetComponent<Text>().text = tag;
 | 
			
		||||
 | 
			
		||||
                Toggle toggleComp = _optionToggle.GetComponent<Toggle>();
 | 
			
		||||
                toggleComp.isOn = Workspace.animationDef.interactionDefTypes.Contains(interactionDefType);
 | 
			
		||||
                toggleComp.onValueChanged.AddListener(delegate { 
 | 
			
		||||
                    
 | 
			
		||||
                    if (toggleComp.isOn && Workspace.animationDef.interactionDefTypes.Contains(interactionDefType) == false)
 | 
			
		||||
                    { Workspace.animationDef.interactionDefTypes.Add(interactionDefType); }
 | 
			
		||||
                toggleComp.isOn = Workspace.animationDef.interactionDefTypes.Contains(tag);
 | 
			
		||||
                toggleComp.onValueChanged.AddListener(delegate 
 | 
			
		||||
                {              
 | 
			
		||||
                    if (toggleComp.isOn && Workspace.animationDef.interactionDefTypes.Contains(tag) == false)
 | 
			
		||||
                    { Workspace.animationDef.interactionDefTypes.Add(tag); }
 | 
			
		||||
 | 
			
		||||
                    else if (toggleComp.isOn == false && Workspace.animationDef.interactionDefTypes.Contains(interactionDefType))
 | 
			
		||||
                    { Workspace.animationDef.interactionDefTypes.Remove(interactionDefType); }
 | 
			
		||||
                    else if (toggleComp.isOn == false && Workspace.animationDef.interactionDefTypes.Contains(tag))
 | 
			
		||||
                    { Workspace.animationDef.interactionDefTypes.Remove(tag); }
 | 
			
		||||
 | 
			
		||||
                    Workspace.Instance.RecordEvent("Animation InteractionDef");
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
                if (addedNewTag && i == Workspace.sexTypes.Count - 1)
 | 
			
		||||
                Button deleteButton = _optionToggle.Find("DeleteButton").GetComponent<Button>();
 | 
			
		||||
                if (deleteButton != null && CustomTags.interactionDefTypes.Contains(tag))
 | 
			
		||||
                {
 | 
			
		||||
                    deleteButton.gameObject.SetActive(true);
 | 
			
		||||
                    deleteButton.onClick.AddListener(delegate
 | 
			
		||||
                    {
 | 
			
		||||
                        CustomTags.interactionDefTypes.Remove(tag);
 | 
			
		||||
                        ApplicationManager.Instance.SaveCustomArrays();
 | 
			
		||||
                        Initialize();
 | 
			
		||||
                    });
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (addedNewTag && i == allTags.Count() - 1)
 | 
			
		||||
                { toggleComp.isOn = true; }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            Transform _optionField = AddCloneObjectToParent(contentWindow, 1).transform;
 | 
			
		||||
            _optionField.Find("Placeholder").GetComponent<Text>().text = "Enter new interaction def type...";
 | 
			
		||||
            _optionField.Find("Placeholder").GetComponent<Text>().text = placeHolderText;
 | 
			
		||||
 | 
			
		||||
            InputField fieldComp = _optionField.GetComponent<InputField>();
 | 
			
		||||
            fieldComp.onEndEdit.AddListener(delegate { AddInteractionDef(fieldComp); });
 | 
			
		||||
            fieldComp.onEndEdit.AddListener(delegate { AddCustomTag(fieldComp, ref Tags.interactionDefTypes, ref CustomTags.interactionDefTypes); });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Reset()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										59
									
								
								Assets/Scripts/GUI/DialogBoxes/SelectRaceDialog.cs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								Assets/Scripts/GUI/DialogBoxes/SelectRaceDialog.cs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,59 @@
 | 
			
		|||
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 SelectRaceDialog : DialogBox
 | 
			
		||||
    {
 | 
			
		||||
        public override void Initialize(bool addedNewTag = false)
 | 
			
		||||
        {
 | 
			
		||||
            IEnumerable<string> allTags = Tags.defNames.Concat(CustomTags.interactionDefTypes);
 | 
			
		||||
            string placeHolderText = "Enter new def name...";
 | 
			
		||||
 | 
			
		||||
            Actor actor = Workspace.animationDef.actors[Workspace.actorID];
 | 
			
		||||
            Transform contentWindow = transform.FindDeepChild("Content");
 | 
			
		||||
            Reset();
 | 
			
		||||
 | 
			
		||||
            for (int i = 0; i < allTags.Count(); i++)
 | 
			
		||||
            {
 | 
			
		||||
                string tag = allTags.ElementAt(i);
 | 
			
		||||
 | 
			
		||||
                Transform _optionToggle = AddCloneObjectToParent(contentWindow).transform;
 | 
			
		||||
                _optionToggle.Find("Text").GetComponent<Text>().text = tag;
 | 
			
		||||
 | 
			
		||||
                Toggle toggleComp = _optionToggle.GetComponent<Toggle>();
 | 
			
		||||
                toggleComp.isOn = actor.defNames.Contains(tag);
 | 
			
		||||
                toggleComp.onValueChanged.AddListener(delegate 
 | 
			
		||||
                {                     
 | 
			
		||||
                    if (toggleComp.isOn && actor.defNames.Contains(tag) == false)
 | 
			
		||||
                    { actor.defNames.Add(tag); }
 | 
			
		||||
 | 
			
		||||
                    else if (toggleComp.isOn == false && actor.defNames.Contains(tag))
 | 
			
		||||
                    { actor.defNames.Remove(tag); }
 | 
			
		||||
 | 
			
		||||
                    Workspace.Instance.RecordEvent("Actor def name");
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
                if (addedNewTag && i == allTags.Count() - 1)
 | 
			
		||||
                { toggleComp.isOn = true; }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            Transform _optionField = AddCloneObjectToParent(contentWindow, 1).transform;
 | 
			
		||||
            _optionField.Find("Placeholder").GetComponent<Text>().text = placeHolderText;
 | 
			
		||||
 | 
			
		||||
            InputField fieldComp = _optionField.GetComponent<InputField>();
 | 
			
		||||
            fieldComp.onEndEdit.AddListener(delegate { AddCustomTag(fieldComp, ref Tags.defNames, ref CustomTags.defNames); });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Reset()
 | 
			
		||||
        {
 | 
			
		||||
            Transform contentWindow = transform.FindDeepChild("Content");
 | 
			
		||||
            RemoveCloneObjectsFromParent(contentWindow);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										11
									
								
								Assets/Scripts/GUI/DialogBoxes/SelectRaceDialog.cs.meta
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								Assets/Scripts/GUI/DialogBoxes/SelectRaceDialog.cs.meta
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,11 @@
 | 
			
		|||
fileFormatVersion: 2
 | 
			
		||||
guid: 983d00d4d240d6c4780e903708f27c06
 | 
			
		||||
MonoImporter:
 | 
			
		||||
  externalObjects: {}
 | 
			
		||||
  serializedVersion: 2
 | 
			
		||||
  defaultReferences: []
 | 
			
		||||
  executionOrder: 0
 | 
			
		||||
  icon: {instanceID: 0}
 | 
			
		||||
  userData: 
 | 
			
		||||
  assetBundleName: 
 | 
			
		||||
  assetBundleVariant: 
 | 
			
		||||
| 
						 | 
				
			
			@ -10,66 +10,45 @@ namespace RimWorldAnimationStudio
 | 
			
		|||
{
 | 
			
		||||
    public class SelectSexTypesDialog : DialogBox
 | 
			
		||||
    {
 | 
			
		||||
        public void OnEnable()
 | 
			
		||||
        public override void Initialize(bool addedNewTag = false)
 | 
			
		||||
        {
 | 
			
		||||
            Initialize();
 | 
			
		||||
        }
 | 
			
		||||
            IEnumerable<string> allTags = Tags.sexTypes.Concat(CustomTags.interactionDefTypes);
 | 
			
		||||
            string placeHolderText = "Enter new sex type...";
 | 
			
		||||
 | 
			
		||||
        public void AddSexType(InputField field)
 | 
			
		||||
        {
 | 
			
		||||
            if (field?.text == null || field.text == "")
 | 
			
		||||
            { return; }
 | 
			
		||||
 | 
			
		||||
            if (Workspace.sexTypes.Contains(field.text))
 | 
			
		||||
            { field.text = "";  return; }
 | 
			
		||||
 | 
			
		||||
            Workspace.sexTypes.Add(field.text);
 | 
			
		||||
 | 
			
		||||
            Initialize(true);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Initialize(bool addedNewTag = false)
 | 
			
		||||
        {
 | 
			
		||||
            if (Workspace.animationDef == null) return;
 | 
			
		||||
 | 
			
		||||
            foreach (string sexType in Workspace.animationDef.sexTypes)
 | 
			
		||||
            {
 | 
			
		||||
                if (Workspace.sexTypes.Contains(sexType) == false)
 | 
			
		||||
                { Workspace.sexTypes.Add(sexType); }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            Transform contentWindow = transform.FindDeepChild("Content");
 | 
			
		||||
            Reset();
 | 
			
		||||
 | 
			
		||||
            for (int i = 0; i < Workspace.sexTypes.Count; i++)
 | 
			
		||||
            for (int i = 0; i < allTags.Count(); i++)
 | 
			
		||||
            {
 | 
			
		||||
                string sexType = Workspace.sexTypes[i];
 | 
			
		||||
                string tag = allTags.ElementAt(i);
 | 
			
		||||
 | 
			
		||||
                Transform _optionToggle = AddCloneObjectToParent(contentWindow).transform;
 | 
			
		||||
                _optionToggle.Find("Text").GetComponent<Text>().text = sexType;
 | 
			
		||||
                _optionToggle.Find("Text").GetComponent<Text>().text = tag;
 | 
			
		||||
 | 
			
		||||
                Toggle toggleComp = _optionToggle.GetComponent<Toggle>();
 | 
			
		||||
                toggleComp.isOn = Workspace.animationDef.sexTypes.Contains(sexType);
 | 
			
		||||
                toggleComp.onValueChanged.AddListener(delegate { 
 | 
			
		||||
                    
 | 
			
		||||
                    if (toggleComp.isOn && Workspace.animationDef.sexTypes.Contains(sexType) == false)
 | 
			
		||||
                    { Workspace.animationDef.sexTypes.Add(sexType); }
 | 
			
		||||
                toggleComp.isOn = Workspace.animationDef.sexTypes.Contains(tag);
 | 
			
		||||
                toggleComp.onValueChanged.AddListener(delegate 
 | 
			
		||||
                {                     
 | 
			
		||||
                    if (toggleComp.isOn && Workspace.animationDef.sexTypes.Contains(tag) == false)
 | 
			
		||||
                    { Workspace.animationDef.sexTypes.Add(tag); }
 | 
			
		||||
 | 
			
		||||
                    else if (toggleComp.isOn == false && Workspace.animationDef.sexTypes.Contains(sexType))
 | 
			
		||||
                    { Workspace.animationDef.sexTypes.Remove(sexType); }
 | 
			
		||||
                    else if (toggleComp.isOn == false && Workspace.animationDef.sexTypes.Contains(tag))
 | 
			
		||||
                    { Workspace.animationDef.sexTypes.Remove(tag); }
 | 
			
		||||
 | 
			
		||||
                    Workspace.Instance.RecordEvent("Animation sex type");
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
                if (addedNewTag && i == Workspace.sexTypes.Count - 1)
 | 
			
		||||
                if (addedNewTag && i == allTags.Count() - 1)
 | 
			
		||||
                { toggleComp.isOn = true; }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            Transform _optionField = AddCloneObjectToParent(contentWindow, 1).transform;
 | 
			
		||||
            _optionField.Find("Placeholder").GetComponent<Text>().text = "Enter new sex type...";
 | 
			
		||||
            _optionField.Find("Placeholder").GetComponent<Text>().text = placeHolderText;
 | 
			
		||||
 | 
			
		||||
            InputField fieldComp = _optionField.GetComponent<InputField>();
 | 
			
		||||
            fieldComp.onEndEdit.AddListener(delegate { AddSexType(fieldComp); });
 | 
			
		||||
            fieldComp.onEndEdit.AddListener(delegate { AddCustomTag(fieldComp, ref Tags.sexTypes, ref CustomTags.sexTypes); });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Reset()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,73 +10,46 @@ namespace RimWorldAnimationStudio
 | 
			
		|||
{
 | 
			
		||||
    public class SelectSoundDefDialog : DialogBox
 | 
			
		||||
    {
 | 
			
		||||
        public void OnEnable()
 | 
			
		||||
        public override void Initialize(bool addedNewTag = false)
 | 
			
		||||
        {
 | 
			
		||||
            Initialize();
 | 
			
		||||
        }
 | 
			
		||||
            IEnumerable<string> allTags = Tags.soundDefs.Concat(CustomTags.interactionDefTypes);
 | 
			
		||||
            string placeHolderText = "Enter new sound def...";
 | 
			
		||||
 | 
			
		||||
        public void AddSoundDef(InputField field)
 | 
			
		||||
        {
 | 
			
		||||
            if (field?.text == null || field.text == "")
 | 
			
		||||
            { return; }
 | 
			
		||||
 | 
			
		||||
            if (Workspace.soundDefs.Contains(field.text))
 | 
			
		||||
            { field.text = "";  return; }
 | 
			
		||||
 | 
			
		||||
            Workspace.soundDefs.Add(field.text);
 | 
			
		||||
 | 
			
		||||
            Initialize(true);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Initialize(bool addedNewTag = false)
 | 
			
		||||
        {
 | 
			
		||||
            if (Workspace.animationDef == null) return;
 | 
			
		||||
 | 
			
		||||
            foreach (AnimationStage stage in Workspace.animationDef.animationStages)
 | 
			
		||||
            {
 | 
			
		||||
                foreach (PawnAnimationClip clip in stage.animationClips)
 | 
			
		||||
                {
 | 
			
		||||
                    foreach (string soundDef in clip.keyframes.Select(x => x.soundEffect))
 | 
			
		||||
                    {
 | 
			
		||||
                        if (Workspace.soundDefs.Contains(soundDef) == false && soundDef != "")
 | 
			
		||||
                        { Workspace.soundDefs.Add(soundDef); }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            Transform contentWindow = transform.FindDeepChild("Content");
 | 
			
		||||
            Reset();
 | 
			
		||||
 | 
			
		||||
            for (int i = 0; i < Workspace.soundDefs.Count; i++)
 | 
			
		||||
            for (int i = 0; i < allTags.Count(); i++)
 | 
			
		||||
            {
 | 
			
		||||
                string soundDef = Workspace.soundDefs[i];
 | 
			
		||||
                string tag = allTags.ElementAt(i);
 | 
			
		||||
 | 
			
		||||
                Transform _optionToggle = AddCloneObjectToParent(contentWindow).transform;
 | 
			
		||||
                _optionToggle.Find("Text").GetComponent<Text>().text = soundDef;
 | 
			
		||||
                _optionToggle.Find("Text").GetComponent<Text>().text = tag;
 | 
			
		||||
 | 
			
		||||
                Toggle toggleComp = _optionToggle.GetComponent<Toggle>();
 | 
			
		||||
                toggleComp.isOn = Workspace.animationDef.sexTypes.Contains(soundDef);
 | 
			
		||||
                toggleComp.onValueChanged.AddListener(delegate {
 | 
			
		||||
 | 
			
		||||
                toggleComp.isOn = Workspace.Instance.GetCurrentPawnKeyframe()?.soundEffect == tag;
 | 
			
		||||
                toggleComp.onValueChanged.AddListener(delegate 
 | 
			
		||||
                {
 | 
			
		||||
                    PawnKeyframe keyframe = Workspace.Instance.GetCurrentPawnKeyframe();
 | 
			
		||||
 | 
			
		||||
                    if (keyframe != null)
 | 
			
		||||
                    { keyframe.soundEffect = soundDef; }
 | 
			
		||||
                    { keyframe.soundEffect = tag; }
 | 
			
		||||
                    
 | 
			
		||||
                    Workspace.Instance.RecordEvent("Keyframe sound effect");
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
                toggleComp.group = contentWindow.GetComponent<ToggleGroup>();
 | 
			
		||||
 | 
			
		||||
                if (addedNewTag && i == Workspace.soundDefs.Count - 1)
 | 
			
		||||
                if (addedNewTag && i == allTags.Count() - 1)
 | 
			
		||||
                { toggleComp.isOn = true; }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            Transform _optionField = AddCloneObjectToParent(contentWindow, 1).transform;
 | 
			
		||||
            _optionField.Find("Placeholder").GetComponent<Text>().text = "Enter new sound def...";
 | 
			
		||||
            _optionField.Find("Placeholder").GetComponent<Text>().text = placeHolderText;
 | 
			
		||||
 | 
			
		||||
            InputField fieldComp = _optionField.GetComponent<InputField>();
 | 
			
		||||
            fieldComp.onEndEdit.AddListener(delegate { AddSoundDef(fieldComp); });
 | 
			
		||||
            fieldComp.onEndEdit.AddListener(delegate { AddCustomTag(fieldComp, ref Tags.soundDefs, ref CustomTags.soundDefs); });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Reset()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -155,6 +155,7 @@ namespace RimWorldAnimationStudio
 | 
			
		|||
                Vector3 headPos = new Vector3(headBob.x, headBob.z, 0);
 | 
			
		||||
 | 
			
		||||
                Vector3 appendagePos = PawnUtility.AppendageOffsetAt(bodyType, bodyFacing);
 | 
			
		||||
                float appendageRotation = clip.GenitalAngle.Evaluate(clipPercent);
 | 
			
		||||
 | 
			
		||||
                actorBody.transform.position = bodyPos;
 | 
			
		||||
                actorBody.transform.eulerAngles = new Vector3(0, 0, bodyAngle);
 | 
			
		||||
| 
						 | 
				
			
			@ -163,7 +164,7 @@ namespace RimWorldAnimationStudio
 | 
			
		|||
                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,clip.GenitalAngle.Evaluate(clipPercent));
 | 
			
		||||
                actorBody.appendageRenderer.transform.eulerAngles = new Vector3(0, 0, appendageRotation);
 | 
			
		||||
 | 
			
		||||
                actorBody.bodyRenderer.sprite = Resources.Load<Sprite>("Textures/Humanlike/Bodies/" + bodyType + bodyFacing);
 | 
			
		||||
                actorBody.headRenderer.sprite = Resources.Load<Sprite>("Textures/Humanlike/Heads/Head" + headFacing);
 | 
			
		||||
| 
						 | 
				
			
			@ -172,6 +173,15 @@ namespace RimWorldAnimationStudio
 | 
			
		|||
                actorBody.bodyRenderer.sortingLayerName = clip.layer;
 | 
			
		||||
                actorBody.headRenderer.sortingLayerName = clip.layer;
 | 
			
		||||
                actorBody.headRenderer.sortingOrder = bodyFacing == 0 ? -1 : 1;
 | 
			
		||||
                actorBody.appendageRenderer.sortingLayerName = clip.layer;
 | 
			
		||||
 | 
			
		||||
                // ActorKeyframeCard update
 | 
			
		||||
                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"); }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,6 +15,11 @@ namespace RimWorldAnimationStudio
 | 
			
		|||
        public DialogBox exitDialog;
 | 
			
		||||
        public SelectAnimationDialog selectAnimationDialog;
 | 
			
		||||
 | 
			
		||||
        public void Start()
 | 
			
		||||
        {
 | 
			
		||||
            LoadCustomArrays();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void TryToCloseApplication()
 | 
			
		||||
        {
 | 
			
		||||
            exitDialog.Pop();
 | 
			
		||||
| 
						 | 
				
			
			@ -47,7 +52,9 @@ namespace RimWorldAnimationStudio
 | 
			
		|||
 | 
			
		||||
        public void LoadAnimation(AnimationDef animationDef)
 | 
			
		||||
        {
 | 
			
		||||
            animationDef.RunPostLoadOperations();
 | 
			
		||||
            UpdateCustomArrays(animationDef);
 | 
			
		||||
            RunPostLoadOperations(animationDef);
 | 
			
		||||
 | 
			
		||||
            Debug.Log("Loaded AnimationDef: " + animationDef.defName);
 | 
			
		||||
            
 | 
			
		||||
            Workspace.animationDef = animationDef;
 | 
			
		||||
| 
						 | 
				
			
			@ -67,6 +74,11 @@ namespace RimWorldAnimationStudio
 | 
			
		|||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void RunPostLoadOperations(AnimationDef animationDef)
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void TrySaveAnimation()
 | 
			
		||||
        {
 | 
			
		||||
            if (Workspace.animationDef == null)
 | 
			
		||||
| 
						 | 
				
			
			@ -82,10 +94,10 @@ namespace RimWorldAnimationStudio
 | 
			
		|||
 | 
			
		||||
        public void SaveAnimation(string path)
 | 
			
		||||
        {
 | 
			
		||||
            Debug.Log("Saving AnimationDef: " + Workspace.animationDef.defName);
 | 
			
		||||
 | 
			
		||||
            AnimationDef animationDef = Workspace.animationDef.Copy();
 | 
			
		||||
            animationDef.RunPreSaveOperations();
 | 
			
		||||
            RunPreSaveOperations(animationDef);
 | 
			
		||||
 | 
			
		||||
            Debug.Log("Saving AnimationDef: " + Workspace.animationDef.defName);
 | 
			
		||||
 | 
			
		||||
            Defs defs = new Defs();
 | 
			
		||||
            defs.animationDefs.Add(animationDef);
 | 
			
		||||
| 
						 | 
				
			
			@ -93,6 +105,22 @@ namespace RimWorldAnimationStudio
 | 
			
		|||
            XmlUtility.WriteXML(defs, path);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void RunPreSaveOperations(AnimationDef animationDef)
 | 
			
		||||
        {
 | 
			
		||||
            foreach (AnimationStage stage in animationDef.animationStages)
 | 
			
		||||
            {
 | 
			
		||||
                stage.ValidateData();
 | 
			
		||||
 | 
			
		||||
                foreach (PawnAnimationClip clip in stage.animationClips)
 | 
			
		||||
                {
 | 
			
		||||
                    clip.ValidateData();
 | 
			
		||||
 | 
			
		||||
                    foreach (PawnKeyframe keyframe in clip.keyframes)
 | 
			
		||||
                    { keyframe.ValidateData(); }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void NewAnimation()
 | 
			
		||||
        {
 | 
			
		||||
            var path = Path.Combine(Application.streamingAssetsPath, "AnimationDefs/newAnimationDef.xml");
 | 
			
		||||
| 
						 | 
				
			
			@ -104,5 +132,50 @@ namespace RimWorldAnimationStudio
 | 
			
		|||
 | 
			
		||||
            LoadAnimation(defs.animationDefs[0]);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void SaveCustomArrays()
 | 
			
		||||
        {
 | 
			
		||||
            var path = Path.Combine(Application.streamingAssetsPath, "customTags.xml");
 | 
			
		||||
 | 
			
		||||
            CustomTagsHelper helper = new CustomTagsHelper();
 | 
			
		||||
 | 
			
		||||
            helper.defNames = CustomTags.defNames;
 | 
			
		||||
            helper.bodyParts = CustomTags.bodyParts;
 | 
			
		||||
            helper.bodyDefTypes = CustomTags.bodyDefTypes;
 | 
			
		||||
            helper.sexTypes = CustomTags.sexTypes;
 | 
			
		||||
            helper.interactionDefTypes = CustomTags.interactionDefTypes;
 | 
			
		||||
            helper.soundDefs = CustomTags.soundDefs;
 | 
			
		||||
 | 
			
		||||
            XmlUtility.WriteXML(helper, path);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void LoadCustomArrays()
 | 
			
		||||
        {
 | 
			
		||||
            var path = Path.Combine(Application.streamingAssetsPath, "customTags.xml");
 | 
			
		||||
 | 
			
		||||
            if (File.Exists(path) == false)
 | 
			
		||||
            { SaveCustomArrays(); return; }
 | 
			
		||||
            
 | 
			
		||||
            CustomTagsHelper helper = XmlUtility.ReadXML<CustomTagsHelper>(path);
 | 
			
		||||
 | 
			
		||||
            CustomTags.defNames = helper.defNames;
 | 
			
		||||
            CustomTags.bodyParts = helper.bodyParts;
 | 
			
		||||
            CustomTags.bodyDefTypes = helper.bodyDefTypes;
 | 
			
		||||
            CustomTags.sexTypes = helper.sexTypes;
 | 
			
		||||
            CustomTags.interactionDefTypes = helper.interactionDefTypes;
 | 
			
		||||
            CustomTags.soundDefs = helper.soundDefs;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void UpdateCustomArrays(AnimationDef animationDef)
 | 
			
		||||
        {
 | 
			
		||||
            CustomTags.defNames.AddRangeDistinct(animationDef.actors.SelectMany(x => x.defNames).Except(Tags.defNames));
 | 
			
		||||
            CustomTags.bodyParts.AddRangeDistinct(animationDef.actors.SelectMany(x => x.requiredGenitals).Except(Tags.bodyParts));
 | 
			
		||||
            CustomTags.bodyDefTypes.AddRangeDistinct(animationDef.actors.SelectMany(x => x.bodyDefTypes).Except(Tags.bodyDefTypes));
 | 
			
		||||
            CustomTags.sexTypes.AddRangeDistinct(animationDef.sexTypes.Except(Tags.sexTypes));
 | 
			
		||||
            CustomTags.interactionDefTypes.AddRangeDistinct(animationDef.interactionDefTypes.Except(Tags.interactionDefTypes));
 | 
			
		||||
            CustomTags.soundDefs.AddRangeDistinct(animationDef.animationStages.SelectMany(x => x.animationClips.SelectMany(y => y.keyframes.Select(z => z.soundEffect))).Except(Tags.soundDefs));
 | 
			
		||||
 | 
			
		||||
            SaveCustomArrays();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,6 @@
 | 
			
		|||
using UnityEngine;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Xml.Serialization;
 | 
			
		||||
using UnityEngine;
 | 
			
		||||
 | 
			
		||||
namespace RimWorldAnimationStudio
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -21,4 +23,36 @@ namespace RimWorldAnimationStudio
 | 
			
		|||
        public static Color ColorGhost = new Color(0.5f, 0.5f, 0.5f, 0.5f);
 | 
			
		||||
        public static Color ColorRed = new Color(0.9f, 0f, 0f);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static class Tags
 | 
			
		||||
    {
 | 
			
		||||
        public static List<string> defNames = new List<string>() { "Human" };
 | 
			
		||||
        public static List<string> bodyParts = new List<string>() { "Penis", "Vagina", "Anus", "Breasts", "Mouth" };
 | 
			
		||||
        public static List<string> bodyDefTypes = new List<string>() { "Human", "Bird", "BeetleLike", "BeetleLikeWithClaw", "MechanicalCentipede", "MechanicalTermite", "Lancer", "Pikeman", "Monkey", "QuadrupedAnimalWithClawsTailAndJowl", "QuadrupedAnimalWithHooves", "QuadrupedAnimalWithHoovesAndHorn", "QuadrupedAnimalWithHoovesAndHump", "QuadrupedAnimalWithHoovesAndTusks", "QuadrupedAnimalWithHoovesTusksAndTrunk", "QuadrupedAnimalWithPaws", "QuadrupedAnimalWithPawsAndTail", "Scyther", "Snake", "TurtleLike" };
 | 
			
		||||
        public static List<string> sexTypes = new List<string>() { "None", "Vaginal", "Anal", "Oral", "Masturbation", "DoublePenetration", "Boobjob", "Handjob", "Footjob", "Fingering", "Scissoring", "MutualMasturbation", "Fisting", "MechImplant", "Rimming", "Fellatio", "Cunnilingus", "Sixtynine" };
 | 
			
		||||
        public static List<string> interactionDefTypes = new List<string>();
 | 
			
		||||
        public static List<string> soundDefs = new List<string>() { "None", "Sex", "Fuck", "Slimy", "Suck", "Cum" };
 | 
			
		||||
        public static List<string> actorLayers = new List<string>() { "Building", "BuildingOnTop", "MoteBelowThings", "Item", "ItemImportant", "LayingPawn", "PawnRope", "Projectile", "Pawn", "PawnUnused", "PawnState" };
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static class CustomTags
 | 
			
		||||
    {
 | 
			
		||||
        public static List<string> defNames = new List<string>();
 | 
			
		||||
        public static List<string> bodyParts = new List<string>();
 | 
			
		||||
        public static List<string> bodyDefTypes = new List<string>();
 | 
			
		||||
        public static List<string> sexTypes = new List<string>();
 | 
			
		||||
        public static List<string> interactionDefTypes = new List<string>();
 | 
			
		||||
        public static List<string> soundDefs = new List<string>();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    [XmlRoot("CustomTagsHelper", IsNullable = false)]
 | 
			
		||||
    public class CustomTagsHelper
 | 
			
		||||
    {
 | 
			
		||||
        [XmlArray("defNames"), XmlArrayItem("li")] public List<string> defNames = new List<string>();
 | 
			
		||||
        [XmlArray("bodyParts"), XmlArrayItem("li")] public List<string> bodyParts = new List<string>();
 | 
			
		||||
        [XmlArray("bodyDefTypes"), XmlArrayItem("li")] public List<string> bodyDefTypes = new List<string>();
 | 
			
		||||
        [XmlArray("sexTypes"), XmlArrayItem("li")] public List<string> sexTypes = new List<string>();
 | 
			
		||||
        [XmlArray("interactionDefTypes"), XmlArrayItem("li")] public List<string> interactionDefTypes = new List<string>(); 
 | 
			
		||||
        [XmlArray("soundDefs"), XmlArrayItem("li")] public List<string> soundDefs = new List<string>();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										30
									
								
								Assets/Scripts/NumberValidator.cs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								Assets/Scripts/NumberValidator.cs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,30 @@
 | 
			
		|||
using System.Collections;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using UnityEngine;
 | 
			
		||||
using UnityEngine.UI;
 | 
			
		||||
 | 
			
		||||
public class NumberValidator : MonoBehaviour
 | 
			
		||||
{
 | 
			
		||||
    public InputField.CharacterValidation valiationType = InputField.CharacterValidation.Decimal;
 | 
			
		||||
 | 
			
		||||
    public void Start()
 | 
			
		||||
    {
 | 
			
		||||
        InputField inputField = GetComponent<InputField>();
 | 
			
		||||
 | 
			
		||||
        if (inputField)
 | 
			
		||||
        { 
 | 
			
		||||
            inputField.characterValidation = valiationType;
 | 
			
		||||
 | 
			
		||||
            if (valiationType == InputField.CharacterValidation.Decimal)
 | 
			
		||||
            { inputField.onEndEdit.AddListener(delegate { MakeDecimal(); }); }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void MakeDecimal()
 | 
			
		||||
    {
 | 
			
		||||
        InputField inputField = GetComponent<InputField>();
 | 
			
		||||
 | 
			
		||||
        if (inputField)
 | 
			
		||||
        { inputField.text = string.Format("{0:0.000}", float.Parse(inputField.text)); }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -20,17 +20,17 @@ namespace RimWorldAnimationStudio
 | 
			
		|||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static void WriteXML(Defs defs, string path)
 | 
			
		||||
        public static void WriteXML<T>(T obj, string path)
 | 
			
		||||
        {
 | 
			
		||||
            if (defs == null || path == null || path == "")
 | 
			
		||||
            if (obj == null || path == null || path == "")
 | 
			
		||||
            { return; }
 | 
			
		||||
 | 
			
		||||
            XmlSerializer writer = new XmlSerializer(typeof(Defs));
 | 
			
		||||
            XmlSerializer writer = new XmlSerializer(typeof(T));
 | 
			
		||||
            XmlSerializerNamespaces nameSpaces = new XmlSerializerNamespaces();
 | 
			
		||||
            nameSpaces.Add("", "");
 | 
			
		||||
 | 
			
		||||
            FileStream file = File.Create(path);
 | 
			
		||||
            writer.Serialize(file, defs, nameSpaces);
 | 
			
		||||
            writer.Serialize(file, obj, nameSpaces);
 | 
			
		||||
            file.Close();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,14 +14,6 @@ namespace RimWorldAnimationStudio
 | 
			
		|||
        
 | 
			
		||||
        public static int keyframeID = 0;
 | 
			
		||||
 | 
			
		||||
        public static List<string> defNames = new List<string>() { "Human" };
 | 
			
		||||
        public static List<string> bodyParts = new List<string>() { "Any appendage", "Any orifice", "Penis", "Vagina", "Anus", "Breasts", "Mouth" };
 | 
			
		||||
        public static List<string> bodyDefTypes = new List<string>() { "Human", "Bird", "BeetleLike", "BeetleLikeWithClaw", "MechanicalCentipede", "MechanicalTermite", "Lancer", "Pikeman", "Monkey", "QuadrupedAnimalWithClawsTailAndJowl", "QuadrupedAnimalWithHooves", "QuadrupedAnimalWithHoovesAndHorn", "QuadrupedAnimalWithHoovesAndHump", "QuadrupedAnimalWithHoovesAndTusks", "QuadrupedAnimalWithHoovesTusksAndTrunk", "QuadrupedAnimalWithPaws", "QuadrupedAnimalWithPawsAndTail", "Scyther", "Snake", "TurtleLike" };
 | 
			
		||||
        public static List<string> sexTypes = new List<string>() { "None", "Vaginal", "Anal", "Oral", "Masturbation", "DoublePenetration", "Boobjob", "Handjob", "Footjob", "Fingering", "Scissoring", "MutualMasturbation", "Fisting", "MechImplant", "Rimming", "Fellatio", "Cunnilingus", "Sixtynine" };
 | 
			
		||||
        public static List<string> interactionDefTypes = new List<string>();
 | 
			
		||||
        public static List<string> soundDefs = new List<string>() { "None", "Sex", "Fuck", "Slimy", "Suck", "Cum" };
 | 
			
		||||
        public static List<string> actorLayers = new List<string>() { "Building", "BuildingOnTop", "MoteBelowThings", "Item", "ItemImportant", "LayingPawn", "PawnRope", "Projectile", "Pawn", "PawnUnused", "PawnState" };
 | 
			
		||||
 | 
			
		||||
        [SerializeField] private List<HistoricRecord> workspaceHistory = new List<HistoricRecord>();
 | 
			
		||||
        [SerializeField] private int historyIndex = 0;
 | 
			
		||||
        [SerializeField] private int maxHistoryDepth = 100;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										14
									
								
								Assets/StreamingAssets/customTags.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								Assets/StreamingAssets/customTags.xml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,14 @@
 | 
			
		|||
<?xml version="1.0"?>
 | 
			
		||||
<CustomTagsHelper>
 | 
			
		||||
  <defNames />
 | 
			
		||||
  <bodyParts />
 | 
			
		||||
  <bodyDefTypes />
 | 
			
		||||
  <sexTypes />
 | 
			
		||||
  <interactionDefTypes>
 | 
			
		||||
    <li>AnalSex</li>
 | 
			
		||||
    <li>VaginalSex</li>
 | 
			
		||||
    <li>VaginalSexF</li>
 | 
			
		||||
    <li>VaginalRapeF</li>
 | 
			
		||||
  </interactionDefTypes>
 | 
			
		||||
  <soundDefs />
 | 
			
		||||
</CustomTagsHelper>
 | 
			
		||||
							
								
								
									
										7
									
								
								Assets/StreamingAssets/customTags.xml.meta
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								Assets/StreamingAssets/customTags.xml.meta
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,7 @@
 | 
			
		|||
fileFormatVersion: 2
 | 
			
		||||
guid: e968673039badf84793171c61dce04ce
 | 
			
		||||
DefaultImporter:
 | 
			
		||||
  externalObjects: {}
 | 
			
		||||
  userData: 
 | 
			
		||||
  assetBundleName: 
 | 
			
		||||
  assetBundleVariant: 
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Library/Artifacts/01/01563130c6268eddc34fbd092deeb726
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Library/Artifacts/01/01563130c6268eddc34fbd092deeb726
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Library/Artifacts/06/0600a652ce5d5b4b3d178867081f67e5
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Library/Artifacts/06/0600a652ce5d5b4b3d178867081f67e5
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Library/Artifacts/09/09422755819f7acee09b75874499e142
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Library/Artifacts/09/09422755819f7acee09b75874499e142
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Library/Artifacts/09/095e7313d7a87d9c38776718e9e1a2c2
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Library/Artifacts/09/095e7313d7a87d9c38776718e9e1a2c2
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Library/Artifacts/0c/0cf00e31849d840e372b46a078218d44
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Library/Artifacts/0c/0cf00e31849d840e372b46a078218d44
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Library/Artifacts/0d/0d966d451a4e86681aa387942c5cbbdf
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Library/Artifacts/0d/0d966d451a4e86681aa387942c5cbbdf
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Library/Artifacts/0d/0de993fc9a1a31fe18ef974e8addc1fe
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Library/Artifacts/0d/0de993fc9a1a31fe18ef974e8addc1fe
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Library/Artifacts/0f/0fee8a50fb409264ebb09bed20386c3a
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Library/Artifacts/0f/0fee8a50fb409264ebb09bed20386c3a
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Library/Artifacts/10/101829049cb5e37831425f1817c91e96
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Library/Artifacts/10/101829049cb5e37831425f1817c91e96
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Library/Artifacts/14/14a87a6db333f200140a600aeb86a5a1
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Library/Artifacts/14/14a87a6db333f200140a600aeb86a5a1
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Library/Artifacts/15/15cd56181d179d919964d7547884e200
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Library/Artifacts/15/15cd56181d179d919964d7547884e200
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Library/Artifacts/15/15de06cc24bf7343be38ac74656940de
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Library/Artifacts/15/15de06cc24bf7343be38ac74656940de
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Library/Artifacts/16/16ec92a4d1a2580d67dbeeee07e2de95
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Library/Artifacts/16/16ec92a4d1a2580d67dbeeee07e2de95
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Library/Artifacts/1a/1a9345df129356b7a6c2ac58a41963c3
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Library/Artifacts/1a/1a9345df129356b7a6c2ac58a41963c3
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Library/Artifacts/21/212a2adbdb0dabc0c370c7b88a91e9fb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Library/Artifacts/21/212a2adbdb0dabc0c370c7b88a91e9fb
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Library/Artifacts/21/219fc51896b6e82ba5ad164d7d04b862
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Library/Artifacts/21/219fc51896b6e82ba5ad164d7d04b862
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Library/Artifacts/23/239fd20c0862b3d16a1d88089563ac00
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Library/Artifacts/23/239fd20c0862b3d16a1d88089563ac00
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Library/Artifacts/24/24039d0aa0486b9b277211603b44d5c3
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Library/Artifacts/24/24039d0aa0486b9b277211603b44d5c3
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Library/Artifacts/27/276bb90a4c9acc46e2cca60e977f9579
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Library/Artifacts/27/276bb90a4c9acc46e2cca60e977f9579
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Library/Artifacts/28/285ae9fc4a44f1479d6822f26133aade
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Library/Artifacts/28/285ae9fc4a44f1479d6822f26133aade
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Library/Artifacts/2a/2a54cdfc1ca240a6cb30fdd12722ffe6
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Library/Artifacts/2a/2a54cdfc1ca240a6cb30fdd12722ffe6
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Library/Artifacts/2a/2ae9b0b566b32d33d649a6105ae5b108
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Library/Artifacts/2a/2ae9b0b566b32d33d649a6105ae5b108
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Library/Artifacts/2b/2b7a91e765113819950906a02193b8e3
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Library/Artifacts/2b/2b7a91e765113819950906a02193b8e3
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Library/Artifacts/2c/2cb99051c6f7231a976778ad9070f4b4
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Library/Artifacts/2c/2cb99051c6f7231a976778ad9070f4b4
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Library/Artifacts/2e/2e6325742ff22fca60c33db4134aa09a
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Library/Artifacts/2e/2e6325742ff22fca60c33db4134aa09a
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Library/Artifacts/2e/2eb04eab092690119d6d468048e91667
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Library/Artifacts/2e/2eb04eab092690119d6d468048e91667
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Library/Artifacts/2f/2fb9c56470944efbc852d684a914d6e0
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Library/Artifacts/2f/2fb9c56470944efbc852d684a914d6e0
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Library/Artifacts/30/3096cdd8939bc0032e6ea0ee4bd679c1
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Library/Artifacts/30/3096cdd8939bc0032e6ea0ee4bd679c1
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Library/Artifacts/31/318be973dba80e68ff7a8432c1d87e2d
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Library/Artifacts/31/318be973dba80e68ff7a8432c1d87e2d
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Library/Artifacts/34/346b3389858a1091a72fea3989c7a185
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Library/Artifacts/34/346b3389858a1091a72fea3989c7a185
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Library/Artifacts/35/35c5b5e2c3dce9911bd49c6c076ca1aa
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Library/Artifacts/35/35c5b5e2c3dce9911bd49c6c076ca1aa
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Library/Artifacts/38/38d1a57cc52f0a3a8f0f0fc5d2a0c972
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Library/Artifacts/38/38d1a57cc52f0a3a8f0f0fc5d2a0c972
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Library/Artifacts/3c/3cc6290619bf2e36f7d51bc321778ec6
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Library/Artifacts/3c/3cc6290619bf2e36f7d51bc321778ec6
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Library/Artifacts/3d/3d4e3d890d9558264228c7d2ff9e19c0
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Library/Artifacts/3d/3d4e3d890d9558264228c7d2ff9e19c0
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Library/Artifacts/45/45f269b2e022e3a8eecd522d0da631d0
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Library/Artifacts/45/45f269b2e022e3a8eecd522d0da631d0
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Library/Artifacts/48/48aca6a5f55f43adcc863d3e94669cb7
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Library/Artifacts/48/48aca6a5f55f43adcc863d3e94669cb7
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Library/Artifacts/4b/4b121058d7a737aae174f27ff1463a2c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Library/Artifacts/4b/4b121058d7a737aae174f27ff1463a2c
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Library/Artifacts/4b/4be7ff4546e9867b8bff3a7ff952ed1e
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Library/Artifacts/4b/4be7ff4546e9867b8bff3a7ff952ed1e
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Library/Artifacts/4c/4c3db94a10b80f250aae9989780170dd
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Library/Artifacts/4c/4c3db94a10b80f250aae9989780170dd
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Library/Artifacts/4d/4d80e34e80c7f26b4d3a0c9291cf52d6
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Library/Artifacts/4d/4d80e34e80c7f26b4d3a0c9291cf52d6
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Library/Artifacts/4e/4e43144366d6c7f0c932a53350294926
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Library/Artifacts/4e/4e43144366d6c7f0c932a53350294926
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Library/Artifacts/4f/4f7e51004da0d534c4f81fda9c126d0c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Library/Artifacts/4f/4f7e51004da0d534c4f81fda9c126d0c
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Library/Artifacts/50/500fb404d51d4e49fbf1bc362bc0c20b
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Library/Artifacts/50/500fb404d51d4e49fbf1bc362bc0c20b
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Library/Artifacts/50/50c60498c8c69094497d8cf453fdf8cb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Library/Artifacts/50/50c60498c8c69094497d8cf453fdf8cb
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Library/Artifacts/51/513ea1dc3dea8b40cbd32927af8f462e
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Library/Artifacts/51/513ea1dc3dea8b40cbd32927af8f462e
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Library/Artifacts/53/53fa3b34398708edba135966cf577817
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Library/Artifacts/53/53fa3b34398708edba135966cf577817
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							Some files were not shown because too many files have changed in this diff Show more
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue