Elin Decompiled Documentation EA 23.102 Nightly
Loading...
Searching...
No Matches
TraitBed.cs
Go to the documentation of this file.
1using System.Collections.Generic;
2
3public class TraitBed : Trait
4{
5 public override bool CanStack => false;
6
7 public int MaxHolders
8 {
9 get
10 {
11 if (owner.c_bedType != BedType.residentOne)
12 {
13 return ((GetParam(1) == null) ? 1 : GetParam(1).ToInt()) + owner.c_containerSize;
14 }
15 return 1;
16 }
17 }
18
19 public override bool IsChangeFloorHeight => true;
20
21 public override void TrySetAct(ActPlan p)
22 {
25 {
26 target = owner.Thing
27 }, owner);
29 {
30 target = owner.Thing
31 }, owner);
33 {
34 return;
35 }
36 p.TrySetAct("bedConfig", delegate
37 {
38 UIContextMenu uIContextMenu = EClass.ui.CreateContextMenuInteraction();
39 if (HasHolder())
40 {
41 uIContextMenu.AddButton("unassignBed", delegate
42 {
44 SE.Trash();
45 });
46 }
47 else if (owner.c_bedType == BedType.resident || owner.c_bedType == BedType.residentOne)
48 {
49 uIContextMenu.AddButton("claimBed", delegate
50 {
53 Msg.Say("claimBed", EClass.pc);
54 SE.Play("jingle_embark");
55 });
56 }
57 if (owner.c_bedType == BedType.resident || owner.c_bedType == BedType.residentOne || owner.c_bedType == BedType.livestock)
58 {
59 uIContextMenu.AddButton("assignBed", delegate
60 {
62 });
63 }
64 foreach (BedType t in new List<BedType>
65 {
66 BedType.resident,
67 BedType.residentOne,
68 BedType.livestock,
69 BedType.guest
70 })
71 {
72 uIContextMenu.AddButton(((t == owner.c_bedType) ? "context_checker".lang() : "") + ("bed_" + t).lang(), delegate
73 {
74 SetBedType(t);
75 SE.ClickOk();
76 });
77 }
78 CursorSystem.ignoreCount = 5;
79 uIContextMenu.Show();
80 return false;
81 }, owner);
82 }
83
84 public void ValidateOwners()
85 {
87 if (data == null)
88 {
89 return;
90 }
91 data.list.ForeachReverse(delegate(int i)
92 {
94 if (chara == null || (chara.IsPCFaction && !chara.IsPCParty && chara.homeBranch != EClass._zone.branch))
95 {
96 data.list.Remove(i);
97 }
98 });
99 }
100
101 public void AddHolder(Chara c)
102 {
103 CharaList charaList = owner.c_charaList;
104 if (charaList == null)
105 {
106 charaList = (owner.c_charaList = new CharaList());
107 }
108 charaList.Add(c);
109 }
110
111 public void RemoveHolder(Chara c)
112 {
113 CharaList c_charaList = owner.c_charaList;
114 if (c_charaList != null)
115 {
116 c_charaList.Remove(c);
117 if (c_charaList.list.Count == 0)
118 {
119 owner.c_charaList = null;
120 }
121 }
122 }
123
124 public void ClearHolders()
125 {
126 owner.c_charaList?.list.Clear();
127 }
128
129 public bool IsHolder(Chara c)
130 {
131 return owner.c_charaList?.list.Contains(c.uid) ?? false;
132 }
133
134 public bool IsFull()
135 {
136 CharaList c_charaList = owner.c_charaList;
137 if (c_charaList != null)
138 {
139 return c_charaList.list.Count >= MaxHolders;
140 }
141 return false;
142 }
143
144 public bool HasHolder()
145 {
146 CharaList c_charaList = owner.c_charaList;
147 if (c_charaList == null)
148 {
149 return false;
150 }
151 return c_charaList.list.Count > 0;
152 }
153
154 public bool CanAssign(Chara c)
155 {
156 CharaList c_charaList = owner.c_charaList;
157 if (c_charaList != null && c_charaList.list.Count >= MaxHolders)
158 {
159 return false;
160 }
161 BedType c_bedType = owner.c_bedType;
162 FactionMemberType memberType = c.memberType;
163 if ((memberType != 0 || (c_bedType != 0 && c_bedType != BedType.residentOne)) && (memberType != FactionMemberType.Livestock || c_bedType != BedType.livestock))
164 {
165 if (memberType == FactionMemberType.Guest)
166 {
167 return c_bedType == BedType.guest;
168 }
169 return false;
170 }
171 return true;
172 }
173
174 public void SetBedType(BedType bedType)
175 {
176 if (bedType != owner.c_bedType)
177 {
178 owner.c_bedType = bedType;
179 ClearHolders();
180 }
181 }
182
183 public override void SetName(ref string s)
184 {
185 CharaList c_charaList = owner.c_charaList;
186 if (c_charaList != null)
187 {
188 List<Chara> list = c_charaList.Get();
189 if (list.Count == 1)
190 {
191 s = "_bed".lang(list[0].NameSimple, s);
192 return;
193 }
194 if (list.Count == 2)
195 {
196 s = "_bed".lang("_and".lang(list[0].NameSimple, list[1].NameSimple), s);
197 return;
198 }
199 }
200 if (owner.c_bedType != 0)
201 {
202 string @ref = ("bed_" + owner.c_bedType).lang().ToLower();
203 s = "_of4".lang(@ref, s);
204 }
205 }
206
207 public override string GetHoverText()
208 {
209 CharaList c_charaList = owner.c_charaList;
210 if (c_charaList == null || c_charaList.Get().Count < 3)
211 {
212 return null;
213 }
214 string text = "";
215 foreach (Chara item in c_charaList.Get())
216 {
217 if (text != "")
218 {
219 text += ", ";
220 }
221 text += item.NameSimple;
222 }
223 return "(" + text + ")";
224 }
225}
BedType
Definition: BedType.cs:2
FactionMemberType
if(item3.idFile==idFirstFile &&item3.id==idFirstTopic)
Definition: UIBook.cs:627
bool TrySetAct(string lang, Func< bool > onPerform, Card tc, CursorInfo cursor=null, int dist=1, bool isHostileAct=false, bool localAct=true, bool canRepeat=false)
Definition: ActPlan.cs:344
Chara Find(string id)
Definition: CardManager.cs:20
GlobalCharaList globalCharas
Definition: CardManager.cs:46
CharaList c_charaList
Definition: Card.cs:1793
int c_containerSize
Definition: Card.cs:1289
int uid
Definition: Card.cs:118
BedType c_bedType
Definition: Card.cs:900
void Remove(Chara c)
Definition: CharaList.cs:17
List< int > list
Definition: CharaList.cs:7
List< Chara > Get()
Definition: CharaList.cs:22
void Add(Chara c)
Definition: CharaList.cs:9
Definition: Chara.cs:10
override bool IsPCParty
Definition: Chara.cs:600
override bool IsPCFaction
Definition: Chara.cs:656
FactionMemberType memberType
Definition: Chara.cs:46
FactionBranch homeBranch
Definition: Chara.cs:889
Definition: EClass.cs:5
static Game game
Definition: EClass.cs:8
static Zone _zone
Definition: EClass.cs:20
static Map _map
Definition: EClass.cs:18
static Chara pc
Definition: EClass.cs:14
static UI ui
Definition: EClass.cs:16
CardManager cards
Definition: Game.cs:155
static LayerPeople CreateBed(TraitBed bed)
Definition: LayerPeople.cs:128
Chara FindChara(string id)
Definition: Map.cs:2546
Definition: Msg.cs:5
static string Say(string idLang, string ref1, string ref2=null, string ref3=null, string ref4=null)
Definition: Msg.cs:58
void AddHolder(Chara c)
Definition: TraitBed.cs:101
bool HasHolder()
Definition: TraitBed.cs:144
void RemoveHolder(Chara c)
Definition: TraitBed.cs:111
override bool CanStack
Definition: TraitBed.cs:5
void ValidateOwners()
Definition: TraitBed.cs:84
override bool IsChangeFloorHeight
Definition: TraitBed.cs:19
void SetBedType(BedType bedType)
Definition: TraitBed.cs:174
int MaxHolders
Definition: TraitBed.cs:8
void ClearHolders()
Definition: TraitBed.cs:124
override string GetHoverText()
Definition: TraitBed.cs:207
bool IsFull()
Definition: TraitBed.cs:134
bool IsHolder(Chara c)
Definition: TraitBed.cs:129
override void SetName(ref string s)
Definition: TraitBed.cs:183
bool CanAssign(Chara c)
Definition: TraitBed.cs:154
override void TrySetAct(ActPlan p)
Definition: TraitBed.cs:21
Definition: Trait.cs:7
string GetParam(int i, string def=null)
Definition: Trait.cs:515
Card owner
Definition: Trait.cs:26
void AddButton(Func< string > funcText, UnityAction action=null)
FactionBranch branch
Definition: Zone.cs:34
bool IsPCFaction
Definition: Zone.cs:464