Elin Decompiled Documentation EA 23.316 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 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 if (c.IsPCC)
154 {
155 imageChara.rectTransform.localScale = new Vector3(1.3f, 1.4f, 1f) * charaScale;
156 imageChara.rectTransform.anchoredPosition = new Vector2(-25f, 10f);
157 imageChara.rectTransform.pivot = new Vector2(0.5f, 0.3f);
158 }
159 else
160 {
161 imageChara.rectTransform.localScale = Vector3.one * charaScale;
162 imageChara.rectTransform.anchoredPosition = new Vector2(-25f, 28f);
163 imageChara.rectTransform.pivot = c.source.renderData.imagePivot;
164 SourcePref pref = c.Pref;
165 float num = imageChara.sprite.rect.height / 128f;
166 imageChara.rectTransform.localPosition += new Vector3(pref.pivotX, (float)pref.pivotY * num, 0f);
167 }
168 }
169 }
170 if ((bool)imageFaith)
171 {
172 imageFaith.sprite = c.faith.GetSprite();
173 }
174 if (c.GetIdPortrait().IsEmpty() || modPortraits.GetItem(c.GetIdPortrait(), returnNull: true) == null)
175 {
177 {
178 portrait.enabled = false;
179 overlay.enabled = false;
180 return;
181 }
182 if ((bool)spriteNoPortrait)
183 {
184 SetPortrait(isPortrait: false, spriteNoPortrait);
185 return;
186 }
187 SetPortrait(isPortrait: false, c.GetSprite());
189 portrait.transform.localScale = new Vector3(1f, 1f, 1f);
190 portrait.preserveAspect = true;
191 portrait.SetNativeSize();
192 portrait.Rect().SetAnchor(0.5f, 0f, 0.5f, 0f);
193 portrait.Rect().SetPivot(0.5f, 0f);
194 portrait.Rect().anchoredPosition = new Vector2(0f, 0f);
195 portrait.material = EClass.core.refs.matUIPortraitChara;
196 return;
197 }
198 if (pccData == null && c.isChara)
199 {
200 pccData = c.Chara.pccData;
201 }
202 Color colorOverlay = pccData?.GetHairColor(applyMod: true) ?? Color.white;
203 overlay.enabled = true;
204 if (pccData == null)
205 {
206 if (c.GetInt(105) != 0)
207 {
208 colorOverlay = IntColor.FromInt(c.GetInt(105));
209 }
210 else
211 {
212 colorOverlay = GetRandomHairColor(c);
213 if (c.id == "shojo")
214 {
215 overlay.enabled = false;
216 }
217 }
218 }
219 SetPortrait(c.GetIdPortrait(), colorOverlay);
220 }
221
223 {
224 Rand.SetSeed(c.uid);
225 Color randomColor = PCCManager.current.GetBodySet("female").map["hair"].GetRandomColor();
226 Rand.SetSeed();
227 return randomColor;
228 }
229
230 public void SetPortrait(string id, Color colorOverlay = default(Color), bool applyColorMod = true)
231 {
232 Sprite @object = modPortraits.GetItem(id).GetObject();
233 Sprite object2 = modOverlays.GetObject(id + "-overlay");
234 Sprite spriteFull = ((enableFull && (bool)imageFull) ? modFull.GetObject(id + "-full") : null);
235 if (applyColorMod)
236 {
237 colorOverlay = PCCManager.current.ApplyColorMod(colorOverlay);
238 }
239 SetPortrait(isPortrait: true, @object, object2, colorOverlay, spriteFull);
240 }
241
242 public void SetPortrait(bool isPortrait, Sprite spritePortrait, Sprite spriteOverlay = null, Color colorOverlay = default(Color), Sprite spriteFull = null)
243 {
244 filter = ((isPortrait && Core.Instance.config.test.aaPortrait) ? FilterMode.Bilinear : FilterMode.Point);
245 portrait.rectTransform.anchorMin = overlay.rectTransform.anchorMin;
246 portrait.rectTransform.anchorMax = overlay.rectTransform.anchorMax;
247 portrait.rectTransform.sizeDelta = overlay.rectTransform.sizeDelta;
248 if ((bool)spritePortrait)
249 {
250 portrait.sprite = spritePortrait;
251 FixTexture(spritePortrait);
252 }
253 if ((bool)overlay)
254 {
255 FixTexture(spriteOverlay);
256 overlay.sprite = spriteOverlay;
257 overlay.color = new Color(colorOverlay.r * 1.1f, colorOverlay.g * 1.1f, colorOverlay.b * 1.1f, colorOverlay.a);
258 overlay.SetActive(spriteOverlay);
259 }
260 if (enableFull && (bool)imageFull)
261 {
262 FixTexture(spriteFull);
263 imageFull.sprite = spriteFull;
264 base.gameObject.SetActive(!spriteFull);
265 imageFull.SetActive(spriteFull);
266 }
267 if (!showPortrait)
268 {
269 portrait.SetActive(enable: false);
270 overlay.SetActive(enable: false);
271 }
272 void FixTexture(Sprite s)
273 {
274 if ((bool)s && isPortrait)
275 {
276 s.texture.wrapMode = TextureWrapMode.Clamp;
277 if (s.texture.filterMode != filter)
278 {
279 s.texture.filterMode = filter;
280 }
281 }
282 }
283 }
284}
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:6484
int GetInt(string id, int? defaultInt=null)
Definition: Card.cs:2551
Definition: Chara.cs:10
override SourcePref Pref
Definition: Chara.cs:805
override Sprite GetSprite(int dir=0)
Definition: Chara.cs:6925
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:8477
PCCData pccData
Definition: Chara.cs:67
override bool IsPCC
Definition: Chara.cs:700
Material matUIPortraitChara
Definition: CoreRef.cs:408
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:242
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:230
Color GetRandomHairColor(Chara c)
Definition: Portrait.cs:222
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
virtual Sprite GetSprite()
Definition: Religion.cs:86
Item item
Definition: UIButton.cs:172