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.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(); 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(); 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(); 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(); 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 = new List(); // Token: 0x04000F57 RID: 3927 public List spriteNames = new List(); // Token: 0x04000F58 RID: 3928 public List sprites = new List(); // Token: 0x04000F59 RID: 3929 public List fx = new List(); // Token: 0x04000F5A RID: 3930 public List angles = new List(); // Token: 0x04000F5B RID: 3931 public List arrow = new List(); // Token: 0x04000F5C RID: 3932 public List timeSinceAdded = new List(); // 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; }