Elin Decompiled Documentation EA 23.102 Nightly
Loading...
Searching...
No Matches
CharaRenderer.cs
Go to the documentation of this file.
1using UnityEngine;
2
4{
5 public new Chara owner;
6
7 public Vector3 orgPos;
8
9 private float moveTimer;
10
11 private float nextframeTimer;
12
13 public bool first = true;
14
15 public bool ignoreFirst;
16
17 public Point movePoint = new Point();
18
19 public AnimationCurve hopCurve;
20
21 public PCCData pccData;
22
23 private float actTime = 0.3f;
24
25 private float lastShadowFix;
26
27 private float lastShadowFix2;
28
29 public int step;
30
31 public bool isMoving;
32
33 public static int _animeFramePC;
34
35 public static int _animeFramePCC;
36
37 public static int _animeFrame;
38
39 public static bool smoothmove;
40
41 public int currentDir
42 {
43 get
44 {
45 if (!hasActor)
46 {
47 if (!owner.flipX)
48 {
49 return 1;
50 }
51 return 0;
52 }
53 return actor.currentDir;
54 }
55 }
56
57 public override bool IsMoving => isMoving;
58
59 public override void SetOwner(Card c)
60 {
61 owner = c as Chara;
62 if (pccData != null)
63 {
64 data = ((pccData.GetBodySet2().id == "unique") ? EClass.core.refs.renderers.pcc_L : EClass.core.refs.renderers.pcc);
65 }
66 base.SetOwner(c);
67 }
68
69 public override void OnEnterScreen()
70 {
71 base.OnEnterScreen();
72 if (!ignoreFirst)
73 {
74 first = true;
75 }
76 ignoreFirst = false;
77 nextframeTimer = 0f;
79 {
80 EClass.player.enemySpotted = true;
81 }
82 }
83
84 public override void Draw(RenderParam p, ref Vector3 v, bool drawShadow)
85 {
86 base.Draw(p, ref v, drawShadow);
87 if ((Zone.sourceHat != null || owner.hat != null) && owner.Pref.hatY != 0f && owner.host == null)
88 {
89 DrawHat();
90 }
91 if (owner.IsPC)
92 {
94 {
95 DrawHeld();
96 }
97 }
98 else if (owner.held != null && !owner.IsDeadOrSleeping && !owner.held.trait.ShowAsTool)
99 {
100 DrawHeld();
101 }
102 }
103
104 public override void NextFrame()
105 {
106 base.NextFrame();
107 owner.idleTimer = RenderObject.animeSetting.idleTime;
108 }
109
110 public override void UpdatePosition(ref Vector3 destPos, RenderParam p)
111 {
112 bool isPC = owner.IsPC;
113 int num = (isPC ? _animeFramePC : (hasActor ? _animeFramePCC : _animeFrame));
114 bool flag = isPC || num >= 10;
115 if (num == 0 || Scene.skipAnime || first || !data.animate || (owner.IsDeadOrSleeping && pccData != null && !owner.IsPC))
116 {
117 first = false;
118 position = destPos;
119 if (isPC)
120 {
121 EClass.player.position = position;
122 }
124 step = 9999999;
125 isMoving = false;
126 moveTimer = 0f;
128 p.x = position.x;
129 p.y = position.y;
130 p.z = position.z;
132 return;
133 }
135 {
136 if (RenderObject.gameSpeed > 1f)
137 {
138 p.shadowFix = (lastShadowFix = 0f);
139 }
140 else
141 {
142 p.shadowFix = (lastShadowFix = lastShadowFix2);
143 }
148 step = 1;
149 if (!isMoving)
150 {
151 isMoving = true;
152 nextframeTimer = (RenderObject.animeSetting.nextFrameInterval + actTime / 4f) / 2f;
153 }
154 moveTimer = 0f;
155 }
156 if (num < 100)
157 {
158 num = (int)((float)num / 0.3f * actTime);
159 }
160 float num2 = (actTime + ((!isPC && owner.IsPCParty) ? RenderObject.animeSetting.animeExtraTimeParty : RenderObject.animeSetting.animeExtraTime) * RenderObject.gameSpeed) / (float)num;
162 if (step >= num)
163 {
164 if (position == destPos)
165 {
166 if (isMoving && isPC)
167 {
168 EClass.player.position = position;
169 }
170 isMoving = false;
171 moveTimer = 0f;
172 }
173 else if (!flag)
174 {
175 position = destPos;
176 }
177 else if (moveTimer >= num2)
178 {
179 int num3 = (int)(moveTimer / num2);
180 moveTimer -= (float)num3 * num2;
181 if (Vector3.Distance(position, destPos) < RenderObject.animeSetting.destRadius)
182 {
183 position = destPos;
184 if (isMoving && isPC)
185 {
186 EClass.player.position = position;
187 }
188 isMoving = false;
189 }
190 else
191 {
192 position.z = destPos.z;
193 Vector3 vector = Vector3.MoveTowards(position, destPos, (float)num3 * RenderObject.animeSetting.slowSpeed / (float)step);
194 position = vector;
195 }
196 }
197 if (owner.idleTimer > 0f)
198 {
199 owner.idleTimer -= RenderObject.gameDelta;
200 if (flag && owner.idleTimer <= 0f)
201 {
202 IdleFrame();
203 nextframeTimer = 0f;
204 }
205 }
206 p.x = position.x;
207 p.y = position.y;
208 p.z = position.z;
210 if (isPC)
211 {
212 CellDetail detail = EClass.pc.Cell.detail;
213 if (detail == null || detail.anime == null)
214 {
215 position.z = destPos.z;
216 Vector3 vector2 = Vector3.MoveTowards(position, destPos, 0.1f);
217 position = vector2;
218 EClass.player.position = Vector3.Lerp(EClass.player.position, position, 0.6f);
219 }
220 }
221 return;
222 }
223 if (moveTimer >= num2)
224 {
225 int num4 = (int)(moveTimer / num2);
226 step += num4;
227 moveTimer -= (float)num4 * num2;
228 if (step >= num)
229 {
230 step = num;
231 }
232 }
233 owner.idleTimer = RenderObject.animeSetting.idleTime;
234 float num5 = (float)step / (float)num;
235 p.shadowFix = p.shadowFix * num5 + lastShadowFix * (1f - num5);
237 Vector3 vector3 = orgPos + (destPos - orgPos) * num5 * ((flag && smoothmove) ? RenderObject.animeSetting.fixedMove : 1f);
238 if (destPos.z < orgPos.z)
239 {
240 vector3.z = orgPos.z + (destPos.z - orgPos.z) * RenderObject.animeSetting.gradientZForward.Evaluate(num5);
241 }
242 else
243 {
244 vector3.z = orgPos.z + (destPos.z - orgPos.z) * RenderObject.animeSetting.gradientZBack.Evaluate(num5);
245 }
246 position = vector3;
247 if (hasActor)
248 {
250 {
251 nextframeTimer += RenderObject.gameDelta * 0.5f;
252 float nextFrameInterval = RenderObject.animeSetting.nextFrameInterval;
253 if (nextframeTimer > nextFrameInterval)
254 {
255 if (owner.ai is AI_Trolley)
256 {
258 }
259 else
260 {
262 }
263 nextframeTimer -= nextFrameInterval;
264 }
265 }
266 else
267 {
269 float num6 = RenderObject.animeSetting.nextFrameInterval + actTime / 4f * (0.5f + RenderObject.gameSpeed / 2f);
270 if (nextframeTimer > num6)
271 {
272 if (owner.ai is AI_Trolley)
273 {
275 }
276 else
277 {
279 }
280 nextframeTimer -= num6;
281 }
282 }
283 }
284 p.x = position.x;
285 p.y = position.y;
286 p.z = position.z;
287 if (isPC)
288 {
289 EClass.player.position = vector3;
290 }
291 else if (!hasActor && num >= 5 && hopCurve != null)
292 {
293 p.y += hopCurve.Evaluate(num5) * RenderObject.animeSetting.hopStrength;
294 }
295 }
296
297 public void DrawHat()
298 {
299 if (pccData == null || !owner.IsDeadOrSleeping)
300 {
301 CardRow cardRow = Zone.sourceHat ?? owner.hat;
302 SourcePref pref = GetPref();
303 bool flag = currentDir == 1 || currentDir == 3;
304 int liquidLv = RenderObject.currentParam.liquidLv;
305 float num = ((replacer != null) ? replacer.pref.hatY : pref.hatY);
306 if (pccData != null)
307 {
308 num += RenderObject.renderSetting.hatPos[actor.GetFrame()].y;
309 }
310 RenderObject.currentParam.liquidLv = 0;
311 RenderObject.currentParam.x += 0.01f * (float)pref.equipX;
312 RenderObject.currentParam.y += num + 0.01f * (float)pref.equipY;
313 RenderObject.currentParam.z -= pref.hatY;
314 RenderObject.currentParam.tile = cardRow._tiles[owner.uid % cardRow._tiles.Length] * ((!flag) ? 1 : (-1));
316 RenderObject.currentParam.y -= num;
317 RenderObject.currentParam.liquidLv = liquidLv;
318 }
319 }
320
321 public override void DrawHeld()
322 {
323 Card held = owner.held;
324 int num = currentDir;
325 RenderData renderData = held.renderer.data;
326 SourcePref pref = held.Pref;
327 bool flag = num == 1 || num == 3;
328 if (held.isChara)
329 {
330 Vector3[] array = (EClass.player.altHeldPos ? RenderObject.renderSetting.heldPosChara2 : RenderObject.renderSetting.heldPosChara);
331 RenderObject.currentParam.x += array[num].x;
332 RenderObject.currentParam.y += array[num].y;
333 RenderObject.currentParam.z += array[num].z + data.offset.z - renderData.offset.z;
335 {
336 held.SetDir((owner.dir == 0) ? 2 : ((owner.dir == 1) ? 1 : ((owner.dir != 2) ? 3 : 0)));
337 }
338 else
339 {
340 held.SetDir((owner.dir == 0) ? 2 : owner.dir);
341 }
342 }
343 else
344 {
345 Vector3[] heldPos = RenderObject.renderSetting.heldPos;
346 if (hasActor)
347 {
348 RenderObject.currentParam.x += heldPos[num].x;
349 RenderObject.currentParam.y += heldPos[num].y + 0.02f * (float)(actor.GetFrame() % 2);
350 RenderObject.currentParam.z += heldPos[num].z + data.offset.z - renderData.offset.z;
351 }
352 else
353 {
354 RenderObject.currentParam.x += heldPos[4].x;
355 RenderObject.currentParam.y += heldPos[4].y;
356 RenderObject.currentParam.z += heldPos[4].z + data.offset.z - renderData.offset.z;
357 }
358 if (held.trait.NoHeldDir || !held.sourceCard.ContainsTag("noHeldDir"))
359 {
360 held.dir = (owner.flipX ? 1 : 0);
361 }
362 }
363 if (!owner.Cell.sourceSurface.tileType.IsDeepWater)
364 {
365 int liquidLv = RenderObject.currentParam.liquidLv;
366 if (held.isChara)
367 {
368 RenderObject.currentParam.liquidLv = 0;
369 }
371 RenderObject.currentParam.x += renderData.heldPos.x - renderData.offset.x + (flag ? 0.01f : (-0.01f)) * (float)pref.equipX;
372 RenderObject.currentParam.y += renderData.heldPos.y - renderData.offset.y + 0.01f * (float)pref.equipY;
373 RenderObject.currentParam.z += renderData.heldPos.z;
374 RenderObject.tempV.x = RenderObject.currentParam.x;
375 RenderObject.tempV.y = RenderObject.currentParam.y;
376 RenderObject.tempV.z = RenderObject.currentParam.z;
377 held.renderer.Draw(RenderObject.currentParam, ref RenderObject.tempV, drawShadow: false);
378 RenderObject.currentParam.liquidLv = liquidLv;
379 }
380 }
381
382 public override void RefreshStateIcon()
383 {
384 if (!isSynced)
385 {
386 return;
387 }
388 TCState tCState = GetTC<TCState>();
389 MultiSprite stateIcon = owner.ai.GetStateIcon();
390 if (stateIcon == null)
391 {
392 if ((bool)tCState)
393 {
394 RemoveTC(tCState);
395 }
396 return;
397 }
398 if (!tCState)
399 {
400 tCState = AddTC<TCState>(PoolManager.Spawn(EClass.core.refs.tcs.state));
401 }
402 tCState.SetSprite(stateIcon);
403 }
404
405 public override void SetFirst(bool first)
406 {
407 this.first = first;
409 }
410
411 public override void SetFirst(bool first, Vector3 pos)
412 {
413 this.first = first;
415 position = pos;
416 if (owner.IsPC)
417 {
418 EClass.player.position = position;
419 }
421 step = 9999999;
422 isMoving = false;
423 moveTimer = 0f;
424 }
425
426 public override void Refresh()
427 {
428 }
429}
override MultiSprite GetStateIcon()
Definition: AIAct.cs:129
virtual int currentDir
Definition: CardActor.cs:41
virtual void NextFrame()
Definition: CardActor.cs:90
virtual void IdleFrame()
Definition: CardActor.cs:86
virtual int GetFrame()
Definition: CardActor.cs:98
override void Draw(RenderParam p)
Definition: CardRenderer.cs:49
SourcePref GetPref()
RendererReplacer replacer
Definition: CardRenderer.cs:29
Vector3 position
Definition: CardRenderer.cs:21
void RefreshSprite()
virtual void IdleFrame()
CardActor actor
Definition: CardRenderer.cs:11
void RemoveTC(TC tc)
Definition: Card.cs:11
virtual void SetDir(int d)
Definition: Card.cs:5460
bool ExistsOnMap
Definition: Card.cs:1961
virtual SourcePref Pref
Definition: Card.cs:1983
Point pos
Definition: Card.cs:55
virtual void SetRenderParam(RenderParam p)
Definition: Card.cs:5258
Trait trait
Definition: Card.cs:49
CardRow hat
Definition: Card.cs:59
virtual bool isChara
Definition: Card.cs:1959
Cell Cell
Definition: Card.cs:1931
int dir
Definition: Card.cs:142
virtual CardRow sourceCard
Definition: Card.cs:2007
CardRenderer renderer
Definition: Card.cs:57
TransAnime anime
Definition: CellDetail.cs:21
CellDetail detail
Definition: Cell.cs:92
SourceFloor.Row sourceSurface
Definition: Cell.cs:1059
override void OnEnterScreen()
override void RefreshStateIcon()
static int _animeFramePCC
override void NextFrame()
AnimationCurve hopCurve
override void UpdatePosition(ref Vector3 destPos, RenderParam p)
override void SetFirst(bool first, Vector3 pos)
override void SetOwner(Card c)
override void SetFirst(bool first)
float lastShadowFix2
override void Draw(RenderParam p, ref Vector3 v, bool drawShadow)
Vector3 orgPos
Definition: CharaRenderer.cs:7
static int _animeFramePC
float lastShadowFix
override bool IsMoving
override void Refresh()
new Chara owner
Definition: CharaRenderer.cs:5
static bool smoothmove
static int _animeFrame
override void DrawHeld()
PCCData pccData
float nextframeTimer
Definition: Chara.cs:10
Card held
Definition: Chara.cs:67
float idleTimer
Definition: Chara.cs:117
AIAct ai
Definition: Chara.cs:187
override bool IsPC
Definition: Chara.cs:597
Chara host
Definition: Chara.cs:33
bool CanSeeLos(Card c, int dist=-1)
Definition: Chara.cs:1059
override bool IsPCParty
Definition: Chara.cs:600
override bool flipX
Definition: Chara.cs:532
float actTime
Definition: Chara.cs:163
override bool IsDeadOrSleeping
Definition: Chara.cs:558
bool IsHostile()
Definition: Chara.cs:5884
new GameConfig game
Definition: CoreConfig.cs:596
GraphicSetting graphic
Definition: CoreConfig.cs:594
RenderData pcc_L
Definition: CoreRef.cs:294
RenderData pcc
Definition: CoreRef.cs:292
TCState state
Definition: CoreRef.cs:236
Renderers renderers
Definition: CoreRef.cs:341
TCs tcs
Definition: CoreRef.cs:337
CoreRef refs
Definition: Core.cs:51
CoreConfig config
Definition: Core.cs:70
Definition: EClass.cs:5
static Core core
Definition: EClass.cs:6
static Zone _zone
Definition: EClass.cs:20
static Player player
Definition: EClass.cs:12
static Chara pc
Definition: EClass.cs:14
static bool disableTool
Definition: HotItemHeld.cs:11
bool altHeldPos
Definition: Player.cs:954
Vector3 position
Definition: Player.cs:1016
Definition: Point.cs:9
Point Set(int _x, int _z)
Definition: Point.cs:479
bool Equals(int _x, int _z)
Definition: Point.cs:924
static Transform Spawn(string id, string path, Transform parent)
Definition: PoolManager.cs:86
bool animate
Definition: RenderData.cs:34
void Draw(RenderParam p, int tile)
Definition: RenderData.cs:128
Vector3 offset
Definition: RenderData.cs:18
Vector3 heldPos
Definition: RenderData.cs:24
static Vector3 tempV
Definition: RenderObject.cs:20
static RenderParam currentParam
Definition: RenderObject.cs:18
static float gameDelta
Definition: RenderObject.cs:6
RenderData data
Definition: RenderObject.cs:34
static float gameSpeed
Definition: RenderObject.cs:8
static GameSetting.RenderSetting.AnimeSetting animeSetting
Definition: RenderObject.cs:12
static GameSetting.RenderSetting renderSetting
Definition: RenderObject.cs:14
int liquidLv
Definition: RenderParam.cs:7
float shadowFix
Definition: RenderParam.cs:21
RenderData renderData
Definition: RenderRow.cs:71
bool ContainsTag(string _tag)
Definition: RenderRow.cs:148
int[] _tiles
Definition: RenderRow.cs:12
Definition: Scene.cs:8
static bool skipAnime
Definition: Scene.cs:25
float hatY
Definition: SourcePref.cs:83
virtual bool IsRegion
Definition: Spatial.cs:501
void SetSprite(MultiSprite _sprites)
Definition: TCState.cs:13
virtual bool ShowAsTool
Definition: Trait.cs:323
virtual bool NoHeldDir
Definition: Trait.cs:339
Definition: Zone.cs:12
static CardRow sourceHat
Definition: Zone.cs:29