Elin Modding Docs Doc
Loading...
Searching...
No Matches
CharaRenderer.cs
1using System;
2using UnityEngine;
3
4// Token: 0x0200018E RID: 398
6{
7 // Token: 0x170002C6 RID: 710
8 // (get) Token: 0x06000B72 RID: 2930 RVA: 0x000474A1 File Offset: 0x000456A1
9 public int currentDir
10 {
11 get
12 {
13 if (this.hasActor)
14 {
15 return this.actor.currentDir;
16 }
17 if (!this.owner.flipX)
18 {
19 return 1;
20 }
21 return 0;
22 }
23 }
24
25 // Token: 0x06000B73 RID: 2931 RVA: 0x000474C8 File Offset: 0x000456C8
26 public override void SetOwner(Card c)
27 {
28 this.owner = (c as Chara);
29 if (this.pccData != null)
30 {
31 this.data = ((this.pccData.GetBodySet2().id == "unique") ? EClass.core.refs.renderers.pcc_L : EClass.core.refs.renderers.pcc);
32 }
33 base.SetOwner(c);
34 }
35
36 // Token: 0x06000B74 RID: 2932 RVA: 0x0004753C File Offset: 0x0004573C
37 public override void OnEnterScreen()
38 {
39 base.OnEnterScreen();
40 if (!this.ignoreFirst)
41 {
42 this.first = true;
43 }
44 this.ignoreFirst = false;
45 this.nextframeTimer = 0f;
46 if (this.owner.ExistsOnMap && this.owner.IsHostile())
47 {
48 EClass.player.enemySpotted = true;
49 }
50 }
51
52 // Token: 0x06000B75 RID: 2933 RVA: 0x00047598 File Offset: 0x00045798
53 public override void Draw(RenderParam p, ref Vector3 v, bool drawShadow)
54 {
55 base.Draw(p, ref v, drawShadow);
56 if (Zone.sourceHat != null && this.owner.Pref.hatY != 0f && this.owner.host == null)
57 {
58 this.DrawHat();
59 }
60 if (this.owner.IsPC)
61 {
62 if (this.owner.held != null && !this.owner.IsDeadOrSleeping && (!this.owner.held.trait.ShowAsTool || HotItemHeld.disableTool))
63 {
64 this.DrawHeld();
65 return;
66 }
67 }
68 else if (this.owner.held != null && !this.owner.IsDeadOrSleeping && !this.owner.held.trait.ShowAsTool)
69 {
70 this.DrawHeld();
71 }
72 }
73
74 // Token: 0x06000B76 RID: 2934 RVA: 0x00047662 File Offset: 0x00045862
75 public override void NextFrame()
76 {
77 base.NextFrame();
78 this.owner.idleTimer = RenderObject.animeSetting.idleTime;
79 }
80
81 // Token: 0x170002C7 RID: 711
82 // (get) Token: 0x06000B77 RID: 2935 RVA: 0x0004767F File Offset: 0x0004587F
83 public override bool IsMoving
84 {
85 get
86 {
87 return this.isMoving;
88 }
89 }
90
91 // Token: 0x06000B78 RID: 2936 RVA: 0x00047688 File Offset: 0x00045888
92 public override void UpdatePosition(ref Vector3 destPos, RenderParam p)
93 {
94 bool isPC = this.owner.IsPC;
95 int num = isPC ? CharaRenderer._animeFramePC : (this.hasActor ? CharaRenderer._animeFramePCC : CharaRenderer._animeFrame);
96 bool flag = isPC || num >= 10;
97 if (num == 0 || Scene.skipAnime || this.first || !this.data.animate || (this.owner.IsDeadOrSleeping && this.pccData != null && !this.owner.IsPC))
98 {
99 this.first = false;
100 this.position = destPos;
101 if (isPC)
102 {
103 EClass.player.position = this.position;
104 }
105 this.movePoint.Set(this.owner.pos);
106 this.step = 9999999;
107 this.isMoving = false;
108 this.moveTimer = 0f;
109 base.RefreshSprite();
110 p.x = this.position.x;
111 p.y = this.position.y;
112 p.z = this.position.z;
113 this.lastShadowFix = (this.lastShadowFix2 = p.shadowFix);
114 return;
115 }
116 if (!this.owner.pos.Equals(this.movePoint))
117 {
118 if (RenderObject.gameSpeed > 1f)
119 {
120 p.shadowFix = (this.lastShadowFix = 0f);
121 }
122 else
123 {
124 p.shadowFix = (this.lastShadowFix = this.lastShadowFix2);
125 }
126 this.movePoint.Set(this.owner.pos);
127 this.orgPos = this.position;
128 this.actTime = this.owner.actTime;
129 base.RefreshSprite();
130 this.step = 1;
131 if (!this.isMoving)
132 {
133 this.isMoving = true;
134 this.nextframeTimer = (RenderObject.animeSetting.nextFrameInterval + this.actTime / 4f) / 2f;
135 }
136 this.moveTimer = 0f;
137 }
138 if (num < 100)
139 {
140 num = (int)((float)num / 0.3f * this.actTime);
141 }
142 float num2 = (this.actTime + ((!isPC && this.owner.IsPCParty) ? RenderObject.animeSetting.animeExtraTimeParty : RenderObject.animeSetting.animeExtraTime) * RenderObject.gameSpeed) / (float)num;
143 this.moveTimer += RenderObject.gameDelta;
144 if (this.step >= num)
145 {
146 if (this.position == destPos)
147 {
148 if (this.isMoving && isPC)
149 {
150 EClass.player.position = this.position;
151 }
152 this.isMoving = false;
153 this.moveTimer = 0f;
154 }
155 else if (!flag)
156 {
157 this.position = destPos;
158 }
159 else if (this.moveTimer >= num2)
160 {
161 int num3 = (int)(this.moveTimer / num2);
162 this.moveTimer -= (float)num3 * num2;
163 if (Vector3.Distance(this.position, destPos) < RenderObject.animeSetting.destRadius)
164 {
165 this.position = destPos;
166 if (this.isMoving && isPC)
167 {
168 EClass.player.position = this.position;
169 }
170 this.isMoving = false;
171 }
172 else
173 {
174 this.position.z = destPos.z;
175 Vector3 position = Vector3.MoveTowards(this.position, destPos, (float)num3 * RenderObject.animeSetting.slowSpeed / (float)this.step);
176 this.position = position;
177 }
178 }
179 if (this.owner.idleTimer > 0f)
180 {
181 this.owner.idleTimer -= RenderObject.gameDelta;
182 if (flag && this.owner.idleTimer <= 0f)
183 {
184 this.IdleFrame();
185 this.nextframeTimer = 0f;
186 }
187 }
188 p.x = this.position.x;
189 p.y = this.position.y;
190 p.z = this.position.z;
191 this.lastShadowFix = (this.lastShadowFix2 = p.shadowFix);
192 if (isPC)
193 {
194 CellDetail detail = EClass.pc.Cell.detail;
195 if (detail == null || detail.anime == null)
196 {
197 this.position.z = destPos.z;
198 Vector3 position2 = Vector3.MoveTowards(this.position, destPos, 0.1f);
199 this.position = position2;
200 EClass.player.position = Vector3.Lerp(EClass.player.position, this.position, 0.6f);
201 }
202 }
203 return;
204 }
205 if (this.moveTimer >= num2)
206 {
207 int num4 = (int)(this.moveTimer / num2);
208 this.step += num4;
209 this.moveTimer -= (float)num4 * num2;
210 if (this.step >= num)
211 {
212 this.step = num;
213 }
214 }
215 this.owner.idleTimer = RenderObject.animeSetting.idleTime;
216 float num5 = (float)this.step / (float)num;
217 p.shadowFix = p.shadowFix * num5 + this.lastShadowFix * (1f - num5);
218 this.lastShadowFix2 = p.shadowFix;
219 Vector3 position3 = this.orgPos + (destPos - this.orgPos) * num5 * ((flag && CharaRenderer.smoothmove) ? RenderObject.animeSetting.fixedMove : 1f);
220 if (destPos.z < this.orgPos.z)
221 {
222 position3.z = this.orgPos.z + (destPos.z - this.orgPos.z) * RenderObject.animeSetting.gradientZForward.Evaluate(num5);
223 }
224 else
225 {
226 position3.z = this.orgPos.z + (destPos.z - this.orgPos.z) * RenderObject.animeSetting.gradientZBack.Evaluate(num5);
227 }
228 this.position = position3;
229 if (this.hasActor)
230 {
231 if (EClass.core.config.graphic.spriteFrameMode == 0)
232 {
233 this.nextframeTimer += RenderObject.gameDelta * 0.5f;
234 float nextFrameInterval = RenderObject.animeSetting.nextFrameInterval;
235 if (this.nextframeTimer > nextFrameInterval)
236 {
237 if (this.owner.ai is AI_Trolley)
238 {
239 this.actor.IdleFrame();
240 }
241 else
242 {
243 this.actor.NextFrame();
244 }
245 this.nextframeTimer -= nextFrameInterval;
246 }
247 }
248 else
249 {
250 this.nextframeTimer += RenderObject.gameDelta;
251 float num6 = RenderObject.animeSetting.nextFrameInterval + this.actTime / 4f * (0.5f + RenderObject.gameSpeed / 2f);
252 if (this.nextframeTimer > num6)
253 {
254 if (this.owner.ai is AI_Trolley)
255 {
256 this.actor.IdleFrame();
257 }
258 else
259 {
260 this.actor.NextFrame();
261 }
262 this.nextframeTimer -= num6;
263 }
264 }
265 }
266 p.x = this.position.x;
267 p.y = this.position.y;
268 p.z = this.position.z;
269 if (isPC)
270 {
271 EClass.player.position = position3;
272 return;
273 }
274 if (!this.hasActor && num >= 5 && this.hopCurve != null)
275 {
276 p.y += this.hopCurve.Evaluate(num5) * RenderObject.animeSetting.hopStrength;
277 }
278 }
279
280 // Token: 0x06000B79 RID: 2937 RVA: 0x00047E10 File Offset: 0x00046010
281 public void DrawHat()
282 {
283 if (this.pccData != null && this.owner.IsDeadOrSleeping)
284 {
285 return;
286 }
287 CardRow sourceHat = Zone.sourceHat;
288 SourcePref pref = sourceHat.pref;
289 bool flag = this.currentDir == 1 || this.currentDir == 3;
290 int liquidLv = RenderObject.currentParam.liquidLv;
291 float num = (this.replacer != null) ? this.replacer.pref.hatY : this.owner.Pref.hatY;
292 if (this.pccData != null)
293 {
294 num += RenderObject.renderSetting.hatPos[this.actor.GetFrame()].y;
295 }
296 RenderObject.currentParam.liquidLv = 0;
297 RenderObject.currentParam.y += num;
298 RenderObject.currentParam.tile = (float)(sourceHat._tiles[this.owner.uid % sourceHat._tiles.Length] * (flag ? -1 : 1));
299 sourceHat.renderData.Draw(RenderObject.currentParam);
300 RenderObject.currentParam.y -= num;
301 RenderObject.currentParam.liquidLv = liquidLv;
302 }
303
304 // Token: 0x06000B7A RID: 2938 RVA: 0x00047F30 File Offset: 0x00046130
305 public override void DrawHeld()
306 {
307 int currentDir = this.currentDir;
308 RenderData data = this.owner.held.renderer.data;
309 SourcePref pref = this.owner.held.Pref;
310 bool flag = currentDir == 1 || currentDir == 3;
311 if (this.owner.held.isChara)
312 {
313 Vector3[] array = EClass.player.altHeldPos ? RenderObject.renderSetting.heldPosChara2 : RenderObject.renderSetting.heldPosChara;
314 RenderObject.currentParam.x += array[currentDir].x;
315 RenderObject.currentParam.y += array[currentDir].y;
316 RenderObject.currentParam.z += array[currentDir].z + this.data.offset.z - data.offset.z;
317 if (EClass.player.altHeldPos)
318 {
319 this.owner.held.SetDir((this.owner.dir == 0) ? 2 : ((this.owner.dir == 1) ? 1 : ((this.owner.dir == 2) ? 0 : 3)));
320 }
321 else
322 {
323 this.owner.held.SetDir((this.owner.dir == 0) ? 2 : this.owner.dir);
324 }
325 }
326 else
327 {
328 Vector3[] heldPos = RenderObject.renderSetting.heldPos;
329 if (this.hasActor)
330 {
331 RenderObject.currentParam.x += heldPos[currentDir].x;
332 RenderObject.currentParam.y += heldPos[currentDir].y + 0.02f * (float)(this.actor.GetFrame() % 2);
333 RenderObject.currentParam.z += heldPos[currentDir].z + this.data.offset.z - data.offset.z;
334 }
335 else
336 {
337 RenderObject.currentParam.x += heldPos[4].x;
338 RenderObject.currentParam.y += heldPos[4].y;
339 RenderObject.currentParam.z += heldPos[4].z + this.data.offset.z - data.offset.z;
340 }
341 if (this.owner.held.trait.NoHeldDir || !this.owner.held.sourceCard.ContainsTag("noHeldDir"))
342 {
343 this.owner.held.dir = (this.owner.flipX ? 1 : 0);
344 }
345 }
346 if (this.owner.Cell.sourceSurface.tileType.IsDeepWater)
347 {
348 return;
349 }
350 int liquidLv = RenderObject.currentParam.liquidLv;
351 if (this.owner.held.isChara)
352 {
353 RenderObject.currentParam.liquidLv = 0;
354 }
355 this.owner.held.SetRenderParam(RenderObject.currentParam);
356 RenderObject.currentParam.x += data.heldPos.x - data.offset.x + (flag ? 0.01f : -0.01f) * (float)pref.equipX;
357 RenderObject.currentParam.y += data.heldPos.y - data.offset.y + 0.01f * (float)pref.equipY;
358 RenderObject.currentParam.z += data.heldPos.z;
359 RenderObject.tempV.x = RenderObject.currentParam.x;
360 RenderObject.tempV.y = RenderObject.currentParam.y;
361 RenderObject.tempV.z = RenderObject.currentParam.z;
362 this.owner.held.renderer.Draw(RenderObject.currentParam, ref RenderObject.tempV, false);
363 RenderObject.currentParam.liquidLv = liquidLv;
364 }
365
366 // Token: 0x06000B7B RID: 2939 RVA: 0x00048370 File Offset: 0x00046570
367 public override void RefreshStateIcon()
368 {
369 if (!this.isSynced)
370 {
371 return;
372 }
373 TCState tcstate = base.GetTC<TCState>();
374 MultiSprite stateIcon = this.owner.ai.GetStateIcon();
375 if (stateIcon == null)
376 {
377 if (tcstate)
378 {
379 base.RemoveTC(tcstate);
380 }
381 return;
382 }
383 if (!tcstate)
384 {
385 tcstate = base.AddTC<TCState>(PoolManager.Spawn<TCState>(EClass.core.refs.tcs.state, null));
386 }
387 tcstate.SetSprite(stateIcon);
388 }
389
390 // Token: 0x06000B7C RID: 2940 RVA: 0x000483E1 File Offset: 0x000465E1
391 public override void SetFirst(bool first)
392 {
393 this.first = first;
394 this.ignoreFirst = !first;
395 }
396
397 // Token: 0x06000B7D RID: 2941 RVA: 0x000483F4 File Offset: 0x000465F4
398 public override void SetFirst(bool first, Vector3 pos)
399 {
400 this.first = first;
401 this.ignoreFirst = !first;
402 this.position = pos;
403 if (this.owner.IsPC)
404 {
405 EClass.player.position = this.position;
406 }
407 this.movePoint.Set(this.owner.pos);
408 this.step = 9999999;
409 this.isMoving = false;
410 this.moveTimer = 0f;
411 }
412
413 // Token: 0x06000B7E RID: 2942 RVA: 0x0004846A File Offset: 0x0004666A
414 public override void Refresh()
415 {
416 }
417
418 // Token: 0x04000A7B RID: 2683
419 public new Chara owner;
420
421 // Token: 0x04000A7C RID: 2684
422 public Vector3 orgPos;
423
424 // Token: 0x04000A7D RID: 2685
425 private float moveTimer;
426
427 // Token: 0x04000A7E RID: 2686
428 private float nextframeTimer;
429
430 // Token: 0x04000A7F RID: 2687
431 public bool first = true;
432
433 // Token: 0x04000A80 RID: 2688
434 public bool ignoreFirst;
435
436 // Token: 0x04000A81 RID: 2689
437 public Point movePoint = new Point();
438
439 // Token: 0x04000A82 RID: 2690
440 public AnimationCurve hopCurve;
441
442 // Token: 0x04000A83 RID: 2691
443 public PCCData pccData;
444
445 // Token: 0x04000A84 RID: 2692
446 private float actTime = 0.3f;
447
448 // Token: 0x04000A85 RID: 2693
449 private float lastShadowFix;
450
451 // Token: 0x04000A86 RID: 2694
452 private float lastShadowFix2;
453
454 // Token: 0x04000A87 RID: 2695
455 public int step;
456
457 // Token: 0x04000A88 RID: 2696
458 public bool isMoving;
459
460 // Token: 0x04000A89 RID: 2697
461 public static int _animeFramePC;
462
463 // Token: 0x04000A8A RID: 2698
464 public static int _animeFramePCC;
465
466 // Token: 0x04000A8B RID: 2699
467 public static int _animeFrame;
468
469 // Token: 0x04000A8C RID: 2700
470 public static bool smoothmove;
471}
Definition Card.cs:13
Definition Chara.cs:12
Definition Point.cs:11
Definition Scene.cs:10
Definition Zone.cs:14