Keyframe stretching plus appendage manipulation

This commit is contained in:
AbstractConcept 2022-09-20 01:03:55 -05:00
parent 18c0473f39
commit 1af7f41d63
427 changed files with 7003 additions and 1147 deletions

View file

@ -0,0 +1,22 @@
using UnityEngine;
using UnityEditor;
using System.Collections;
namespace DigitalRuby.AdvancedPolygonCollider
{
[CustomEditor(typeof(AdvancedPolygonCollider))]
public class AdvancedPolygonColliderEditor : Editor
{
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
AdvancedPolygonCollider c = target as AdvancedPolygonCollider;
if (c != null)
{
EditorGUILayout.LabelField("Vertices: " + c.VerticesCount);
}
}
}
}

View file

@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 08b096b84c0da4945b145bddb76c3761
timeCreated: 1450482984
licenseType: Store
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -9,6 +9,8 @@ namespace RimWorldAnimationStudio
{
SerializedProperty ghostSlidersProp;
SerializedProperty ghostSliderPrefabProp;
SerializedProperty handleImageProp;
SerializedProperty soundIconProp;
SerializedProperty maxGhostsProp;
protected override void OnEnable()
@ -16,6 +18,8 @@ namespace RimWorldAnimationStudio
base.OnEnable();
ghostSlidersProp = serializedObject.FindProperty("ghostSliders");
ghostSliderPrefabProp = serializedObject.FindProperty("ghostSliderPrefab");
handleImageProp = serializedObject.FindProperty("handleImage");
soundIconProp = serializedObject.FindProperty("soundIcon");
maxGhostsProp = serializedObject.FindProperty("maxGhosts");
}
@ -23,6 +27,8 @@ namespace RimWorldAnimationStudio
{
EditorGUILayout.PropertyField(ghostSlidersProp, new GUIContent("Ghost Sliders"));
EditorGUILayout.PropertyField(ghostSliderPrefabProp, new GUIContent("Ghost Slider Prefab"));
EditorGUILayout.PropertyField(handleImageProp, new GUIContent("Handle Image"));
EditorGUILayout.PropertyField(soundIconProp, new GUIContent("Sound Icon"));
EditorGUILayout.PropertyField(maxGhostsProp, new GUIContent("Max Ghosts"));
serializedObject.ApplyModifiedProperties();

View file

@ -10,8 +10,9 @@ GameObject:
m_Component:
- component: {fileID: 7929422519883802245}
- component: {fileID: 7929422519883802244}
- component: {fileID: 9094326343171681927}
- component: {fileID: 6126300607907588871}
- component: {fileID: 3275330537164762353}
- component: {fileID: 7621569460770085946}
m_Layer: 0
m_Name: ActorHead
m_TagString: Untagged
@ -27,7 +28,7 @@ Transform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7929422519883802246}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalPosition: {x: 0, y: 0.34, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 7929422520673851209}
@ -77,28 +78,14 @@ SpriteRenderer:
m_FlipX: 0
m_FlipY: 0
m_DrawMode: 0
m_Size: {x: 1.28, y: 1.28}
m_Size: {x: 0.64, y: 0.64}
m_AdaptiveModeThreshold: 0.5
m_SpriteTileMode: 0
m_WasSpriteAssigned: 1
m_MaskInteraction: 0
m_SpriteSortPoint: 0
--- !u!114 &3275330537164762353
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7929422519883802246}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b23e33f312d52c642b86f5f2138f4030, type: 3}
m_Name:
m_EditorClassIdentifier:
bodyPartRenderer: {fileID: 7929422519883802244}
parent: {fileID: -4411442180840688308}
--- !u!61 &7621569460770085946
BoxCollider2D:
--- !u!60 &9094326343171681927
PolygonCollider2D:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
@ -115,14 +102,75 @@ BoxCollider2D:
border: {x: 0, y: 0, z: 0, w: 0}
pivot: {x: 0.5, y: 0.5}
oldSize: {x: 1.28, y: 1.28}
newSize: {x: 1.28, y: 1.28}
newSize: {x: 0.64, y: 0.64}
adaptiveTilingThreshold: 0.5
drawMode: 0
adaptiveTiling: 0
m_AutoTiling: 0
serializedVersion: 2
m_Size: {x: 0.5, y: 0.5}
m_EdgeRadius: 0
m_Points:
m_Paths:
- - {x: -0.024999999, y: -0.265}
- {x: 0.13499999, y: -0.205}
- {x: 0.225, y: -0.044999998}
- {x: 0.225, y: 0.105}
- {x: 0.195, y: 0.16499999}
- {x: 0.105, y: 0.225}
- {x: -0.074999996, y: 0.235}
- {x: -0.175, y: 0.185}
- {x: -0.225, y: 0.105}
- {x: -0.21499999, y: -0.085}
- {x: -0.16499999, y: -0.175}
- {x: -0.074999996, y: -0.24499999}
--- !u!114 &6126300607907588871
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7929422519883802246}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8c55c83d4c4dd1145ad5fbbab3c3df36, type: 3}
m_Name:
m_EditorClassIdentifier:
AlphaTolerance: 20
DistanceThreshold: 2
Scale: 1
Decompose: 0
RunInPlayMode: 1
UseCache: 0
lastAlphaTolerance: 20
lastScale: 1
lastDistanceThreshold: 2
lastDecompose: 0
lastSprite: {fileID: 21300000, guid: 0b37cc6354dc6a94cb2d2de2529baa4e, type: 3}
lastRect:
serializedVersion: 2
x: 0
y: 0
width: 128
height: 128
lastOffset: {x: 64, y: 64}
lastPixelsPerUnit: 100
lastFlipX: 0
lastFlipY: 0
editorCache: []
--- !u!114 &3275330537164762353
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7929422519883802246}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b23e33f312d52c642b86f5f2138f4030, type: 3}
m_Name:
m_EditorClassIdentifier:
bodyPartRenderer: {fileID: 7929422519883802244}
parent: {fileID: -4411442180840688308}
isHead: 1
isSelected: 0
--- !u!1 &7929422520673851210
GameObject:
m_ObjectHideFlags: 0
@ -133,7 +181,8 @@ GameObject:
m_Component:
- component: {fileID: 7929422520673851209}
- component: {fileID: 7929422520673851208}
- component: {fileID: -7575978412006062152}
- component: {fileID: 4571872096250432618}
- component: {fileID: 1604891790409609302}
- component: {fileID: -4411442180840688308}
m_Layer: 0
m_Name: ActorBody
@ -154,6 +203,7 @@ Transform:
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 7929422519883802245}
- {fileID: 4090857286061458930}
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@ -207,8 +257,8 @@ SpriteRenderer:
m_WasSpriteAssigned: 1
m_MaskInteraction: 0
m_SpriteSortPoint: 0
--- !u!61 &-7575978412006062152
BoxCollider2D:
--- !u!60 &4571872096250432618
PolygonCollider2D:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
@ -220,7 +270,7 @@ BoxCollider2D:
m_IsTrigger: 0
m_UsedByEffector: 0
m_UsedByComposite: 0
m_Offset: {x: 0, y: -0.2}
m_Offset: {x: 0, y: 0}
m_SpriteTilingProperty:
border: {x: 0, y: 0, z: 0, w: 0}
pivot: {x: 0.5, y: 0.5}
@ -230,9 +280,54 @@ BoxCollider2D:
drawMode: 0
adaptiveTiling: 0
m_AutoTiling: 0
serializedVersion: 2
m_Size: {x: 0.75, y: 1}
m_EdgeRadius: 0
m_Points:
m_Paths:
- - {x: -0.11176471, y: -0.5117647}
- {x: 0.1, y: -0.5117647}
- {x: 0.20588236, y: -0.44117647}
- {x: 0.3, y: -0.052941177}
- {x: 0.2882353, y: 0.12352941}
- {x: 0.21764706, y: 0.20588236}
- {x: -0.04117647, y: 0.24117647}
- {x: -0.19411765, y: 0.21764706}
- {x: -0.2764706, y: 0.15882353}
- {x: -0.3, y: -0.07647059}
- {x: -0.21764706, y: -0.41764706}
- {x: -0.17058824, y: -0.4882353}
--- !u!114 &1604891790409609302
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7929422520673851210}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8c55c83d4c4dd1145ad5fbbab3c3df36, type: 3}
m_Name:
m_EditorClassIdentifier:
AlphaTolerance: 19
DistanceThreshold: 2
Scale: 1
Decompose: 0
RunInPlayMode: 1
UseCache: 0
lastAlphaTolerance: 19
lastScale: 1
lastDistanceThreshold: 2
lastDecompose: 0
lastSprite: {fileID: 21300000, guid: e6887bc2f64df4d4b91bd2d0ad0ffd98, type: 3}
lastRect:
serializedVersion: 2
x: 0
y: 0
width: 128
height: 128
lastOffset: {x: 64, y: 64}
lastPixelsPerUnit: 85
lastFlipX: 0
lastFlipY: 0
editorCache: []
--- !u!114 &-4411442180840688308
MonoBehaviour:
m_ObjectHideFlags: 0
@ -247,5 +342,182 @@ MonoBehaviour:
m_EditorClassIdentifier:
actorID: 0
bodyType: Male
isSelected: 0
bodyRenderer: {fileID: 7929422520673851208}
headRenderer: {fileID: 7929422519883802244}
appendageRenderer: {fileID: 4251726083449519904}
--- !u!1 &9122292209377678227
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4090857286061458930}
- component: {fileID: 4251726083449519904}
- component: {fileID: 3728166245808944226}
- component: {fileID: 1975559547785005251}
- component: {fileID: 5577329845248860699}
m_Layer: 0
m_Name: ActorAppendage
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 0
--- !u!4 &4090857286061458930
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 9122292209377678227}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: -0.471, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 7929422520673851209}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!212 &4251726083449519904
SpriteRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 9122292209377678227}
m_Enabled: 1
m_CastShadows: 0
m_ReceiveShadows: 0
m_DynamicOccludee: 1
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 0
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: -2115984483
m_SortingLayer: 22
m_SortingOrder: 1
m_Sprite: {fileID: 21300000, guid: 38c0bc38c0d71b04cb11a1eb610990e1, type: 3}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_FlipX: 0
m_FlipY: 0
m_DrawMode: 0
m_Size: {x: 0.64, y: 0.64}
m_AdaptiveModeThreshold: 0.5
m_SpriteTileMode: 0
m_WasSpriteAssigned: 1
m_MaskInteraction: 0
m_SpriteSortPoint: 0
--- !u!60 &3728166245808944226
PolygonCollider2D:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 9122292209377678227}
m_Enabled: 1
m_Density: 1
m_Material: {fileID: 0}
m_IsTrigger: 0
m_UsedByEffector: 0
m_UsedByComposite: 0
m_Offset: {x: 0, y: 0}
m_SpriteTilingProperty:
border: {x: 0, y: 0, z: 0, w: 0}
pivot: {x: 0.5, y: 0.5}
oldSize: {x: 1.3837838, y: 1.3837838}
newSize: {x: 0.64, y: 0.64}
adaptiveTilingThreshold: 0.5
drawMode: 0
adaptiveTiling: 0
m_AutoTiling: 0
m_Points:
m_Paths:
- - {x: -0.013513514, y: -0.035135135}
- {x: 0.029729731, y: -0.029729731}
- {x: 0.040540542, y: -0.0027027028}
- {x: 0.045945946, y: 0.12162162}
- {x: 0.013513514, y: 0.15945946}
- {x: -0.024324324, y: 0.14864865}
- {x: -0.040540542, y: 0.12162162}
- {x: -0.024324324, y: -0.029729731}
- - {x: -0.056756757, y: 0.008108108}
- {x: -0.051351354, y: 0.072972976}
- {x: -0.056756757, y: 0.029729731}
- - {x: 0.056756757, y: 0.008108108}
- {x: 0.056756757, y: 0.01891892}
- - {x: 0.056756757, y: 0.07837838}
- {x: 0.062162165, y: 0.1}
- {x: 0.056756757, y: 0.089189194}
--- !u!114 &1975559547785005251
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 9122292209377678227}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8c55c83d4c4dd1145ad5fbbab3c3df36, type: 3}
m_Name:
m_EditorClassIdentifier:
AlphaTolerance: 20
DistanceThreshold: 2
Scale: 1
Decompose: 0
RunInPlayMode: 1
UseCache: 0
lastAlphaTolerance: 20
lastScale: 1
lastDistanceThreshold: 2
lastDecompose: 0
lastSprite: {fileID: 21300000, guid: 38c0bc38c0d71b04cb11a1eb610990e1, type: 3}
lastRect:
serializedVersion: 2
x: 0
y: 0
width: 256
height: 256
lastOffset: {x: 128, y: 128}
lastPixelsPerUnit: 185
lastFlipX: 0
lastFlipY: 0
editorCache: []
--- !u!114 &5577329845248860699
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 9122292209377678227}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b23e33f312d52c642b86f5f2138f4030, type: 3}
m_Name:
m_EditorClassIdentifier:
bodyPartRenderer: {fileID: 4251726083449519904}
parent: {fileID: -4411442180840688308}
isHead: 0
isSelected: 0

