Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
PlayerEyeHelper.cs
Go to the documentation of this file.
2
3public struct PlayerEyeHelper
4{
5 private enum EyeFrame
6 {
10 }
11
12 private enum EyeState
13 {
15 InStorm,
16 InBed,
19 IsBlind,
20 IsTipsy,
22 }
23
25
26 private int _timeInState;
27
28 private const int TimeToActDamaged = 20;
29
30 public int EyeFrameToShow { get; private set; }
31
32 public void Update(Player player)
33 {
37 }
38
39 private void UpdateEyeFrameToShow(Player player)
40 {
41 EyeFrame eyeFrameToShow = EyeFrame.EyeOpen;
42 switch (_state)
43 {
44 case EyeState.NormalBlinking:
45 {
46 int num = _timeInState % 240 - 234;
47 eyeFrameToShow = ((num >= 4) ? EyeFrame.EyeHalfClosed : ((num < 2) ? ((num >= 0) ? EyeFrame.EyeHalfClosed : EyeFrame.EyeOpen) : EyeFrame.EyeClosed));
48 break;
49 }
50 case EyeState.InStorm:
51 eyeFrameToShow = ((_timeInState % 120 - 114 < 0) ? EyeFrame.EyeHalfClosed : EyeFrame.EyeClosed);
52 break;
53 case EyeState.IsModeratelyDamaged:
54 case EyeState.IsTipsy:
55 case EyeState.IsPoisoned:
56 eyeFrameToShow = ((_timeInState % 120 - 100 < 0) ? EyeFrame.EyeHalfClosed : EyeFrame.EyeClosed);
57 break;
58 case EyeState.InBed:
59 {
60 EyeFrame eyeFrame = (DoesPlayerCountAsModeratelyDamaged(player) ? EyeFrame.EyeHalfClosed : EyeFrame.EyeOpen);
61 _timeInState = player.sleeping.timeSleeping;
62 eyeFrameToShow = ((_timeInState >= 60) ? ((_timeInState < 120) ? EyeFrame.EyeHalfClosed : EyeFrame.EyeClosed) : eyeFrame);
63 break;
64 }
65 case EyeState.IsBlind:
66 eyeFrameToShow = EyeFrame.EyeClosed;
67 break;
68 case EyeState.JustTookDamage:
69 eyeFrameToShow = EyeFrame.EyeClosed;
70 break;
71 }
72 EyeFrameToShow = (int)eyeFrameToShow;
73 }
74
75 private void SetStateByPlayerInfo(Player player)
76 {
77 if (player.blackout || player.blind)
78 {
79 SwitchToState(EyeState.IsBlind);
80 }
81 else
82 {
83 if (_state == EyeState.JustTookDamage && _timeInState < 20)
84 {
85 return;
86 }
87 if (player.sleeping.isSleeping)
88 {
89 bool resetStateTimerEvenIfAlreadyInState = player.itemAnimation > 0;
90 SwitchToState(EyeState.InBed, resetStateTimerEvenIfAlreadyInState);
91 return;
92 }
94 {
95 SwitchToState(EyeState.IsModeratelyDamaged);
96 return;
97 }
98 if (player.tipsy)
99 {
100 SwitchToState(EyeState.IsTipsy);
101 return;
102 }
103 if (player.poisoned || player.venom || player.starving)
104 {
105 SwitchToState(EyeState.IsPoisoned);
106 return;
107 }
108 bool flag = player.ZoneSandstorm || (player.ZoneSnow && Main.IsItRaining);
109 if (player.behindBackWall)
110 {
111 flag = false;
112 }
113 if (flag)
114 {
115 SwitchToState(EyeState.InStorm);
116 }
117 else
118 {
119 SwitchToState(EyeState.NormalBlinking);
120 }
121 }
122 }
123
124 private void SwitchToState(EyeState newState, bool resetStateTimerEvenIfAlreadyInState = false)
125 {
126 if (_state != newState || resetStateTimerEvenIfAlreadyInState)
127 {
128 _state = newState;
129 _timeInState = 0;
130 }
131 }
132
134 {
135 return (float)player.statLife <= (float)player.statLifeMax2 * 0.25f;
136 }
137
139 {
140 SwitchToState(EyeState.JustTookDamage, resetStateTimerEvenIfAlreadyInState: true);
141 }
142}
static bool IsItRaining
Definition Main.cs:2664
PlayerSleepingHelper sleeping
Definition Player.cs:2465
bool behindBackWall
Definition Player.cs:2591
bool DoesPlayerCountAsModeratelyDamaged(Player player)
void SwitchToState(EyeState newState, bool resetStateTimerEvenIfAlreadyInState=false)