Elin Decompiled Documentation EA 23.219 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 {
24 Chara chara = owner.pos.FirstChara;
25 if (chara != null && !chara.affinity.CanSleepBeside())
26 {
27 chara = null;
28 }
30 {
31 target = owner.Thing,
32 lover = chara
33 }, owner);
35 {
36 target = owner.Thing
37 }, owner);
39 {
40 return;
41 }
42 p.TrySetAct("bedConfig", delegate
43 {
44 UIContextMenu uIContextMenu = EClass.ui.CreateContextMenuInteraction();
45 if (HasHolder())
46 {
47 uIContextMenu.AddButton("unassignBed", delegate
48 {
50 SE.Trash();
51 });
52 }
53 else if (owner.c_bedType == BedType.resident || owner.c_bedType == BedType.residentOne)
54 {
55 uIContextMenu.AddButton("claimBed", delegate
56 {
59 Msg.Say("claimBed", EClass.pc);
60 SE.Play("jingle_embark");
61 });
62 }
63 if (owner.c_bedType == BedType.resident || owner.c_bedType == BedType.residentOne || owner.c_bedType == BedType.livestock)
64 {
65 uIContextMenu.AddButton("assignBed", delegate
66 {
68 });
69 }
70 foreach (BedType t in new List<BedType>
71 {
72 BedType.resident,
73 BedType.residentOne,
74 BedType.livestock,
75 BedType.guest
76 })
77 {
78 uIContextMenu.AddButton(((t == owner.c_bedType) ? "context_checker".lang() : "") + ("bed_" + t).lang(), delegate
79 {
80 SetBedType(t);
81 SE.ClickOk();
82 });
83 }
84 CursorSystem.ignoreCount = 5;
85 uIContextMenu.Show();
86 return false;
87 }, owner);
88 }
89
90 public void ValidateOwners()
91 {
93 if (data == null)
94 {
95 return;
96 }
97 data.list.ForeachReverse(delegate(int i)
98 {
100 if (chara == null || (chara.IsPCFaction && !chara.IsPCParty && chara.homeBranch != EClass._zone.branch))
101 {
102 data.list.Remove(i);
103 }
104 });
105 }
106
107 public void AddHolder(Chara c)
108 {
109 CharaList charaList = owner.c_charaList;
110 if (charaList == null)
111 {
112 charaList = (owner.c_charaList = new CharaList());
113 }
114 charaList.Add(c);
115 }
116
117 public void RemoveHolder(Chara c)
118 {
119 CharaList c_charaList = owner.c_charaList;
120 if (c_charaList != null)
121 {
122 c_charaList.Remove(c);
123 if (c_charaList.list.Count == 0)
124 {
125 owner.c_charaList = null;
126 }
127 }
128 }
129
130 public void ClearHolders()
131 {
132 owner.c_charaList?.list.Clear();
133 }
134
135 public bool IsHolder(Chara c)
136 {
137 return owner.c_charaList?.list.Contains(c.uid) ?? false;
138 }
139
140 public bool IsFull()
141 {
142 CharaList c_charaList = owner.c_charaList;
143 if (c_charaList != null)
144 {
145 return c_charaList.list.Count >= MaxHolders;
146 }
147 return false;
148 }
149
150 public bool HasHolder()
151 {
152 CharaList c_charaList = owner.c_charaList;
153 if (c_charaList == null)
154 {
155 return false;
156 }
157 return c_charaList.list.Count > 0;
158 }
159
160 public bool CanAssign(Chara c)
161 {
162 CharaList c_charaList = owner.c_charaList;
163 if (c_charaList != null && c_charaList.list.Count >= MaxHolders)
164 {
165 return false;
166 }
167 BedType c_bedType = owner.c_bedType;
168 FactionMemberType memberType = c.memberType;
169 if ((memberType != 0 || (c_bedType != 0 && c_bedType != BedType.residentOne)) && (memberType != FactionMemberType.Livestock || c_bedType != BedType.livestock))
170 {
171 if (memberType == FactionMemberType.Guest)
172 {
173 return c_bedType == BedType.guest;
174 }
175 return false;
176 }
177 return true;
178 }
179
180 public void SetBedType(BedType bedType)
181 {
182 if (bedType != owner.c_bedType)
183 {
184 owner.c_bedType = bedType;
185 ClearHolders();
186 }
187 }
188
189 public override void SetName(ref string s)
190 {
191 CharaList c_charaList = owner.c_charaList;
192 if (c_charaList != null)
193 {
194 List<Chara> list = c_charaList.Get();
195 if (list.Count == 1)
196 {
197 s = "_bed".lang(list[0].NameSimple, s);
198 return;
199 }
200 if (list.Count == 2)
201 {
202 s = "_bed".lang("_and".lang(list[0].NameSimple, list[1].NameSimple), s);
203 return;
204 }
205 }
206 if (owner.c_bedType != 0)
207 {
208 string @ref = ("bed_" + owner.c_bedType).lang().ToLower();
209 s = "_of4".lang(@ref, s);
210 }
211 }
212
213 public override string GetHoverText()
214 {
215 CharaList c_charaList = owner.c_charaList;
216 if (c_charaList == null || c_charaList.Get().Count < 3)
217 {
218 return null;
219 }
220 string text = "";
221 foreach (Chara item in c_charaList.Get())
222 {
223 if (text != "")
224 {
225 text += ", ";
226 }
227 text += item.NameSimple;
228 }
229 return "(" + text + ")";
230 }
231}
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:366
bool CanSleepBeside()
Definition: Affinity.cs:77
Chara Find(string id)
Definition: CardManager.cs:20
GlobalCharaList globalCharas
Definition: CardManager.cs:46
CharaList c_charaList
Definition: Card.cs:1893
Point pos
Definition: Card.cs:59
int c_containerSize
Definition: Card.cs:1365
int uid
Definition: Card.cs:122
virtual Thing Thing
Definition: Card.cs:2046
BedType c_bedType
Definition: Card.cs:940
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:613
override bool IsPCFaction
Definition: Chara.cs:669
FactionMemberType memberType
Definition: Chara.cs:46
Affinity affinity
Definition: Chara.cs:312
FactionBranch homeBranch
Definition: Chara.cs:1064
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:2568
Definition: Msg.cs:5
static string Say(string idLang, string ref1, string ref2=null, string ref3=null, string ref4=null)
Definition: Msg.cs:58
Chara FirstChara
Definition: Point.cs:276
void AddHolder(Chara c)
Definition: TraitBed.cs:107
bool HasHolder()
Definition: TraitBed.cs:150
void RemoveHolder(Chara c)
Definition: TraitBed.cs:117
override bool CanStack
Definition: TraitBed.cs:5
void ValidateOwners()
Definition: TraitBed.cs:90
override bool IsChangeFloorHeight
Definition: TraitBed.cs:19
void SetBedType(BedType bedType)
Definition: TraitBed.cs:180
int MaxHolders
Definition: TraitBed.cs:8
void ClearHolders()
Definition: TraitBed.cs:130
override string GetHoverText()
Definition: TraitBed.cs:213
bool IsFull()
Definition: TraitBed.cs:140
bool IsHolder(Chara c)
Definition: TraitBed.cs:135
override void SetName(ref string s)
Definition: TraitBed.cs:189
bool CanAssign(Chara c)
Definition: TraitBed.cs:160
override void TrySetAct(ActPlan p)
Definition: TraitBed.cs:21
Definition: Trait.cs:7
string GetParam(int i, string def=null)
Definition: Trait.cs:560
Card owner
Definition: Trait.cs:27
void AddButton(Func< string > funcText, UnityAction action=null)
FactionBranch branch
Definition: Zone.cs:34
bool IsPCFaction
Definition: Zone.cs:468