View file

@ -0,0 +1,948 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &7715503543522092287
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 7715503543522092286}
- component: {fileID: 7715503543522092284}
- component: {fileID: 7715503543522092285}
m_Layer: 5
m_Name: Handle
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &7715503543522092286
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7715503543522092287}
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: 7715503544843436707}
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: 20, y: 20}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &7715503543522092284
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7715503543522092287}
m_CullTransparentMesh: 0
--- !u!114 &7715503543522092285
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7715503543522092287}
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!1 &7715503543609300145
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 7715503543609300144}
- component: {fileID: 7715503543609300109}
- component: {fileID: 7715503543609300110}
- component: {fileID: 7715503543609300111}
m_Layer: 5
m_Name: Viewport
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &7715503543609300144
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7715503543609300145}
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: 7715503544683182666}
m_Father: {fileID: 7715503544115872493}
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: -17, y: 0}
m_Pivot: {x: 0, y: 1}
--- !u!222 &7715503543609300109
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7715503543609300145}
m_CullTransparentMesh: 0
--- !u!114 &7715503543609300110
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7715503543609300145}
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: 10917, 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!114 &7715503543609300111
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7715503543609300145}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3}
m_Name:
m_EditorClassIdentifier:
m_ShowMaskGraphic: 0
--- !u!1 &7715503544115872494
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 7715503544115872493}
- component: {fileID: 7715503544115872490}
- component: {fileID: 7715503544115872491}
- component: {fileID: 7715503544115872492}
m_Layer: 5
m_Name: Scroll View
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &7715503544115872493
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7715503544115872494}
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: 7715503543609300144}
- {fileID: 7715503544952922357}
m_Father: {fileID: 7715503544296011585}
m_RootOrder: 0
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: 0, y: 0}
m_SizeDelta: {x: 260, y: 200}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &7715503544115872490
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7715503544115872494}
m_CullTransparentMesh: 0
--- !u!114 &7715503544115872491
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7715503544115872494}
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: 10907, 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!114 &7715503544115872492
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7715503544115872494}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Content: {fileID: 7715503544683182666}
m_Horizontal: 1
m_Vertical: 1
m_MovementType: 1
m_Elasticity: 0.1
m_Inertia: 1
m_DecelerationRate: 0.135
m_ScrollSensitivity: 1
m_Viewport: {fileID: 7715503543609300144}
m_HorizontalScrollbar: {fileID: 0}
m_VerticalScrollbar: {fileID: 7715503544952922356}
m_HorizontalScrollbarVisibility: 2
m_VerticalScrollbarVisibility: 2
m_HorizontalScrollbarSpacing: -3
m_VerticalScrollbarSpacing: -3
m_OnValueChanged:
m_PersistentCalls:
m_Calls: []
--- !u!1 &7715503544296011586
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 7715503544296011585}
- component: {fileID: 7715503544296011614}
- component: {fileID: 7715503544296011615}
m_Layer: 5
m_Name: DialogBox
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 0
--- !u!224 &7715503544296011585
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7715503544296011586}
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: 7715503544115872493}
- {fileID: 7715503544597145778}
- {fileID: 7715503544528335668}
m_Father: {fileID: 0}
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!222 &7715503544296011614
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7715503544296011586}
m_CullTransparentMesh: 0
--- !u!114 &7715503544296011615
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7715503544296011586}
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: 0, g: 0, b: 0, a: 0.392}
m_RaycastTarget: 1
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 10907, 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!1 &7715503544528335669
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 7715503544528335668}
- component: {fileID: 7715503544528335665}
- component: {fileID: 7715503544528335666}
- component: {fileID: 7715503544528335667}
m_Layer: 5
m_Name: CloseWindowButton
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &7715503544528335668
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7715503544528335669}
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: 7715503544754162525}
m_Father: {fileID: 7715503544296011585}
m_RootOrder: 2
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: 0, y: -115}
m_SizeDelta: {x: 260, y: 30}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &7715503544528335665
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7715503544528335669}
m_CullTransparentMesh: 0
--- !u!114 &7715503544528335666
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7715503544528335669}
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!114 &7715503544528335667
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7715503544528335669}
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: 7715503544528335666}
m_OnClick:
m_PersistentCalls:
m_Calls:
- m_Target: {fileID: 0}
m_MethodName: Pop
m_Mode: 1
m_Arguments:
m_ObjectArgument: {fileID: 0}
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
m_IntArgument: 0
m_FloatArgument: 0
m_StringArgument:
m_BoolArgument: 0
m_CallState: 2
--- !u!1 &7715503544597145779
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 7715503544597145778}
- component: {fileID: 7715503544597145776}
- component: {fileID: 7715503544597145777}
m_Layer: 5
m_Name: Panel
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &7715503544597145778
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7715503544597145779}
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: 7715503544946347199}
m_Father: {fileID: 7715503544296011585}
m_RootOrder: 1
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: 0, y: 140}
m_SizeDelta: {x: 260, y: 80}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &7715503544597145776
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7715503544597145779}
m_CullTransparentMesh: 0
--- !u!114 &7715503544597145777
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7715503544597145779}
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: 10907, 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!1 &7715503544683182667
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 7715503544683182666}
- component: {fileID: 7715503544683182664}
- component: {fileID: 7715503544683182665}
m_Layer: 5
m_Name: Content
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &7715503544683182666
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7715503544683182667}
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: 7715503543609300144}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 10}
m_Pivot: {x: 0, y: 1}
--- !u!114 &7715503544683182664
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7715503544683182667}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Padding:
m_Left: 10
m_Right: 10
m_Top: 10
m_Bottom: 10
m_ChildAlignment: 1
m_Spacing: 5
m_ChildForceExpandWidth: 1
m_ChildForceExpandHeight: 0
m_ChildControlWidth: 1
m_ChildControlHeight: 0
m_ChildScaleWidth: 0
m_ChildScaleHeight: 0
--- !u!114 &7715503544683182665
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7715503544683182667}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
m_Name:
m_EditorClassIdentifier:
m_HorizontalFit: 0
m_VerticalFit: 1
--- !u!1 &7715503544754162526
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 7715503544754162525}
- component: {fileID: 7715503544754162523}
- component: {fileID: 7715503544754162524}
m_Layer: 5
m_Name: Text
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &7715503544754162525
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7715503544754162526}
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: 7715503544528335668}
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!222 &7715503544754162523
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7715503544754162526}
m_CullTransparentMesh: 0
--- !u!114 &7715503544754162524
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7715503544754162526}
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: Close window
--- !u!1 &7715503544843436708
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 7715503544843436707}
m_Layer: 5
m_Name: Sliding Area
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &7715503544843436707
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7715503544843436708}
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: 7715503543522092286}
m_Father: {fileID: 7715503544952922357}
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: -20, y: -20}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!1 &7715503544946347168
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 7715503544946347199}
- component: {fileID: 7715503544946347197}
- component: {fileID: 7715503544946347198}
m_Layer: 5
m_Name: DescriptiveText
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &7715503544946347199
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7715503544946347168}
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: 7715503544597145778}
m_RootOrder: 0
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: 0, y: 0}
m_SizeDelta: {x: 260, y: 80}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &7715503544946347197
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7715503544946347168}
m_CullTransparentMesh: 0
--- !u!114 &7715503544946347198
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7715503544946347168}
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: 'Select all defs that can
use this animation'
--- !u!1 &7715503544952922358
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 7715503544952922357}
- component: {fileID: 7715503544952922354}
- component: {fileID: 7715503544952922355}
- component: {fileID: 7715503544952922356}
m_Layer: 5
m_Name: Scrollbar Vertical
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &7715503544952922357
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7715503544952922358}
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: 7715503544843436707}
m_Father: {fileID: 7715503544115872493}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 1, y: 0}
m_AnchorMax: {x: 1, y: 0}
m_AnchoredPosition: {x: 0, y: 200}
m_SizeDelta: {x: 20, y: 200}
m_Pivot: {x: 1, y: 1}
--- !u!222 &7715503544952922354
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7715503544952922358}
m_CullTransparentMesh: 0
--- !u!114 &7715503544952922355
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7715503544952922358}
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: 10907, 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!114 &7715503544952922356
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7715503544952922358}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 2a4db7a114972834c8e4117be1d82ba3, 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: 7715503543522092285}
m_HandleRect: {fileID: 7715503543522092286}
m_Direction: 2
m_Value: 0
m_Size: 1
m_NumberOfSteps: 0
m_OnValueChanged:
m_PersistentCalls:
m_Calls: []

