From 515602b6705a024ef20acd6cadfbb511735f5224 Mon Sep 17 00:00:00 2001 From: henriquenakashima Date: Fri, 9 Oct 2020 22:34:13 -0400 Subject: [PATCH] Better status icon system --- Assets/Battle/BattleStatus.cs | 1 + Assets/Battle/UI/BattleParticipantUI.prefab | 236 +-------------- Assets/Battle/UI/StatusIconUI.cs | 28 ++ Assets/Battle/UI/StatusIconUI.cs.meta | 11 + Assets/Battle/UI/StatusIconUI.prefab | 282 ++++++++++++++++++ Assets/Battle/UI/StatusIconUI.prefab.meta | 7 + Assets/Battle/UI/StatusUI.cs | 46 ++- Assets/Resources/BattleIcons.meta | 8 + .../Resources/BattleIcons/BuffIconPower.png | Bin 0 -> 26345 bytes .../BattleIcons/BuffIconPower.png.meta} | 2 +- .../BattleIcons/StatusIconStun.png} | Bin .../BattleIcons/StatusIconStun.png.meta | 92 ++++++ TODO.txt | 1 + 13 files changed, 464 insertions(+), 250 deletions(-) create mode 100644 Assets/Battle/UI/StatusIconUI.cs create mode 100644 Assets/Battle/UI/StatusIconUI.cs.meta create mode 100644 Assets/Battle/UI/StatusIconUI.prefab create mode 100644 Assets/Battle/UI/StatusIconUI.prefab.meta create mode 100644 Assets/Resources/BattleIcons.meta create mode 100644 Assets/Resources/BattleIcons/BuffIconPower.png rename Assets/{Battle/UI/stun_icon.png.meta => Resources/BattleIcons/BuffIconPower.png.meta} (98%) rename Assets/{Battle/UI/stun_icon.png => Resources/BattleIcons/StatusIconStun.png} (100%) create mode 100644 Assets/Resources/BattleIcons/StatusIconStun.png.meta diff --git a/Assets/Battle/BattleStatus.cs b/Assets/Battle/BattleStatus.cs index efeeb66..0cf6601 100644 --- a/Assets/Battle/BattleStatus.cs +++ b/Assets/Battle/BattleStatus.cs @@ -1,3 +1,4 @@ public enum BattleStatus { + None, Stun, } diff --git a/Assets/Battle/UI/BattleParticipantUI.prefab b/Assets/Battle/UI/BattleParticipantUI.prefab index eac7329..d0882a7 100644 --- a/Assets/Battle/UI/BattleParticipantUI.prefab +++ b/Assets/Battle/UI/BattleParticipantUI.prefab @@ -78,154 +78,6 @@ MonoBehaviour: m_VerticalOverflow: 0 m_LineSpacing: 1 m_Text: 56 ---- !u!1 &3426763279947371280 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 2365314723301749520} - - component: {fileID: 2687845506595039125} - - component: {fileID: 7861691439794345590} - m_Layer: 5 - m_Name: BG - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &2365314723301749520 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3426763279947371280} - 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: 5364248411365301727} - 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: -53.76, y: 60.32} - m_SizeDelta: {x: 16.523172, y: 17.074677} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &2687845506595039125 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3426763279947371280} - m_CullTransparentMesh: 0 ---- !u!114 &7861691439794345590 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3426763279947371280} - 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.30588236} - m_RaycastTarget: 1 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: ff1a435c8e6ef4a46aeb34ba613ce13d, type: 3} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 0 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 ---- !u!1 &3730468488252910637 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 7872829101071880504} - - component: {fileID: 7145260895785022369} - - component: {fileID: 1306121800800203574} - m_Layer: 5 - m_Name: StunIcon - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &7872829101071880504 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3730468488252910637} - 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: 5364248411365301727} - 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: -53.76, y: 60.32} - m_SizeDelta: {x: 16.522865, y: 17.07425} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &7145260895785022369 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3730468488252910637} - m_CullTransparentMesh: 0 ---- !u!114 &1306121800800203574 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3730468488252910637} - 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: 0.9715784, b: 0.3160377, a: 1} - m_RaycastTarget: 1 - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: dc422435e5172774ca9ddc33364d1a6f, type: 3} - m_Type: 0 - m_PreserveAspect: 1 - m_FillCenter: 1 - m_FillMethod: 0 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 --- !u!1 &5172729878808660606 GameObject: m_ObjectHideFlags: 0 @@ -368,10 +220,7 @@ 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: - - {fileID: 2365314723301749520} - - {fileID: 7872829101071880504} - - {fileID: 501555061161187130} + m_Children: [] m_Father: {fileID: 6071241564507600362} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -392,9 +241,8 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d86314823afd5c34396777dcb49e6093, type: 3} m_Name: m_EditorClassIdentifier: - backgroundImage: {fileID: 7861691439794345590} - stunImage: {fileID: 1306121800800203574} - turnsText: {fileID: 2986296803404415245} + iconPrefab: {fileID: 6208964397351173773, guid: 8fb5f8d629dd9f446b650ae8dec722fd, + type: 3} --- !u!1 &5574000899179897583 GameObject: m_ObjectHideFlags: 0 @@ -792,81 +640,3 @@ MonoBehaviour: blockGroup: {fileID: 5194869534592792291} blockText: {fileID: 1400733402613879005} statusUI: {fileID: 2488458570692802998} ---- !u!1 &7709810175605034872 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 501555061161187130} - - component: {fileID: 2941542102252663832} - - component: {fileID: 2986296803404415245} - m_Layer: 5 - m_Name: TurnsText - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!224 &501555061161187130 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7709810175605034872} - 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: 5364248411365301727} - 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: -61.9, y: 69.1} - m_SizeDelta: {x: 13, y: 13} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!222 &2941542102252663832 -CanvasRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7709810175605034872} - m_CullTransparentMesh: 0 ---- !u!114 &2986296803404415245 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7709810175605034872} - 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.8490566, g: 0.8490566, b: 0.8490566, 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: 11 - 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: 1 diff --git a/Assets/Battle/UI/StatusIconUI.cs b/Assets/Battle/UI/StatusIconUI.cs new file mode 100644 index 0000000..c62d045 --- /dev/null +++ b/Assets/Battle/UI/StatusIconUI.cs @@ -0,0 +1,28 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.UI; + +public class StatusIconUI : MonoBehaviour +{ + public Image backgroundImage; + public Image statusImage; + public Text turnsText; + + private BattleStatus status; + + public void Init(BattleStatus status) { + this.status = status; + Sprite sprite = Resources.Load(GetStatusResourcePath(status)); + this.statusImage.sprite = sprite; + } + + private static string GetStatusResourcePath(BattleStatus status) { + return "BattleIcons/StatusIcon" + status; + } + + public void SetAmount(int amount, int index) { + this.turnsText.text = "" + amount; + this.transform.localPosition = new Vector2(-index * 22, 0); + } +} diff --git a/Assets/Battle/UI/StatusIconUI.cs.meta b/Assets/Battle/UI/StatusIconUI.cs.meta new file mode 100644 index 0000000..42847b2 --- /dev/null +++ b/Assets/Battle/UI/StatusIconUI.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f84df067a82ee724db7f5f6d540b763a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Battle/UI/StatusIconUI.prefab b/Assets/Battle/UI/StatusIconUI.prefab new file mode 100644 index 0000000..04017cc --- /dev/null +++ b/Assets/Battle/UI/StatusIconUI.prefab @@ -0,0 +1,282 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3754972562415848510 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4281238062213505659} + - component: {fileID: 3152261815036323414} + - component: {fileID: 7136396516334039098} + m_Layer: 5 + m_Name: StatusImage + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4281238062213505659 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3754972562415848510} + 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: 4953025043275218043} + 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: -53.76, y: 60.32} + m_SizeDelta: {x: 16.522865, y: 17.07425} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3152261815036323414 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3754972562415848510} + m_CullTransparentMesh: 0 +--- !u!114 &7136396516334039098 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3754972562415848510} + 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: 0.9715784, b: 0.3160377, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 1 + m_FillCenter: 1 + m_FillMethod: 0 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &4862312622906587433 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5860468315807561554} + - component: {fileID: 5846930683640278414} + - component: {fileID: 6468669935091445453} + m_Layer: 5 + m_Name: BG + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5860468315807561554 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4862312622906587433} + 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: 4953025043275218043} + 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: -53.76, y: 60.32} + m_SizeDelta: {x: 16.523172, y: 17.074677} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5846930683640278414 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4862312622906587433} + m_CullTransparentMesh: 0 +--- !u!114 &6468669935091445453 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4862312622906587433} + 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.30588236} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: ff1a435c8e6ef4a46aeb34ba613ce13d, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 0 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &4899148264470914132 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4513950216736118280} + - component: {fileID: 2266425032839502649} + - component: {fileID: 8950700567175101678} + m_Layer: 5 + m_Name: TurnsText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4513950216736118280 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4899148264470914132} + 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: 4953025043275218043} + 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: -61.9, y: 69.1} + m_SizeDelta: {x: 13, y: 13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &2266425032839502649 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4899148264470914132} + m_CullTransparentMesh: 0 +--- !u!114 &8950700567175101678 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4899148264470914132} + 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.8490566, g: 0.8490566, b: 0.8490566, 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: 11 + 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: 1 +--- !u!1 &7853854689515474510 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4953025043275218043} + - component: {fileID: 6208964397351173773} + m_Layer: 5 + m_Name: StatusIconUI + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4953025043275218043 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7853854689515474510} + 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: 5860468315807561554} + - {fileID: 4281238062213505659} + - {fileID: 4513950216736118280} + m_Father: {fileID: 0} + 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: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &6208964397351173773 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7853854689515474510} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f84df067a82ee724db7f5f6d540b763a, type: 3} + m_Name: + m_EditorClassIdentifier: + backgroundImage: {fileID: 6468669935091445453} + statusImage: {fileID: 7136396516334039098} + turnsText: {fileID: 8950700567175101678} diff --git a/Assets/Battle/UI/StatusIconUI.prefab.meta b/Assets/Battle/UI/StatusIconUI.prefab.meta new file mode 100644 index 0000000..0af1202 --- /dev/null +++ b/Assets/Battle/UI/StatusIconUI.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8fb5f8d629dd9f446b650ae8dec722fd +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Battle/UI/StatusUI.cs b/Assets/Battle/UI/StatusUI.cs index 697b1fb..e46309d 100644 --- a/Assets/Battle/UI/StatusUI.cs +++ b/Assets/Battle/UI/StatusUI.cs @@ -1,25 +1,27 @@ -using System.Collections; +using System; +using System.Collections; using System.Collections.Generic; +using System.Linq; using UnityEngine; using UnityEngine.UI; public class StatusUI : MonoBehaviour { - public Image backgroundImage; - public Image stunImage; - public Text turnsText; + public StatusIconUI iconPrefab; private BattleParticipant battleParticipant; + private Dictionary icons; + public void Init(BattleParticipant battleParticipant) { this.battleParticipant = battleParticipant; + this.icons = new Dictionary(); this.battleParticipant.OnStatusChanged += this.NotifyBattleStatusChanged; } // Start is called before the first frame update - void Start() - { + void Start() { UpdateAppearance(); } @@ -32,16 +34,28 @@ public class StatusUI : MonoBehaviour } private void UpdateAppearance() { - int statusCount = 0; - if (battleParticipant.HasStatus(BattleStatus.Stun)) { - statusCount++; - this.stunImage.enabled = true; - this.turnsText.enabled = true; - this.turnsText.text = "" + battleParticipant.GetStatusAmount(BattleStatus.Stun); - } else { - this.stunImage.enabled = false; - this.turnsText.enabled = false; + int index = 0; + foreach (BattleStatus status in Enum.GetValues(typeof(BattleStatus)).Cast()) { + if (status == BattleStatus.None) { + continue; + } + + StatusIconUI iconUI = null; + this.icons.TryGetValue(status, out iconUI); + if (this.battleParticipant.HasStatus(status)) { + if (iconUI == null) { + iconUI = Instantiate(this.iconPrefab.gameObject, this.transform).GetComponent(); + iconUI.Init(status); + this.icons[status] = iconUI; + } + iconUI.SetAmount(this.battleParticipant.GetStatusAmount(status), index); + index++; + } else { + if (iconUI != null) { + Destroy(iconUI.gameObject); + this.icons.Remove(status); + } + } } - this.backgroundImage.enabled = (statusCount > 0); } } diff --git a/Assets/Resources/BattleIcons.meta b/Assets/Resources/BattleIcons.meta new file mode 100644 index 0000000..a493ace --- /dev/null +++ b/Assets/Resources/BattleIcons.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7d191fe76c552b94b869e5dbbe21627a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/BattleIcons/BuffIconPower.png b/Assets/Resources/BattleIcons/BuffIconPower.png new file mode 100644 index 0000000000000000000000000000000000000000..a7a0358a7a1f5d72cbf83fd68a5ff50258081063 GIT binary patch literal 26345 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