diff --git a/.idea/.idea.proto_turn_based_rpg/.idea/indexLayout.xml b/.idea/.idea.proto_turn_based_rpg/.idea/indexLayout.xml index e47d5b0..b22f1e8 100644 --- a/.idea/.idea.proto_turn_based_rpg/.idea/indexLayout.xml +++ b/.idea/.idea.proto_turn_based_rpg/.idea/indexLayout.xml @@ -22,6 +22,7 @@ ProjectSettings + .git .idea Library Logs diff --git a/.idea/.idea.proto_turn_based_rpg/.idea/vcs.xml b/.idea/.idea.proto_turn_based_rpg/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/.idea.proto_turn_based_rpg/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity index 0fc62b7..89a60f9 100644 --- a/Assets/Scenes/SampleScene.unity +++ b/Assets/Scenes/SampleScene.unity @@ -218,6 +218,9 @@ RectTransform: - {fileID: 1700659786} - {fileID: 2003127417} - {fileID: 2122497092} + - {fileID: 137837623} + - {fileID: 829062269} + - {fileID: 251530422} m_Father: {fileID: 0} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -239,8 +242,435 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: attackButton: {fileID: 1700659787} + bloodCounterButton: {fileID: 829062266} + counterButton: {fileID: 251530419} + defendButton: {fileID: 137837620} userHealth: {fileID: 2003127418} enemyHealth: {fileID: 2122497093} +--- !u!1 &137837619 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 137837623} + - component: {fileID: 137837622} + - component: {fileID: 137837621} + - component: {fileID: 137837620} + m_Layer: 5 + m_Name: Defend + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &137837620 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 137837619} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 2 + 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: 5437299029774813188, guid: 4880d72e2864aa54389378d2e1821522, type: 3} + 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: 137837621} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 24251070} + m_TargetAssemblyTypeName: + m_MethodName: + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &137837621 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 137837619} + 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_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 8047949451544522013, guid: 4880d72e2864aa54389378d2e1821522, 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!222 &137837622 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 137837619} + m_CullTransparentMesh: 1 +--- !u!224 &137837623 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 137837619} + 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: 816304657} + m_Father: {fileID: 24251074} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 125, y: 40} + m_SizeDelta: {x: 80, y: 60} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &228826172 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 228826173} + - component: {fileID: 228826175} + - component: {fileID: 228826174} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &228826173 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 228826172} + 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: 251530422} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &228826174 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 228826172} + 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_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 18 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Counter +--- !u!222 &228826175 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 228826172} + m_CullTransparentMesh: 1 +--- !u!1 &251530418 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 251530422} + - component: {fileID: 251530421} + - component: {fileID: 251530420} + - component: {fileID: 251530419} + m_Layer: 5 + m_Name: Counter + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &251530419 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 251530418} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 2 + 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: 5437299029774813188, guid: 4880d72e2864aa54389378d2e1821522, type: 3} + 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: 251530420} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 24251070} + m_TargetAssemblyTypeName: + m_MethodName: + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &251530420 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 251530418} + 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_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 8047949451544522013, guid: 4880d72e2864aa54389378d2e1821522, 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!222 &251530421 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 251530418} + m_CullTransparentMesh: 1 +--- !u!224 &251530422 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 251530418} + 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: 228826173} + m_Father: {fileID: 24251074} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 210, y: 40} + m_SizeDelta: {x: 80, y: 60} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &393001464 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 393001465} + - component: {fileID: 393001467} + - component: {fileID: 393001466} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &393001465 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 393001464} + 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: 829062269} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &393001466 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 393001464} + 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_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 18 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Blood Counter +--- !u!222 &393001467 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 393001464} + m_CullTransparentMesh: 1 --- !u!1 &519420028 GameObject: m_ObjectHideFlags: 0 @@ -324,6 +754,218 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &816304656 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 816304657} + - component: {fileID: 816304659} + - component: {fileID: 816304658} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &816304657 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 816304656} + 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: 137837623} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &816304658 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 816304656} + 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_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 18 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Defend +--- !u!222 &816304659 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 816304656} + m_CullTransparentMesh: 1 +--- !u!1 &829062265 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 829062269} + - component: {fileID: 829062268} + - component: {fileID: 829062267} + - component: {fileID: 829062266} + m_Layer: 5 + m_Name: BloodCounter + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!114 &829062266 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 829062265} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 2 + 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: 5437299029774813188, guid: 4880d72e2864aa54389378d2e1821522, type: 3} + 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: 829062267} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 24251070} + m_TargetAssemblyTypeName: + m_MethodName: + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &829062267 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 829062265} + 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_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 8047949451544522013, guid: 4880d72e2864aa54389378d2e1821522, 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!222 &829062268 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 829062265} + m_CullTransparentMesh: 1 +--- !u!224 &829062269 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 829062265} + 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: 393001465} + m_Father: {fileID: 24251074} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 295, y: 40} + m_SizeDelta: {x: 80, y: 60} + m_Pivot: {x: 0.5, y: 0.5} --- !u!1 &885956096 GameObject: m_ObjectHideFlags: 0 @@ -449,10 +1091,10 @@ MonoBehaviour: m_Calls: [] m_FontData: m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 14 + m_FontSize: 18 m_FontStyle: 0 m_BestFit: 0 - m_MinSize: 10 + m_MinSize: 1 m_MaxSize: 40 m_Alignment: 4 m_AlignByGeometry: 0 @@ -505,8 +1147,8 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 80, y: 60} - m_SizeDelta: {x: 160, y: 30} + m_AnchoredPosition: {x: 40, y: 40} + m_SizeDelta: {x: 80, y: 60} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &1700659787 MonoBehaviour: @@ -527,7 +1169,7 @@ MonoBehaviour: m_SelectOnDown: {fileID: 0} m_SelectOnLeft: {fileID: 0} m_SelectOnRight: {fileID: 0} - m_Transition: 1 + m_Transition: 2 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} @@ -538,7 +1180,7 @@ MonoBehaviour: m_FadeDuration: 0.1 m_SpriteState: m_HighlightedSprite: {fileID: 0} - m_PressedSprite: {fileID: 0} + m_PressedSprite: {fileID: 5437299029774813188, guid: 4880d72e2864aa54389378d2e1821522, type: 3} m_SelectedSprite: {fileID: 0} m_DisabledSprite: {fileID: 0} m_AnimationTriggers: @@ -584,8 +1226,8 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} - m_Type: 1 + m_Sprite: {fileID: 8047949451544522013, guid: 4880d72e2864aa54389378d2e1821522, type: 3} + m_Type: 0 m_PreserveAspect: 0 m_FillCenter: 1 m_FillMethod: 4 diff --git a/Assets/Scripts/BattleMenu.cs b/Assets/Scripts/BattleMenu.cs index f789d14..8618766 100644 --- a/Assets/Scripts/BattleMenu.cs +++ b/Assets/Scripts/BattleMenu.cs @@ -1,90 +1,143 @@ -using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class BattleMenu : MonoBehaviour -{ - private class Player - { - public int Health; - public int Damage; - - public Action UpdateHealth; - } - - private Player _user; - private Player _enemy; +{ private EnemyAi _enemyLogic; - private readonly List _turnOrder = new List(); - private int _currentTurnIndex = 0; + private readonly List _players = new List(); + private int _currentPlayerIndex; + + private Player CurrentPlayer => _players[_currentPlayerIndex]; public Button attackButton; + public Button bloodCounterButton; + public Button counterButton; + public Button defendButton; public Text userHealth; public Text enemyHealth; private void Awake() { - _user = new Player {Health = 10, Damage = 1, UpdateHealth = UpdateUserHealth}; - _enemy = new Player {Health = 10, Damage = 1, UpdateHealth = UpdateEnemyHealth}; + _players.Add(new Player {health = 100, damage = 5, updateHealth = UpdateUserHealth, isHumanControlled = true}); + _players.Add(new Player {health = 100, damage = 5, updateHealth = UpdateEnemyHealth, isHumanControlled = false}); + _enemyLogic = new EnemyAi(); - _enemyLogic.AttackCallback += EnemyAttack; + _enemyLogic.attackCallback += Attack; + _enemyLogic.defendCallback += Defend; + _enemyLogic.counterCallback += Counter; } private void Start() { - attackButton.onClick.AddListener(PlayerAttack); + attackButton.onClick.AddListener(Attack); + bloodCounterButton.onClick.AddListener(BloodCounter); + defendButton.onClick.AddListener(Defend); + counterButton.onClick.AddListener(Counter); + + foreach (var player in _players) + { + player.updateHealth(player.health); + } - _turnOrder.Add(UserTakeTurn); - _turnOrder.Add(_enemyLogic.TakeTurn); - - _turnOrder[_currentTurnIndex](); - - UpdateUserHealth(); - UpdateEnemyHealth(); + Debug.Log(CurrentPlayer.isHumanControlled ? "Start user turn" : "Start enemy turn"); + StartTurn(); } - private void UpdateUserHealth() + private void UpdateUserHealth(int health) { - userHealth.text = $"Health: {_user.Health}"; + userHealth.text = $"Health: {health}"; } - private void UpdateEnemyHealth() + private void UpdateEnemyHealth(int health) { - enemyHealth.text = $"Health: {_enemy.Health}"; + enemyHealth.text = $"Health: {health}"; } - + private void FinishTurn() { - _currentTurnIndex = ++_currentTurnIndex % _turnOrder.Count; - _turnOrder[_currentTurnIndex](); - } - - private void PlayerAttack() - { - Attack(_user, _enemy); // TODO: disable hud - attackButton.interactable = false; + attackButton.interactable = !CurrentPlayer.isHumanControlled; + bloodCounterButton.interactable = !CurrentPlayer.isHumanControlled; + defendButton.interactable = !CurrentPlayer.isHumanControlled; + counterButton.interactable = !CurrentPlayer.isHumanControlled; + + _currentPlayerIndex = ++_currentPlayerIndex % _players.Count; + StartTurn(); + } + + private void Attack() + { + // TODO: when target selection is a thing this will need to be changed. + var victimIndex = (_currentPlayerIndex + 1) % _players.Count; + Attack(CurrentPlayer, _players[victimIndex]); FinishTurn(); } - private void EnemyAttack() + private void BloodCounter() { - Attack(_enemy, _user); + CurrentPlayer.isBloodCounter = true; FinishTurn(); } - private void UserTakeTurn() + private void Defend() { + CurrentPlayer.damageReduction = 0.4f; + CurrentPlayer.startTurnEffects = ResetDamageReduction; + FinishTurn(); + } + + private void Counter() + { + CurrentPlayer.isCounter = true; + FinishTurn(); + } + + private void StartTurn() + { + CurrentPlayer.isCounter = false; + if (CurrentPlayer.isStunned) + { + Debug.Log("stunned, skipping turn"); + CurrentPlayer.isStunned = false; + FinishTurn(); + return; + } + // TODO: enable hud. - attackButton.interactable = true; + attackButton.interactable = CurrentPlayer.isHumanControlled; + bloodCounterButton.interactable = CurrentPlayer.isHumanControlled; + defendButton.interactable = CurrentPlayer.isHumanControlled; + counterButton.interactable = CurrentPlayer.isHumanControlled; + + CurrentPlayer.startTurnEffects?.Invoke(CurrentPlayer); + CurrentPlayer.startTurnEffects = null; + + // TODO: controller. + if (!CurrentPlayer.isHumanControlled) + { + _enemyLogic.TakeTurn(); + } + } + + private void ResetDamageReduction(Player p) + { + p.damageReduction = 1f; } private void Attack(Player attacker, Player victim) { - victim.Health -= attacker.Damage; - victim.UpdateHealth(); - if (victim.Health <= 0) + if (victim.isCounter) + { + attacker.isStunned = true; + Debug.Log("COUNTER"); + return; + } + victim.TakeDamage((int)(attacker.damage * attacker.damageModification)); + // damage mod is spent whenever they attack. + attacker.damageModification = 1; + attacker.isBloodCounter = false; + if (victim.health <= 0) { Debug.Log("The victim died!"); } diff --git a/Assets/Scripts/EnemyAi.cs b/Assets/Scripts/EnemyAi.cs index 774aca1..2f1d6c9 100644 --- a/Assets/Scripts/EnemyAi.cs +++ b/Assets/Scripts/EnemyAi.cs @@ -1,11 +1,39 @@ using System; +using UnityEngine; +using Random = System.Random; public class EnemyAi { - public Action AttackCallback; + public Action attackCallback; + public Action defendCallback; + public Action counterCallback; + + private Random rng; + + public EnemyAi() + { + rng = new Random(1337); + } + // TODO: will need more information, not sure what info should be exposed. public void TakeTurn() { - AttackCallback(); + var number = rng.Next(1, 4); + Debug.Log($"enemy rolled {number}"); + switch (number) + { + case 1: + attackCallback(); + break; + case 2: + defendCallback(); + break; + case 3: + counterCallback(); + break; + default: + Debug.LogWarning($"Enemy rolled something that it can't do {number}"); + break; + } } } diff --git a/Assets/Scripts/Player.cs b/Assets/Scripts/Player.cs new file mode 100644 index 0000000..03d6994 --- /dev/null +++ b/Assets/Scripts/Player.cs @@ -0,0 +1,29 @@ +using System; + +public class Player +{ + public int health; + public int damage; + public float damageReduction = 1.0f; + public float damageModification = 1.0f; + public bool isBloodCounter; + public bool isCounter; + public bool isStunned; + public bool isHumanControlled; + + public Action updateHealth; + public Action startTurnEffects; + + public void TakeDamage(int incomingDamage) + { + var modifiedDamage = (int) (incomingDamage * damageReduction); + // Not sure if blood counter should negate damage or not... + if (isBloodCounter) + { + damageModification += (modifiedDamage * 0.15F); + } + health -= modifiedDamage; + + updateHealth(health); + } +} \ No newline at end of file diff --git a/Assets/Scripts/Player.cs.meta b/Assets/Scripts/Player.cs.meta new file mode 100644 index 0000000..b3ed734 --- /dev/null +++ b/Assets/Scripts/Player.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 374046a0afc221d459f369d95fc41b42 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Spritesheets.meta b/Assets/Spritesheets.meta new file mode 100644 index 0000000..26d8153 --- /dev/null +++ b/Assets/Spritesheets.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6102af983b4288d43986464bb29c3e7c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Spritesheets/uipack_rpg_sheet.png b/Assets/Spritesheets/uipack_rpg_sheet.png new file mode 100644 index 0000000..740afe1 Binary files /dev/null and b/Assets/Spritesheets/uipack_rpg_sheet.png differ diff --git a/Assets/Spritesheets/uipack_rpg_sheet.png.meta b/Assets/Spritesheets/uipack_rpg_sheet.png.meta new file mode 100644 index 0000000..cdae0b4 --- /dev/null +++ b/Assets/Spritesheets/uipack_rpg_sheet.png.meta @@ -0,0 +1,2196 @@ +fileFormatVersion: 2 +guid: 4880d72e2864aa54389378d2e1821522 +TextureImporter: + internalIDToNameTable: + - first: + 213: -3065845115110258923 + second: arrowBeige_left.png + - first: + 213: -876916113671692908 + second: arrowBeige_right.png + - first: + 213: -3199050045481761375 + second: arrowBlue_left.png + - first: + 213: 91069135266465237 + second: arrowBlue_right.png + - first: + 213: -243706425301756804 + second: arrowBrown_left.png + - first: + 213: -7707906182408999357 + second: arrowBrown_right.png + - first: + 213: 7640529539919425555 + second: arrowSilver_left.png + - first: + 213: -440148442306511084 + second: arrowSilver_right.png + - first: + 213: 5741791383268150795 + second: barBack_horizontalLeft.png + - first: + 213: 4110012939401715177 + second: barBack_horizontalMid.png + - first: + 213: 936862776637027205 + second: barBack_horizontalRight.png + - first: + 213: -1569847276214523418 + second: barBack_verticalBottom.png + - first: + 213: -7091332126032253562 + second: barBack_verticalMid.png + - first: + 213: 7186829677185908364 + second: barBack_verticalTop.png + - first: + 213: 733584220257985254 + second: barBlue_horizontalBlue.png + - first: + 213: 2879881502684800515 + second: barBlue_horizontalLeft.png + - first: + 213: 5218899492203918591 + second: barBlue_horizontalRight.png + - first: + 213: 7109168866638171205 + second: barBlue_verticalBottom.png + - first: + 213: 8349698072535737256 + second: barBlue_verticalMid.png + - first: + 213: -7780427158427965587 + second: barBlue_verticalTop.png + - first: + 213: -3344875544598875602 + second: barGreen_horizontalLeft.png + - first: + 213: -7904214316921149014 + second: barGreen_horizontalMid.png + - first: + 213: -6034670552469499588 + second: barGreen_horizontalRight.png + - first: + 213: 1834998612420506070 + second: barGreen_verticalBottom.png + - first: + 213: -2755453101209018879 + second: barGreen_verticalMid.png + - first: + 213: -4213352910743148662 + second: barGreen_verticalTop.png + - first: + 213: -5977699597387766232 + second: barRed_horizontalLeft.png + - first: + 213: -3369414919916728018 + second: barRed_horizontalMid.png + - first: + 213: 6188094661579950931 + second: barRed_horizontalRight.png + - first: + 213: 2810553331800553670 + second: barRed_verticalBottom.png + - first: + 213: 8461753039342037233 + second: barRed_verticalMid.png + - first: + 213: -3308328016718208261 + second: barRed_verticalTop.png + - first: + 213: 1917657991484293299 + second: barYellow_horizontalLeft.png + - first: + 213: 645092453454402935 + second: barYellow_horizontalMid.png + - first: + 213: -5766303750328084760 + second: barYellow_horizontalRight.png + - first: + 213: -5605363782295744499 + second: barYellow_verticalBottom.png + - first: + 213: -5355005803999219697 + second: barYellow_verticalMid.png + - first: + 213: 3239843093637664104 + second: barYellow_verticalTop.png + - first: + 213: 7825250829889082930 + second: buttonLong_beige.png + - first: + 213: 8253030867335237739 + second: buttonLong_beige_pressed.png + - first: + 213: -3985811117541366512 + second: buttonLong_blue.png + - first: + 213: 8992257282699874409 + second: buttonLong_blue_pressed.png + - first: + 213: -861143203771653310 + second: buttonLong_brown.png + - first: + 213: -4104176793228889392 + second: buttonLong_brown_pressed.png + - first: + 213: -8169026919483231335 + second: buttonLong_grey.png + - first: + 213: 8512830025971384357 + second: buttonLong_grey_pressed.png + - first: + 213: -2258374320120644838 + second: buttonRound_beige.png + - first: + 213: -6625052740406624021 + second: buttonRound_blue.png + - first: + 213: -8635304914333653394 + second: buttonRound_brown.png + - first: + 213: -2051775029143062000 + second: buttonRound_grey.png + - first: + 213: 7067577018730115286 + second: buttonSquare_beige.png + - first: + 213: 4497485657247042444 + second: buttonSquare_beige_pressed.png + - first: + 213: -2735075395936164667 + second: buttonSquare_blue.png + - first: + 213: 3879586902925579997 + second: buttonSquare_blue_pressed.png + - first: + 213: 8047949451544522013 + second: buttonSquare_brown.png + - first: + 213: 5437299029774813188 + second: buttonSquare_brown_pressed.png + - first: + 213: 2329619694263455062 + second: buttonSquare_grey.png + - first: + 213: 2823825819002273684 + second: buttonSquare_grey_pressed.png + - first: + 213: -5591692054918224611 + second: cursorGauntlet_blue.png + - first: + 213: 1135579071110884410 + second: cursorGauntlet_bronze.png + - first: + 213: 3548154222282398596 + second: cursorGauntlet_grey.png + - first: + 213: 2933387467584884181 + second: cursorHand_beige.png + - first: + 213: 8801855715008105287 + second: cursorHand_blue.png + - first: + 213: 543474438185336381 + second: cursorHand_grey.png + - first: + 213: -1281719886287688372 + second: cursorSword_bronze.png + - first: + 213: -113328550142869694 + second: cursorSword_gold.png + - first: + 213: -5733998262458994484 + second: cursorSword_silver.png + - first: + 213: 7215279896600887633 + second: iconCheck_beige.png + - first: + 213: -8561850954222213945 + second: iconCheck_blue.png + - first: + 213: 3522341663598534631 + second: iconCheck_bronze.png + - first: + 213: -5216927348275734057 + second: iconCheck_grey.png + - first: + 213: 6820754018416556629 + second: iconCircle_beige.png + - first: + 213: 2919071832950625210 + second: iconCircle_blue.png + - first: + 213: 9017043938630672815 + second: iconCircle_brown.png + - first: + 213: 7524690137840758341 + second: iconCircle_grey.png + - first: + 213: -4626611290844866245 + second: iconCross_beige.png + - first: + 213: -1245058833516092737 + second: iconCross_blue.png + - first: + 213: 6831320113791551198 + second: iconCross_brown.png + - first: + 213: 611582470095337371 + second: iconCross_grey.png + - first: + 213: 923997641766589172 + second: panelInset_beige.png + - first: + 213: -5794796869342371381 + second: panelInset_beigeLight.png + - first: + 213: -8297243822185179047 + second: panelInset_blue.png + - first: + 213: -8644997448959572577 + second: panelInset_brown.png + - first: + 213: 1695822802525721143 + second: panel_beige.png + - first: + 213: -1954158942528770799 + second: panel_beigeLight.png + - first: + 213: -6789483784463679010 + second: panel_blue.png + - first: + 213: -1871147257634247708 + second: panel_brown.png + 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 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 128 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: 4 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: 4 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: arrowBeige_left.png + rect: + serializedVersion: 2 + x: 303 + y: 5 + width: 22 + height: 21 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 5178c718c1ee375d0800000000000000 + internalID: -3065845115110258923 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: arrowBeige_right.png + rect: + serializedVersion: 2 + x: 171 + y: 5 + width: 22 + height: 21 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 49d58c2d07194d3f0800000000000000 + internalID: -876916113671692908 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: arrowBlue_left.png + rect: + serializedVersion: 2 + x: 193 + y: 5 + width: 22 + height: 21 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 1a5cc54dee0ba93d0800000000000000 + internalID: -3199050045481761375 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: arrowBlue_right.png + rect: + serializedVersion: 2 + x: 215 + y: 5 + width: 22 + height: 21 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 5d54f8165ea834100800000000000000 + internalID: 91069135266465237 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: arrowBrown_left.png + rect: + serializedVersion: 2 + x: 237 + y: 5 + width: 22 + height: 21 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: c7498622c4e2e9cf0800000000000000 + internalID: -243706425301756804 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: arrowBrown_right.png + rect: + serializedVersion: 2 + x: 325 + y: 5 + width: 22 + height: 21 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 34e69735a24080590800000000000000 + internalID: -7707906182408999357 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: arrowSilver_left.png + rect: + serializedVersion: 2 + x: 281 + y: 5 + width: 22 + height: 21 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 310b6c2a22d980a60800000000000000 + internalID: 7640529539919425555 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: arrowSilver_right.png + rect: + serializedVersion: 2 + x: 259 + y: 5 + width: 22 + height: 21 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 41ff0efd25744e9f0800000000000000 + internalID: -440148442306511084 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: barBack_horizontalLeft.png + rect: + serializedVersion: 2 + x: 372 + y: 164 + width: 9 + height: 18 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: b0ec81e77d0feaf40800000000000000 + internalID: 5741791383268150795 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: barBack_horizontalMid.png + rect: + serializedVersion: 2 + x: 338 + y: 108 + width: 18 + height: 18 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 9ed5c4b1ef2b90930800000000000000 + internalID: 4110012939401715177 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: barBack_horizontalRight.png + rect: + serializedVersion: 2 + x: 190 + y: 200 + width: 9 + height: 18 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 5837cbc4bb7600d00800000000000000 + internalID: 936862776637027205 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: barBack_verticalBottom.png + rect: + serializedVersion: 2 + x: 290 + y: 314 + width: 18 + height: 9 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 6e96e9d3838c63ae0800000000000000 + internalID: -1569847276214523418 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: barBack_verticalMid.png + rect: + serializedVersion: 2 + x: 338 + y: 90 + width: 18 + height: 18 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 68d288bb007869d90800000000000000 + internalID: -7091332126032253562 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: barBack_verticalTop.png + rect: + serializedVersion: 2 + x: 338 + y: 63 + width: 18 + height: 9 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: c8eb6e1938fbcb360800000000000000 + internalID: 7186829677185908364 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: barBlue_horizontalBlue.png + rect: + serializedVersion: 2 + x: 356 + y: 63 + width: 18 + height: 18 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 6e22f4d26f63e2a00800000000000000 + internalID: 733584220257985254 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: barBlue_horizontalLeft.png + rect: + serializedVersion: 2 + x: 372 + y: 200 + width: 9 + height: 18 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 306eebae7f467f720800000000000000 + internalID: 2879881502684800515 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: barBlue_horizontalRight.png + rect: + serializedVersion: 2 + x: 372 + y: 182 + width: 9 + height: 18 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: ff4f74fef614d6840800000000000000 + internalID: 5218899492203918591 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: barBlue_verticalBottom.png + rect: + serializedVersion: 2 + x: 344 + y: 314 + width: 18 + height: 9 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 54c0c301b67d8a260800000000000000 + internalID: 7109168866638171205 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: barBlue_verticalMid.png + rect: + serializedVersion: 2 + x: 356 + y: 108 + width: 18 + height: 18 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 8a3a14b882610e370800000000000000 + internalID: 8349698072535737256 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: barBlue_verticalTop.png + rect: + serializedVersion: 2 + x: 356 + y: 99 + width: 18 + height: 9 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: d67691dc8be560490800000000000000 + internalID: -7780427158427965587 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: barGreen_horizontalLeft.png + rect: + serializedVersion: 2 + x: 370 + y: 386 + width: 9 + height: 18 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: e22fa420a6d9491d0800000000000000 + internalID: -3344875544598875602 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: barGreen_horizontalMid.png + rect: + serializedVersion: 2 + x: 338 + y: 126 + width: 18 + height: 18 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: aa9ab5305f69e4290800000000000000 + internalID: -7904214316921149014 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: barGreen_horizontalRight.png + rect: + serializedVersion: 2 + x: 190 + y: 182 + width: 9 + height: 18 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: c319b870b1b804ca0800000000000000 + internalID: -6034670552469499588 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: barGreen_verticalBottom.png + rect: + serializedVersion: 2 + x: 338 + y: 36 + width: 18 + height: 9 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 6d1b8a80489377910800000000000000 + internalID: 1834998612420506070 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: barGreen_verticalMid.png + rect: + serializedVersion: 2 + x: 356 + y: 81 + width: 18 + height: 18 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 10e1033e00aa2c9d0800000000000000 + internalID: -2755453101209018879 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: barGreen_verticalTop.png + rect: + serializedVersion: 2 + x: 171 + y: 27 + width: 18 + height: 9 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: a87ebc9d9d92785c0800000000000000 + internalID: -4213352910743148662 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: barRed_horizontalLeft.png + rect: + serializedVersion: 2 + x: 370 + y: 404 + width: 9 + height: 18 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 826e4bb23e1fa0da0800000000000000 + internalID: -5977699597387766232 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: barRed_horizontalMid.png + rect: + serializedVersion: 2 + x: 356 + y: 126 + width: 18 + height: 18 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: e2156757bfe6d31d0800000000000000 + internalID: -3369414919916728018 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: barRed_horizontalRight.png + rect: + serializedVersion: 2 + x: 190 + y: 146 + width: 9 + height: 18 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 35bc6fb0f4780e550800000000000000 + internalID: 6188094661579950931 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: barRed_verticalBottom.png + rect: + serializedVersion: 2 + x: 347 + y: 0 + width: 18 + height: 9 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 6c833444d57110720800000000000000 + internalID: 2810553331800553670 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: barRed_verticalMid.png + rect: + serializedVersion: 2 + x: 347 + y: 9 + width: 18 + height: 18 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 1f860179e8f2e6570800000000000000 + internalID: 8461753039342037233 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: barRed_verticalTop.png + rect: + serializedVersion: 2 + x: 338 + y: 27 + width: 18 + height: 9 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: bf2e90372357612d0800000000000000 + internalID: -3308328016718208261 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: barYellow_horizontalLeft.png + rect: + serializedVersion: 2 + x: 370 + y: 368 + width: 9 + height: 18 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 3b04c1778c3ec9a10800000000000000 + internalID: 1917657991484293299 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: barYellow_horizontalMid.png + rect: + serializedVersion: 2 + x: 338 + y: 45 + width: 18 + height: 18 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 7755f672b24d3f800800000000000000 + internalID: 645092453454402935 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: barYellow_horizontalRight.png + rect: + serializedVersion: 2 + x: 190 + y: 164 + width: 9 + height: 18 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 8e611be4a49f9ffa0800000000000000 + internalID: -5766303750328084760 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: barYellow_verticalBottom.png + rect: + serializedVersion: 2 + x: 326 + y: 314 + width: 18 + height: 9 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: d001c67a65fb532b0800000000000000 + internalID: -5605363782295744499 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: barYellow_verticalMid.png + rect: + serializedVersion: 2 + x: 338 + y: 72 + width: 18 + height: 18 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: f00b872e7923fa5b0800000000000000 + internalID: -5355005803999219697 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: barYellow_verticalTop.png + rect: + serializedVersion: 2 + x: 308 + y: 314 + width: 18 + height: 9 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 86d8644d02c36fc20800000000000000 + internalID: 3239843093637664104 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: buttonLong_beige.png + rect: + serializedVersion: 2 + x: 0 + y: 181 + width: 190 + height: 49 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 2369ed97b20e89c60800000000000000 + internalID: 7825250829889082930 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: buttonLong_beige_pressed.png + rect: + serializedVersion: 2 + x: 0 + y: 230 + width: 190 + height: 45 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: b60d9dfe8d7a88270800000000000000 + internalID: 8253030867335237739 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: buttonLong_blue.png + rect: + serializedVersion: 2 + x: 0 + y: 275 + width: 190 + height: 49 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 015e42508ed8fa8c0800000000000000 + internalID: -3985811117541366512 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: buttonLong_blue_pressed.png + rect: + serializedVersion: 2 + x: 0 + y: 324 + width: 190 + height: 45 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 960de380b5aeacc70800000000000000 + internalID: 8992257282699874409 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: buttonLong_brown.png + rect: + serializedVersion: 2 + x: 0 + y: 414 + width: 190 + height: 49 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 243e27691da9c04f0800000000000000 + internalID: -861143203771653310 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: buttonLong_brown_pressed.png + rect: + serializedVersion: 2 + x: 0 + y: 369 + width: 190 + height: 45 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 0d2b03093f80b07c0800000000000000 + internalID: -4104176793228889392 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: buttonLong_grey.png + rect: + serializedVersion: 2 + x: 0 + y: 463 + width: 190 + height: 49 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 993399f4c49c1ae80800000000000000 + internalID: -8169026919483231335 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: buttonLong_grey_pressed.png + rect: + serializedVersion: 2 + x: 0 + y: 136 + width: 190 + height: 45 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 520cd434ec5a32670800000000000000 + internalID: 8512830025971384357 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: buttonRound_beige.png + rect: + serializedVersion: 2 + x: 335 + y: 398 + width: 35 + height: 38 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: a1b385f6584a8a0e0800000000000000 + internalID: -2258374320120644838 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: buttonRound_blue.png + rect: + serializedVersion: 2 + x: 335 + y: 436 + width: 35 + height: 38 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: be0c5d532a51f04a0800000000000000 + internalID: -6625052740406624021 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: buttonRound_brown.png + rect: + serializedVersion: 2 + x: 335 + y: 360 + width: 35 + height: 38 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: e6625f5aeeb392880800000000000000 + internalID: -8635304914333653394 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: buttonRound_grey.png + rect: + serializedVersion: 2 + x: 335 + y: 474 + width: 35 + height: 38 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 01a39e45b71a683e0800000000000000 + internalID: -2051775029143062000 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: buttonSquare_beige.png + rect: + serializedVersion: 2 + x: 293 + y: 169 + width: 45 + height: 49 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 6d07f185ad3151260800000000000000 + internalID: 7067577018730115286 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: buttonSquare_beige_pressed.png + rect: + serializedVersion: 2 + x: 290 + y: 373 + width: 45 + height: 45 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: c8bcf9660674a6e30800000000000000 + internalID: 4497485657247042444 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: buttonSquare_blue.png + rect: + serializedVersion: 2 + x: 290 + y: 463 + width: 45 + height: 49 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 5c4605f1b6f0b0ad0800000000000000 + internalID: -2735075395936164667 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: buttonSquare_blue_pressed.png + rect: + serializedVersion: 2 + x: 290 + y: 328 + width: 45 + height: 45 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: dd61328bbbf07d530800000000000000 + internalID: 3879586902925579997 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: buttonSquare_brown.png + rect: + serializedVersion: 2 + x: 293 + y: 120 + width: 45 + height: 49 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: d1d6c95e26f00bf60800000000000000 + internalID: 8047949451544522013 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: buttonSquare_brown_pressed.png + rect: + serializedVersion: 2 + x: 293 + y: 75 + width: 45 + height: 45 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 408cd47d8aa257b40800000000000000 + internalID: 5437299029774813188 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: buttonSquare_grey.png + rect: + serializedVersion: 2 + x: 293 + y: 26 + width: 45 + height: 49 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 65dc352e4c8745020800000000000000 + internalID: 2329619694263455062 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: buttonSquare_grey_pressed.png + rect: + serializedVersion: 2 + x: 290 + y: 418 + width: 45 + height: 45 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 49ff4310f9e303720800000000000000 + internalID: 2823825819002273684 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: cursorGauntlet_blue.png + rect: + serializedVersion: 2 + x: 30 + y: 0 + width: 30 + height: 30 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: d15a93db3b15662b0800000000000000 + internalID: -5591692054918224611 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: cursorGauntlet_bronze.png + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 30 + height: 30 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: a3caeeb062362cf00800000000000000 + internalID: 1135579071110884410 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: cursorGauntlet_grey.png + rect: + serializedVersion: 2 + x: 60 + y: 0 + width: 30 + height: 30 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 48bd17b57739d3130800000000000000 + internalID: 3548154222282398596 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: cursorHand_beige.png + rect: + serializedVersion: 2 + x: 90 + y: 2 + width: 27 + height: 28 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 5ddcaf92c5c75b820800000000000000 + internalID: 2933387467584884181 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: cursorHand_blue.png + rect: + serializedVersion: 2 + x: 117 + y: 2 + width: 27 + height: 28 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 74bcc497329762a70800000000000000 + internalID: 8801855715008105287 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: cursorHand_grey.png + rect: + serializedVersion: 2 + x: 144 + y: 2 + width: 27 + height: 28 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: d3eba804f1fca8700800000000000000 + internalID: 543474438185336381 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: cursorSword_bronze.png + rect: + serializedVersion: 2 + x: 338 + y: 144 + width: 34 + height: 37 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: c4da444ed8a663ee0800000000000000 + internalID: -1281719886287688372 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: cursorSword_gold.png + rect: + serializedVersion: 2 + x: 338 + y: 181 + width: 34 + height: 37 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 24ff2d9b8406d6ef0800000000000000 + internalID: -113328550142869694 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: cursorSword_silver.png + rect: + serializedVersion: 2 + x: 335 + y: 323 + width: 34 + height: 37 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: cc0bc67d5febc60b0800000000000000 + internalID: -5733998262458994484 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: iconCheck_beige.png + rect: + serializedVersion: 2 + x: 369 + y: 313 + width: 16 + height: 15 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 151c9e776d2d12460800000000000000 + internalID: 7215279896600887633 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: iconCheck_blue.png + rect: + serializedVersion: 2 + x: 370 + y: 467 + width: 16 + height: 15 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 7c4eeb57be13e2980800000000000000 + internalID: -8561850954222213945 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: iconCheck_bronze.png + rect: + serializedVersion: 2 + x: 370 + y: 452 + width: 16 + height: 15 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 7ef5954b41fd1e030800000000000000 + internalID: 3522341663598534631 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: iconCheck_grey.png + rect: + serializedVersion: 2 + x: 370 + y: 422 + width: 16 + height: 15 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 7d9110b9730c997b0800000000000000 + internalID: -5216927348275734057 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: iconCircle_beige.png + rect: + serializedVersion: 2 + x: 356 + y: 29 + width: 17 + height: 17 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 55a790054af28ae50800000000000000 + internalID: 6820754018416556629 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: iconCircle_blue.png + rect: + serializedVersion: 2 + x: 365 + y: 12 + width: 17 + height: 17 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: ab3dedcbd50a28820800000000000000 + internalID: 2919071832950625210 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: iconCircle_brown.png + rect: + serializedVersion: 2 + x: 369 + y: 343 + width: 17 + height: 17 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: fa1ab2610b9f22d70800000000000000 + internalID: 9017043938630672815 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: iconCircle_grey.png + rect: + serializedVersion: 2 + x: 356 + y: 46 + width: 17 + height: 17 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 54e22e610d11d6860800000000000000 + internalID: 7524690137840758341 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: iconCross_beige.png + rect: + serializedVersion: 2 + x: 369 + y: 328 + width: 16 + height: 15 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: b3951673b89facfb0800000000000000 + internalID: -4626611290844866245 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: iconCross_blue.png + rect: + serializedVersion: 2 + x: 370 + y: 482 + width: 16 + height: 15 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: fb2afc76699a8bee0800000000000000 + internalID: -1245058833516092737 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: iconCross_brown.png + rect: + serializedVersion: 2 + x: 370 + y: 497 + width: 16 + height: 15 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: ed6c6891379bdce50800000000000000 + internalID: 6831320113791551198 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: iconCross_grey.png + rect: + serializedVersion: 2 + x: 370 + y: 437 + width: 16 + height: 15 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: b9773e82407cc7800800000000000000 + internalID: 611582470095337371 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: panelInset_beige.png + rect: + serializedVersion: 2 + x: 200 + y: 124 + width: 93 + height: 94 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 4f2dbcaa5f2b2dc00800000000000000 + internalID: 923997641766589172 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: panelInset_beigeLight.png + rect: + serializedVersion: 2 + x: 190 + y: 218 + width: 93 + height: 94 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: bc16d4113feb49fa0800000000000000 + internalID: -5794796869342371381 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: panelInset_blue.png + rect: + serializedVersion: 2 + x: 200 + y: 30 + width: 93 + height: 94 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 95819d354b44adc80800000000000000 + internalID: -8297243822185179047 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: panelInset_brown.png + rect: + serializedVersion: 2 + x: 283 + y: 218 + width: 93 + height: 94 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: f954b929f9cc60880800000000000000 + internalID: -8644997448959572577 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: panel_beige.png + rect: + serializedVersion: 2 + x: 190 + y: 312 + width: 100 + height: 100 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 7329d82aad5c88710800000000000000 + internalID: 1695822802525721143 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: panel_beigeLight.png + rect: + serializedVersion: 2 + x: 100 + y: 36 + width: 100 + height: 100 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 11d6beb9bce61e4e0800000000000000 + internalID: -1954158942528770799 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: panel_blue.png + rect: + serializedVersion: 2 + x: 190 + y: 412 + width: 100 + height: 100 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: ed184c26878e6c1a0800000000000000 + internalID: -6789483784463679010 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: panel_brown.png + rect: + serializedVersion: 2 + x: 0 + y: 36 + width: 100 + height: 100 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 4eba342ab795806e0800000000000000 + internalID: -1871147257634247708 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Spritesheets/uipack_rpg_sheet.xml b/Assets/Spritesheets/uipack_rpg_sheet.xml new file mode 100644 index 0000000..09aeee4 --- /dev/null +++ b/Assets/Spritesheets/uipack_rpg_sheet.xml @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Assets/Spritesheets/uipack_rpg_sheet.xml.meta b/Assets/Spritesheets/uipack_rpg_sheet.xml.meta new file mode 100644 index 0000000..46baa4e --- /dev/null +++ b/Assets/Spritesheets/uipack_rpg_sheet.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: eb81e257b5879c4479ed1e2a1874505f +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextureAtlasSlicer.meta b/Assets/TextureAtlasSlicer.meta new file mode 100644 index 0000000..d901a50 --- /dev/null +++ b/Assets/TextureAtlasSlicer.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 575a86d4fe7d22f4f915b9d1c09778e9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextureAtlasSlicer/Editor.meta b/Assets/TextureAtlasSlicer/Editor.meta new file mode 100644 index 0000000..8509ee6 --- /dev/null +++ b/Assets/TextureAtlasSlicer/Editor.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 23aa647f2fb21bf46b850587506ba4a2 +folderAsset: yes +timeCreated: 1430572177 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextureAtlasSlicer/Editor/TextureAtlasSlicer.cs b/Assets/TextureAtlasSlicer/Editor/TextureAtlasSlicer.cs new file mode 100644 index 0000000..a738c29 --- /dev/null +++ b/Assets/TextureAtlasSlicer/Editor/TextureAtlasSlicer.cs @@ -0,0 +1,281 @@ +using System; +using System.IO; +using System.Linq; +using System.Xml; +using UnityEditor; +using UnityEngine; + +public class TextureAtlasSlicer : EditorWindow { + [MenuItem("CONTEXT/TextureImporter/Slice Sprite Using XML")] + public static void SliceUsingXML(MenuCommand command) { + var textureImporter = command.context as TextureImporter; + + var window = CreateInstance(); + + window.importer = textureImporter; + + window.ShowUtility(); + } + + [MenuItem("Assets/Slice Sprite Using XML")] + public static void TextureAtlasSlicerWindow() { + var window = CreateInstance(); + + window.Show(); + } + + [MenuItem("CONTEXT/TextureImporter/Slice Sprite Using XML", true)] + public static bool ValidateSliceUsingXML(MenuCommand command) { + var textureImporter = command.context as TextureImporter; + + //valid only if the texture type is 'sprite' or 'advanced'. + return textureImporter && textureImporter.textureType == TextureImporterType.Sprite || + textureImporter.textureType == TextureImporterType.Default; + } + + public TextureImporter importer; + + public TextureAtlasSlicer() { + titleContent = new GUIContent("XML Slicer"); + } + + + [SerializeField] + private TextAsset xmlAsset; + + public SpriteAlignment spriteAlignment = SpriteAlignment.Center; + + public Vector2 customOffset = new Vector2(0.5f, 0.5f); + + public void OnSelectionChange() { + UseSelectedTexture(); + } + + private Texture2D selectedTexture; + + private void UseSelectedTexture() { + if (Selection.objects.Length > 1) { + selectedTexture = null; + } else { + selectedTexture = Selection.activeObject as Texture2D; + } + + if (selectedTexture != null) { + var assetPath = AssetDatabase.GetAssetPath(selectedTexture); + + importer = AssetImporter.GetAtPath(assetPath) as TextureImporter; + + if (importer) { + var extension = Path.GetExtension(assetPath); + var pathWithoutExtension = assetPath.Remove(assetPath.Length - extension.Length, extension.Length); + + var xmlPath = pathWithoutExtension + ".xml"; + + var textAsset = AssetDatabase.LoadAssetAtPath(xmlPath, typeof (TextAsset)); + + if (textAsset != null) { + xmlAsset = textAsset as TextAsset; + } else { + xmlAsset = null; + subTextures = null; + } + + ParseXML(); + } else { + xmlAsset = null; + subTextures = null; + } + } else { + importer = null; + xmlAsset = null; + subTextures = null; + } + + Repaint(); + } + + private SubTexture[] subTextures; + private int wantedWidth, wantedHeight; + + private void ParseXML() { + try { + var document = new XmlDocument(); + document.LoadXml(xmlAsset.text); + + var root = document.DocumentElement; + if (root == null || root.Name != "TextureAtlas") { + return; + } + + subTextures = root.ChildNodes + .Cast() + .Where(childNode => childNode.Name == "SubTexture") + .Select(childNode => new SubTexture { + width = Convert.ToInt32(childNode.Attributes["width"].Value), + height = Convert.ToInt32(childNode.Attributes["height"].Value), + x = Convert.ToInt32(childNode.Attributes["x"].Value), + y = Convert.ToInt32(childNode.Attributes["y"].Value), + name = childNode.Attributes["name"].Value + }).ToArray(); + + wantedWidth = 0; + wantedHeight = 0; + + foreach (var subTexture in subTextures) { + var right = subTexture.x + subTexture.width; + var bottom = subTexture.y + subTexture.height; + + wantedWidth = Mathf.Max(wantedWidth, right); + wantedHeight = Mathf.Max(wantedHeight, bottom); + } + } catch (Exception) { + subTextures = null; + } + } + + public void OnEnable() { + UseSelectedTexture(); + } + + public void OnGUI() { + if (importer == null) { + EditorGUILayout.LabelField("Please select a texture to slice."); + return; + } + EditorGUI.BeginDisabledGroup(focusedWindow != this); + { + EditorGUI.BeginDisabledGroup(true); + EditorGUILayout.ObjectField("Texture", Selection.activeObject, typeof (Texture), false); + EditorGUI.EndDisabledGroup(); + + if (importer.textureType != TextureImporterType.Sprite && + importer.textureType != TextureImporterType.Default) { + EditorGUILayout.LabelField("The Texture Type needs to be Sprite or Advanced!"); + } + + EditorGUI.BeginDisabledGroup((importer.textureType != TextureImporterType.Sprite && + importer.textureType != TextureImporterType.Default)); + { + EditorGUI.BeginChangeCheck(); + xmlAsset = EditorGUILayout.ObjectField("XML Source", xmlAsset, typeof (TextAsset), false) as TextAsset; + if (EditorGUI.EndChangeCheck()) { + ParseXML(); + } + + spriteAlignment = (SpriteAlignment) EditorGUILayout.EnumPopup("Pivot", spriteAlignment); + + EditorGUI.BeginDisabledGroup(spriteAlignment != SpriteAlignment.Custom); + EditorGUILayout.Vector2Field("Custom Offset", customOffset); + EditorGUI.EndDisabledGroup(); + + var needsToResizeTexture = wantedWidth > selectedTexture.width || wantedHeight > selectedTexture.height; + + if (xmlAsset != null && needsToResizeTexture) { + EditorGUILayout.LabelField( + string.Format("Texture size too small." + + " It needs to be at least {0} by {1} pixels!", + wantedWidth, + wantedHeight)); + EditorGUILayout.LabelField("Try changing the Max Size property in the importer."); + } + + if (subTextures == null || subTextures.Length == 0) { + EditorGUILayout.LabelField("Could not find any SubTextures in XML."); + } + + EditorGUI.BeginDisabledGroup(xmlAsset == null || needsToResizeTexture || subTextures == null || + subTextures.Length == 0); + if (GUILayout.Button("Slice")) { + PerformSlice(); + } + EditorGUI.EndDisabledGroup(); + } + EditorGUI.EndDisabledGroup(); + } + EditorGUI.EndDisabledGroup(); + } + + private struct SubTexture { + public int width; + public int height; + public int x; + public int y; + public string name; + } + + private void PerformSlice() { + if (importer == null) { + return; + } + + var textureHeight = selectedTexture.height; + + var needsUpdate = false; + + if (importer.spriteImportMode != SpriteImportMode.Multiple) { + needsUpdate = true; + importer.spriteImportMode = SpriteImportMode.Multiple; + } + + var wantedSpriteSheet = (from subTexture in subTextures + let actualY = textureHeight - (subTexture.y + subTexture.height) + select new SpriteMetaData { + alignment = (int) spriteAlignment, + border = new Vector4(), + name = subTexture.name, + pivot = GetPivotValue(spriteAlignment, customOffset), + rect = new Rect(subTexture.x, actualY, subTexture.width, subTexture.height) + }).ToArray(); + if (!needsUpdate && !importer.spritesheet.SequenceEqual(wantedSpriteSheet)) { + needsUpdate = true; + importer.spritesheet = wantedSpriteSheet; + } + + if (needsUpdate) { + EditorUtility.SetDirty(importer); + + try { + AssetDatabase.StartAssetEditing(); + AssetDatabase.ImportAsset(importer.assetPath); + + EditorUtility.DisplayDialog("Success!", "The sprite was sliced successfully.", "OK"); + } catch (Exception exception) { + Debug.LogException(exception); + EditorUtility.DisplayDialog("Error", "There was an exception while trying to reimport the image." + + "\nPlease check the console log for details.", "OK"); + } finally { + AssetDatabase.StopAssetEditing(); + } + } else { + EditorUtility.DisplayDialog("Nope!", "The sprite is already sliced according to this XML file.", "OK"); + } + } + + //SpriteEditorUtility + public static Vector2 GetPivotValue(SpriteAlignment alignment, Vector2 customOffset) { + switch (alignment) { + case SpriteAlignment.Center: + return new Vector2(0.5f, 0.5f); + case SpriteAlignment.TopLeft: + return new Vector2(0.0f, 1f); + case SpriteAlignment.TopCenter: + return new Vector2(0.5f, 1f); + case SpriteAlignment.TopRight: + return new Vector2(1f, 1f); + case SpriteAlignment.LeftCenter: + return new Vector2(0.0f, 0.5f); + case SpriteAlignment.RightCenter: + return new Vector2(1f, 0.5f); + case SpriteAlignment.BottomLeft: + return new Vector2(0.0f, 0.0f); + case SpriteAlignment.BottomCenter: + return new Vector2(0.5f, 0.0f); + case SpriteAlignment.BottomRight: + return new Vector2(1f, 0.0f); + case SpriteAlignment.Custom: + return customOffset; + default: + return Vector2.zero; + } + } +} \ No newline at end of file diff --git a/Assets/TextureAtlasSlicer/Editor/TextureAtlasSlicer.cs.meta b/Assets/TextureAtlasSlicer/Editor/TextureAtlasSlicer.cs.meta new file mode 100644 index 0000000..f6484df --- /dev/null +++ b/Assets/TextureAtlasSlicer/Editor/TextureAtlasSlicer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2067bd0762faf2c48910fee768c92901 +timeCreated: 1430572201 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TextureAtlasSlicer/README.md b/Assets/TextureAtlasSlicer/README.md new file mode 100644 index 0000000..5c2b2fc --- /dev/null +++ b/Assets/TextureAtlasSlicer/README.md @@ -0,0 +1,17 @@ +# Unity3D-TextureAtlasSlicer +Simple and fast tool to import XML spritesheets (TextureAtlas) into Unity3D! + +![Preview Image](https://i.imgur.com/LhmcMjX.png) + +Works very well to import [Kenney's sprite assets](http://opengameart.org/users/kenney)! + +## Usage +- Copy this folder to your project's assets directory, or just use the latest .unitypackage file from the [Github project's releases](https://github.com/toxicFork/Unity3D-TextureAtlasSlicer/releases), or the [Unity3D asset store](https://www.assetstore.unity3d.com/en/#!/content/36103)! +- You can now use the Assets/Slice Sprite Using XML button! +- This will open a window. +- Select any sprite asset in your Project window +- If it has a XML file with the same name next to it, that XML file will automatically be selected +- Otherwise, drag-drop the XML file reference onto the XML Source field in the Texture Atlas Slicer window +- Configure the pivot settings +- Hit Slice! +- Enjoy! :D diff --git a/Assets/TextureAtlasSlicer/README.md.meta b/Assets/TextureAtlasSlicer/README.md.meta new file mode 100644 index 0000000..ebeb99b --- /dev/null +++ b/Assets/TextureAtlasSlicer/README.md.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 463e84607d141d645b70834aa062a0d1 +timeCreated: 1430859603 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset index 43a0eae..fe6e2f1 100644 --- a/ProjectSettings/ProjectSettings.asset +++ b/ProjectSettings/ProjectSettings.asset @@ -145,7 +145,8 @@ PlayerSettings: resolutionScalingMode: 0 androidSupportedAspectRatio: 1 androidMaxAspectRatio: 2.1 - applicationIdentifier: {} + applicationIdentifier: + Standalone: com.DefaultCompany.prototurnbasedrpg buildNumber: Standalone: 0 iPhone: 0 diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt index 78a3249..833e6ef 100644 --- a/ProjectSettings/ProjectVersion.txt +++ b/ProjectSettings/ProjectVersion.txt @@ -1,2 +1,2 @@ -m_EditorVersion: 2020.2.3f1 -m_EditorVersionWithRevision: 2020.2.3f1 (8ff31bc5bf5b) +m_EditorVersion: 2020.2.4f1 +m_EditorVersionWithRevision: 2020.2.4f1 (becced5a802b) diff --git a/ProjectSettings/QualitySettings.asset b/ProjectSettings/QualitySettings.asset index d24eb10..2b39c51 100644 --- a/ProjectSettings/QualitySettings.asset +++ b/ProjectSettings/QualitySettings.asset @@ -4,7 +4,7 @@ QualitySettings: m_ObjectHideFlags: 0 serializedVersion: 5 - m_CurrentQuality: 5 + m_CurrentQuality: 3 m_QualitySettings: - serializedVersion: 2 name: Very Low @@ -165,7 +165,7 @@ QualitySettings: skinWeights: 4 textureQuality: 0 anisotropicTextures: 2 - antiAliasing: 2 + antiAliasing: 0 softParticles: 1 softVegetation: 1 realtimeReflectionProbes: 1 @@ -201,7 +201,7 @@ QualitySettings: skinWeights: 255 textureQuality: 0 anisotropicTextures: 2 - antiAliasing: 2 + antiAliasing: 0 softParticles: 1 softVegetation: 1 realtimeReflectionProbes: 1