Elin Decompiled Documentation EA 23.102 Nightly
Loading...
Searching...
No Matches
AI_Eat.cs
Go to the documentation of this file.
1using System.Collections.Generic;
2using UnityEngine;
3
4public class AI_Eat : AIAct
5{
6 public Card target;
7
8 public bool cook = true;
9
10 public override bool LocalAct => false;
11
12 public override bool IsHostileAct
13 {
14 get
15 {
16 if (target != null)
17 {
18 return target.isNPCProperty;
19 }
20 return false;
21 }
22 }
23
24 public bool IsValidTarget(Card c)
25 {
26 return c?.trait.CanEat(owner) ?? false;
27 }
28
29 public override bool CanManualCancel()
30 {
31 return true;
32 }
33
34 public override void OnStart()
35 {
36 }
37
38 public override IEnumerable<Status> Run()
39 {
40 if (target != null && (target.GetRootCard() == owner || target.parent == null))
41 {
43 }
44 else if (target != null)
45 {
46 yield return DoGrab(target, 1);
47 }
48 else
49 {
51 {
52 yield return DoGrab<TraitFood>();
54 {
55 yield return Cancel();
56 }
57 }
58 if (cook)
59 {
60 yield return Do(new AI_Cook(), base.KeepRunning);
62 {
63 yield return Cancel();
64 }
65 yield return DoGotoSpot<TraitHearth>(base.KeepRunning);
66 }
67 }
69 if (target == null)
70 {
71 yield return Cancel();
72 }
74 {
75 yield return DoGotoSpot<TraitSpotDining>(base.KeepRunning);
76 }
77 int max = ((target.SelfWeight < 100) ? 1 : (2 + (int)Mathf.Sqrt(target.SelfWeight * 2 / 3)));
78 int turn = 0;
80 {
81 cancelWhenMoved = false,
82 canProgress = () => IsValidTarget(target) && owner.held == target,
83 onProgressBegin = delegate
84 {
85 owner.Say("eat_start", owner, target.GetName(NameStyle.Full, 1));
86 owner.PlaySound("eat");
87 },
88 onProgress = delegate(Progress_Custom p)
89 {
91 if (turn == 1 && owner.IsPC && owner.hunger.GetPhase() == 0 && !EClass.debug.godFood)
92 {
93 owner.Say("eat_full");
94 p.Cancel();
95 }
96 if (turn == 1)
97 {
98 foreach (Element value in target.elements.dict.Values)
99 {
100 if (!value.source.foodEffect.IsEmpty())
101 {
102 string[] foodEffect = value.source.foodEffect;
103 if (foodEffect[0] == "poison" || foodEffect[0] == "love")
104 {
105 owner.Talk("eatWeird");
106 break;
107 }
108 }
109 }
110 CardRow refCard = target.refCard;
111 if (refCard != null && refCard.id == "mammoth")
112 {
113 EClass.player.forceTalk = true;
114 owner.Talk("eatammoth");
115 }
116 }
117 turn++;
118 },
119 onProgressComplete = delegate
120 {
121 if (owner.IsPC && owner.hunger.GetPhase() == 0 && !EClass.debug.godFood)
122 {
123 owner.Say("eat_full");
124 }
125 else
126 {
127 owner.Say("eat_end", owner, target.GetName(NameStyle.Full, 1));
128 owner.ShowEmo(Emo.happy);
130 target.ModNum(-1);
131 }
132 }
133 }.SetDuration(max, 5);
134 yield return Do(seq);
135 }
136}
AnimeID
Definition: AnimeID.cs:2
Emo
Definition: Emo.cs:2
FactionMemberType
NameStyle
Definition: NameStyle.cs:2
Definition: AIAct.cs:6
Status DoGrab(Card card, int num=-1, bool pickHeld=false, Func< Status > _onChildFail=null)
Definition: AIAct.cs:492
Status Do(AIAct _seq, Func< Status > _onChildFail=null)
Definition: AIAct.cs:416
virtual Status Cancel()
Definition: AIAct.cs:291
new Chara owner
Definition: AIAct.cs:14
Status KeepRunning()
Definition: AIAct.cs:321
Definition: AI_Eat.cs:5
override bool IsHostileAct
Definition: AI_Eat.cs:13
override bool CanManualCancel()
Definition: AI_Eat.cs:29
bool cook
Definition: AI_Eat.cs:8
bool IsValidTarget(Card c)
Definition: AI_Eat.cs:24
override bool LocalAct
Definition: AI_Eat.cs:10
Card target
Definition: AI_Eat.cs:6
override IEnumerable< Status > Run()
Definition: AI_Eat.cs:38
override void OnStart()
Definition: AI_Eat.cs:34
string id
Definition: CardRow.cs:7
Definition: Card.cs:11
virtual string GetName(NameStyle style, int num=-1)
Definition: Card.cs:2475
ElementContainerCard elements
Definition: Card.cs:37
CardRow refCard
Definition: Card.cs:1843
bool isNPCProperty
Definition: Card.cs:526
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Definition: Card.cs:5404
virtual int SelfWeight
Definition: Card.cs:1921
void Talk(string idTopic, string ref1=null, string ref2=null, bool forceSync=false)
Definition: Card.cs:5949
ICardParent parent
Definition: Card.cs:51
void ShowEmo(Emo _emo=Emo.none, float duration=0f, bool skipSame=true)
Definition: Card.cs:5372
Trait trait
Definition: Card.cs:49
bool noMove
Definition: Card.cs:742
virtual Thing Thing
Definition: Card.cs:1934
Card GetRootCard()
Definition: Card.cs:3173
void PlayAnime(AnimeID id, bool force=false)
Definition: Card.cs:5423
void ModNum(int a, bool notify=true)
Definition: Card.cs:3262
void Say(string lang, string ref1=null, string ref2=null)
Definition: Card.cs:6046
Card held
Definition: Chara.cs:67
override bool IsPC
Definition: Chara.cs:597
override bool IsPCParty
Definition: Chara.cs:600
void HoldCard(Card t, int num=-1)
Definition: Chara.cs:4084
Stats hunger
Definition: Chara.cs:951
FactionMemberType memberType
Definition: Chara.cs:46
bool godFood
Definition: CoreDebug.cs:182
Definition: EClass.cs:5
static Zone _zone
Definition: EClass.cs:20
static CoreDebug debug
Definition: EClass.cs:48
Dictionary< int, Element > dict
SourceElement.Row source
Definition: ELEMENT.cs:263
static void Proc(Chara c, Thing food)
Definition: FoodEffect.cs:82
override int GetPhase()
Definition: Stats.cs:117
virtual bool CanEat(Chara c)
Definition: Trait.cs:928
bool IsPCFaction
Definition: Zone.cs:464