View file

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 8b89f6c9e5f696c4997760829c45a505
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -71,6 +71,80 @@ RectTransform:
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!1 &3845252506739069817
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 6663487708742390543}
- component: {fileID: 7593977218429446981}
- component: {fileID: 4593082054722737880}
m_Layer: 5
m_Name: SoundIcon
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 0
--- !u!224 &6663487708742390543
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3845252506739069817}
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: 5757681650493455882}
m_RootOrder: 0
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: 0, y: 0}
m_SizeDelta: {x: 30, y: 30}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &7593977218429446981
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3845252506739069817}
m_CullTransparentMesh: 0
--- !u!114 &4593082054722737880
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3845252506739069817}
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: 878417b946d114d40a44dc36069ade7a, 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!1 &4658118913435815158
GameObject:
m_ObjectHideFlags: 0
@ -163,6 +237,8 @@ MonoBehaviour:
ghostSliders: {fileID: 2175275438354546744}
ghostSliderPrefab: {fileID: 3581489635090573721, guid: 890d76c226858de4fa96adfe7cc85383,
type: 3}
handleImage: {fileID: 1135382459109805448}
soundIcon: {fileID: 3845252506739069817}
maxGhosts: 4
actorID: 0
keyframeID: 0
@ -196,7 +272,8 @@ RectTransform:
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_Children:
- {fileID: 6663487708742390543}
m_Father: {fileID: 4629009613275671144}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}

View file

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: cc05b52efdb32b24296180de1e113fc4
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 473 B

View file

@ -0,0 +1,116 @@
fileFormatVersion: 2
guid: 7aa731da3144dfa43b36c2e79b76a763
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 11
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 1
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: -1
aniso: -1
mipBias: -100
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 185
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

View file

@ -0,0 +1,116 @@
fileFormatVersion: 2
guid: f99c1906865733343bbe77fb78c66218
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 11
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 1
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: -1
aniso: -1
mipBias: -100
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 185
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

View file

@ -0,0 +1,116 @@
fileFormatVersion: 2
guid: 38c0bc38c0d71b04cb11a1eb610990e1
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 11
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 1
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: -1
aniso: -1
mipBias: -100
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 185
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:

View file

@ -20,7 +20,7 @@ TextureImporter:
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
isReadable: 1
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0

View file

@ -20,7 +20,7 @@ TextureImporter:
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
isReadable: 1
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0

View file

@ -20,7 +20,7 @@ TextureImporter:
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
isReadable: 1
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0

View file

@ -20,7 +20,7 @@ TextureImporter:
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
isReadable: 1
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0

View file

@ -20,7 +20,7 @@ TextureImporter:
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
isReadable: 1
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0

