Elin Decompiled Documentation EA 23.102 Nightly
Loading...
Searching...
No Matches
TCExtra.cs
Go to the documentation of this file.
1using UnityEngine;
2
3public class TCExtra : TC
4{
5 public enum Type
6 {
7 None,
8 Light,
9 Effect,
11 }
12
13 public enum Hack
14 {
15 None,
16 Candle
17 }
18
19 public Type type;
20
21 public Hack hack;
22
23 public Vector3 fixPos;
24
25 public Vector3 heldPos;
26
27 public Vector3 heldPosFlip;
28
29 public float flipFixX;
30
31 public bool flipSR;
32
33 public bool flipSelf;
34
35 public bool onlyInstalled = true;
36
37 public bool useOffsetBack = true;
38
39 public bool alwaysFlip;
40
41 public bool flipBack;
42
43 public bool colorParticle;
44
45 public SpriteRenderer sr;
46
47 public Transform[] listTrans;
48
49 public Vector3[] dirPos;
50
52
53 private Vector3 v;
54
55 private Vector3 originalScale;
56
57 private Vector3 originalAngle;
58
59 public override Vector3 FixPos => fixPos;
60
61 private void Awake()
62 {
63 originalScale = base.transform.localScale;
64 originalAngle = base.transform.localEulerAngles;
65 }
66
67 public override void OnDraw(ref Vector3 pos)
68 {
69 if (_mat != base.owner.material)
70 {
71 _mat = base.owner.material;
73 }
74 RenderData data = base.owner.renderer.data;
75 bool flag = base.owner.dir == 2 || base.owner.dir == 3;
76 bool flag2 = base.owner.parent is Chara && (base.owner.parent as Chara).held == base.owner;
77 bool flag3 = base.owner.dir % 2 == 1;
78 bool flag4 = (alwaysFlip || !flag2) && flag3;
79 if (flag && flipBack)
80 {
81 flag4 = !flag4;
82 }
83 bool flag5 = useOffsetBack && data.useOffsetBack && flag;
84 if (base.owner.renderer.hasActor && base.owner.isChara)
85 {
86 v.x = base.owner.renderer.position.x + (flag5 ? data.offsetBack.x : data.offset.x);
87 v.y = base.owner.renderer.position.y + (flag5 ? data.offsetBack.y : data.offset.y);
88 v.z = base.owner.renderer.position.z + (flag5 ? data.offsetBack.z : data.offset.z) + FixPos.z + (flag2 ? (-0.5f) : 0f) + ((!flag2) ? 0f : (flag3 ? heldPosFlip.z : heldPos.z));
89 }
90 else if (dirPos.Length == 0)
91 {
92 v.x = base.owner.renderer.position.x + (flag5 ? data.offsetBack.x : data.offset.x) * (float)((!flag4) ? 1 : (-1)) + FixPos.x + flipFixX * (float)((!flag4) ? 1 : (-1)) + ((!flag2) ? 0f : (flag3 ? heldPosFlip.x : heldPos.x));
93 v.y = base.owner.renderer.position.y + (flag5 ? data.offsetBack.y : data.offset.y) + FixPos.y + ((!flag2) ? 0f : (flag3 ? heldPosFlip.y : heldPos.y));
94 v.z = base.owner.renderer.position.z + (flag5 ? data.offsetBack.z : data.offset.z) + FixPos.z + (flag2 ? (-0.5f) : 0f) + ((!flag2) ? 0f : (flag3 ? heldPosFlip.z : heldPos.z));
95 }
96 else
97 {
98 v.x = base.owner.renderer.position.x + (flag5 ? data.offsetBack.x : data.offset.x) + dirPos[base.owner.dir % dirPos.Length].x + ((!flag2) ? 0f : (flag3 ? heldPosFlip.x : heldPos.x));
99 v.y = base.owner.renderer.position.y + (flag5 ? data.offsetBack.y : data.offset.y) + dirPos[base.owner.dir % dirPos.Length].y + ((!flag2) ? 0f : (flag3 ? heldPosFlip.y : heldPos.y));
100 v.z = base.owner.renderer.position.z + (flag5 ? data.offsetBack.z : data.offset.z) + dirPos[base.owner.dir % dirPos.Length].z + (flag2 ? (-0.5f) : 0f) + ((!flag2) ? 0f : (flag3 ? heldPosFlip.z : heldPos.z));
101 }
102 base.transform.position = v;
103 if (flipSR && sr.flipX != flag4)
104 {
105 sr.flipX = flag4;
106 }
107 if (flipSelf)
108 {
109 base.transform.localScale = (flag4 ? new Vector3(originalScale.x * -1f, originalScale.y, originalScale.z) : originalScale);
110 base.transform.localEulerAngles = (flag4 ? new Vector3(originalAngle.x * -1f, originalAngle.y, originalAngle.z) : originalAngle);
111 }
112 bool flag6 = (!onlyInstalled || base.owner.IsInstalled || base.owner.isRoofItem) && base.owner.trait.UseExtra;
113 switch (type)
114 {
115 case Type.QuestBoard:
116 flag6 = false;
117 foreach (Quest global in EMono.game.quests.globalList)
118 {
119 if (global.IsVisibleOnQuestBoard() && global.isNew)
120 {
121 flag6 = true;
122 }
123 }
124 break;
125 case Type.Effect:
126 if (flag6)
127 {
128 TraitEffect traitEffect = base.owner.trait as TraitEffect;
129 if (traitEffect.timer < Time.realtimeSinceStartup)
130 {
131 traitEffect.timer = Time.realtimeSinceStartup - Time.realtimeSinceStartup % traitEffect.Interval + traitEffect.Interval + traitEffect.data.delay;
132 traitEffect.Proc(v);
133 }
134 }
135 break;
136 }
137 if (hack == Hack.Candle)
138 {
139 Transform[] array = listTrans;
140 foreach (Transform transform in array)
141 {
142 if (flag4)
143 {
144 if (transform.localPosition.z > 0f)
145 {
146 transform.localPosition = transform.localPosition.SetZ(0f - transform.localPosition.z);
147 }
148 }
149 else if (transform.localPosition.z < 0f)
150 {
151 transform.localPosition = transform.localPosition.SetZ(0f - transform.localPosition.z);
152 }
153 }
154 }
155 if (base.owner.isHidden && base.owner.isChara && !EMono.pc.CanSee(base.owner.Chara))
156 {
157 flag6 = false;
158 }
159 if (base.gameObject.activeSelf != flag6)
160 {
161 base.gameObject.SetActive(flag6);
162 }
163 }
164
165 public override void OnSetOwner()
166 {
167 base.OnSetOwner();
168 RefreshColor();
169 }
170
171 public void RefreshColor()
172 {
173 if ((bool)sr)
174 {
175 Color color = base.owner.trait.ColorExtra ?? Color.white;
176 color.a = sr.color.a;
177 sr.color = color;
178 }
179 if (colorParticle)
180 {
181 ParticleSystem[] componentsInChildren = GetComponentsInChildren<ParticleSystem>();
182 for (int i = 0; i < componentsInChildren.Length; i++)
183 {
184 ParticleSystem.MainModule main = componentsInChildren[i].main;
185 main.startColor = (base.owner.isDyed ? base.owner.DyeMat : base.owner.material).GetColor().SetAlpha(main.startColor.color.a);
186 }
187 }
188 }
189}
int dir
Definition: Card.cs:142
Definition: Chara.cs:10
bool CanSee(Card c)
Definition: Chara.cs:1027
Definition: EMono.cs:4
static Chara pc
Definition: EMono.cs:13
static Game game
Definition: EMono.cs:7
QuestManager quests
Definition: Game.cs:179
List< Quest > globalList
Definition: QuestManager.cs:14
Definition: Quest.cs:7
bool isNew
Definition: Quest.cs:64
virtual bool IsVisibleOnQuestBoard()
Definition: Quest.cs:292
Vector3 offset
Definition: RenderData.cs:18
SpriteRenderer sr
Definition: TCExtra.cs:45
bool colorParticle
Definition: TCExtra.cs:43
bool flipSR
Definition: TCExtra.cs:31
bool alwaysFlip
Definition: TCExtra.cs:39
Type type
Definition: TCExtra.cs:19
Vector3 v
Definition: TCExtra.cs:53
bool flipSelf
Definition: TCExtra.cs:33
Vector3 heldPos
Definition: TCExtra.cs:25
void Awake()
Definition: TCExtra.cs:61
Type
Definition: TCExtra.cs:6
Transform[] listTrans
Definition: TCExtra.cs:47
bool onlyInstalled
Definition: TCExtra.cs:35
Vector3[] dirPos
Definition: TCExtra.cs:49
Vector3 fixPos
Definition: TCExtra.cs:23
void RefreshColor()
Definition: TCExtra.cs:171
float flipFixX
Definition: TCExtra.cs:29
bool flipBack
Definition: TCExtra.cs:41
Vector3 originalScale
Definition: TCExtra.cs:55
Vector3 originalAngle
Definition: TCExtra.cs:57
override Vector3 FixPos
Definition: TCExtra.cs:59
override void OnDraw(ref Vector3 pos)
Definition: TCExtra.cs:67
Hack hack
Definition: TCExtra.cs:21
Vector3 heldPosFlip
Definition: TCExtra.cs:27
SourceMaterial.Row _mat
Definition: TCExtra.cs:51
bool useOffsetBack
Definition: TCExtra.cs:37
override void OnSetOwner()
Definition: TCExtra.cs:165
Definition: TC.cs:4
void Proc(Vector3 v=default(Vector3))
Definition: TraitEffect.cs:76
float timer
Definition: TraitEffect.cs:21