Elin Decompiled Documentation EA 23.286 Nightly Patch 1
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 base.gameObject.SetActive(value: true);
123 if (p.hasChara)
124 {
125 SetChara(p.chara);
126 }
127 else if (!p.idPortrait.IsEmpty())
128 {
130 SetPortrait(p.idPortrait, PCCManager.current.GetBodySet("female").map["hair"].GetRandomColor());
131 Rand.SetSeed();
132 }
133 else if (p.source != null)
134 {
135 SetPortrait(p.source.portrait);
136 }
137 else
138 {
139 base.gameObject.SetActive(value: false);
140 }
141 }
142
143 public void SetChara(Chara c, PCCData pccData = null)
144 {
145 portrait.enabled = true;
146 overlay.enabled = true;
147 if ((bool)imageChara)
148 {
149 imageChara.sprite = c.GetSprite();
150 imageChara.SetNativeSize();
151 if (fixSpritePos)
152 {
153 imageChara.transform.localScale = (c.IsPCC ? new Vector3(1.3f, 1.4f, 1f) : new Vector3(1f, 1f, 1f)) * charaScale;
154 imageChara.rectTransform.pivot = (c.IsPCC ? new Vector2(0.5f, 0.3f) : new Vector2(0.5f, 0.2f));
155 imageChara.rectTransform.anchoredPosition = (c.IsPCC ? new Vector2(-25f, 20f) : new Vector2(-25f, 20f));
156 }
157 }
158 if ((bool)imageFaith)
159 {
160 imageFaith.sprite = c.faith.GetSprite();
161 }
162 if (c.GetIdPortrait().IsEmpty() || modPortraits.GetItem(c.GetIdPortrait(), returnNull: true) == null)
163 {
165 {
166 portrait.enabled = false;
167 overlay.enabled = false;
168 return;
169 }
170 if ((bool)spriteNoPortrait)
171 {
172 SetPortrait(isPortrait: false, spriteNoPortrait);
173 return;
174 }
175 SetPortrait(isPortrait: false, c.GetSprite());
177 portrait.transform.localScale = new Vector3(1f, 1f, 1f);
178 portrait.preserveAspect = true;
179 portrait.SetNativeSize();
180 portrait.Rect().SetAnchor(0.5f, 0f, 0.5f, 0f);
181 portrait.Rect().SetPivot(0.5f, 0f);
182 portrait.Rect().anchoredPosition = new Vector2(0f, 0f);
183 portrait.material = EClass.core.refs.matUIPortraitChara;
184 return;
185 }
186 if (pccData == null && c.isChara)
187 {
188 pccData = c.Chara.pccData;
189 }
190 Color colorOverlay = pccData?.GetHairColor(applyMod: true) ?? Color.white;
191 overlay.enabled = true;
192 if (pccData == null)
193 {
194 if (c.GetInt(105) != 0)
195 {
196 colorOverlay = IntColor.FromInt(c.GetInt(105));
197 }
198 else
199 {
200 colorOverlay = GetRandomHairColor(c);
201 if (c.id == "shojo")
202 {
203 overlay.enabled = false;
204 }
205 }
206 }
207 SetPortrait(c.GetIdPortrait(), colorOverlay);
208 }
209
211 {
212 Rand.SetSeed(c.uid);
213 Color randomColor = PCCManager.current.GetBodySet("female").map["hair"].GetRandomColor();
214 Rand.SetSeed();
215 return randomColor;
216 }
217
218 public void SetPortrait(string id, Color colorOverlay = default(Color), bool applyColorMod = true)
219 {
220 Sprite @object = modPortraits.GetItem(id).GetObject();
221 Sprite object2 = modOverlays.GetObject(id + "-overlay");
222 Sprite spriteFull = ((enableFull && (bool)imageFull) ? modFull.GetObject(id + "-full") : null);
223 if (applyColorMod)
224 {
225 colorOverlay = PCCManager.current.ApplyColorMod(colorOverlay);
226 }
227 SetPortrait(isPortrait: true, @object, object2, colorOverlay, spriteFull);
228 }
229
230 public void SetPortrait(bool isPortrait, Sprite spritePortrait, Sprite spriteOverlay = null, Color colorOverlay = default(Color), Sprite spriteFull = null)
231 {
232 filter = ((isPortrait && Core.Instance.config.test.aaPortrait) ? FilterMode.Bilinear : FilterMode.Point);
233 portrait.rectTransform.anchorMin = overlay.rectTransform.anchorMin;
234 portrait.rectTransform.anchorMax = overlay.rectTransform.anchorMax;
235 portrait.rectTransform.sizeDelta = overlay.rectTransform.sizeDelta;
236 if ((bool)spritePortrait)
237 {
238 portrait.sprite = spritePortrait;
239 FixTexture(spritePortrait);
240 }
241 if ((bool)overlay)
242 {
243 FixTexture(spriteOverlay);
244 overlay.sprite = spriteOverlay;
245 overlay.color = new Color(colorOverlay.r * 1.1f, colorOverlay.g * 1.1f, colorOverlay.b * 1.1f, colorOverlay.a);
246 overlay.SetActive(spriteOverlay);
247 }
248 if (enableFull && (bool)imageFull)
249 {
250 FixTexture(spriteFull);
251 imageFull.sprite = spriteFull;
252 base.gameObject.SetActive(!spriteFull);
253 imageFull.SetActive(spriteFull);
254 }
255 if (!showPortrait)
256 {
257 portrait.SetActive(enable: false);
258 overlay.SetActive(enable: false);
259 }
260 void FixTexture(Sprite s)
261 {
262 if ((bool)s && isPortrait)
263 {
264 s.texture.wrapMode = TextureWrapMode.Clamp;
265 if (s.texture.filterMode != filter)
266 {
267 s.texture.filterMode = filter;
268 }
269 }
270 }
271 }
272}
int GetInt(int id, int? defaultInt=null)
Definition: BaseCard.cs:25
virtual Chara Chara
Definition: Card.cs:2108
string id
Definition: Card.cs:36
int uid
Definition: Card.cs:123
void SetImage(Image image, int dir, int idSkin=0)
Definition: Card.cs:6316
Definition: Chara.cs:10
override Sprite GetSprite(int dir=0)
Definition: Chara.cs:6835
override bool isChara
Definition: Chara.cs:700
Religion faith
Definition: Chara.cs:441
string GetIdPortrait()
Definition: Chara.cs:8339
PCCData pccData
Definition: Chara.cs:67
Material matUIPortraitChara
Definition: CoreRef.cs:407
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
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:230
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:218
Color GetRandomHairColor(Chara c)
Definition: Portrait.cs:210
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:143
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:44
Sprite GetSprite()
Definition: Religion.cs:72
Item item
Definition: UIButton.cs:172