View file

@ -20,7 +20,7 @@ TextureImporter:
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
isReadable: 1
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0

View file

@ -20,7 +20,7 @@ TextureImporter:
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
isReadable: 1
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0

View file

@ -20,7 +20,7 @@ TextureImporter:
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
isReadable: 1
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0

View file

@ -20,7 +20,7 @@ TextureImporter:
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
isReadable: 1
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0

View file

@ -20,7 +20,7 @@ TextureImporter:
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
isReadable: 1
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0

View file

@ -20,7 +20,7 @@ TextureImporter:
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
isReadable: 1
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0

View file

@ -20,7 +20,7 @@ TextureImporter:
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
isReadable: 1
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0

View file

@ -20,7 +20,7 @@ TextureImporter:
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
isReadable: 1
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0

View file

@ -20,7 +20,7 @@ TextureImporter:
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
isReadable: 1
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0

View file

@ -20,7 +20,7 @@ TextureImporter:
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
isReadable: 1
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0

View file

@ -20,7 +20,7 @@ TextureImporter:
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
isReadable: 1
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0

View file

@ -20,7 +20,7 @@ TextureImporter:
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
isReadable: 1
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0

View file

@ -20,7 +20,7 @@ TextureImporter:
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
isReadable: 1
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0

View file

@ -20,7 +20,7 @@ TextureImporter:
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
isReadable: 1
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0

View file

@ -20,7 +20,7 @@ TextureImporter:
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
isReadable: 1
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0

View file

@ -20,7 +20,7 @@ TextureImporter:
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
isReadable: 1
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0
@ -71,6 +71,30 @@ TextureImporter:
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []

View file

@ -20,7 +20,7 @@ TextureImporter:
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
isReadable: 1
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0
@ -71,6 +71,30 @@ TextureImporter:
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []

View file

@ -20,7 +20,7 @@ TextureImporter:
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
isReadable: 1
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0
@ -71,6 +71,30 @@ TextureImporter:
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []

View file

@ -20,7 +20,7 @@ TextureImporter:
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
isReadable: 1
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0
@ -71,6 +71,30 @@ TextureImporter:
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

View file

