-
Notifications
You must be signed in to change notification settings - Fork 83
/
Copy pathCharacterModal.cs
95 lines (80 loc) · 3.15 KB
/
CharacterModal.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityScreenNavigator.Runtime.Core.Modal;
using UnityScreenNavigator.Runtime.Core.Sheet;
using UnityScreenNavigator.Runtime.Foundation.Coroutine;
namespace Demo.Scripts
{
public class CharacterModal : Modal
{
private const int ImageCount = 3;
[SerializeField] private SheetContainer _imageContainer;
[SerializeField] private CharacterModalThumbnailGrid thumbnailGrid;
[SerializeField] private Button _expandButton;
public RectTransform CharacterImageRectTransform => (RectTransform)_imageContainer.transform;
private readonly (int sheetId, CharacterModalImageSheet sheet)[] _imageSheets =
new (int sheetId, CharacterModalImageSheet sheet)[ImageCount];
private int _characterId;
private int _selectedRank;
public void Setup(int characterId)
{
_characterId = characterId;
}
public override IEnumerator Initialize()
{
var imageSheetHandles = new List<AsyncProcessHandle>();
for (var i = 0; i < ImageCount; i++)
{
var index = i;
var handle = _imageContainer.Register(ResourceKey.CharacterModalImageSheetPrefab(), x =>
{
_imageSheets[index] = (x.sheetId, (CharacterModalImageSheet) x.instance);
});
imageSheetHandles.Add(handle);
}
foreach (var handle in imageSheetHandles) yield return handle;
_expandButton.onClick.AddListener(OnExpandButtonClicked);
}
public override IEnumerator WillPushEnter()
{
for (var i = 0; i < ImageCount; i++)
{
_imageSheets[i].sheet.Setup(_characterId, i + 1);
}
yield return _imageContainer.Show(_imageSheets[0].sheetId, false);
_selectedRank = 1;
thumbnailGrid.Setup(_characterId);
thumbnailGrid.ThumbnailClicked += x =>
{
if (_imageContainer.IsInTransition)
{
return;
}
var targetSheet = _imageSheets[x];
if (_imageContainer.ActiveSheet.Equals(targetSheet.sheet))
{
return;
}
var sheetId = targetSheet.sheetId;
_imageContainer.Show(sheetId, true);
_selectedRank = x + 1;
};
}
public override IEnumerator Cleanup()
{
_expandButton.onClick.RemoveListener(OnExpandButtonClicked);
yield break;
}
private void OnExpandButtonClicked()
{
ModalContainer.Find(ContainerKey.MainModalContainer)
.Push(ResourceKey.CharacterImageModalPrefab(), true, modal =>
{
var characterImageModal = (CharacterImageModal) modal;
characterImageModal.Setup(_characterId, _selectedRank);
});
}
}
}