Elin Decompiled Documentation EA 23.356.1 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{
8 public static readonly Vector2Int standardSize = new Vector2Int(240, 320);
9
10 public static readonly Vector2Int standardFullSize = new Vector2Int(529, 838);
11
12 public static readonly SpriteLoadOption loadOption = new SpriteLoadOption
13 {
14 pivot = new Vector2(0.5f, 0f)
15 };
16
18 {
19 pivot = new Vector2(0.5f, 0f)
20 };
21
23
25
27
29
31
32 public static Dictionary<string, List<ModItem<Sprite>>> dictList = new Dictionary<string, List<ModItem<Sprite>>>();
33
34 public static HashSet<string> allIds = new HashSet<string>();
35
36 public Image portrait;
37
38 public Image overlay;
39
40 public Image imageChara;
41
42 public Image imageFaith;
43
44 public Image imageFull;
45
46 public Image imageFrame;
47
48 public Sprite spriteNoPortrait;
49
50 public bool enableFull = true;
51
52 public bool hideIfNoPortrait;
53
54 public bool fixSpritePos = true;
55
56 public bool showPortrait = true;
57
58 public float charaScale = 1f;
59
60 private bool defaultsCached;
61
63
65
66 private Vector2 defaultPivot;
67
68 private Vector2 defaultAnchoredPosition;
69
70 private Vector3 defaultScale;
71
73
74 public static bool UsePortraitAA
75 {
76 get
77 {
78 if ((bool)EClass.core && EClass.core.config != null)
79 {
81 }
82 return false;
83 }
84 }
85
86 public static bool UsePortraitFilter
87 {
88 get
89 {
90 if ((bool)EClass.core && EClass.core.config != null)
91 {
93 }
94 return false;
95 }
96 }
97
98 public static List<ModItem<Sprite>> ListPlayerPortraits(int gender, bool nullPortrait = false)
99 {
100 List<ModItem<Sprite>> list = ListPortraits(gender, "c").Concat(ListPortraits(gender, "guard")).Concat(ListPortraits(gender, "special")).Concat(ListPortraits(gender, "foxfolk"))
101 .ToList();
102 if (nullPortrait)
103 {
104 list.Insert(0, new ModItem<Sprite>(null));
105 }
106 return list;
107 }
108
109 public static List<ModItem<Sprite>> ListPortraits(string idDict)
110 {
111 List<ModItem<Sprite>> list = dictList.TryGetValue(idDict);
112 if (list == null || list.Count == 0)
113 {
114 list = new List<ModItem<Sprite>>();
116 {
117 if (item.id.Contains(idDict))
118 {
119 list.Add(item);
120 }
121 }
122 dictList.Add(idDict, list);
123 }
124 return list;
125 }
126
127 public static List<ModItem<Sprite>> ListPortraits(int gender, string cat)
128 {
129 if (cat.IsEmpty())
130 {
131 cat = "c";
132 }
133 string key = cat + gender;
134 List<ModItem<Sprite>> list = dictList.TryGetValue(key);
135 if (list == null || list.Count == 0)
136 {
137 list = new List<ModItem<Sprite>>();
139 {
140 string[] array = item.id.Split('-')[0].Split('_');
141 if (!(array[0] != cat))
142 {
143 int num = ((array.Length > 1) ? ((array[1] == "m") ? 2 : ((array[1] == "f") ? 1 : 0)) : 0);
144 if (num == 0 || gender == 0 || gender == num)
145 {
146 list.Add(item);
147 }
148 }
149 }
150 dictList.Add(key, list);
151 }
152 return list;
153 }
154
155 public static string GetRandomPortrait(string idDict)
156 {
157 return ListPortraits(idDict).RandomItem().id;
158 }
159
160 public static string GetRandomPortrait(int gender, string cat)
161 {
162 return ListPortraits(gender, cat).RandomItem().id;
163 }
164
165 public static bool Exists(string id)
166 {
167 return modPortraits.dict.ContainsKey(id);
168 }
169
170 private void CacheDefaults()
171 {
172 if (!defaultsCached && (bool)portrait)
173 {
174 defaultsCached = true;
175 RectTransform rectTransform = portrait.rectTransform;
176 defaultMaterial = portrait.material;
177 defaultColor = portrait.color;
178 defaultPivot = rectTransform.pivot;
179 defaultAnchoredPosition = rectTransform.anchoredPosition;
180 defaultScale = portrait.transform.localScale;
181 defaultPreserveAspect = portrait.preserveAspect;
182 }
183 }
184
185 private void RestoreDefaults()
186 {
187 if (defaultsCached && (bool)portrait)
188 {
189 RectTransform rectTransform = portrait.rectTransform;
190 portrait.material = defaultMaterial;
191 portrait.color = defaultColor;
192 rectTransform.pivot = defaultPivot;
193 rectTransform.anchoredPosition = defaultAnchoredPosition;
194 portrait.transform.localScale = defaultScale;
195 portrait.preserveAspect = defaultPreserveAspect;
196 }
197 }
198
199 public void SetPerson(Person p)
200 {
201 base.gameObject.SetActive(value: true);
202 if (p.hasChara && p.chara.GetIdPortrait() == p.idPortrait)
203 {
204 SetChara(p.chara);
205 }
206 else if (!p.idPortrait.IsEmpty())
207 {
209 SetPortrait(p.idPortrait, PCCManager.current.GetBodySet("female").map["hair"].GetRandomColor());
210 Rand.SetSeed();
211 }
212 else if (p.source != null)
213 {
214 SetPortrait(p.source.portrait);
215 }
216 else
217 {
218 base.gameObject.SetActive(value: false);
219 }
220 }
221
222 public void SetChara(Chara c, PCCData pccData = null)
223 {
224 portrait.enabled = true;
225 overlay.enabled = true;
226 if ((bool)imageChara)
227 {
228 imageChara.sprite = c.GetSprite();
229 imageChara.SetNativeSize();
230 if (fixSpritePos)
231 {
232 if (c.IsPCC)
233 {
234 imageChara.rectTransform.localScale = new Vector3(1.3f, 1.4f, 1f) * charaScale;
235 imageChara.rectTransform.anchoredPosition = new Vector2(-25f, 10f);
236 imageChara.rectTransform.pivot = new Vector2(0.5f, 0.3f);
237 }
238 else
239 {
240 imageChara.rectTransform.localScale = Vector3.one * charaScale;
241 imageChara.rectTransform.anchoredPosition = new Vector2(-25f, 28f);
242 imageChara.rectTransform.pivot = c.source.renderData.imagePivot;
243 SourcePref pref = c.Pref;
244 float num = imageChara.sprite.rect.height / 128f;
245 imageChara.rectTransform.localPosition += new Vector3(pref.pivotX, (float)pref.pivotY * num, 0f);
246 }
247 }
248 }
249 if ((bool)imageFaith)
250 {
251 imageFaith.sprite = c.faith.GetSprite();
252 }
253 if (c.GetIdPortrait().IsEmpty() || modPortraits.GetItem(c.GetIdPortrait(), returnNull: true) == null)
254 {
256 {
257 portrait.enabled = false;
258 overlay.enabled = false;
259 return;
260 }
261 if ((bool)spriteNoPortrait)
262 {
263 SetPortrait(isPortrait: false, spriteNoPortrait);
264 return;
265 }
266 SetPortrait(isPortrait: false, c.GetSprite());
268 portrait.transform.localScale = new Vector3(1f, 1f, 1f);
269 portrait.preserveAspect = true;
270 portrait.SetNativeSize();
271 portrait.Rect().SetAnchor(0.5f, 0f, 0.5f, 0f);
272 portrait.Rect().SetPivot(0.5f, 0f);
273 portrait.Rect().anchoredPosition = new Vector2(0f, 0f);
274 portrait.material = EClass.core.refs.matUIPortraitChara;
275 return;
276 }
277 if (pccData == null && c.isChara)
278 {
279 pccData = c.Chara.pccData;
280 }
281 Color colorOverlay = pccData?.GetHairColor(applyMod: true) ?? Color.white;
282 overlay.enabled = true;
283 if (pccData == null)
284 {
285 if (c.GetInt(105) != 0)
286 {
287 colorOverlay = IntColor.FromInt(c.GetInt(105));
288 }
289 else
290 {
291 colorOverlay = GetRandomHairColor(c);
292 if (c.id == "shojo")
293 {
294 overlay.enabled = false;
295 }
296 }
297 }
298 SetPortrait(c.GetIdPortrait(), colorOverlay);
299 }
300
302 {
303 Rand.SetSeed(c.uid);
304 Color randomColor = PCCManager.current.GetBodySet("female").map["hair"].GetRandomColor();
305 Rand.SetSeed();
306 return randomColor;
307 }
308
309 public void SetPortrait(string id, Color colorOverlay = default(Color), bool applyColorMod = true)
310 {
311 Sprite spritePortrait = modPortraits.GetItem(id).GetObject();
312 Sprite spriteOverlay = modOverlays.GetObject(id + "-overlay");
313 Sprite spriteFull = ((enableFull && (bool)imageFull) ? modFull.GetObject(id + "-full") : null);
314 if (applyColorMod)
315 {
316 colorOverlay = PCCManager.current.ApplyColorMod(colorOverlay);
317 }
318 SetPortrait(isPortrait: true, spritePortrait, spriteOverlay, colorOverlay, spriteFull);
319 }
320
321 public void SetPortrait(bool isPortrait, Sprite spritePortrait, Sprite spriteOverlay = null, Color colorOverlay = default(Color), Sprite spriteFull = null)
322 {
324 if (isPortrait)
325 {
327 }
328 bool aa = UsePortraitAA;
329 bool filter = UsePortraitFilter;
330 portrait.rectTransform.anchorMin = overlay.rectTransform.anchorMin;
331 portrait.rectTransform.anchorMax = overlay.rectTransform.anchorMax;
332 portrait.rectTransform.sizeDelta = overlay.rectTransform.sizeDelta;
333 if ((bool)spritePortrait)
334 {
335 portrait.sprite = spritePortrait;
336 FixTexture(spritePortrait);
337 }
338 if ((bool)overlay)
339 {
340 FixTexture(spriteOverlay);
341 overlay.sprite = spriteOverlay;
342 overlay.color = new Color(colorOverlay.r * 1.1f, colorOverlay.g * 1.1f, colorOverlay.b * 1.1f, colorOverlay.a);
343 overlay.SetActive(spriteOverlay);
344 }
345 if (enableFull && (bool)imageFull)
346 {
347 FixTexture(spriteFull);
348 imageFull.sprite = spriteFull;
349 base.gameObject.SetActive(!spriteFull);
350 imageFull.SetActive(spriteFull);
351 }
352 if (!showPortrait)
353 {
354 portrait.SetActive(enable: false);
355 overlay.SetActive(enable: false);
356 }
357 void FixTexture(Sprite s)
358 {
359 if ((bool)s && isPortrait)
360 {
361 Texture2D texture = s.texture;
362 texture.wrapMode = TextureWrapMode.Clamp;
363 FilterMode filterMode = ((filter && texture.mipmapCount > 1) ? FilterMode.Trilinear : (aa ? FilterMode.Bilinear : FilterMode.Point));
364 if (texture.filterMode != filterMode)
365 {
366 texture.filterMode = filterMode;
367 }
368 }
369 }
370 }
371}
virtual Chara Chara
Definition: Card.cs:2122
string id
Definition: Card.cs:36
int uid
Definition: Card.cs:125
void SetImage(Image image, int dir, int idSkin=0)
Definition: Card.cs:6586
int GetInt(string id, int? defaultInt=null)
Definition: Card.cs:2567
Definition: Chara.cs:10
override SourcePref Pref
Definition: Chara.cs:807
override Sprite GetSprite(int dir=0)
Definition: Chara.cs:7119
override bool isChara
Definition: Chara.cs:706
SourceChara.Row source
Definition: Chara.cs:164
Religion faith
Definition: Chara.cs:445
string GetIdPortrait()
Definition: Chara.cs:8702
PCCData pccData
Definition: Chara.cs:69
override bool IsPCC
Definition: Chara.cs:702
bool aaPortraitFilter
Definition: CoreConfig.cs:552
Material matUIPortraitChara
Definition: CoreRef.cs:410
CoreRef refs
Definition: Core.cs:51
CoreConfig config
Definition: Core.cs:70
Definition: EClass.cs:6
static Core core
Definition: EClass.cs:7
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:83
Dictionary< string, ModItem< T > > dict
Definition: ModItemList.cs:11
ModItem< T > GetItem(string id, bool returnNull=false)
Definition: ModItemList.cs:69
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
Vector3 defaultScale
Definition: Portrait.cs:70
Image imageFrame
Definition: Portrait.cs:46
static readonly SpriteLoadOption loadOption
Definition: Portrait.cs:12
static ModItemList< Sprite > modPortraitBGFs
Definition: Portrait.cs:22
bool defaultsCached
Definition: Portrait.cs:60
static readonly Vector2Int standardFullSize
Definition: Portrait.cs:10
void SetPerson(Person p)
Definition: Portrait.cs:199
static List< ModItem< Sprite > > ListPortraits(string idDict)
Definition: Portrait.cs:109
static readonly Vector2Int standardSize
Definition: Portrait.cs:8
static string GetRandomPortrait(int gender, string cat)
Definition: Portrait.cs:160
static ModItemList< Sprite > modPortraitBGs
Definition: Portrait.cs:24
Sprite spriteNoPortrait
Definition: Portrait.cs:48
Vector2 defaultAnchoredPosition
Definition: Portrait.cs:68
void SetPortrait(bool isPortrait, Sprite spritePortrait, Sprite spriteOverlay=null, Color colorOverlay=default(Color), Sprite spriteFull=null)
Definition: Portrait.cs:321
static string GetRandomPortrait(string idDict)
Definition: Portrait.cs:155
bool fixSpritePos
Definition: Portrait.cs:54
void SetPortrait(string id, Color colorOverlay=default(Color), bool applyColorMod=true)
Definition: Portrait.cs:309
Color GetRandomHairColor(Chara c)
Definition: Portrait.cs:301
static bool Exists(string id)
Definition: Portrait.cs:165
static List< ModItem< Sprite > > ListPlayerPortraits(int gender, bool nullPortrait=false)
Definition: Portrait.cs:98
static Dictionary< string, List< ModItem< Sprite > > > dictList
Definition: Portrait.cs:32
Image imageFaith
Definition: Portrait.cs:42
Color defaultColor
Definition: Portrait.cs:64
void CacheDefaults()
Definition: Portrait.cs:170
Image portrait
Definition: Portrait.cs:36
bool showPortrait
Definition: Portrait.cs:56
bool hideIfNoPortrait
Definition: Portrait.cs:52
static bool UsePortraitFilter
Definition: Portrait.cs:87
static ModItemList< Sprite > modOverlays
Definition: Portrait.cs:28
static ModItemList< Sprite > modPortraits
Definition: Portrait.cs:26
static HashSet< string > allIds
Definition: Portrait.cs:34
void SetChara(Chara c, PCCData pccData=null)
Definition: Portrait.cs:222
static List< ModItem< Sprite > > ListPortraits(int gender, string cat)
Definition: Portrait.cs:127
Image imageChara
Definition: Portrait.cs:40
static readonly SpriteLoadOption loadOptionFull
Definition: Portrait.cs:17
Material defaultMaterial
Definition: Portrait.cs:62
float charaScale
Definition: Portrait.cs:58
static ModItemList< Sprite > modFull
Definition: Portrait.cs:30
void RestoreDefaults()
Definition: Portrait.cs:185
bool defaultPreserveAspect
Definition: Portrait.cs:72
static bool UsePortraitAA
Definition: Portrait.cs:75
Image imageFull
Definition: Portrait.cs:44
bool enableFull
Definition: Portrait.cs:50
Image overlay
Definition: Portrait.cs:38
Vector2 defaultPivot
Definition: Portrait.cs:66
Definition: Rand.cs:4
static void SetSeed(int a=-1)
Definition: Rand.cs:44
virtual Sprite GetSprite()
Definition: Religion.cs:93
Item item
Definition: UIButton.cs:172