@ -0,0 +1,92 @@
fileFormatVersion: 2
guid: 878417b946d114d40a44dc36069ade7a
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 11
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: -1
aniso: -1
mipBias: -100
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
applyGammaDecoding: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 177db18368bfbba47a6b714d621984dc
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -0,0 +1,551 @@
/*
Advanced Polygon Collider (c) 2015 Digital Ruby, LLC
http://www.digitalruby.com
Source code may not be redistributed. Use in apps and games is fine.
*/
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;
#endif
namespace DigitalRuby.AdvancedPolygonCollider
{
public struct PolygonParameters
{
/// <summary>
/// Texture - must be readable and writeable.
/// </summary>
public Texture2D Texture;
/// <summary>
/// Source rect from the texture containing the sprite.
/// </summary>
public Rect Rect;
/// <summary>
/// Offset (pivot) for the sprite
/// </summary>
public Vector2 Offset;
/// <summary>
/// X multiplier if pixels per unit are used, otherwise 1 (see UpdatePolygonCollider method).
/// </summary>
public float XMultiplier;
/// <summary>
/// Y multiplier if pixels per unit are used, otherwise 1 (see UpdatePolygonCollider method).
/// </summary>
public float YMultiplier;
/// <summary>
/// Alpha tolerance. Pixels with greater than this are considered solid.
/// </summary>
public byte AlphaTolerance;
/// <summary>
/// Distance threshold to collapse vertices in pixels.
/// </summary>
public int DistanceThreshold;
/// <summary>
/// True to decompose into convex polygons, false otherwise.
/// </summary>
public bool Decompose;
/// <summary>
/// Whether to use the cache. Values will be cached accordingly.
/// </summary>
public bool UseCache;
public override int GetHashCode()
{
int h = Texture.GetHashCode();
if (h == 0)
{
h = 1;
}
return h * (int)(Rect.GetHashCode() * XMultiplier * YMultiplier * AlphaTolerance * Mathf.Max(DistanceThreshold, 1) * (Decompose ? 2 : 1));
}
public override bool Equals(object obj)
{
if (obj is PolygonParameters)
{
PolygonParameters p = (PolygonParameters)obj;
return Texture == p.Texture && Rect == p.Rect &&
XMultiplier == p.XMultiplier && YMultiplier == p.YMultiplier &&
AlphaTolerance == p.AlphaTolerance && DistanceThreshold == p.DistanceThreshold &&
Decompose == p.Decompose;
}
return false;
}
}
[RequireComponent(typeof(PolygonCollider2D))]
[RequireComponent(typeof(SpriteRenderer))]
[ExecuteInEditMode]
public class AdvancedPolygonCollider : MonoBehaviour
{
[Serializable]
public struct ArrayWrapper
{
[SerializeField]
public Vector2[] Array;
}
[Serializable]
public struct ListWrapper
{
[SerializeField]
public List<ArrayWrapper> List;
}
[Serializable]
public struct CacheEntry
{
[SerializeField]
public CacheKey Key;
[SerializeField]
public ListWrapper Value;
}
[Serializable]
public struct CacheKey
{
[SerializeField]
public Texture2D Texture;
[SerializeField]
public Rect Rect;
public override int GetHashCode()
{
return Texture.GetHashCode() * Rect.GetHashCode();
}
public override bool Equals(object obj)
{
if (obj is CacheKey)
{
CacheKey k = (CacheKey)obj;
return (Texture == k.Texture && Rect == k.Rect);
}
return false;
}
}
[Tooltip("Pixels with alpha greater than this count as solid.")]
[Range(0, 254)]
public byte AlphaTolerance = 20;
[Tooltip("Points further away than this number of pixels will be consolidated.")]
[Range(0, 64)]
public int DistanceThreshold = 8;
[Tooltip("Scale of the polygon.")]
[Range(0.5f, 2.0f)]
public float Scale = 1.0f;
[Tooltip("Whether to decompse vertices into convex only polygons.")]
public bool Decompose = false;
[Tooltip("Whether to live update everything when in play mode. Typically for performance this can be false, " +
"but if you plan on making changes to the sprite or parameters at runtime, you will want to set this to true.")]
public bool RunInPlayMode = false;
[Tooltip("True to use the cache, false otherwise. The cache is populated in editor and play mode and uses the most recent geometry " +
"for a texture and rect regardless of other parameters. When ignoring the cache, values will not be added to the cache either. Cache is " +
"only useful if you will be changing your sprite at run-time (i.e. animation)")]
public bool UseCache;
private SpriteRenderer spriteRenderer;
private PolygonCollider2D polygonCollider;
private bool dirty;
[SerializeField]
[HideInInspector]
private byte lastAlphaTolerance;
[SerializeField]
[HideInInspector]
private float lastScale;
[SerializeField]
[HideInInspector]
private int lastDistanceThreshold;
[SerializeField]
[HideInInspector]
private bool lastDecompose;
[SerializeField]
[HideInInspector]
private Sprite lastSprite;
[SerializeField]
[HideInInspector]
private Rect lastRect = new Rect();
[SerializeField]
[HideInInspector]
private Vector2 lastOffset = new Vector2(-99999.0f, -99999.0f);
[SerializeField]
[HideInInspector]
private float lastPixelsPerUnit;
[SerializeField]
[HideInInspector]
private bool lastFlipX;
[SerializeField]
[HideInInspector]
private bool lastFlipY;
private static readonly Dictionary<CacheKey, List<Vector2[]>> cache = new Dictionary<CacheKey, List<Vector2[]>>();
[Tooltip("All the cached objects from the editor. Do not modify this data.")]
[SerializeField]
private List<CacheEntry> editorCache = new List<CacheEntry>();
// private readonly AdvancedPolygonColliderAutoGeometry geometryDetector = new AdvancedPolygonColliderAutoGeometry();
private readonly TextureConverter geometryDetector = new TextureConverter();
#if UNITY_EDITOR
private Texture2D blackBackground;
#endif
private void Awake()
{
if (Application.isPlaying)
{
// move editor cache to regular cache
foreach (var v in editorCache)
{
List<Vector2[]> list = new List<Vector2[]>();
cache[v.Key] = list;
foreach (ArrayWrapper w in v.Value.List)
{
list.Add(w.Array);
}
}
}
}
private void Start()
{
#if UNITY_EDITOR
blackBackground = new Texture2D(1, 1);
blackBackground.SetPixel(0, 0, new Color(0.0f, 0.0f, 0.0f, 0.8f));
blackBackground.Apply();
#endif
polygonCollider = GetComponent<PolygonCollider2D>();
spriteRenderer = GetComponent<SpriteRenderer>();
}
private void UpdateDirtyState()
{
if (spriteRenderer.sprite != lastSprite)
{
lastSprite = spriteRenderer.sprite;
dirty = true;
}
if (spriteRenderer.sprite != null)
{
if (lastOffset != spriteRenderer.sprite.pivot)
{
lastOffset = spriteRenderer.sprite.pivot;
dirty = true;
}
if (lastRect != spriteRenderer.sprite.rect)
{
lastRect = spriteRenderer.sprite.rect;
dirty = true;
}
if (lastPixelsPerUnit != spriteRenderer.sprite.pixelsPerUnit)
{
lastPixelsPerUnit = spriteRenderer.sprite.pixelsPerUnit;
dirty = true;
}
if (lastFlipX != spriteRenderer.flipX)
{
lastFlipX = spriteRenderer.flipX;
dirty = true;
}
if (lastFlipY != spriteRenderer.flipY)
{
lastFlipY = spriteRenderer.flipY;
dirty = true;
}
}
if (AlphaTolerance != lastAlphaTolerance)
{
lastAlphaTolerance = AlphaTolerance;
dirty = true;
}
if (Scale != lastScale)
{
lastScale = Scale;
dirty = true;
}
if (DistanceThreshold != lastDistanceThreshold)
{
lastDistanceThreshold = DistanceThreshold;
dirty = true;
}
if (Decompose != lastDecompose)
{
lastDecompose = Decompose;
dirty = true;
}
}
private void Update()
{
if (Application.isPlaying)
{
if (!RunInPlayMode)
{
return;
}
}
else if (!UseCache)
{
editorCache.Clear();
}
UpdateDirtyState();
if (dirty)
{
RecalculatePolygon();
}
}
#if UNITY_EDITOR
private void OnDrawGizmos()
{
UnityEditor.Handles.BeginGUI();
GUI.color = Color.white;
string text = " Vertices: " + VerticesCount + " ";
var view = UnityEditor.SceneView.currentDrawingSceneView;
Vector3 screenPos = view.camera.WorldToScreenPoint(gameObject.transform.position);
Vector2 size = GUI.skin.label.CalcSize(new GUIContent(text));
GUI.skin.box.normal.background = blackBackground;
Rect rect = new Rect(screenPos.x - (size.x / 2), -screenPos.y + view.position.height + 4, size.x, size.y);
GUI.Box(rect, GUIContent.none);
GUI.Label(rect, text);
UnityEditor.Handles.EndGUI();
}
private void AddEditorCache(ref PolygonParameters p, List<Vector2[]> list)
{
CacheKey key = new CacheKey();
key.Texture = p.Texture;
key.Rect = p.Rect;
CacheEntry e = new CacheEntry();
e.Key = key;
e.Value = new ListWrapper();
e.Value.List = new List<ArrayWrapper>();
foreach (Vector2[] v in list)
{
ArrayWrapper w = new ArrayWrapper();
w.Array = v;
e.Value.List.Add(w);
}
for (int i = 0; i < editorCache.Count; i++)
{
if (editorCache[i].Key.Equals(key))
{
editorCache.RemoveAt(i);
editorCache.Insert(i, e);
return;
}
}
editorCache.Add(e);
}
#endif
public void RecalculatePolygon()
{
if (spriteRenderer.sprite != null)
{
PolygonParameters p = new PolygonParameters();
p.AlphaTolerance = AlphaTolerance;
p.Decompose = Decompose;
p.DistanceThreshold = DistanceThreshold;
p.Rect = spriteRenderer.sprite.rect;
p.Offset = spriteRenderer.sprite.pivot;
p.Texture = spriteRenderer.sprite.texture;
p.XMultiplier = (spriteRenderer.sprite.rect.width * 0.5f) / spriteRenderer.sprite.pixelsPerUnit;
p.YMultiplier = (spriteRenderer.sprite.rect.height * 0.5f) / spriteRenderer.sprite.pixelsPerUnit;
p.UseCache = UseCache;
UpdatePolygonCollider(ref p);
}
}
public void UpdatePolygonCollider(ref PolygonParameters p)
{
if (spriteRenderer.sprite == null || spriteRenderer.sprite.texture == null)
{
return;
}
dirty = false;
List<Vector2[]> cached;
if (Application.isPlaying && p.UseCache)
{
CacheKey key = new CacheKey();
key.Texture = p.Texture;
key.Rect = p.Rect;
if (cache.TryGetValue(key, out cached))
{
polygonCollider.pathCount = cached.Count;
for (int i = 0; i < cached.Count; i++)
{
polygonCollider.SetPath(i, cached[i]);
}
return;
}
}
PopulateCollider(polygonCollider, ref p);
}
public int VerticesCount
{
get { return (polygonCollider == null ? 0 : polygonCollider.GetTotalPointCount()); }
}
/// <summary>
/// Populate the vertices of a collider
/// </summary>
/// <param name="collider">Collider to setup vertices in.</param>
/// <param name="p">Polygon creation parameters</param>
public void PopulateCollider(PolygonCollider2D collider, ref PolygonParameters p)
{
try
{
if (p.Texture.format != TextureFormat.ARGB32 && p.Texture.format != TextureFormat.BGRA32 && p.Texture.format != TextureFormat.RGBA32 &&
p.Texture.format != TextureFormat.RGB24 && p.Texture.format != TextureFormat.Alpha8 && p.Texture.format != TextureFormat.RGBAFloat &&
p.Texture.format != TextureFormat.RGBAHalf && p.Texture.format != TextureFormat.RGB565)
{
Debug.LogWarning("Advanced Polygon Collider works best with a non-compressed texture in ARGB32, BGRA32, RGB24, RGBA4444, RGB565, RGBAFloat or RGBAHalf format");
}
int width = (int)p.Rect.width;
int height = (int)p.Rect.height;
int x = (int)p.Rect.x;
int y = (int)p.Rect.y;
UnityEngine.Color[] pixels = p.Texture.GetPixels(x, y, width, height, 0);
List<Vertices> verts = geometryDetector.DetectVertices(pixels, width, p.AlphaTolerance);
int pathIndex = 0;
List<Vector2[]> list = new List<Vector2[]>();
for (int i = 0; i < verts.Count; i++)
{
ProcessVertices(collider, verts[i], list, ref p, ref pathIndex);
}
#if UNITY_EDITOR
if (Application.isPlaying)
{
#endif
if (p.UseCache)
{
CacheKey key = new CacheKey();
key.Texture = p.Texture;
key.Rect = p.Rect;
cache[key] = list;
}
#if UNITY_EDITOR
}
else if (p.UseCache)
{
AddEditorCache(ref p, list);
}
#endif
Debug.Log("Updated polygon.");
}
catch (Exception ex)
{
Debug.LogError("Error creating collider: " + ex);
}
}
private List<Vector2[]> ProcessVertices(PolygonCollider2D collider, Vertices v, List<Vector2[]> list, ref PolygonParameters p, ref int pathIndex)
{
Vector2 offset = p.Offset;
float flipXMultiplier = (spriteRenderer.flipX ? -1.0f : 1.0f);
float flipYMultiplier = (spriteRenderer.flipY ? -1.0f : 1.0f);
if (p.DistanceThreshold > 1)
{
v = SimplifyTools.DouglasPeuckerSimplify (v, p.DistanceThreshold);
}
if (p.Decompose)
{
List<List<Vector2>> points = BayazitDecomposer.ConvexPartition(v);
for (int j = 0; j < points.Count; j++)
{
List<Vector2> v2 = points[j];
for (int i = 0; i < v2.Count; i++)
{
float xValue = (2.0f * (((v2[i].x - offset.x) + 0.5f) / p.Rect.width));
float yValue = (2.0f * (((v2[i].y - offset.y) + 0.5f) / p.Rect.height));
v2[i] = new Vector2(xValue * p.XMultiplier * Scale * flipXMultiplier, yValue * p.YMultiplier * Scale * flipYMultiplier);
}
Vector2[] arr = v2.ToArray();
collider.pathCount = pathIndex + 1;
collider.SetPath(pathIndex++, arr);
list.Add(arr);
}
}
else
{
collider.pathCount = pathIndex + 1;
for (int i = 0; i < v.Count; i++)
{
float xValue = (2.0f * (((v[i].x - offset.x) + 0.5f) / p.Rect.width));
float yValue = (2.0f * (((v[i].y - offset.y) + 0.5f) / p.Rect.height));
v[i] = new Vector2(xValue * p.XMultiplier * Scale * flipXMultiplier, yValue * p.YMultiplier * Scale * flipYMultiplier);
}
Vector2[] arr = v.ToArray();
collider.SetPath(pathIndex++, arr);
list.Add(arr);
}
return list;
}
}
}

