Elin Decompiled Documentation EA 23.264 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 owner.spriteReplacer = null;
63 if (pccData != null)
64 {
65 data = ((pccData.GetBodySet2().id == "unique") ? EClass.core.refs.renderers.pcc_L : EClass.core.refs.renderers.pcc);
66 }
67 else if (replacer == null && !owner.c_idSpriteReplacer.IsEmpty())
68 {
70 if (spriteReplacer != null)
71 {
72 data = ResourceCache.Load<RenderData>("Scene/Render/Data/chara_custom_" + ((spriteReplacer.data.GetSprite().texture.height <= 128) ? "128" : "256"));
73 owner.spriteReplacer = spriteReplacer;
74 }
75 }
76 if (owner.source.moveAnime == "hop")
77 {
79 }
80 base.SetOwner(c);
81 }
82
83 public override void OnEnterScreen()
84 {
85 base.OnEnterScreen();
86 if (!ignoreFirst)
87 {
88 first = true;
89 }
90 ignoreFirst = false;
91 nextframeTimer = 0f;
93 {
94 EClass.player.enemySpotted = true;
95 }
96 }
97
98 public override void Draw(RenderParam p, ref Vector3 v, bool drawShadow)
99 {
100 base.Draw(p, ref v, drawShadow);
101 if ((Zone.sourceHat != null || owner.hat != null) && owner.host == null)
102 {
103 DrawHat();
104 }
105 if (owner.IsPC)
106 {
108 {
109 DrawHeld();
110 }
111 }
112 else if (owner.held != null && !owner.IsDeadOrSleeping && !owner.held.trait.ShowAsTool)
113 {
114 DrawHeld();
115 }
116 }
117
118 public override void NextFrame()
119 {
120 base.NextFrame();
121 owner.idleTimer = RenderObject.animeSetting.idleTime;
122 }
123
124 public override void UpdatePosition(ref Vector3 destPos, RenderParam p)
125 {
126 bool isPC = owner.IsPC;
127 int num = (isPC ? _animeFramePC : ((pccData != null) ? _animeFramePCC : _animeFrame));
128 bool flag = isPC || num >= 10;
129 if (num == 0 || Scene.skipAnime || first || !data.animate || (owner.IsDeadOrSleeping && pccData != null && !owner.IsPC))
130 {
131 first = false;
132 position = destPos;
133 if (isPC)
134 {
135 EClass.player.position = position;
136 }
138 step = 9999999;
139 isMoving = false;
140 moveTimer = 0f;
142 p.x = position.x;
143 p.y = position.y;
144 p.z = position.z;
146 return;
147 }
149 {
150 if (RenderObject.gameSpeed > 1f)
151 {
152 p.shadowFix = (lastShadowFix = 0f);
153 }
154 else
155 {
156 p.shadowFix = (lastShadowFix = lastShadowFix2);
157 }
161 if (isPC && EClass.player.renderExtraTime > 0f)
162 {
164 }
166 step = 1;
167 if (!isMoving)
168 {
169 isMoving = true;
170 if (!isPC || EClass.player.renderExtraTime <= 0f)
171 {
172 nextframeTimer = (RenderObject.animeSetting.nextFrameInterval + actTime / 4f) / 2f;
173 }
174 }
175 moveTimer = 0f;
176 }
177 if (num < 100)
178 {
179 num = (int)((float)num / 0.3f * actTime);
180 }
181 float num2 = (actTime + ((!isPC && owner.IsPCParty) ? RenderObject.animeSetting.animeExtraTimeParty : RenderObject.animeSetting.animeExtraTime) * RenderObject.gameSpeed) / (float)num;
183 if (step >= num)
184 {
185 if (position == destPos)
186 {
187 if (isMoving && isPC)
188 {
189 EClass.player.position = position;
190 }
191 isMoving = false;
192 moveTimer = 0f;
193 }
194 else if (!flag)
195 {
196 position = destPos;
197 }
198 else if (moveTimer >= num2)
199 {
200 int num3 = (int)(moveTimer / num2);
201 moveTimer -= (float)num3 * num2;
202 if (Vector3.Distance(position, destPos) < RenderObject.animeSetting.destRadius)
203 {
204 position = destPos;
205 if (isMoving && isPC)
206 {
207 EClass.player.position = position;
208 }
209 isMoving = false;
210 }
211 else
212 {
213 position.z = destPos.z;
214 Vector3 vector = Vector3.MoveTowards(position, destPos, (float)num3 * RenderObject.animeSetting.slowSpeed / (float)step);
215 position = vector;
216 }
217 }
218 if (owner.idleTimer > 0f)
219 {
220 owner.idleTimer -= RenderObject.gameDelta;
221 if (flag && owner.idleTimer <= 0f)
222 {
223 IdleFrame();
224 nextframeTimer = 0f;
225 }
226 }
227 p.x = position.x;
228 p.y = position.y;
229 p.z = position.z;
231 if (isPC)
232 {
233 CellDetail detail = EClass.pc.Cell.detail;
234 if (detail == null || detail.anime == null)
235 {
236 position.z = destPos.z;
237 Vector3 vector2 = Vector3.MoveTowards(position, destPos, 0.1f);
238 position = vector2;
239 EClass.player.position = Vector3.Lerp(EClass.player.position, position, 0.6f);
240 }
241 }
242 return;
243 }
244 if (moveTimer >= num2)
245 {
246 int num4 = (int)(moveTimer / num2);
247 step += num4;
248 moveTimer -= (float)num4 * num2;
249 if (step >= num)
250 {
251 step = num;
252 }
253 }
254 owner.idleTimer = RenderObject.animeSetting.idleTime;
255 float num5 = (float)step / (float)num;
256 p.shadowFix = p.shadowFix * num5 + lastShadowFix * (1f - num5);
258 Vector3 vector3 = orgPos + (destPos - orgPos) * num5 * ((flag && smoothmove) ? RenderObject.animeSetting.fixedMove : 1f);
259 if (destPos.z < orgPos.z)
260 {
261 vector3.z = orgPos.z + (destPos.z - orgPos.z) * RenderObject.animeSetting.gradientZForward.Evaluate(num5);
262 }
263 else
264 {
265 vector3.z = orgPos.z + (destPos.z - orgPos.z) * RenderObject.animeSetting.gradientZBack.Evaluate(num5);
266 }
267 position = vector3;
268 if (hasActor)
269 {
271 {
272 nextframeTimer += RenderObject.gameDelta * 0.5f;
273 float nextFrameInterval = RenderObject.animeSetting.nextFrameInterval;
274 if (nextframeTimer > nextFrameInterval)
275 {
276 if (owner.ai is AI_Trolley)
277 {
279 }
280 else
281 {
283 }
284 nextframeTimer -= nextFrameInterval;
285 }
286 }
287 else
288 {
290 float num6 = RenderObject.animeSetting.nextFrameInterval + actTime / 4f * (0.5f + RenderObject.gameSpeed / 2f);
291 if (nextframeTimer > num6)
292 {
293 if (owner.ai is AI_Trolley)
294 {
296 }
297 else
298 {
300 }
301 nextframeTimer -= num6;
302 }
303 }
304 }
305 p.x = position.x;
306 p.y = position.y;
307 p.z = position.z;
308 if (isPC)
309 {
310 EClass.player.position = vector3;
311 }
312 else if (!hasActor && num >= 5 && hopCurve != null)
313 {
314 p.y += hopCurve.Evaluate(num5) * RenderObject.animeSetting.hopStrength;
315 }
316 }
317
318 public void DrawHat()
319 {
320 if (pccData != null)
321 {
323 {
324 return;
325 }
326 }
327 else if (owner.conSleep != null && owner.host == null && owner.pos.Equals(EClass.pc.pos) && owner.IsHuman && owner.GetBool(123))
328 {
329 return;
330 }
331 CardRow cardRow = Zone.sourceHat ?? owner.hat;
332 SourcePref pref = GetPref();
333 if (pref.hatY != 0f)
334 {
335 bool flag = currentDir == 1 || currentDir == 3;
336 int liquidLv = RenderObject.currentParam.liquidLv;
337 float num = ((replacer != null) ? replacer.pref.hatY : pref.hatY);
338 if (pccData != null)
339 {
340 num += RenderObject.renderSetting.hatPos[actor.GetFrame()].y;
341 }
342 RenderObject.currentParam.liquidLv = 0;
343 RenderObject.currentParam.x += 0.01f * (float)pref.equipX;
344 RenderObject.currentParam.y += num + 0.01f * (float)(pref.equipY + cardRow.pref.equipY);
345 RenderObject.currentParam.z += -0.09f;
346 RenderObject.currentParam.tile = cardRow._tiles[owner.uid % cardRow._tiles.Length] * ((!flag) ? 1 : (-1));
347 RenderObject.currentParam.mat = cardRow.DefaultMaterial;
348 RenderObject.currentParam.matColor = cardRow.GetColorInt(RenderObject.currentParam.mat);
350 RenderObject.currentParam.x -= 0.01f * (float)pref.equipX;
351 RenderObject.currentParam.y -= num + 0.01f * (float)(pref.equipY + cardRow.pref.equipY);
352 RenderObject.currentParam.z -= -0.09f;
353 RenderObject.currentParam.liquidLv = liquidLv;
354 }
355 }
356
357 public override void DrawHeld()
358 {
359 Card held = owner.held;
360 int num = currentDir;
361 RenderData renderData = held.renderer.data;
362 SourcePref pref = held.Pref;
363 bool flag = num == 1 || num == 3;
364 if (held.isChara)
365 {
366 Vector3[] array = (EClass.player.altHeldPos ? RenderObject.renderSetting.heldPosChara2 : RenderObject.renderSetting.heldPosChara);
367 RenderObject.currentParam.x += array[num].x;
368 RenderObject.currentParam.y += array[num].y;
369 RenderObject.currentParam.z += array[num].z + data.offset.z - renderData.offset.z;
371 {
372 held.SetDir((owner.dir == 0) ? 2 : ((owner.dir == 1) ? 1 : ((owner.dir != 2) ? 3 : 0)));
373 }
374 else
375 {
376 held.SetDir((owner.dir == 0) ? 2 : owner.dir);
377 }
378 }
379 else
380 {
381 Vector3[] heldPos = RenderObject.renderSetting.heldPos;
382 if (hasActor)
383 {
384 RenderObject.currentParam.x += heldPos[num].x;
385 RenderObject.currentParam.y += heldPos[num].y + 0.02f * (float)(actor.GetFrame() % 2);
386 RenderObject.currentParam.z += heldPos[num].z + data.offset.z - renderData.offset.z;
387 }
388 else
389 {
390 RenderObject.currentParam.x += heldPos[4].x;
391 RenderObject.currentParam.y += heldPos[4].y;
392 RenderObject.currentParam.z += heldPos[4].z + data.offset.z - renderData.offset.z;
393 }
394 if (held.trait.NoHeldDir || !held.sourceCard.ContainsTag("noHeldDir"))
395 {
396 held.dir = (owner.flipX ? 1 : 0);
397 }
398 }
399 if (!owner.Cell.sourceSurface.tileType.IsDeepWater)
400 {
401 int liquidLv = RenderObject.currentParam.liquidLv;
402 if (held.isChara)
403 {
404 RenderObject.currentParam.liquidLv = 0;
405 }
407 RenderObject.currentParam.x += renderData.heldPos.x - renderData.offset.x + (flag ? 0.01f : (-0.01f)) * (float)pref.equipX;
408 RenderObject.currentParam.y += renderData.heldPos.y - renderData.offset.y + 0.01f * (float)pref.equipY;
409 RenderObject.currentParam.z += renderData.heldPos.z;
410 RenderObject.tempV.x = RenderObject.currentParam.x;
411 RenderObject.tempV.y = RenderObject.currentParam.y;
412 RenderObject.tempV.z = RenderObject.currentParam.z;
413 held.renderer.Draw(RenderObject.currentParam, ref RenderObject.tempV, drawShadow: false);
414 RenderObject.currentParam.liquidLv = liquidLv;
415 }
416 }
417
418 public override void RefreshStateIcon()
419 {
420 if (!isSynced)
421 {
422 return;
423 }
424 TCState tCState = GetTC<TCState>();
425 MultiSprite stateIcon = owner.ai.GetStateIcon();
426 if (stateIcon == null)
427 {
428 if ((bool)tCState)
429 {
430 RemoveTC(tCState);
431 }
432 return;
433 }
434 if (!tCState)
435 {
436 tCState = AddTC<TCState>(PoolManager.Spawn(EClass.core.refs.tcs.state));
437 }
438 tCState.SetSprite(stateIcon);
439 }
440
441 public override void SetFirst(bool first)
442 {
443 this.first = first;
445 }
446
447 public override void SetFirst(bool first, Vector3 pos)
448 {
449 this.first = first;
451 position = pos;
452 if (owner.IsPC)
453 {
454 EClass.player.position = position;
455 }
457 step = 9999999;
458 isMoving = false;
459 moveTimer = 0f;
460 }
461
462 public override void Refresh()
463 {
464 }
465}
override MultiSprite GetStateIcon()
Definition: AIAct.cs:129
bool GetBool(int id)
Definition: BaseCard.cs:15
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:6370
bool ExistsOnMap
Definition: Card.cs:2086
string c_idSpriteReplacer
Definition: Card.cs:1558
virtual SourcePref Pref
Definition: Card.cs:2108
Point pos
Definition: Card.cs:60
virtual void SetRenderParam(RenderParam p)
Definition: Card.cs:6143
Trait trait
Definition: Card.cs:54
CardRow hat
Definition: Card.cs:64
virtual bool isChara
Definition: Card.cs:2084
Cell Cell
Definition: Card.cs:2056
int dir
Definition: Card.cs:147
virtual CardRow sourceCard
Definition: Card.cs:2132
CardRenderer renderer
Definition: Card.cs:62
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:70
float idleTimer
Definition: Chara.cs:122
AIAct ai
Definition: Chara.cs:204
override bool IsPC
Definition: Chara.cs:614
Chara host
Definition: Chara.cs:33
bool CanSeeLos(Card c, int dist=-1)
Definition: Chara.cs:1252
override bool IsPCParty
Definition: Chara.cs:617
bool IsHuman
Definition: Chara.cs:881
override bool flipX
Definition: Chara.cs:549
ConSleep conSleep
Definition: Chara.cs:102
float actTime
Definition: Chara.cs:180
override bool IsDeadOrSleeping
Definition: Chara.cs:575
SourceChara.Row source
Definition: Chara.cs:160
bool IsHostile()
Definition: Chara.cs:6495
new GameConfig game
Definition: CoreConfig.cs:609
GraphicSetting graphic
Definition: CoreConfig.cs:607
RenderData pcc_L
Definition: CoreRef.cs:300
RenderData pcc
Definition: CoreRef.cs:298
TCState state
Definition: CoreRef.cs:240
Renderers renderers
Definition: CoreRef.cs:357
TCs tcs
Definition: CoreRef.cs:353
CoreRef refs
Definition: Core.cs:51
CoreConfig config
Definition: Core.cs:70
Definition: EClass.cs:6
static Core core
Definition: EClass.cs:7
static Zone _zone
Definition: EClass.cs:21
static Player player
Definition: EClass.cs:13
static Chara pc
Definition: EClass.cs:15
static GameSetting setting
Definition: EClass.cs:35
RenderSetting render
Definition: GameSetting.cs:301
static bool disableTool
Definition: HotItemHeld.cs:11
float renderExtraTime
Definition: Player.cs:1203
bool altHeldPos
Definition: Player.cs:1153
Vector3 position
Definition: Player.cs:1217
Definition: Point.cs:9
Point Set(int _x, int _z)
Definition: Point.cs:503
bool Equals(int _x, int _z)
Definition: Point.cs:960
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
SourceMaterial.Row mat
Definition: RenderParam.cs:17
int liquidLv
Definition: RenderParam.cs:7
float shadowFix
Definition: RenderParam.cs:21
int GetColorInt(SourceMaterial.Row mat)
Definition: RenderRow.cs:429
RenderData renderData
Definition: RenderRow.cs:71
SourcePref pref
Definition: RenderRow.cs:68
bool ContainsTag(string _tag)
Definition: RenderRow.cs:148
int[] _tiles
Definition: RenderRow.cs:12
SourceMaterial.Row DefaultMaterial
Definition: RenderRow.cs:86
Definition: Scene.cs:8
static bool skipAnime
Definition: Scene.cs:25
float hatY
Definition: SourcePref.cs:87
virtual bool IsRegion
Definition: Spatial.cs:515
Sprite GetSprite(bool snow=false)
Definition: SpriteData.cs:67
SpriteData data
static Dictionary< string, SpriteReplacer > dictSkins
void SetSprite(MultiSprite _sprites)
Definition: TCState.cs:13
virtual bool ShowAsTool
Definition: Trait.cs:347
virtual bool NoHeldDir
Definition: Trait.cs:363
Definition: Zone.cs:12
static CardRow sourceHat
Definition: Zone.cs:29