Elin Decompiled Documentation EA 23.102 Nightly
Loading...
Searching...
No Matches
Portrait.cs
Go to the documentation of this file.
1using System.Collections.Generic;
2using System.Linq;
3using UnityEngine;
4using UnityEngine.UI;
5
6public class Portrait : UIButton
7{
9
11
13
15
17
18 public static Dictionary<string, List<ModItem<Sprite>>> dictList = new Dictionary<string, List<ModItem<Sprite>>>();
19
20 public static HashSet<string> allIds = new HashSet<string>();
21
22 public Image portrait;
23
24 public Image overlay;
25
26 public Image imageChara;
27
28 public Image imageFaith;
29
30 public Image imageFull;
31
32 public Image imageFrame;
33
34 public Sprite spriteNoPortrait;
35
36 public bool enableFull = true;
37
38 public bool hideIfNoPortrait;
39
40 public bool fixSpritePos = true;
41
42 public bool showPortrait = true;
43
44 public float charaScale = 1f;
45
46 private FilterMode filter;
47
48 public static List<ModItem<Sprite>> ListPlayerPortraits(int gender, bool nullPortrait = false)
49 {
50 List<ModItem<Sprite>> list = ListPortraits(gender, "c").Concat(ListPortraits(gender, "guard")).Concat(ListPortraits(gender, "special")).Concat(ListPortraits(gender, "foxfolk"))
51 .ToList();
52 if (nullPortrait)
53 {
54 list.Insert(0, new ModItem<Sprite>(null));
55 }
56 return list;
57 }
58
59 public static List<ModItem<Sprite>> ListPortraits(string idDict)
60 {
61 List<ModItem<Sprite>> list = dictList.TryGetValue(idDict);
62 if (list == null || list.Count == 0)
63 {
64 list = new List<ModItem<Sprite>>();
66 {
67 if (item.id.Contains(idDict))
68 {
69 list.Add(item);
70 }
71 }
72 dictList.Add(idDict, list);
73 }
74 return list;
75 }
76
77 public static List<ModItem<Sprite>> ListPortraits(int gender, string cat)
78 {
79 if (cat.IsEmpty())
80 {
81 cat = "c";
82 }
83 string key = cat + gender;
84 List<ModItem<Sprite>> list = dictList.TryGetValue(key);
85 if (list == null || list.Count == 0)
86 {
87 list = new List<ModItem<Sprite>>();
89 {
90 string[] array = item.id.Split('-')[0].Split('_');
91 if (!(array[0] != cat))
92 {
93 int num = ((array.Length > 1) ? ((array[1] == "m") ? 2 : ((array[1] == "f") ? 1 : 0)) : 0);
94 if (num == 0 || gender == 0 || gender == num)
95 {
96 list.Add(item);
97 }
98 }
99 }
100 dictList.Add(key, list);
101 }
102 return list;
103 }
104
105 public static string GetRandomPortrait(string idDict)
106 {
107 return ListPortraits(idDict).RandomItem().id;
108 }
109
110 public static string GetRandomPortrait(int gender, string cat)
111 {
112 return ListPortraits(gender, cat).RandomItem().id;
113 }
114
115 public static bool Exists(string id)
116 {
117 return modPortraits.dict.ContainsKey(id);
118 }
119
120 public void SetPerson(Person p)
121 {
122 if (p.hasChara)
123 {
124 SetChara(p.chara);
125 }
126 else if (!p.idPortrait.IsEmpty())
127 {
129 SetPortrait(p.idPortrait, PCCManager.current.GetBodySet("female").map["hair"].GetRandomColor());
130 Rand.SetSeed();
131 }
132 else
133 {
134 SetPortrait(p.source.portrait);
135 }
136 }
137
138 public void SetChara(Chara c, PCCData pccData = null)
139 {
140 portrait.enabled = true;
141 overlay.enabled = true;
142 if ((bool)imageChara)
143 {
144 imageChara.sprite = c.GetSprite();
145 imageChara.SetNativeSize();
146 if (fixSpritePos)
147 {
148 imageChara.transform.localScale = (c.IsPCC ? new Vector3(1.3f, 1.4f, 1f) : new Vector3(1f, 1f, 1f)) * charaScale;
149 imageChara.rectTransform.pivot = (c.IsPCC ? new Vector2(0.5f, 0.4f) : new Vector2(0.5f, 0.2f));
150 imageChara.rectTransform.anchoredPosition = (c.IsPCC ? new Vector2(-25f, 20f) : new Vector2(-25f, 20f));
151 }
152 }
153 if ((bool)imageFaith)
154 {
155 imageFaith.sprite = c.faith.GetSprite();
156 }
157 if (c.GetIdPortrait().IsEmpty() || modPortraits.GetItem(c.GetIdPortrait(), returnNull: true) == null)
158 {
160 {
161 portrait.enabled = false;
162 overlay.enabled = false;
163 return;
164 }
165 if ((bool)spriteNoPortrait)
166 {
167 SetPortrait(isPortrait: false, spriteNoPortrait);
168 return;
169 }
170 SetPortrait(isPortrait: false, c.GetSprite());
172 portrait.transform.localScale = new Vector3(1f, 1f, 1f);
173 portrait.preserveAspect = true;
174 portrait.SetNativeSize();
175 portrait.Rect().SetAnchor(0.5f, 0f, 0.5f, 0f);
176 portrait.Rect().SetPivot(0.5f, 0f);
177 portrait.Rect().anchoredPosition = new Vector2(0f, 0f);
178 portrait.material = EClass.core.refs.matUIPortraitChara;
179 return;
180 }
181 if (pccData == null && c.isChara)
182 {
183 pccData = c.Chara.pccData;
184 }
185 Color colorOverlay = pccData?.GetHairColor(applyMod: true) ?? Color.white;
186 overlay.enabled = true;
187 if (pccData == null)
188 {
189 if (c.GetInt(105) != 0)
190 {
191 colorOverlay = IntColor.FromInt(c.GetInt(105));
192 }
193 else
194 {
195 colorOverlay = GetRandomHairColor(c);
196 if (c.id == "shojo")
197 {
198 overlay.enabled = false;
199 }
200 }
201 }
202 SetPortrait(c.GetIdPortrait(), colorOverlay);
203 }
204
206 {
207 Rand.SetSeed(c.uid);
208 Color randomColor = PCCManager.current.GetBodySet("female").map["hair"].GetRandomColor();
209 Rand.SetSeed();
210 return randomColor;
211 }
212
213 public void SetPortrait(string id, Color colorOverlay = default(Color), bool applyColorMod = true)
214 {
215 Sprite @object = modPortraits.GetItem(id).GetObject();
216 Sprite object2 = modOverlays.GetObject(id + "-overlay");
217 Sprite spriteFull = ((enableFull && (bool)imageFull) ? modFull.GetObject(id + "-full") : null);
218 if (applyColorMod)
219 {
220 colorOverlay = PCCManager.current.ApplyColorMod(colorOverlay);
221 }
222 SetPortrait(isPortrait: true, @object, object2, colorOverlay, spriteFull);
223 }
224
225 public void SetPortrait(bool isPortrait, Sprite spritePortrait, Sprite spriteOverlay = null, Color colorOverlay = default(Color), Sprite spriteFull = null)
226 {
227 filter = ((isPortrait && Core.Instance.config.test.aaPortrait) ? FilterMode.Bilinear : FilterMode.Point);
228 portrait.rectTransform.anchorMin = overlay.rectTransform.anchorMin;
229 portrait.rectTransform.anchorMax = overlay.rectTransform.anchorMax;
230 portrait.rectTransform.sizeDelta = overlay.rectTransform.sizeDelta;
231 if ((bool)spritePortrait)
232 {
233 portrait.sprite = spritePortrait;
234 FixTexture(spritePortrait);
235 }
236 if ((bool)overlay)
237 {
238 FixTexture(spriteOverlay);
239 overlay.sprite = spriteOverlay;
240 overlay.color = new Color(colorOverlay.r * 1.1f, colorOverlay.g * 1.1f, colorOverlay.b * 1.1f, colorOverlay.a);
241 overlay.SetActive(spriteOverlay);
242 }
243 if (enableFull && (bool)imageFull)
244 {
245 FixTexture(spriteFull);
246 imageFull.sprite = spriteFull;
247 base.gameObject.SetActive(!spriteFull);
248 imageFull.SetActive(spriteFull);
249 }
250 if (!showPortrait)
251 {
252 portrait.SetActive(enable: false);
253 overlay.SetActive(enable: false);
254 }
255 void FixTexture(Sprite s)
256 {
257 if ((bool)s && isPortrait)
258 {
259 s.texture.wrapMode = TextureWrapMode.Clamp;
260 if (s.texture.filterMode != filter)
261 {
262 s.texture.filterMode = filter;
263 }
264 }
265 }
266 }
267}
int GetInt(int id, int? defaultInt=null)
Definition: BaseCard.cs:25
virtual Chara Chara
Definition: Card.cs:1946
string id
Definition: Card.cs:31
int uid
Definition: Card.cs:118
void SetImage(Image image, int dir, int idSkin=0)
Definition: Card.cs:5355
Definition: Chara.cs:10
override Sprite GetSprite(int dir=0)
Definition: Chara.cs:6046
override bool isChara
Definition: Chara.cs:671
Religion faith
Definition: Chara.cs:424
string GetIdPortrait()
Definition: Chara.cs:7334
PCCData pccData
Definition: Chara.cs:64
Material matUIPortraitChara
Definition: CoreRef.cs:391
Definition: Core.cs:14
CoreRef refs
Definition: Core.cs:51
static new Core Instance
Definition: Core.cs:15
CoreConfig config
Definition: Core.cs:70
Definition: EClass.cs:5
static Core core
Definition: EClass.cs:6
static Color32 FromInt(int i)
Definition: IntColor.cs:15
List< ModItem< T > > list
Definition: ModItemList.cs:9
T GetObject(string id, object option=null)
Definition: ModItemList.cs:75
Dictionary< string, ModItem< T > > dict
Definition: ModItemList.cs:11
ModItem< T > GetItem(string id, bool returnNull=false)
Definition: ModItemList.cs:61
Definition: Person.cs:6
SourcePerson.Row source
Definition: Person.cs:34
string idPortrait
Definition: Person.cs:11
bool hasChara
Definition: Person.cs:38
int uidChara
Definition: Person.cs:20
Chara chara
Definition: Person.cs:36
Image imageFrame
Definition: Portrait.cs:32
static ModItemList< Sprite > modPortraitBGFs
Definition: Portrait.cs:8
void SetPerson(Person p)
Definition: Portrait.cs:120
static List< ModItem< Sprite > > ListPortraits(string idDict)
Definition: Portrait.cs:59
static string GetRandomPortrait(int gender, string cat)
Definition: Portrait.cs:110
static ModItemList< Sprite > modPortraitBGs
Definition: Portrait.cs:10
Sprite spriteNoPortrait
Definition: Portrait.cs:34
void SetPortrait(bool isPortrait, Sprite spritePortrait, Sprite spriteOverlay=null, Color colorOverlay=default(Color), Sprite spriteFull=null)
Definition: Portrait.cs:225
static string GetRandomPortrait(string idDict)
Definition: Portrait.cs:105
bool fixSpritePos
Definition: Portrait.cs:40
void SetPortrait(string id, Color colorOverlay=default(Color), bool applyColorMod=true)
Definition: Portrait.cs:213
Color GetRandomHairColor(Chara c)
Definition: Portrait.cs:205
static bool Exists(string id)
Definition: Portrait.cs:115
static List< ModItem< Sprite > > ListPlayerPortraits(int gender, bool nullPortrait=false)
Definition: Portrait.cs:48
static Dictionary< string, List< ModItem< Sprite > > > dictList
Definition: Portrait.cs:18
Image imageFaith
Definition: Portrait.cs:28
Image portrait
Definition: Portrait.cs:22
bool showPortrait
Definition: Portrait.cs:42
bool hideIfNoPortrait
Definition: Portrait.cs:38
FilterMode filter
Definition: Portrait.cs:46
static ModItemList< Sprite > modOverlays
Definition: Portrait.cs:14
static ModItemList< Sprite > modPortraits
Definition: Portrait.cs:12
static HashSet< string > allIds
Definition: Portrait.cs:20
void SetChara(Chara c, PCCData pccData=null)
Definition: Portrait.cs:138
static List< ModItem< Sprite > > ListPortraits(int gender, string cat)
Definition: Portrait.cs:77
Image imageChara
Definition: Portrait.cs:26
float charaScale
Definition: Portrait.cs:44
static ModItemList< Sprite > modFull
Definition: Portrait.cs:16
Image imageFull
Definition: Portrait.cs:30
bool enableFull
Definition: Portrait.cs:36
Image overlay
Definition: Portrait.cs:24
Definition: Rand.cs:4
static void SetSeed(int a=-1)
Definition: Rand.cs:37
Sprite GetSprite()
Definition: Religion.cs:72
Item item
Definition: UIButton.cs:172