View file

@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 8c55c83d4c4dd1145ad5fbbab3c3df36
timeCreated: 1450474475
licenseType: Store
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 2d44a3587cd9f0f4ebdfbea6d8a9c789
timeCreated: 1450472189
licenseType: Store
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -15,7 +15,7 @@ namespace RimWorldAnimationStudio
[XmlArray("blacklistedRaces"), XmlArrayItem("li")] public List<string> blacklistedRaces = new List<string>();
[XmlArray("tags"), XmlArrayItem("li")] public List<string> tags;
public string gender;
[XmlIgnore] public ActorGender gender;
public BodyTypeOffset bodyTypeOffset = new BodyTypeOffset();
public bool initiator = false;
public bool? controlGenitalAngle;

View file

@ -57,9 +57,7 @@ namespace RimWorldAnimationStudio
HeadFacing.Add((float)keyframe.atTick / (float)duration, keyframe.headFacing, true);
BodyFacing.Add((float)keyframe.atTick / (float)duration, keyframe.bodyFacing, true);
HeadBob.Add((float)keyframe.atTick / (float)duration, keyframe.headBob, true);
if (keyframe.genitalAngle.HasValue)
{ GenitalAngle.Add((float)keyframe.atTick / (float)duration, keyframe.genitalAngle.Value, true); }
GenitalAngle.Add((float)keyframe.atTick / (float)duration, keyframe.genitalAngle, true);
if (i + 1 < keyframes.Count)
{ keyframes[i].tickDuration = keyframes[i + 1].atTick.Value - keyframes[i].atTick.Value; }
@ -74,9 +72,7 @@ namespace RimWorldAnimationStudio
HeadFacing.Add((float)keyframePosition / (float)duration, keyframe.headFacing, true);
BodyFacing.Add((float)keyframePosition / (float)duration, keyframe.bodyFacing, true);
HeadBob.Add((float)keyframePosition / (float)duration, keyframe.headBob, true);
if (keyframe.genitalAngle.HasValue)
{ GenitalAngle.Add((float)keyframePosition / (float)duration, keyframe.genitalAngle.Value, true); }
GenitalAngle.Add((float)keyframePosition / (float)duration, keyframe.genitalAngle, true);
if (keyframe.tickDuration != 1 && keyframe.quiver.HasValue)
{

View file

@ -30,6 +30,7 @@ namespace RimWorldAnimationStudio
}
}
// move to app manager
public void RunPreSaveOperations()
{
// Stage edits
@ -45,25 +46,32 @@ namespace RimWorldAnimationStudio
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);
Debug.Log(animationStages[i].playTimeTicks);
Debug.Log(animationStages[i].stageWindowSize);
Debug.Log(cycles);
stage.isLooping = cycles > 1;
}
// Body part list edit
foreach (Actor actor in actors)
// Actor edits
for (int i = 0; i < actors.Count; i++)
{
actor.isFucking = actor.requiredGenitals.Contains("Any appendage");
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");
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()

View file

@ -16,7 +16,7 @@ namespace RimWorldAnimationStudio
public float headFacing = 2;
public float bodyFacing = 2;
public float? genitalAngle;
public float genitalAngle;
public bool? quiver;
public bool ShouldSerializegenitalAngle() { return genitalAngle != null; }

View file

@ -9,16 +9,31 @@ namespace RimWorldAnimationStudio
public class ActorBody : MonoBehaviour, IPointerClickHandler, IDragHandler
{
public int actorID;
public string bodyType = "Male";
public string bodyType = "Male";
public bool isSelected = false;
public SpriteRenderer bodyRenderer;
public SpriteRenderer headRenderer;
public SpriteRenderer appendageRenderer;
public bool actorBodyPartSelected { get { return GetComponentsInChildren<ActorBodyPart>().Any(x => x.isSelected); } }
public void Initialize(int actorID)
{
this.actorID = actorID;
}
public void Update()
{
if (Workspace.actorID == actorID && Workspace.selectedBodyPart == null)
{ bodyRenderer.color = Constants.ColorGreen; }
else
{ bodyRenderer.color = Constants.ColorWhite; }
appendageRenderer.gameObject.SetActive(Workspace.animationDef.actors[actorID].requiredGenitals.Any(x => x == "Penis" || x == "Any appendage"));
}
public void OnPointerClick(PointerEventData eventData)
{
if (eventData.pointerCurrentRaycast.gameObject.GetComponent<ActorBody>() == null)
@ -31,9 +46,9 @@ namespace RimWorldAnimationStudio
{
Activate();
PawnKeyframe keyframe = Workspace.Instance.GetCurrentPawnKeyframe();
PawnKeyframe keyframe = Workspace.Instance.GetCurrentPawnKeyframe(true);
if (Workspace.Instance.GetCurrentPawnKeyframe() == null)
if (keyframe == null)
{ Debug.LogWarning("Cannot alter actor - no keyframe data available"); return; }
Vector3 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
@ -66,18 +81,28 @@ namespace RimWorldAnimationStudio
public void Activate()
{
Workspace.actorID = actorID;
Workspace.selectedBodyPart = null;
foreach (ActorBody actorBody in AnimationController.Instance.actorBodies.GetComponentsInChildren<ActorBody>())
/*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;*/
}
}
}

View file

@ -10,6 +10,17 @@ namespace RimWorldAnimationStudio
{
public SpriteRenderer bodyPartRenderer;
public ActorBody parent;
public bool isHead = false;
public bool isSelected = false;
public void Update()
{
if ((Workspace.actorID == parent.actorID && Workspace.selectedBodyPart == null) || Workspace.selectedBodyPart == this)
{ bodyPartRenderer.color = Constants.ColorGreen; }
else
{ bodyPartRenderer.color = Constants.ColorWhite; }
}
public void OnPointerClick(PointerEventData eventData)
{
@ -23,38 +34,48 @@ namespace RimWorldAnimationStudio
{
Activate();
PawnKeyframe keyframe = Workspace.Instance.GetCurrentPawnKeyframe();
PawnKeyframe keyframe = Workspace.Instance.GetCurrentPawnKeyframe(true);
if (Workspace.Instance.GetCurrentPawnKeyframe() == null)
if (keyframe == null)
{ Debug.LogWarning("Cannot alter actor - no keyframe data available"); return; }
Vector3 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
if (Workspace.actorManipulationMode == ActorManipulationMode.Pan)
if (isHead)
{
float distance = ((Vector2)mousePosition - (Vector2)transform.position).y;
Vector3 headOffset = new Vector3(0f, 0.34f, 0f);
headOffset = Quaternion.Euler(0, 0, keyframe.bodyAngle) * headOffset;
distance = Vector2.Dot(parent.transform.up, (Vector2)(mousePosition - parent.transform.position - headOffset));
if (Workspace.actorManipulationMode == ActorManipulationMode.Pan)
{
Vector3 headOffset = new Vector3(0f, 0.34f, 0f);
headOffset = Quaternion.Euler(0, 0, keyframe.bodyAngle) * headOffset;
keyframe.headBob = distance;
float distance = Vector2.Dot(parent.transform.up, (Vector2)(mousePosition - parent.transform.position - headOffset));
keyframe.headBob = distance;
}
else if (Workspace.actorManipulationMode == ActorManipulationMode.Rotate)
{
float angle = Vector2.SignedAngle(Vector2.down, (Vector2)mousePosition - (Vector2)transform.position);
keyframe.headAngle = angle;
}
else if (Workspace.actorManipulationMode == ActorManipulationMode.Face)
{
float angle = Vector2.SignedAngle(Vector2.up, (Vector2)mousePosition - (Vector2)transform.position);
int facing = -Mathf.RoundToInt(angle / 90f);
facing = facing < 0 ? facing + 4 : facing;
keyframe.headFacing = facing;
}
}
else if (Workspace.actorManipulationMode == ActorManipulationMode.Rotate)
else
{
float angle = Vector2.SignedAngle(Vector2.down, (Vector2)mousePosition - (Vector2)transform.position);
keyframe.headAngle = angle;
}
else if (Workspace.actorManipulationMode == ActorManipulationMode.Face)
{
float angle = Vector2.SignedAngle(Vector2.up, (Vector2)mousePosition - (Vector2)transform.position);
int facing = -Mathf.RoundToInt(angle / 90f);
facing = facing < 0 ? facing + 4 : facing;
keyframe.headFacing = facing;
if (Workspace.actorManipulationMode == ActorManipulationMode.Rotate)
{
float angle = Vector2.SignedAngle(Vector2.up, (Vector2)mousePosition - (Vector2)transform.position);
keyframe.genitalAngle = angle;
}
}
PawnAnimationClip clip = Workspace.Instance.GetPawnAnimationClip(parent.actorID);
@ -64,14 +85,23 @@ namespace RimWorldAnimationStudio
public void Activate()
{
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;*/
}
}
}

View file

@ -11,10 +11,14 @@ namespace RimWorldAnimationStudio
public InputField positionXField;
public InputField positionZField;
public InputField rotationField;
public InputField headBobField;
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)
@ -41,15 +45,17 @@ namespace RimWorldAnimationStudio
if (headAngle < 0) headAngle = 360 - ((-1f * headAngle) % 360);
if (headAngle > 360) headAngle %= 360;
int bodyFacing = (int)clip.BodyFacing.Evaluate(clipPercent);
Vector3 headBob = new Vector3(0, 0, clip.HeadBob.Evaluate(clipPercent)) + PawnUtility.BaseHeadOffsetAt(bodyType, bodyFacing);
float headBob = clip.HeadBob.Evaluate(clipPercent);
Vector3 bodyPos = new Vector3(deltaPos.x, deltaPos.z, 0);
Vector3 headPos = new Vector3(headBob.x, headBob.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;
@ -57,12 +63,19 @@ namespace RimWorldAnimationStudio
public void OnValueChanged()
{
Workspace.animationDef.animationStages[Workspace.stageID].animationClips[Workspace.actorID].keyframes.FirstOrDefault(x => x.keyframeID == Workspace.keyframeID).bodyOffsetX = float.Parse(positionXField.text);
Workspace.animationDef.animationStages[Workspace.stageID].animationClips[Workspace.actorID].keyframes.FirstOrDefault(x => x.keyframeID == Workspace.keyframeID).bodyOffsetZ = float.Parse(positionZField.text);
Workspace.animationDef.animationStages[Workspace.stageID].animationClips[Workspace.actorID].keyframes.FirstOrDefault(x => x.keyframeID == Workspace.keyframeID).bodyAngle = float.Parse(rotationField.text);
PawnKeyframe keyframe = Workspace.Instance.GetCurrentPawnKeyframe(true);
keyframe.bodyOffsetX = float.Parse(positionXField.text);
keyframe.bodyOffsetZ = float.Parse(positionZField.text);
keyframe.bodyAngle = float.Parse(rotationField.text);
keyframe.headBob = float.Parse(headBobField.text);
keyframe.headAngle = float.Parse(headRotationField.text);
keyframe.genitalAngle = float.Parse(appendageRotationField.text);
Workspace.Instance.GetPawnAnimationClip(Workspace.actorID).BuildSimpleCurves();
isDirty = true;
Workspace.Instance.MakeDirty();
}
}
}

View file

@ -0,0 +1,28 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace RimWorldAnimationStudio
{
public class AddSoundDefButton : MonoBehaviour
{
private Text text;
public void Start()
{
text = GetComponentInChildren<Text>();
}
void Update()
{
PawnKeyframe keyframe = Workspace.Instance.GetCurrentPawnKeyframe();
if (keyframe != null)
{ text.text = keyframe.soundEffect == null || keyframe.soundEffect == "" ? "None" : keyframe.soundEffect; }
else
{ text.text = "None"; }
}
}
}

View file

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 329a2ecc35813f94fa879c7f434c8fb7
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -0,0 +1,88 @@
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 SelectSoundDefDialog : DialogBox
{
public void Start()
{
Initialize();
}
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++)
{
string soundDef = Workspace.soundDefs[i];
Transform _optionToggle = AddCloneObjectToParent(contentWindow).transform;
_optionToggle.Find("Text").GetComponent<Text>().text = soundDef;
Toggle toggleComp = _optionToggle.GetComponent<Toggle>();
toggleComp.isOn = Workspace.animationDef.sexTypes.Contains(soundDef);
toggleComp.onValueChanged.AddListener(delegate {
PawnKeyframe keyframe = Workspace.Instance.GetCurrentPawnKeyframe();
if (keyframe != null)
{ keyframe.soundEffect = soundDef; }
Workspace.Instance.MakeDirty();
});
toggleComp.group = contentWindow.GetComponent<ToggleGroup>();
if (addedNewTag && i == Workspace.soundDefs.Count - 1)
{ toggleComp.isOn = true; }
}
Transform _optionField = AddCloneObjectToParent(contentWindow, 1).transform;
_optionField.Find("Placeholder").GetComponent<Text>().text = "Enter new sound def...";
InputField fieldComp = _optionField.GetComponent<InputField>();
fieldComp.onEndEdit.AddListener(delegate { AddSoundDef(fieldComp); });
}
public void Reset()
{
Transform contentWindow = transform.FindDeepChild("Content");
RemoveCloneObjectsFromParent(contentWindow);
}
}
}

