Implement drafted new UI.
This commit is contained in:
@@ -1,10 +1,11 @@
|
|||||||
using Cryville.Common.Unity;
|
using Cryville.Common.Unity;
|
||||||
using TMPro;
|
using TMPro;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
using UnityEngine.EventSystems;
|
||||||
using UnityEngine.UI;
|
using UnityEngine.UI;
|
||||||
|
|
||||||
namespace Cryville.Crtr.Browsing.UI {
|
namespace Cryville.Crtr.Browsing.UI {
|
||||||
internal class BrowserItemTile : BrowserItem {
|
internal class BrowserItemTile : BrowserItem, IPointerClickHandler {
|
||||||
#pragma warning disable IDE0044
|
#pragma warning disable IDE0044
|
||||||
[SerializeField]
|
[SerializeField]
|
||||||
private Sprite m_iconPlaceholder;
|
private Sprite m_iconPlaceholder;
|
||||||
@@ -55,6 +56,9 @@ namespace Cryville.Crtr.Browsing.UI {
|
|||||||
if (_dir) resourceBrowser.OnDirectoryItemClicked(Id.Value);
|
if (_dir) resourceBrowser.OnDirectoryItemClicked(Id.Value);
|
||||||
else resourceBrowser.OnObjectItemClicked(Id.Value);
|
else resourceBrowser.OnObjectItemClicked(Id.Value);
|
||||||
}
|
}
|
||||||
|
public void OnPointerClick(PointerEventData eventData) {
|
||||||
|
OnClick();
|
||||||
|
}
|
||||||
internal override void OnSelect() {
|
internal override void OnSelect() {
|
||||||
base.OnSelect();
|
base.OnSelect();
|
||||||
_tweener.EnterState("Selected", 0.1f);
|
_tweener.EnterState("Selected", 0.1f);
|
||||||
|
|||||||
37
Assets/Cryville/Crtr/Browsing/UI/BrowserTab.cs
Normal file
37
Assets/Cryville/Crtr/Browsing/UI/BrowserTab.cs
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.EventSystems;
|
||||||
|
|
||||||
|
namespace Cryville.Crtr.Browsing.UI {
|
||||||
|
[RequireComponent(typeof(BrowserTabLayout))]
|
||||||
|
[RequireComponent(typeof(CanvasGroup))]
|
||||||
|
internal class BrowserTab : MonoBehaviour, IPointerClickHandler {
|
||||||
|
[SerializeField]
|
||||||
|
float m_deselectedAlpha = 0.6f;
|
||||||
|
|
||||||
|
bool m_selected;
|
||||||
|
public bool Selected {
|
||||||
|
get { return m_selected; }
|
||||||
|
set {
|
||||||
|
if (m_selected == value) return;
|
||||||
|
m_selected = value;
|
||||||
|
UpdateSelected();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void UpdateSelected() {
|
||||||
|
_group.alpha = Selected ? 1 : m_deselectedAlpha;
|
||||||
|
_layout.Selected = Selected;
|
||||||
|
}
|
||||||
|
|
||||||
|
CanvasGroup _group;
|
||||||
|
BrowserTabLayout _layout;
|
||||||
|
void Awake() {
|
||||||
|
_group = GetComponent<CanvasGroup>();
|
||||||
|
_layout = GetComponent<BrowserTabLayout>();
|
||||||
|
UpdateSelected();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnPointerClick(PointerEventData eventData) {
|
||||||
|
throw new System.NotImplementedException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
11
Assets/Cryville/Crtr/Browsing/UI/BrowserTab.cs.meta
Normal file
11
Assets/Cryville/Crtr/Browsing/UI/BrowserTab.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 62b498b3519eb364cb6683512b28400a
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
100
Assets/Cryville/Crtr/Browsing/UI/BrowserTabLayout.cs
Normal file
100
Assets/Cryville/Crtr/Browsing/UI/BrowserTabLayout.cs
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
using Cryville.Common;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.EventSystems;
|
||||||
|
using UnityEngine.UI;
|
||||||
|
|
||||||
|
namespace Cryville.Crtr.Browsing.UI {
|
||||||
|
[ExecuteAlways]
|
||||||
|
internal class BrowserTabLayout : UIBehaviour, ILayoutElement {
|
||||||
|
[SerializeField]
|
||||||
|
float m_minWidth = 150;
|
||||||
|
public float MinWidth {
|
||||||
|
get { return m_minWidth; }
|
||||||
|
set {
|
||||||
|
if (m_minWidth == value) return;
|
||||||
|
m_minWidth = value;
|
||||||
|
UpdateTweener();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
float m_layoutMinWidth = -1;
|
||||||
|
float ILayoutElement.minWidth { get { return m_layoutMinWidth; } }
|
||||||
|
void UpdateLayoutMinWidth(float value) {
|
||||||
|
if (m_layoutMinWidth == value) return;
|
||||||
|
m_layoutMinWidth = value;
|
||||||
|
SetDirty();
|
||||||
|
}
|
||||||
|
|
||||||
|
public float preferredWidth { get { return -1; } }
|
||||||
|
public float flexibleWidth { get { return -1; } }
|
||||||
|
public float minHeight { get { return -1; } }
|
||||||
|
public float preferredHeight { get { return -1; } }
|
||||||
|
public float flexibleHeight { get { return -1; } }
|
||||||
|
public int layoutPriority { get { return 1; } }
|
||||||
|
|
||||||
|
bool m_selected;
|
||||||
|
public bool Selected {
|
||||||
|
get { return m_selected; }
|
||||||
|
set {
|
||||||
|
if (m_selected == value) return;
|
||||||
|
m_selected = value;
|
||||||
|
UpdateTweener();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
float m_tweenDuration = 0.2f;
|
||||||
|
|
||||||
|
PropertyTweener<float> _tweener;
|
||||||
|
void UpdateTweener() {
|
||||||
|
var width = MinWidth;
|
||||||
|
if (Selected) {
|
||||||
|
var preferredWidth = LayoutUtility.GetPreferredWidth(transform as RectTransform);
|
||||||
|
if (preferredWidth > width) width = preferredWidth;
|
||||||
|
}
|
||||||
|
_tweener.Start(width, m_tweenDuration);
|
||||||
|
}
|
||||||
|
void Update() {
|
||||||
|
_tweener.Advance(Time.deltaTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void CalculateLayoutInputHorizontal() { }
|
||||||
|
public void CalculateLayoutInputVertical() { }
|
||||||
|
|
||||||
|
protected override void OnEnable() {
|
||||||
|
base.OnEnable();
|
||||||
|
m_layoutMinWidth = Selected ? -1 : MinWidth;
|
||||||
|
if (_tweener == null)
|
||||||
|
_tweener = new PropertyTweener<float>(
|
||||||
|
() => m_layoutMinWidth,
|
||||||
|
v => UpdateLayoutMinWidth(v),
|
||||||
|
Tweeners.Float.With(EasingFunctions.OutQuad)
|
||||||
|
);
|
||||||
|
SetDirty();
|
||||||
|
}
|
||||||
|
protected override void OnBeforeTransformParentChanged() {
|
||||||
|
base.OnBeforeTransformParentChanged();
|
||||||
|
SetDirty();
|
||||||
|
}
|
||||||
|
protected override void OnTransformParentChanged() {
|
||||||
|
base.OnTransformParentChanged();
|
||||||
|
SetDirty();
|
||||||
|
}
|
||||||
|
protected override void OnDidApplyAnimationProperties() {
|
||||||
|
base.OnDidApplyAnimationProperties();
|
||||||
|
SetDirty();
|
||||||
|
}
|
||||||
|
protected override void OnValidate() {
|
||||||
|
base.OnValidate();
|
||||||
|
SetDirty();
|
||||||
|
}
|
||||||
|
protected override void OnDisable() {
|
||||||
|
SetDirty();
|
||||||
|
base.OnDisable();
|
||||||
|
}
|
||||||
|
void SetDirty() {
|
||||||
|
if (!IsActive()) return;
|
||||||
|
LayoutRebuilder.MarkLayoutForRebuild(transform as RectTransform);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
11
Assets/Cryville/Crtr/Browsing/UI/BrowserTabLayout.cs.meta
Normal file
11
Assets/Cryville/Crtr/Browsing/UI/BrowserTabLayout.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 5160f264c834b9c4dbe5875accab32a8
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
8
Assets/Interface2/Prefabs.meta
Normal file
8
Assets/Interface2/Prefabs.meta
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 86798d0d653b3c445bd6710db6f096dc
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
857
Assets/Interface2/Prefabs/BrowserItemTile.prefab
Normal file
857
Assets/Interface2/Prefabs/BrowserItemTile.prefab
Normal file
File diff suppressed because it is too large
Load Diff
7
Assets/Interface2/Prefabs/BrowserItemTile.prefab.meta
Normal file
7
Assets/Interface2/Prefabs/BrowserItemTile.prefab.meta
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 1fbeb6cee78edd047bfb26eb7fcf5f9d
|
||||||
|
PrefabImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
795
Assets/Interface2/Prefabs/BrowserItemTileCompact.prefab
Normal file
795
Assets/Interface2/Prefabs/BrowserItemTileCompact.prefab
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: ae4e46d7f4fddfe44b2e8d85e916d849
|
||||||
|
PrefabImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
602
Assets/Interface2/Prefabs/Tab.prefab
Normal file
602
Assets/Interface2/Prefabs/Tab.prefab
Normal file
File diff suppressed because it is too large
Load Diff
7
Assets/Interface2/Prefabs/Tab.prefab.meta
Normal file
7
Assets/Interface2/Prefabs/Tab.prefab.meta
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 21929f2cd75aeaf4190f37571e8e5ff0
|
||||||
|
PrefabImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
5810
Assets/Menu2.unity
Normal file
5810
Assets/Menu2.unity
Normal file
File diff suppressed because it is too large
Load Diff
7
Assets/Menu2.unity.meta
Normal file
7
Assets/Menu2.unity.meta
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 8faede2bfb948df41a757b5bc48d1b46
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
Reference in New Issue
Block a user