543 lines
15 KiB
C#
543 lines
15 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using DarkTonic.MasterAudio;
|
|
using UnityEngine;
|
|
|
|
// Token: 0x02000052 RID: 82
|
|
public class StatusRing : MonoBehaviour
|
|
{
|
|
// Token: 0x06000AC8 RID: 2760 RVA: 0x000D6238 File Offset: 0x000D4438
|
|
public void AddEffect(string type, Effects effect, bool addToList, int arrows)
|
|
{
|
|
this.allUseHead = true;
|
|
if (this.sprites.Count == 0)
|
|
{
|
|
if (!this.tr)
|
|
{
|
|
this.tr = base.transform;
|
|
}
|
|
this.updateTime = Time.timeSinceLevelLoad;
|
|
}
|
|
if (!this.spriteNames.Contains(type) || addToList)
|
|
{
|
|
Sprite effectImageMedium = Links.x.archives.GetEffectImageMedium(type);
|
|
if (effectImageMedium)
|
|
{
|
|
GameObject gameObject = new GameObject("Effect");
|
|
Transform transform = gameObject.transform;
|
|
transform.SetParent(base.gameObject.transform);
|
|
transform.localPosition = Vector3.zero;
|
|
transform.localScale = Vector3.one * this.normalScale;
|
|
if (Links.x.combat.inPocketAttack)
|
|
{
|
|
transform.localScale = Vector3.one * 1f;
|
|
}
|
|
gameObject.layer = 3;
|
|
SpriteRenderer spriteRenderer = gameObject.AddComponent<SpriteRenderer>();
|
|
spriteRenderer.sprite = effectImageMedium;
|
|
spriteRenderer.material = Links.x.spriteEffectMaterial;
|
|
if (type.Contains("Up") || type.Contains("Down"))
|
|
{
|
|
GameObject gameObject2 = new GameObject("Arrow");
|
|
gameObject2.layer = 3;
|
|
Transform transform2 = gameObject2.transform;
|
|
transform2.SetParent(transform);
|
|
transform2.localPosition = new Vector3(-0.55f, 0f, -0.05f);
|
|
transform2.localScale = Vector3.one * 0.62f;
|
|
spriteRenderer = gameObject2.AddComponent<SpriteRenderer>();
|
|
if (type.Contains("Up"))
|
|
{
|
|
if (arrows <= 1)
|
|
{
|
|
spriteRenderer.sprite = Links.x.archives.arrowUp1;
|
|
}
|
|
else if (arrows == 2)
|
|
{
|
|
spriteRenderer.sprite = Links.x.archives.arrowUp2;
|
|
}
|
|
else if (arrows == 3)
|
|
{
|
|
spriteRenderer.sprite = Links.x.archives.arrowUp3;
|
|
}
|
|
}
|
|
else if (arrows <= 1)
|
|
{
|
|
spriteRenderer.sprite = Links.x.archives.arrowDown1;
|
|
}
|
|
else if (arrows == 2)
|
|
{
|
|
spriteRenderer.sprite = Links.x.archives.arrowDown2;
|
|
}
|
|
else if (arrows == 3)
|
|
{
|
|
spriteRenderer.sprite = Links.x.archives.arrowDown3;
|
|
}
|
|
spriteRenderer.material = Links.x.spriteEffectMaterial;
|
|
}
|
|
int count = this.sprites.Count;
|
|
if (addToList)
|
|
{
|
|
this.sprites.Add(gameObject);
|
|
if (count == 0)
|
|
{
|
|
int num = Random.Range(0, 8);
|
|
this.angles.Add((float)num * 45f);
|
|
}
|
|
else
|
|
{
|
|
float num2 = 3f;
|
|
if (!this.allUseHead)
|
|
{
|
|
num2 = 2f;
|
|
}
|
|
if (count == 1)
|
|
{
|
|
this.angles.Add(this.angles[0] + 180f * num2);
|
|
}
|
|
if (count == 2)
|
|
{
|
|
this.angles.Add(this.angles[0] + 90f * num2);
|
|
}
|
|
if (count == 3)
|
|
{
|
|
this.angles.Add(this.angles[0] + -90f * num2);
|
|
}
|
|
if (count == 4)
|
|
{
|
|
this.angles.Add(this.angles[0] + 45f * num2);
|
|
}
|
|
if (count == 5)
|
|
{
|
|
this.angles.Add(this.angles[0] + 135f * num2);
|
|
}
|
|
if (count == 6)
|
|
{
|
|
this.angles.Add(this.angles[0] + -45f * num2);
|
|
}
|
|
if (count == 7)
|
|
{
|
|
this.angles.Add(this.angles[0] + -135f * num2);
|
|
}
|
|
if (count == 8)
|
|
{
|
|
this.angles.Add(this.angles[0] + 22.5f * num2);
|
|
}
|
|
if (count == 9)
|
|
{
|
|
this.angles.Add(this.angles[0] + 157.5f * num2);
|
|
}
|
|
if (count == 10)
|
|
{
|
|
this.angles.Add(this.angles[0] + 67.5f * num2);
|
|
}
|
|
if (count == 11)
|
|
{
|
|
this.angles.Add(this.angles[0] + 202.5f * num2);
|
|
}
|
|
if (count == 12)
|
|
{
|
|
this.angles.Add(this.angles[0] + -22.5f * num2);
|
|
}
|
|
if (count == 13)
|
|
{
|
|
this.angles.Add(this.angles[0] + -157.5f * num2);
|
|
}
|
|
if (count == 14)
|
|
{
|
|
this.angles.Add(this.angles[0] + -67.5f * num2);
|
|
}
|
|
if (count == 15)
|
|
{
|
|
this.angles.Add(this.angles[0] + -202.5f * num2);
|
|
}
|
|
if (count > 15)
|
|
{
|
|
this.angles.Add(Random.Range(0f, 360f));
|
|
}
|
|
}
|
|
this.effects.Add(effect);
|
|
this.fx.Add(null);
|
|
this.spriteNames.Add(type);
|
|
this.arrow.Add(arrows);
|
|
this.timeSinceAdded.Add(Time.timeSinceLevelLoad);
|
|
MasterAudio.PlaySound3DAtVector3AndForget("Paper", this.character.torsoPosition, 1f, new float?(1f), 0f, "", null);
|
|
}
|
|
else
|
|
{
|
|
count = this.savedIndex;
|
|
this.sprites[this.savedIndex] = gameObject;
|
|
this.angles[this.savedIndex] = this.savedAngle;
|
|
this.timeSinceAdded[this.savedIndex] = -1f;
|
|
}
|
|
int num3 = arrows;
|
|
for (int i = 0; i < this.spriteNames.Count; i++)
|
|
{
|
|
if (this.spriteNames[i] == type && i != count && this.arrow[i] > num3)
|
|
{
|
|
num3 += this.arrow[i];
|
|
}
|
|
}
|
|
if (num3 != arrows && this.sprites[count])
|
|
{
|
|
if (Records.x.editor)
|
|
{
|
|
string text = "Found better arrow amount ";
|
|
string text2 = " ";
|
|
Character character = this.character;
|
|
Debug.Log(text + type + text2 + ((character != null) ? character.ToString() : null));
|
|
}
|
|
if (type.Contains("Up") || type.Contains("Down"))
|
|
{
|
|
spriteRenderer = this.sprites[count].transform.GetChild(0).gameObject.GetComponent<SpriteRenderer>();
|
|
if (type.Contains("Up"))
|
|
{
|
|
if (arrows <= 1)
|
|
{
|
|
spriteRenderer.sprite = Links.x.archives.arrowUp1;
|
|
}
|
|
else if (arrows == 2)
|
|
{
|
|
spriteRenderer.sprite = Links.x.archives.arrowUp2;
|
|
}
|
|
else if (arrows == 3)
|
|
{
|
|
spriteRenderer.sprite = Links.x.archives.arrowUp3;
|
|
}
|
|
}
|
|
else if (arrows <= 1)
|
|
{
|
|
spriteRenderer.sprite = Links.x.archives.arrowDown1;
|
|
}
|
|
else if (arrows == 2)
|
|
{
|
|
spriteRenderer.sprite = Links.x.archives.arrowDown2;
|
|
}
|
|
else if (arrows == 3)
|
|
{
|
|
spriteRenderer.sprite = Links.x.archives.arrowDown3;
|
|
}
|
|
}
|
|
}
|
|
this.Rotate(count, type);
|
|
}
|
|
}
|
|
else if (addToList)
|
|
{
|
|
this.effects.Add(effect);
|
|
this.fx.Add(null);
|
|
this.spriteNames.Add(type);
|
|
this.sprites.Add(null);
|
|
this.angles.Add(0f);
|
|
this.timeSinceAdded.Add(0f);
|
|
this.arrow.Add(arrows);
|
|
}
|
|
base.gameObject.SetActive(true);
|
|
}
|
|
|
|
// Token: 0x06000AC9 RID: 2761 RVA: 0x000D6A00 File Offset: 0x000D4C00
|
|
public void RemoveEffect(string type, Effects effect)
|
|
{
|
|
this.removing = true;
|
|
int num = this.effects.IndexOf(effect);
|
|
Vector3 vector = Vector3.zero;
|
|
bool flag = false;
|
|
if (num > -1)
|
|
{
|
|
this.effects.RemoveAt(num);
|
|
GameObject gameObject = this.sprites[num];
|
|
if (gameObject)
|
|
{
|
|
flag = true;
|
|
vector = this.sprites[num].transform.position;
|
|
Object.Destroy(gameObject);
|
|
}
|
|
this.sprites.RemoveAt(num);
|
|
this.fx.RemoveAt(num);
|
|
this.spriteNames.RemoveAt(num);
|
|
this.savedAngle = this.angles[num];
|
|
this.angles.RemoveAt(num);
|
|
this.arrow.RemoveAt(num);
|
|
this.timeSinceAdded.RemoveAt(num);
|
|
}
|
|
int num2 = this.spriteNames.IndexOf(type);
|
|
if (num2 > -1 && flag)
|
|
{
|
|
this.AddEffect(type, this.effects[num2], false, this.arrow[num2]);
|
|
}
|
|
if (num2 == -1)
|
|
{
|
|
RectTransform hannahAnimator = Links.x.cellar.GetHannahAnimator(1);
|
|
hannahAnimator.gameObject.SetActive(true);
|
|
HannahAnimator component = hannahAnimator.gameObject.GetComponent<HannahAnimator>();
|
|
component.Play("Idle");
|
|
Vector3 vector2 = Links.x.worldCamera.WorldToScreenPoint(vector);
|
|
vector2.z = 0f;
|
|
vector2.x = vector2.x * (1920f / (float)Screen.width) - 960f;
|
|
vector2.y = vector2.y * (Links.x.canvasRT.sizeDelta.y / (float)Screen.height) - Links.x.canvasRT.sizeDelta.y / 2f;
|
|
hannahAnimator.localPosition = vector2;
|
|
if (type.Contains("Down"))
|
|
{
|
|
component.imageRenderer.color = new Color(0.83137256f, 0.23529412f, 0.1764706f, 1f);
|
|
}
|
|
else if (type.Contains("Up"))
|
|
{
|
|
component.imageRenderer.color = new Color(0.42352942f, 0.6901961f, 0.18039216f, 1f);
|
|
}
|
|
else
|
|
{
|
|
component.imageRenderer.color = new Color(0.74509805f, 0.41568628f, 0.23529412f, 1f);
|
|
}
|
|
}
|
|
if (this.sprites.Count == 0 && !this.character.party)
|
|
{
|
|
this.ending = 1;
|
|
}
|
|
this.removing = false;
|
|
}
|
|
|
|
// Token: 0x06000ACA RID: 2762 RVA: 0x000D6C80 File Offset: 0x000D4E80
|
|
public void End()
|
|
{
|
|
for (int i = 0; i < this.sprites.Count; i++)
|
|
{
|
|
if (this.sprites[i])
|
|
{
|
|
Object.Destroy(this.sprites[i].gameObject);
|
|
}
|
|
}
|
|
for (int j = base.transform.childCount - 1; j >= 0; j--)
|
|
{
|
|
if (base.transform.GetChild(j))
|
|
{
|
|
Object.Destroy(base.transform.GetChild(j).gameObject);
|
|
}
|
|
}
|
|
Object.Destroy(base.gameObject);
|
|
}
|
|
|
|
// Token: 0x06000ACB RID: 2763 RVA: 0x000D6D18 File Offset: 0x000D4F18
|
|
private void LateUpdate()
|
|
{
|
|
this.Rotate(-1, "");
|
|
}
|
|
|
|
// Token: 0x06000ACC RID: 2764 RVA: 0x000D6D28 File Offset: 0x000D4F28
|
|
private void Rotate(int index, string n)
|
|
{
|
|
if (this.sprites.Count > 0 && !this.removing && this.character)
|
|
{
|
|
bool flag = false;
|
|
if (this.character == Links.x.gameplay.gameCardCharacter && Links.x.gameCard.animator.enabled)
|
|
{
|
|
flag = true;
|
|
}
|
|
if (this.character.party && this.character.portrait && this.character.portrait.hovering)
|
|
{
|
|
flag = true;
|
|
}
|
|
float num = this.radius;
|
|
float num2 = this.speedBoost;
|
|
bool flag2 = this.allUseHead;
|
|
if (this.character.stats.flying)
|
|
{
|
|
flag2 = true;
|
|
}
|
|
if (this.character.body.IsHit() || this.character.downed || this.character.dead || this.character.stunned || this.character.sleeping || this.character.animID == 8 || flag2)
|
|
{
|
|
float num3 = 1f;
|
|
if (this.character.neck == this.character.body.tr)
|
|
{
|
|
this.tr.position = this.character.body.headBone.position + new Vector3(0f, num3, 0f);
|
|
}
|
|
else
|
|
{
|
|
this.tr.position = this.character.neck.position + new Vector3(0f, num3, 0f);
|
|
}
|
|
num = this.radius * 1.7f;
|
|
num2 = this.speedBoost * 1f;
|
|
}
|
|
else
|
|
{
|
|
this.tr.position = this.character.tr.position + new Vector3(0f, this.yAdd, 0f);
|
|
}
|
|
Vector3 eulerAngles = Quaternion.LookRotation(this.character.currentPosition - Links.x.worldCamera.gameObject.transform.position).eulerAngles;
|
|
eulerAngles.x = 0f;
|
|
eulerAngles.z = 0f;
|
|
this.tr.rotation = Quaternion.Euler(eulerAngles);
|
|
if (Time.timeSinceLevelLoad > this.updateTime + this.updateSpeed || index > -1)
|
|
{
|
|
this.updateTime = Time.timeSinceLevelLoad;
|
|
for (int i = 0; i < this.sprites.Count; i++)
|
|
{
|
|
if ((index == -1 || i == index) && this.sprites[i])
|
|
{
|
|
float num4 = this.angles[i];
|
|
num4 += this.moveSpeed * Time.deltaTime;
|
|
this.sprites[i].transform.localPosition = new Vector3(Mathf.Cos(num4 * num2), 0f, Mathf.Sin(num4 * num2)) / num;
|
|
if (Random.Range(0, 3) == 0)
|
|
{
|
|
this.sprites[i].transform.localRotation = Quaternion.Euler(new Vector3(Random.Range(-5f, 5f), Random.Range(-15f, 15f), Random.Range(-5f, 5f)));
|
|
}
|
|
this.angles[i] = num4;
|
|
if (this.fx[i] && this.fx[i].gameObject.activeSelf)
|
|
{
|
|
Vector3 vector = Links.x.worldCamera.WorldToScreenPoint(this.sprites[i].transform.position);
|
|
vector.z = 0f;
|
|
vector.x = vector.x * (1920f / (float)Screen.width) - 960f;
|
|
vector.y = vector.y * (Links.x.canvasRT.sizeDelta.y / (float)Screen.height) - Links.x.canvasRT.sizeDelta.y / 2f;
|
|
this.fx[i].localPosition = vector;
|
|
}
|
|
if (index > -1)
|
|
{
|
|
RectTransform hannahAnimator = Links.x.cellar.GetHannahAnimator(0);
|
|
this.fx[index] = hannahAnimator;
|
|
hannahAnimator.gameObject.SetActive(true);
|
|
HannahAnimator component = hannahAnimator.gameObject.GetComponent<HannahAnimator>();
|
|
component.Play("Idle");
|
|
if (n.Contains("Down"))
|
|
{
|
|
component.imageRenderer.color = new Color(0.83137256f, 0.23529412f, 0.1764706f, 1f);
|
|
}
|
|
else if (n.Contains("Up"))
|
|
{
|
|
component.imageRenderer.color = new Color(0.42352942f, 0.6901961f, 0.18039216f, 1f);
|
|
}
|
|
else
|
|
{
|
|
component.imageRenderer.color = new Color(0.74509805f, 0.41568628f, 0.23529412f, 1f);
|
|
}
|
|
Vector3 vector2 = Links.x.worldCamera.WorldToScreenPoint(this.sprites[i].transform.position);
|
|
vector2.z = 0f;
|
|
vector2.x = vector2.x * (1920f / (float)Screen.width) - 960f;
|
|
vector2.y = vector2.y * (Links.x.canvasRT.sizeDelta.y / (float)Screen.height) - Links.x.canvasRT.sizeDelta.y / 2f;
|
|
hannahAnimator.localPosition = vector2;
|
|
}
|
|
}
|
|
}
|
|
for (int j = 0; j < this.sprites.Count; j++)
|
|
{
|
|
if ((index == -1 || j == index) && this.sprites[j])
|
|
{
|
|
if (this.timeSinceAdded[j] > 0f)
|
|
{
|
|
if (Time.timeSinceLevelLoad > this.timeSinceAdded[j] + 2f)
|
|
{
|
|
float num5 = this.timeSinceAdded[j] + 3f - Time.timeSinceLevelLoad;
|
|
if (num5 < 0f)
|
|
{
|
|
this.sprites[j].transform.localScale = Vector3.one * this.smallScale;
|
|
this.timeSinceAdded[j] = 0f;
|
|
}
|
|
else
|
|
{
|
|
this.sprites[j].transform.localScale = Mathf.Lerp(this.normalScale, this.smallScale, 1f - num5) * Vector3.one;
|
|
}
|
|
}
|
|
}
|
|
else if (flag)
|
|
{
|
|
this.sprites[j].transform.localScale = Vector3.one * this.normalScale;
|
|
}
|
|
else
|
|
{
|
|
this.sprites[j].transform.localScale = Vector3.one * this.smallScale;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
for (int k = 0; k < this.sprites.Count; k++)
|
|
{
|
|
if (this.fx[k] && this.sprites[k] && this.fx[k].gameObject.activeSelf)
|
|
{
|
|
Vector3 vector3 = Links.x.worldCamera.WorldToScreenPoint(this.sprites[k].transform.position);
|
|
vector3.z = 0f;
|
|
vector3.x = vector3.x * (1920f / (float)Screen.width) - 960f;
|
|
vector3.y = vector3.y * (Links.x.canvasRT.sizeDelta.y / (float)Screen.height) - Links.x.canvasRT.sizeDelta.y / 2f;
|
|
this.fx[k].localPosition = vector3;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (this.ending > 0)
|
|
{
|
|
this.ending++;
|
|
if (this.ending > 10)
|
|
{
|
|
if (this.sprites.Count == 0)
|
|
{
|
|
this.End();
|
|
}
|
|
this.ending = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x04000F55 RID: 3925
|
|
public Character character;
|
|
|
|
// Token: 0x04000F56 RID: 3926
|
|
public List<Effects> effects = new List<Effects>();
|
|
|
|
// Token: 0x04000F57 RID: 3927
|
|
public List<string> spriteNames = new List<string>();
|
|
|
|
// Token: 0x04000F58 RID: 3928
|
|
public List<GameObject> sprites = new List<GameObject>();
|
|
|
|
// Token: 0x04000F59 RID: 3929
|
|
public List<RectTransform> fx = new List<RectTransform>();
|
|
|
|
// Token: 0x04000F5A RID: 3930
|
|
public List<float> angles = new List<float>();
|
|
|
|
// Token: 0x04000F5B RID: 3931
|
|
public List<int> arrow = new List<int>();
|
|
|
|
// Token: 0x04000F5C RID: 3932
|
|
public List<float> timeSinceAdded = new List<float>();
|
|
|
|
// Token: 0x04000F5D RID: 3933
|
|
public float moveSpeed = 3f;
|
|
|
|
// Token: 0x04000F5E RID: 3934
|
|
public float radius = 1.2f;
|
|
|
|
// Token: 0x04000F5F RID: 3935
|
|
public float yAdd = 0.4f;
|
|
|
|
// Token: 0x04000F60 RID: 3936
|
|
private Transform tr;
|
|
|
|
// Token: 0x04000F61 RID: 3937
|
|
private float updateTime;
|
|
|
|
// Token: 0x04000F62 RID: 3938
|
|
public float updateSpeed = 0.07f;
|
|
|
|
// Token: 0x04000F63 RID: 3939
|
|
public float speedBoost = 2.5f;
|
|
|
|
// Token: 0x04000F64 RID: 3940
|
|
private bool removing;
|
|
|
|
// Token: 0x04000F65 RID: 3941
|
|
private float savedAngle;
|
|
|
|
// Token: 0x04000F66 RID: 3942
|
|
private int savedIndex;
|
|
|
|
// Token: 0x04000F67 RID: 3943
|
|
public bool allUseHead;
|
|
|
|
// Token: 0x04000F68 RID: 3944
|
|
private int ending;
|
|
|
|
// Token: 0x04000F69 RID: 3945
|
|
public float normalScale = 0.65f;
|
|
|
|
// Token: 0x04000F6A RID: 3946
|
|
public float smallScale = 0.45f;
|
|
}
|