View file

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 7cc6afc7ba6ae0f42b3a2df6e73c5b16
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -14,6 +14,8 @@ namespace RimWorldAnimationStudio
public AnimationTimeline timeline;
public Transform ghostSliders;
public Slider ghostSliderPrefab;
public Image handleImage;
public GameObject soundIcon;
public int maxGhosts = 4;
public int actorID;
@ -131,17 +133,25 @@ namespace RimWorldAnimationStudio
{
base.Update();
if (Workspace.keyframeID == keyframeID && AnimationController.Instance.stageTick == keyframe.atTick.Value)
{ transform.FindDeepChild("Handle").GetComponent<Image>().color = Constants.ColorPurple; }
if (keyframe.atTick.HasValue && Workspace.keyframeID == keyframeID && AnimationController.Instance.stageTick == keyframe.atTick.Value)
{ handleImage.color = Constants.ColorPurple; }
else if (Workspace.keyframeID == keyframeID)
{ transform.FindDeepChild("Handle").GetComponent<Image>().color = Constants.ColorCyan; }
{ handleImage.color = Constants.ColorCyan; }
else if (AnimationController.Instance.stageTick == keyframe.atTick.Value)
{ transform.FindDeepChild("Handle").GetComponent<Image>().color = Constants.ColorPink; }
else if (keyframe.atTick.HasValue && AnimationController.Instance.stageTick == keyframe.atTick.Value)
{ handleImage.color = Constants.ColorPink; }
else
{ transform.FindDeepChild("Handle").GetComponent<Image>().color = Constants.ColorWhite; }
{ handleImage.color = Constants.ColorWhite; }
string soundDef = Workspace.Instance.GetPawnKeyframe(actorID, keyframeID).soundEffect;
if (soundDef != null && soundDef != "" && soundDef != "None")
{ soundIcon.SetActive(true); }
else
{ soundIcon.SetActive(false); }
}
}
}

