10 public Vector3 PositionCenter()
12 return new Vector3(this.position.x +
this.data.size.x +
this.data.offset.x * 0.5f,
this.position.y +
this.data.size.y +
this.data.offset.y,
this.position.z);
17 public virtual bool IsMoving
26 public virtual void SetOwner(
Card c)
29 if (this.data ==
null)
31 this.data = this.owner.sourceCard.renderData;
33 this.isChara = c.isChara;
34 this.usePass = (this.data.pass !=
null);
40 Vector3 newVector = p.NewVector3;
41 this.Draw(p, ref newVector,
true);
45 public override void RenderToRenderCam(
RenderParam p)
47 Vector3 renderPos =
EClass.scene.camSupport.renderPos;
48 if (this.data.multiSize)
55 this.Draw(p, ref renderPos,
false);
59 public override void Draw(
RenderParam p, ref Vector3 v,
bool drawShadow)
67 RenderObject.currentParam = p;
68 p.dir = this.owner.dir;
82 if (this.isChara && this.owner.parent ==
EClass.game.activeZone)
84 if (this.owner.Chara.bossText && !
EClass.ui.IsActive && !
SplashText.Instance)
87 splashText.textSmall.text = this.owner.Chara.Aka.ToTitleCase(
true);
88 splashText.textBig.text = this.owner.Chara.NameSimple.ToTitleCase(
false);
89 this.owner.Chara.bossText =
false;
91 if (this.owner.Chara.host ==
null)
93 this.UpdatePosition(ref v, p);
96 if (ai_Trolley !=
null && ai_Trolley.IsRunning)
99 if (ai_Trolley.trolley.HideChara)
103 this.actor.SetActive(
false);
110 this.actor.SetActive(
true);
115 p.x = (this.position.x = v.x);
116 p.y = (this.position.y = v.y);
117 p.z = (this.position.z = v.z);
119 if (this.anime !=
null)
123 if (!this.isChara && !this.owner.IsInstalled &&
this.owner.category.tileDummy != 0 && !
this.owner.isRoofItem &&
this.owner.ExistsOnMap &&
this.owner.trait.UseDummyTile)
127 p.tile = (float)rendererObjDummy.tile;
131 this.actor.SetActive(
false);
133 rendererObjDummy.Draw(p);
134 if (drawShadow && !this.owner.pos.cell.ignoreObjShadow)
136 EClass.scene.screenElin.tileMap.passShadow.AddShadow(this.position.x + rendererObjDummy.offsetShadow.x,
this.position.y + rendererObjDummy.offsetShadow.y + p.shadowFix,
this.position.z + rendererObjDummy.offsetShadow.z,
ShadowData.Instance.items[rendererObjDummy.shadowPref.shadow], rendererObjDummy.shadowPref, 0, p.snow);
141 SubPassData.Current = this.owner.GetSubPassData();
144 int prefIndex = this.owner.PrefIndex;
145 if (
Player.seedHallucination != 0 &&
this.<Draw>g__CanBeHallucinated|18_0())
147 Rand.SetSeed(
Player.seedHallucination +
this.owner.uid);
153 if (this.owner.isChara)
156 if (!cardRow.multisize)
164 if (cardRow.tileType ==
this.owner.TileType)
173 if (cardRow.chance != 0 && cardRow._tiles.Length != 0 && cardRow.idActor.IsEmpty() && cardRow.idExtra.IsEmpty() &&
SubPassData.Current ==
SubPassData.Default && !(cardRow._idRenderData !=
this.owner.sourceCard._idRenderData))
182 renderData = cardRow.renderData;
184 cardRow.model.dir = this.owner.dir;
185 cardRow.model.SetRenderParam(p);
186 prefIndex = cardRow.model.PrefIndex;
192 if (!this.owner.c_idRefCard.IsEmpty() && (
this.owner.IsInstalled ||
EClass.pc.held ==
this.owner || !
this.owner.ExistsOnMap ||
this.owner.isRoofItem))
196 renderData = row.renderData;
198 if (row._tiles.Length == 0 ||
this.data.pass ==
null)
200 renderData = this.owner.sourceCard.renderData;
201 pref = this.owner.sourceCard.pref;
205 p.tile = (float)(row._tiles[
this.owner.refVal % row._tiles.Length] * ((
this.owner.dir % 2 == 0) ? 1 : -1));
206 p.matColor = (float)traitFigure.GetMatColor();
207 drawShadow = traitFigure.ShowShadow;
213 renderData = this.owner.sourceCard.renderData;
216 if (this.replacer !=
null)
218 renderData = this.replacer.data;
219 pref = this.replacer.pref;
222 int shadow = pref.shadow;
223 bool flag2 = this.isChara && this.owner.isHidden && !EClass.pc.canSeeInvisible && (!EClass.pc.hasTelepathy || !this.owner.Chara.race.visibleWithTelepathy);
225 if (drawShadow && shadow != 1 &&
SubPassData.Current.shadow && (!flag2 ||
this.owner.IsPC))
227 bool flag3 = this.isChara ? (this.owner.dir == 1 || this.owner.dir == 2) : (this.owner.dir % 2 == 1);
228 EClass.scene.screenElin.tileMap.passShadow.AddShadow(this.position.x + (flag3 ? -1f : 1f) * renderData.offsetShadow.x,
this.position.y + renderData.offsetShadow.y + (
this.owner.TileType.UseMountHeight ? 0f : p.shadowFix) -
RenderObject.altitudeFix * (
float)
this.owner.altitude,
this.position.z + renderData.offsetShadow.z,
ShadowData.Instance.items[shadow], pref, prefIndex, p.snow);
232 if (this.owner.noSnow)
241 else if (this.hasActor)
243 if (this.owner.isChara &&
this.owner.Chara.ride !=
null && (
EClass.core.config.game.showRide == 2 || (
EClass.core.config.game.showRide == 1 && !
this.owner.Cell.HasRoof && !
EClass._map.IsIndoor)) && !
this.owner.IsDeadOrSleeping)
245 Chara ride = this.owner.Chara.ride;
248 ride.angle = this.owner.angle;
249 if (charaActorPCC !=
null && charaActorPCC2 !=
null)
251 charaActorPCC.provider.currentDir = charaActorPCC2.provider.currentDir;
252 charaActorPCC.provider.currentFrame = charaActorPCC2.provider.currentFrame;
253 charaActorPCC.provider.SetSpriteMain();
254 charaActorPCC.RefreshSprite();
256 PCCData.RideData ride2 = (ride.renderer as
CharaRenderer).pccData.ride;
260 Vector3 vector =
new Vector3(v.x, v.y, v.z);
261 ride.renderer.Draw(p, ref vector,
false);
262 int currentDir = this.actor.currentDir;
263 p.x = x +
RenderObject.renderSetting.ridePos[currentDir].x + ride2.x * (float)((currentDir == 1) ? 1 : ((currentDir == 2) ? -1 : 0));
264 p.y = y +
RenderObject.renderSetting.ridePos[currentDir].y + ride2.y + ride2.jump * (float)((this.actor.GetFrame() % 2 == 1) ? 1 : 0);
265 p.z = z +
RenderObject.renderSetting.ridePos[currentDir].z - ride2.z;
269 this.actor.SetActive(
false);
273 this.actor.SetActive(
true);
274 this.actor.OnRender(p);
279 if (this.owner.Chara.parasite !=
null)
281 this.owner.Chara.parasite.renderer.position = this.position;
283 if (this.owner.Chara.ride !=
null)
285 this.owner.Chara.ride.renderer.position = this.position;
290 if (this.listTC.Count > 0)
292 RenderObject.tempV = this.position;
293 RenderObject.tempV.y = RenderObject.tempV.y + (this.data.offset.y + this.data.size.y);
294 for (
int j = this.listTC.Count - 1; j >= 0; j--)
299 if (this.owner.trait.RenderExtra)
301 this.owner.trait.OnRenderExtra(p);
306 public virtual void UpdatePosition(ref Vector3 destPos,
RenderParam p)
311 public virtual void DrawHeld()
316 public void RefreshSprite()
320 this.actor.RefreshSprite();
325 public override void OnEnterScreen()
329 string str =
"renderer alraedy synced:";
330 Card card = this.owner;
331 Debug.LogError(str + ((card !=
null) ? card.ToString() :
null));
333 this.isSynced =
true;
338 if (!this.data.persistActor)
340 string str2 =
"renderer alraedy have actor:";
341 Card card2 = this.owner;
342 Debug.LogError(str2 + ((card2 !=
null) ? card2.ToString() :
null));
347 this.actor = this.data.CreateActor();
348 if (this.actor ==
null)
350 if (this.owner.sourceCard.idActor.IsEmpty())
352 this.actor = PoolManager.Spawn<
CardActor>(Resources.Load<
CardActor>(
"Scene/Render/Actor/" + (this.owner.isChara ?
"CharaActor" :
"ThingActor")),
null);
356 this.actor = PoolManager.Spawn<
CardActor>(Resources.Load<
CardActor>(
"Scene/Render/Actor/" + this.owner.sourceCard.idActor[0]),
null);
359 this.hasActor =
true;
361 this.actor.SetOwner(this.owner);
363 this.RefreshStateIcon();
365 if (this.owner.isCensored)
367 this.SetCensored(
true);
369 this.owner.trait.OnEnterScreen();
373 public void AddExtra(
string id)
375 if (this.GetTC(
id) ==
null)
377 TC tc = this.AddTC<TC>(PoolManager.Spawn<
TC>(
"tcExtra_" +
id,
"Scene/Render/Actor/Component/Extra/" +
id,
null));
380 tc.transform.SetParent(
EClass.ui.rectDynamic,
false);
387 public void RefreshExtra()
389 string idExtra = this.owner.sourceCard.idExtra;
390 if (!idExtra.IsEmpty())
392 this.AddExtra(idExtra);
394 if (this.isChara && this.owner.rarity >= Rarity.Legendary &&
this.owner.rarity != Rarity.Artifact && !
this.owner.Chara.IsHomeMember())
396 if (this.owner.c_bossType == BossType.Evolved)
398 this.AddExtra(
"c_unique_evolved");
401 this.AddExtra(
"c_unique");
406 public void RemoveExtra(
string id)
408 TC tc = this.GetTC(
id);
416 public override void OnLeaveScreen()
420 string str =
"renderer alraedy not synced:";
421 Card card = this.owner;
422 Debug.LogWarning(str + ((card !=
null) ? card.ToString() :
null));
424 this.isSynced =
false;
425 if (this.hasActor && (!this.owner.ExistsOnMap || !
this.data.persistActor))
429 for (
int i = this.listTC.Count - 1; i >= 0; i--)
435 this.DespawnSimpleText();
439 PoolManager.Despawn(this.orbit);
445 public void KillActor()
448 this.hasActor =
false;
453 public void PlayAnime(AnimeID
id,
bool force)
455 this.PlayAnime(
id,
default(Vector3), force);
459 public void PlayAnime(AnimeID
id,
Card dest)
461 this.PlayAnime(
id, (dest.renderer.position -
this.position).normalized,
false);
465 public unsafe
void PlayAnime(AnimeID
id,
Point dest)
467 this.PlayAnime(
id, (*dest.PositionAuto() -
this.position).normalized,
false);
471 public void PlayAnime(AnimeID
id, Vector3 dest =
default(Vector3),
bool force =
false)
473 if (!force && this.owner.parent is
Zone && (!
this.owner.pos.IsValid || !
this.owner.pos.IsSync))
478 if (transAnimeData ==
null)
485 data = transAnimeData,
488 if (
id == AnimeID.Attack ||
id - AnimeID.Attack_Place <= 1)
490 this.anime.dest = dest;
495 public virtual void KillAnime()
501 public virtual void IdleFrame()
505 this.actor.IdleFrame();
510 public virtual void NextFrame()
514 this.actor.NextFrame();
519 public virtual void NextDir()
523 this.actor.NextDir();
528 public T AddTC<T>(
TC tc) where T :
TC
536 public T GetTC<T>() where T :
TC
538 if (this.listTC.Count == 0)
542 for (
int i = this.listTC.Count - 1; i >= 0; i--)
544 if (this.listTC[i] is T)
546 return this.listTC[i] as T;
553 public TC GetTC(
string id)
555 if (this.listTC.Count == 0)
559 for (
int i = this.listTC.Count - 1; i >= 0; i--)
561 if (this.listTC[i].name ==
id)
563 return this.listTC[i];
570 public T GetOrCreateTC<T>(Func<T> func) where T :
TC
573 if ((result = this.GetTC<T>()) ==
null)
575 result = this.AddTC<T>(func());
581 public void RemoveTC<T>() where T :
TC
583 if (this.listTC.Count == 0)
587 for (
int i = this.listTC.Count - 1; i >= 0; i--)
589 if (this.listTC[i] is T)
591 this.listTC[i].Kill();
592 this.listTC.RemoveAt(i);
599 public void RemoveTC(
TC tc)
601 this.RemoveTC(this.listTC.IndexOf(tc));
605 public void RemoveTC(
int index)
611 this.listTC[index].Kill();
612 this.listTC.RemoveAt(index);
616 public void TrySpawnOrbit()
618 if (this.owner.isChara)
620 string text = this.owner.IsPC ?
"tcOrbitPC" :
"tcOrbitChara";
621 this.orbit = PoolManager.Spawn<
TCOrbitChara>(text,
"Scene/Render/Actor/Component/" + text,
null);
622 this.orbit.SetOwner(
this);
625 if (this.owner.trait.ShowOrbit)
627 string text2 =
"tcOrbitThing";
628 this.orbit = PoolManager.Spawn<
TCOrbitThing>(text2,
"Scene/Render/Actor/Component/" + text2,
null);
629 this.orbit.SetOwner(
this);
634 public bool IsTalking()
636 TCText tc = this.GetTC<TCText>();
637 return tc && tc.pop.items.Count > 0;
648 RenderObject.tempV.x = this.position.x +
TC._setting.simpleTextPos.x;
649 RenderObject.tempV.y = this.position.y +
TC._setting.simpleTextPos.y;
650 RenderObject.tempV.z = this.position.z +
TC._setting.simpleTextPos.z;
651 this.simpleText.transform.position =
RenderObject.tempV;
652 return this.simpleText;
656 public void DespawnSimpleText()
662 PoolManager.Despawn(this.simpleText);
663 this.hasText =
false;
667 public void SetCensored(
bool enable)
675 this.GetOrCreateTC<TCCensored>(() => PoolManager.Spawn<
TCCensored>(
EClass.core.refs.tcs.censored,
null));
678 this.RemoveTC<TCCensored>();
682 public virtual void RefreshStateIcon()
687 public void Say(
string text, Color c =
default(Color),
float duration = 0f)
689 (this.GetTC<TCText>() ?? this.AddTC<TCText>(PoolManager.Spawn<
TCText>(
EClass.core.refs.tcs.text,
EClass.ui.rectDynamic))).Say(text, duration);
693 public void ShowEmo(Emo emo,
float duration = 0f)
699 (this.GetTC<TCText>() ?? this.AddTC<TCText>(PoolManager.Spawn<
TCText>(
EClass.core.refs.tcs.text,
EClass.ui.rectDynamic))).ShowEmo(emo, duration);
703 public virtual void SetFirst(
bool first, Vector3 pos)
708 public virtual void SetFirst(
bool first)
713 public virtual void Refresh()
719 private bool <Draw>g__CanBeHallucinated|18_0()
721 if (!this.usePass || !this.owner.ExistsOnMap || !
this.owner.trait.CanBeHallucinated)
725 if (this.owner.isThing)
727 if (this.owner.altitude != 0 ||
this.owner.TileType.UseMountHeight ||
this.owner.pos.LastThing !=
this.owner)
731 if (this.listTC.Count > 0)
749 public bool hasActor;
761 public Vector3 position;
767 public List<TC> listTC =
new List<TC>();