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