View file

@ -0,0 +1,24 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace RimWorldAnimationStudio
{
public class QuiverToggle : MonoBehaviour
{
public void Update()
{
PawnKeyframe keyframe = Workspace.Instance.GetCurrentPawnKeyframe();
GetComponent<Toggle>().isOn = keyframe != null && keyframe.quiver.HasValue && keyframe.quiver.Value;
}
public void OnValueChanged()
{
PawnKeyframe keyframe = Workspace.Instance.GetCurrentPawnKeyframe();
if (keyframe != null)
{ keyframe.quiver = GetComponent<Toggle>().isOn; }
}
}
}

View file

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 1aaf656fd4e788245accc65162730545
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -26,6 +26,8 @@ namespace RimWorldAnimationStudio
public ActorCard actorCard;
public Transform animationTimelines;
public Transform actorBodies;
public Toggle stretchkeyframesToggle;
[Header("Prefabs")]
public ActorBody actorBodyPrefab;
@ -151,14 +153,20 @@ namespace RimWorldAnimationStudio
Vector3 bodyPos = new Vector3(deltaPos.x, deltaPos.z, 0);
Vector3 headPos = new Vector3(headBob.x, headBob.z, 0);
Vector3 appendagePos = PawnUtility.AppendageOffsetAt(bodyType, bodyFacing);
actorBody.transform.position = bodyPos;
actorBody.transform.eulerAngles = new Vector3(0, 0, bodyAngle);
actorBody.headRenderer.transform.localPosition = headPos;
actorBody.headRenderer.transform.eulerAngles = new Vector3(0, 0, headAngle);
actorBody.appendageRenderer.transform.localPosition = new Vector3(appendagePos.x, appendagePos.z, 0f);
actorBody.appendageRenderer.transform.eulerAngles = new Vector3(0,0,clip.GenitalAngle.Evaluate(clipPercent));
actorBody.bodyRenderer.sprite = Resources.Load<Sprite>("Textures/Humanlike/Bodies/" + bodyType + bodyFacing);
actorBody.headRenderer.sprite = Resources.Load<Sprite>("Textures/Humanlike/Heads/Head" + headFacing);
actorBody.appendageRenderer.sprite = Resources.Load<Sprite>("Textures/Humanlike/Appendages/Appendage" + bodyFacing);
actorBody.bodyRenderer.sortingLayerName = clip.layer;
actorBody.headRenderer.sortingLayerName = clip.layer;
@ -351,34 +359,58 @@ namespace RimWorldAnimationStudio
{
if (Workspace.animationDef == null) return;
int.TryParse(animationClipLengthField.text, out int newstageWindowSize);
newstageWindowSize = Mathf.Clamp(newstageWindowSize, Constants.minAnimationClipLength, Constants.maxAnimationClipLength);
int.TryParse(animationClipLengthField.text, out int newStageWindowSize);
newStageWindowSize = Mathf.Clamp(newStageWindowSize, Constants.minAnimationClipLength, Constants.maxAnimationClipLength);
Debug.Log("Resizing animation clip length to " + newstageWindowSize.ToString() + " ticks.");
Debug.Log("Resizing animation clip length to " + newStageWindowSize.ToString() + " ticks.");
for (int i = 0; i < Workspace.animationDef.animationStages[Workspace.stageID].animationClips.Count; i++)
if (stretchkeyframesToggle.isOn)
{ StretchKeyframes(newStageWindowSize); }
else
{
PawnAnimationClip clip = Workspace.animationDef.animationStages[Workspace.stageID].animationClips[i];
List<PawnKeyframe> keyframes = clip.keyframes.Where(x => x.atTick > newstageWindowSize)?.ToList();
for (int i = 0; i < Workspace.animationDef.animationStages[Workspace.stageID].animationClips.Count; i++)
{
PawnAnimationClip clip = Workspace.animationDef.animationStages[Workspace.stageID].animationClips[i];
List<PawnKeyframe> keyframes = clip.keyframes.Where(x => x.atTick > newStageWindowSize)?.ToList();
if (keyframes.NullOrEmpty())
{ continue; }
if (keyframes.NullOrEmpty())
{ continue; }
foreach (PawnKeyframe keyframe in keyframes)
{
RemovePawnKeyframe(i, keyframe.keyframeID);
foreach (PawnKeyframe keyframe in keyframes)
{
RemovePawnKeyframe(i, keyframe.keyframeID);
if (Workspace.animationDef.animationStages[Workspace.stageID].animationClips[i].keyframes.Count <= 2)
{ break; }
if (Workspace.animationDef.animationStages[Workspace.stageID].animationClips[i].keyframes.Count <= 2)
{ break; }
}
}
}
animationClipLengthField.text = newstageWindowSize.ToString();
Workspace.animationDef.animationStages[Workspace.stageID].stageWindowSize = newstageWindowSize;
animationClipLengthField.text = newStageWindowSize.ToString();
Workspace.animationDef.animationStages[Workspace.stageID].stageWindowSize = newStageWindowSize;
Workspace.Instance.MakeDirty();
}
public void StretchKeyframes(int newStageWindowSize)
{
float scale = (float)newStageWindowSize / Workspace.StageWindowSize;
foreach (PawnAnimationClip clip in Workspace.animationDef.animationStages[Workspace.stageID].animationClips)
{
foreach (PawnKeyframe keyframe in clip.keyframes)
{
if (keyframe.atTick == 1) continue;
keyframe.tickDuration = Mathf.RoundToInt(keyframe.tickDuration * scale);
keyframe.atTick = null;
}
clip.BuildSimpleCurves();
}
}
public void OnCycleNormalFieldChange()
{
if (Workspace.animationDef == null) return;

View file

@ -5,3 +5,10 @@
Face,
}
public enum ActorGender
{
Female,
None,
Male,
}

View file

@ -31,5 +31,34 @@ namespace RimWorldAnimationStudio
default: return Vector3.zero;
}
}
public static Vector3 AppendageOffsetAt(string bodyType, int rotation)
{
if (rotation == 0 || rotation == 2)
{
switch (bodyType)
{
case "Male": return new Vector3(0.00f, 0f, -0.46f);
case "Female": return new Vector3(0.00f, 0f, -0.51f);
case "Thin": return new Vector3(0.00f, 0f, -0.46f);
case "Hulk": return new Vector3(0.00f, 0f, -0.66f);
case "Fat": return new Vector3(0.00f, 0f, -0.52f);
default: return Vector3.zero;
}
}
else
{
switch (bodyType)
{
case "Male": return new Vector3(0.07f, 0f, -0.41f);
case "Female": return new Vector3(0.07f, 0f, -0.47f);
case "Thin": return new Vector3(-0.05f, 0f, -0.43f);
case "Hulk": return new Vector3(-0.03f, 0f, -0.64f);
case "Fat": return new Vector3(0.24f, 0f, -0.50f);
default: return Vector3.zero;
}
}
}
}
}

View file

@ -19,6 +19,7 @@ namespace RimWorldAnimationStudio
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" };
[SerializeField] private List<WorkspaceSnapShot> workspaceHistory = new List<WorkspaceSnapShot>();
[SerializeField] private int historyIndex = 0;
@ -26,7 +27,8 @@ namespace RimWorldAnimationStudio
private bool isDirty = false;
public static ActorManipulationMode actorManipulationMode = ActorManipulationMode.Pan;
public static ActorBodyPart selectedBodyPart;
public static int StageWindowSize
{
get
@ -47,12 +49,12 @@ namespace RimWorldAnimationStudio
{ TrackChanges(); }
}
public PawnKeyframe GetCurrentPawnKeyframe()
public PawnKeyframe GetCurrentPawnKeyframe(bool makeKeyframe = false)
{
int stageTick = AnimationController.Instance.stageTick;
PawnKeyframe keyframe = animationDef?.animationStages[stageID]?.animationClips[actorID]?.keyframes.FirstOrDefault(x => x.atTick == stageTick);
if (keyframe != null)
if (keyframe != null || makeKeyframe == false)
{ return keyframe; }
AnimationController.Instance.AddPawnKeyframe();