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