Elin Decompiled Documentation EA 23.300 Nightly
Loading...
Searching...
No Matches
LayerEditPCC.cs
Go to the documentation of this file.
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using UnityEngine;
5
6public class LayerEditPCC : ELayer
7{
8 public UIPCC.Mode mode;
9
10 public UIPCC uiPCC;
11
13
14 public Chara chara;
15
17
18 public PCCData backup;
19
20 public string backupPortrait;
21
22 public bool applied;
23
24 private Color lastHair;
25
26 public bool UniformMode
27 {
28 get
29 {
30 if (mode != UIPCC.Mode.UniformM)
31 {
32 return mode == UIPCC.Mode.UniformF;
33 }
34 return true;
35 }
36 }
37
38 public bool IsMale => mode == UIPCC.Mode.UniformM;
39
40 public void Activate(Chara _chara, UIPCC.Mode m, string idUniform = null, Action _onKill = null)
41 {
42 chara = (_chara.IsPCC ? _chara : ELayer.pc);
43 mode = m;
44 uiPCC.exportPath = CorePath.user + "PCC/";
45 uiPCC.onShowPalette = delegate(PCC pcc, string id, PCC.Part part, TestActor actor)
46 {
47 LayerColorPicker layerColorPicker = ELayer.ui.AddLayer<LayerColorPicker>();
48 Color color = pcc.data.GetColor(id);
49 layerColorPicker.SetColor(color, color, delegate(PickerState state, Color _c)
50 {
51 pcc.data.SetColor(id, _c);
52 actor.Reset();
53 });
54 };
55 uiPCC.onRefreshParts = SetPccPicker;
56 PCCData newData = new PCCData();
57 newData.Set(chara.pccData);
58 backup = IO.DeepCopy(newData);
60 if (UniformMode)
61 {
62 ELayer.game.uniforms.Apply(newData, idUniform, IsMale, canUseOtherGender: false);
63 windows[0].SetCaption("_uniform".lang(ELayer.sources.jobs.map[idUniform].GetName().ToTitleCase(), IsMale ? "male".lang() : "female".lang()));
64 }
65 else
66 {
67 ELayer.game.uniforms.Apply(newData, PCCUniformManager.dummy);
68 }
69 uiPCC.Init(newData, mode);
71 windows[0].AddBottomButton("removeAllCloth", delegate
72 {
73 uiPCC.RemoveAll();
74 ELayer.Sound.Play("offering");
75 });
76 windows[0].AddBottomButton("reset", delegate
77 {
78 if (UniformMode)
79 {
80 ELayer.game.uniforms.RemoveUniform(newData);
81 }
82 uiPCC.Reset(backup);
83 chara.c_idPortrait = backupPortrait;
85 ELayer.Sound.Play("offering");
86 newData.colors.Clear();
87 });
88 if (UniformMode)
89 {
90 PCCData otherUni = ELayer.game.uniforms.GetUniform(idUniform, !IsMale);
91 if (otherUni != null)
92 {
93 windows[0].AddBottomButton("copyUniform", delegate
94 {
95 PCCData pCCData = new PCCData();
96 pCCData.Set(chara.pccData);
97 ELayer.game.uniforms.Apply(pCCData, otherUni);
98 uiPCC.Reset(pCCData);
99 ELayer.Sound.Play("offering");
100 });
101 }
102 }
103 windows[2].SetActive(enable: true);
104 portrait.SetActive(!UniformMode);
105 if (_onKill != null)
106 {
107 SetOnKill(_onKill);
108 }
109 }
110
111 public void Apply()
112 {
113 PCCData data = uiPCC.pcc.data;
114 ELayer.game.uniforms.Apply(data, chara.job.id, IsMale, canUseOtherGender: true);
115 chara.pccData.Set(data);
116 PCC.Get(chara.pccData).Build();
117 chara.SetInt(105, IntColor.ToInt(chara.pccData.GetHairColor()));
118 applied = true;
119 }
120
122 {
123 ELayer.ui.AddLayer<LayerEditPortrait>().Activate(chara, uiPCC.pcc.data, delegate
124 {
125 portrait.SetChara(chara, uiPCC.actor.data);
126 uiPCC.actor.Reset();
127 });
128 }
129
130 public void OnClickPartPicker(UIItemPCC uiItemPcc)
131 {
132 ELayer.ui.AddLayer<LayerPickPCC>("LayerPCC/LayerPickPCC").Activate(uiPCC, uiItemPcc);
133 }
134
135 public override void OnKill()
136 {
137 Apply();
138 foreach (Layer item in ELayer.ui.layers.Where((Layer l) => l is LayerPickPCC).ToList())
139 {
140 item.Close();
141 }
142 }
143
144 private void Update()
145 {
146 Color hairColor = uiPCC.actor.data.GetHairColor();
147 if (hairColor != lastHair)
148 {
149 portrait.SetChara(chara, uiPCC.actor.data);
150 lastHair = hairColor;
151 }
152 int wheel = EInput.wheel;
153 if (InputModuleEX.IsPointerOver(windows[1].transform))
154 {
155 if (wheel < 0)
156 {
157 uiPCC.actor.provider.NextDir();
158 }
159 if (wheel > 0)
160 {
161 uiPCC.actor.provider.PrevDir();
162 }
163 }
164 }
165
166 public void SetPortraitSlider()
167 {
168 if ((bool)sliderPortrait)
169 {
170 List<ModItem<Sprite>> list = Portrait.ListPlayerPortraits(chara.bio.gender, chara != ELayer.pc);
171 list.Sort((ModItem<Sprite> a, ModItem<Sprite> b) => Lang.comparer.Compare(a.id, b.id));
172 sliderPortrait.SetList(list.Find((ModItem<Sprite> a) => a.id == chara.c_idPortrait), list, delegate(int a, ModItem<Sprite> b)
173 {
174 chara.c_idPortrait = b.id;
175 portrait.SetChara(chara, uiPCC.actor.data);
176 }, (ModItem<Sprite> a) => (!a.id.IsEmpty()) ? a.id : "None");
177 }
178 }
179
180 public void SetPccPicker()
181 {
182 foreach (UIItemPCC item in uiPCC.items)
183 {
184 item.buttonPicker.onClick.AddListener(delegate
185 {
186 OnClickPartPicker(item);
187 });
188 item.buttonPicker.GetComponent<ButtonGeneral>().tooltip.lang = "LayerPickPCC".lang();
189 }
190 }
191}
PickerState
Definition: PickerState.cs:2
void SetInt(int id, int value=0)
Definition: BaseCard.cs:39
string c_idPortrait
Definition: Card.cs:1525
Definition: Chara.cs:10
SourceJob.Row job
Definition: Chara.cs:468
PCCData pccData
Definition: Chara.cs:67
Definition: EInput.cs:8
static int wheel
Definition: EInput.cs:300
Definition: ELayer.cs:4
static Chara pc
Definition: ELayer.cs:15
static SourceManager sources
Definition: ELayer.cs:37
static Game game
Definition: ELayer.cs:9
static UI ui
Definition: ELayer.cs:21
static SoundManager Sound
Definition: ELayer.cs:41
PCCUniformManager uniforms
Definition: Game.cs:195
static bool IsPointerOver(Component c)
static int ToInt(ref Color c)
Definition: IntColor.cs:24
Definition: Lang.cs:6
static NaturalStringComparer comparer
Definition: Lang.cs:22
void SetColor(Color _startColor, Color _resetColor, Action< PickerState, Color > _onChangeColor)
string backupPortrait
Definition: LayerEditPCC.cs:20
void OnClickChangePortrait()
Color lastHair
Definition: LayerEditPCC.cs:24
void OnClickPartPicker(UIItemPCC uiItemPcc)
Portrait portrait
Definition: LayerEditPCC.cs:12
void SetPccPicker()
PCCData backup
Definition: LayerEditPCC.cs:18
UIPCC.Mode mode
Definition: LayerEditPCC.cs:8
void Activate(Chara _chara, UIPCC.Mode m, string idUniform=null, Action _onKill=null)
Definition: LayerEditPCC.cs:40
UISlider sliderPortrait
Definition: LayerEditPCC.cs:16
override void OnKill()
void SetPortraitSlider()
bool UniformMode
Definition: LayerEditPCC.cs:27
Definition: Layer.cs:9
List< Window > windows
Definition: Layer.cs:116
Layer SetOnKill(Action action)
Definition: Layer.cs:579
string id
Definition: ModItem.cs:10
static List< ModItem< Sprite > > ListPlayerPortraits(int gender, bool nullPortrait=false)
Definition: Portrait.cs:48
void SetChara(Chara c, PCCData pccData=null)
Definition: Portrait.cs:143
SourceJob jobs