Elin Decompiled Documentation EA 23.359.1 Nightly
Loading...
Searching...
No Matches
LayerSkinDeco.cs
Go to the documentation of this file.
1using System;
2using System.Collections.Generic;
3using System.IO;
4using System.Linq;
5using UnityEngine;
6
7public class LayerSkinDeco : ELayer
8{
9 [NonSerialized]
10 public Widget widget;
11
12 public static List<Sprite> customSprites;
13
14 public Transform widgetHolder;
15
16 public List<SkinDeco> decos => widget.config.skin.decos;
17
19
20 public static List<Sprite> GetCustomSprites(bool rescan = false)
21 {
22 if (customSprites == null || rescan)
23 {
24 List<DirectoryInfo> list = new List<DirectoryInfo>
25 {
26 new DirectoryInfo(CorePath.custom + "Deco")
27 };
28 if (customSprites == null)
29 {
30 list.AddRange(PackageIterator.GetDirectories("Deco"));
31 }
32 if (customSprites == null)
33 {
34 customSprites = new List<Sprite>();
35 }
36 Dictionary<string, FileInfo> dictionary = new Dictionary<string, FileInfo>();
37 foreach (FileInfo item in list.SelectMany((DirectoryInfo d) => d.GetFiles("*.png")))
38 {
39 dictionary["_" + item.Name] = item;
40 }
41 foreach (Sprite customSprite in customSprites)
42 {
43 dictionary.Remove(customSprite.name);
44 }
45 foreach (KeyValuePair<string, FileInfo> item2 in dictionary)
46 {
47 item2.Deconstruct(out var key, out var value);
48 string text = key;
49 Texture2D texture2D = IO.LoadPNG(value.FullName, FilterMode.Bilinear);
50 if ((bool)texture2D)
51 {
52 Sprite sprite = Sprite.Create(texture2D, new Rect(0f, 0f, texture2D.width, texture2D.height), new Vector2(0.5f, 0.5f));
53 sprite.name = text;
54 customSprites.Add(sprite);
55 }
56 }
57 }
58 return customSprites;
59 }
60
61 public override void OnInit()
62 {
63 base.OnInit();
64 }
65
66 public void SetWidget(Widget _widget)
67 {
68 widget = _widget;
69 foreach (SkinDeco deco in decos)
70 {
71 Activate(deco.actor);
72 }
73 widget.transform.SetParent(widgetHolder, worldPositionStays: false);
74 }
75
76 public override void OnUpdateInput()
77 {
79 {
81 {
82 return;
83 }
84 SkinDecoActor selected = InputModuleEX.GetComponentOf<SkinDecoActor>();
85 Vector3 clickPos = Input.mousePosition;
86 UIContextMenu m = ELayer.ui.CreateContextMenu();
87 if ((bool)selected)
88 {
89 SkinDeco deco = selected.owner;
90 m.AddButton("editColor", delegate
91 {
92 ELayer.ui.AddLayer<LayerColorPicker>().SetColor(deco.color, Color.white, delegate(PickerState state, Color _c)
93 {
94 deco.color = _c;
95 selected.Refresh();
96 });
97 });
98 m.AddButton("bringToTop", delegate
99 {
100 decos.Remove(deco);
101 decos.Add(deco);
102 selected.transform.SetAsLastSibling();
103 });
104 m.AddSlider("rotation", (float n) => (n * 45f).ToString() ?? "", deco.rz, delegate(float a)
105 {
106 deco.rz = (int)a;
107 selected.Refresh();
108 }, 0f, 7f, isInt: true);
109 m.AddSlider("size", (float n) => n.ToString() ?? "", Mathf.Abs(deco.sx), delegate(float a)
110 {
111 deco.sx = (int)a * ((deco.sx > 0) ? 1 : (-1));
112 deco.sy = (int)a * ((deco.sy > 0) ? 1 : (-1));
113 selected.Refresh();
114 }, 10f, 400f, isInt: true);
115 m.AddToggle("shadow", deco.shadow, delegate(bool a)
116 {
117 deco.shadow = a;
118 selected.Refresh();
119 });
120 m.AddToggle("reverse", deco.reverse, delegate(bool a)
121 {
122 deco.reverse = a;
123 selected.Refresh();
124 });
125 m.AddToggle("placeBeforeWidget", deco.bottom, delegate(bool a)
126 {
127 deco.bottom = a;
128 selected.Refresh();
129 });
130 m.AddButton("removeDeco", delegate
131 {
132 widget.RemoveDeco(selected.owner);
133 });
134 }
135 else
136 {
137 UIContextMenu uIContextMenu = m.AddChild("addDeco");
138 UIList uIList = Util.Instantiate<UIList>("UI/Element/List/ListImageGrid", uIContextMenu);
139 uIList.callbacks = new UIList.Callback<Sprite, UIButton>
140 {
141 onInstantiate = delegate(Sprite a, UIButton _b)
142 {
143 _b.icon.sprite = a;
144 },
145 onClick = delegate(Sprite a, UIButton _b)
146 {
147 SkinDeco skinDeco = new SkinDeco
148 {
149 sx = 100,
150 sy = 100,
151 color = Color.white
152 };
153 if (a.name.StartsWith("_"))
154 {
155 skinDeco.name = a.name;
156 skinDeco.id = 0;
157 }
158 else
159 {
160 skinDeco.id = int.Parse(a.name.Remove(0, 4));
161 }
162 widget.AddDeco(skinDeco);
163 SkinDecoActor actor = skinDeco.actor;
164 Activate(actor);
165 actor.transform.position = clickPos;
166 EInput.Consume();
167 m.Hide();
168 }
169 };
170 foreach (Sprite item in Resources.LoadAll<Sprite>("Media/Graphics/Deco/").Concat(GetCustomSprites(rescan: true)))
171 {
172 uIList.Add(item);
173 }
174 uIList.Refresh();
175 }
176 m.Show();
177 }
179 {
180 UIContextMenu uIContextMenu2 = ELayer.ui.CreateContextMenu();
181 uIContextMenu2.AddButton("quitEdit", delegate
182 {
183 Close();
184 });
185 uIContextMenu2.Show();
186 }
187 }
188
189 public void Activate(SkinDecoActor actor)
190 {
191 actor.image.raycastTarget = true;
192 actor.transform.SetParent(base.transform, worldPositionStays: true);
193 UIDragPanel uIDragPanel = actor.gameObject.AddComponent<UIDragPanel>();
194 uIDragPanel.target = actor.Rect();
195 uIDragPanel.bound = actor.Rect();
196 uIDragPanel.clamp = false;
197 foreach (SkinDeco deco in decos)
198 {
199 deco.actor?.Refresh();
200 }
201 }
202
203 public override void OnKill()
204 {
205 widget.transform.SetParent(ELayer.ui.widgets.transform, worldPositionStays: false);
207 foreach (SkinDeco deco in decos)
208 {
209 SkinDecoActor actor = deco.actor;
210 actor.image.raycastTarget = false;
211 UnityEngine.Object.DestroyImmediate(actor.gameObject.GetComponent<UIDragPanel>());
212 actor.transform.SetParent(widget.transform, worldPositionStays: true);
213 deco.x = (int)actor.Rect().anchoredPosition.x;
214 deco.y = (int)actor.Rect().anchoredPosition.y;
215 actor.Refresh(editing: false);
216 }
217 }
218}
PickerState
Definition: PickerState.cs:2
bool dragging
Definition: ButtonState.cs:43
bool clicked
Definition: ButtonState.cs:37
static string custom
Definition: CorePath.cs:159
Definition: EInput.cs:8
static void Consume(int _skipFrame)
Definition: EInput.cs:667
static ButtonState leftMouse
Definition: EInput.cs:360
static ButtonState rightMouse
Definition: EInput.cs:362
Definition: ELayer.cs:4
static UI ui
Definition: ELayer.cs:21
SkinConfig cfg
void Activate(SkinDecoActor actor)
static List< Sprite > customSprites
static List< Sprite > GetCustomSprites(bool rescan=false)
Transform widgetHolder
override void OnKill()
void SetWidget(Widget _widget)
override void OnUpdateInput()
override void OnInit()
List< SkinDeco > decos
virtual void Close()
Definition: Layer.cs:468
List< SkinDeco > decos
Definition: SkinConfig.cs:9
void Refresh(bool editing=true)
SkinDeco owner
Definition: SkinDecoActor.cs:6
int sy
Definition: SkinDeco.cs:67
string name
Definition: SkinDeco.cs:14
int rz
Definition: SkinDeco.cs:91
Color color
Definition: SkinDeco.cs:79
SkinDecoActor actor
Definition: SkinDeco.cs:8
bool bottom
Definition: SkinDeco.cs:139
bool reverse
Definition: SkinDeco.cs:127
int sx
Definition: SkinDeco.cs:55
bool shadow
Definition: SkinDeco.cs:115
UIContextMenuItem AddToggle(string idLang="", bool isOn=false, UnityAction< bool > action=null)
void Show(UIItem i)
UIContextMenuItem AddSlider(string text, Func< float, string > textFunc, float value, Action< float > action, float min=0f, float max=1f, bool isInt=false, bool hideOther=true, bool useInput=false)
void AddButton(Func< string > funcText, UnityAction action=null)
UIContextMenu AddChild(string idLang, TextAnchor anchor)
Definition: UIList.cs:9
SkinConfig skin
Definition: Widget.cs:61
Definition: Widget.cs:7
void RemoveDeco(SkinDeco deco)
Definition: Widget.cs:624
void AddDeco(SkinDeco deco)
Definition: Widget.cs:618
Config config
Definition: Widget.cs:180
void RefreshOrder()
Definition: Widget.cs:272