using System; using System.Collections; using System.Collections.Generic; using DarkTonic.MasterAudio; using Pathfinding; using TMPro; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; // Token: 0x020000D2 RID: 210 public class Rest : MonoBehaviour { // Token: 0x0600135B RID: 4955 RVA: 0x00174C69 File Offset: 0x00172E69 private void Start() { this.anim.enabled = false; } // Token: 0x0600135C RID: 4956 RVA: 0x00174C77 File Offset: 0x00172E77 public void ConfirmRest() { base.StartCoroutine(this.StartRest(true, 0, false)); } // Token: 0x0600135D RID: 4957 RVA: 0x00174C8C File Offset: 0x00172E8C public void ConfirmRealRest() { Library.Inventory invRowFromName = Links.x.library.GetInvRowFromName("Blanket"); this.partyWithItem.RemoveItem(invRowFromName._ID, 1); base.StartCoroutine(this.StartRest(true, 0, true)); } // Token: 0x0600135E RID: 4958 RVA: 0x00174CD4 File Offset: 0x00172ED4 public void UpdateSlider() { GameObject currentEventObject = Links.x.gameplay.currentEventObject; if (currentEventObject) { float x = Links.x.fellowship.direction.x; Slider slider = null; if (currentEventObject == this.slider.gameObject) { slider = this.slider; } float num = 1f; if (slider && (Time.realtimeSinceStartup > this.lastSliderTime + 0.3f || this.lastSliderTime == 0f)) { if (x > 0f) { slider.value += num; } else if (x < 0f) { slider.value -= num; } this.lastSliderTime = Time.realtimeSinceStartup; } } } // Token: 0x0600135F RID: 4959 RVA: 0x00174D94 File Offset: 0x00172F94 public void SliderValueChanged() { int num = (int)Mathf.Floor(Links.x.gameplay.gameHours) + (int)this.slider.value; if (num >= 24) { num -= 24; } if ((num >= 0 && num < 4) || num >= 22) { this.timeOfDay = "Morning"; this.timeImage.sprite = this.morningImage; } if (num >= 4 && num < 10) { this.timeOfDay = "Afternoon"; this.timeImage.sprite = this.afternoonImage; } if (num >= 10 && num < 16) { this.timeOfDay = "Evening"; this.timeImage.sprite = this.eveningImage; } if (num >= 16 && num < 22) { this.timeOfDay = "Night"; this.timeImage.sprite = this.nightImage; } this.hourCount.text = this.slider.value.ToString(); if (this.itemCount > 0) { this.restHealButtonText.text = "Rest & Heal (" + Mathf.Round(this.HealAmount(this.slider.value) * 100f).ToString() + "%)"; this.restInBedText.text = this.restHealButtonText.text; return; } this.restInBedText.text = "Rest & Heal (" + Mathf.Round(this.HealAmount(this.slider.value) * 100f).ToString() + "%)"; this.restHealButtonText.text = "Rest & Heal"; } // Token: 0x06001360 RID: 4960 RVA: 0x00174F34 File Offset: 0x00173134 public float HealAmount(float f) { float num = f / 10f; if (num > 1f) { num = 1f; } return num; } // Token: 0x06001361 RID: 4961 RVA: 0x00174F58 File Offset: 0x00173158 private IEnumerator StartRest(bool fromMenu, int numberOfHours, bool healWithBlanket) { if (fromMenu) { this.CloseMenu(true); } else if (!Records.x.paused) { Links.x.gameplay.TogglePause(true); } Links.x.gaia.PlayFade("Out", "Unscaled"); Records.x.RemoveControls(true); Records.x.partyCamping = true; yield return new WaitForSecondsRealtime(0.65f); Links.x.cameraEffects.immediateTransition = true; if (!fromMenu) { yield return new WaitForSecondsRealtime(2f); } Links.x.sensory.SetMagicaClothState(false); this.party = Links.x.party; this.portraitOrder = Links.x.portraitOrder; List partyHealth = new List(); List partyTotal = new List(); yield return new WaitForSecondsRealtime(1f); int v = (int)this.slider.value; if (!fromMenu) { v = numberOfHours; } for (int j = 0; j < this.party.Count; j++) { int num = 0; if (healWithBlanket || !this.waiting) { num = Mathf.RoundToInt((float)this.party[j].stats.HealthMax() * this.HealAmount(this.slider.value)); } int num2 = v; if (v > 10) { num2 = 10; } if (this.party[j]) { partyHealth.Add((float)num / (float)num2); partyTotal.Add(this.party[j].stats.HealthCurrent() + num); } } bool flag = false; int num3; for (int i = 0; i < v; i = num3 + 1) { if (!flag) { Links.x.gameplay.AddHours(); if (fromMenu) { for (int k = 0; k < this.party.Count; k++) { if (this.party[k]) { if ((healWithBlanket || !this.waiting) && this.party[k].stats.HealthCurrent() < partyTotal[k]) { this.party[k].stats.AddHealth((int)partyHealth[k]); } if (this.party[k].inSporeForest) { this.party[k].stats.AddSpiritFromKill(30f); } } } yield return new WaitForSecondsRealtime(0.1f); flag = Links.x.diorama.SeenWhileResting(); if (flag) { break; } } } num3 = i; } if (!flag) { yield return new WaitForSecondsRealtime(0.5f); Links.x.sensory.SetMagicaClothState(true); Links.x.gaia.PlayFade("In", "Unscaled"); yield return new WaitForSecondsRealtime(0.5f); Records.x.RemoveControls(false); Links.x.gameplay.TogglePause(false); for (int l = 0; l < this.party.Count; l++) { if (this.party[l] && this.party[l].stunned) { this.party[l].EndStun(); this.party[l].AddToSelected(true, true); } } this.anim.enabled = false; Records.x.partyCamping = false; } else { this.previousNodes.Clear(); Links.x.sensory.SetMagicaClothState(true); Records.x.StartUIFade(true, true); List list = Links.x.portraitOrder; List restingBoatPoints = Links.x.gaia.restingBoatPoints; int num4 = Random.Range(0, list.Count); for (int m = 0; m < 4; m++) { int num5 = Random.Range(0, list.Count); if (num4 != num5) { break; } } Links.x.gameplay.TogglePause(false); Links.x.gaia.PlayFade("In", "Unscaled"); Links.x.gameplay.TogglePause(false); Records.x.RemoveControls(false); Records.x.partyCamping = false; Links.x.main.StartQuip("Enemies afoot! Look to your weapons, friends!"); MasterAudio.PlaySoundAndForget("Enraged", 1f, new float?(1f), 0f, "", null); Links.x.rtsCamera.StartShake(""); this.anim.enabled = false; } yield break; } // Token: 0x06001362 RID: 4962 RVA: 0x00174F7C File Offset: 0x0017317C public void JustRest(int numberOfHours) { base.StartCoroutine(this.StartRest(false, numberOfHours, false)); } // Token: 0x06001363 RID: 4963 RVA: 0x00174F90 File Offset: 0x00173190 public void StartMenu(bool justWait) { this.waiting = justWait; if (Records.x.InCombat(false)) { Links.x.gameFeed.ShowNotice("Cannot rest now"); Links.x.gameFeed.AddFeed("Cannot rest at this time."); return; } if (this.waiting) { this.waitButtons.SetActive(true); this.restButtons.SetActive(false); this.partyWithItem = null; this.itemCount = 0; List list = Links.x.portraitOrder; Library.Inventory invRowFromName = Links.x.library.GetInvRowFromName("Blanket"); for (int i = 0; i < list.Count; i++) { if (list[i]) { int num = list[i].HowManyItemsInBag(invRowFromName._ID, 18); if (num > 0) { this.itemCount += num; if (!this.partyWithItem) { this.partyWithItem = list[i]; } } } } if (this.itemCount == 0) { this.restAndHealButton.interactable = false; } else { this.restAndHealButton.interactable = true; } } else { this.itemCount = 0; this.waitButtons.SetActive(false); this.restButtons.SetActive(true); this.partyWithItem = null; } if (this.contents1.activeSelf) { return; } Links.x.gameplay.lastMenu = "Rest"; Links.x.gameplay.openingAnotherMenu = true; Links.x.gameplay.CloseAllMenus(); if (!Records.x.inMenus && Links.x.gaia.sceneLoaded) { Links.x.gameplay.OpenDock(); } this.on = true; Records.x.AddMenu(base.gameObject); this.anim.enabled = true; bool flag = false; if (Links.x.joy && (Links.x.gameplay.dockStart || Links.x.gameplay.itemsStart)) { flag = true; } if (flag) { this.anim.Play("RestOpen", 0, 1f); } else { this.anim.Play("RestOpen"); } this.contents1.SetActive(true); this.slider.value = 1f; this.SliderValueChanged(); if (Links.x.joy) { Links.x.hudControl.UpdateMenuSwitcher("Rest"); if (this.waiting) { Navigation navigation = this.slider.navigation; navigation.selectOnDown = this.waitButtons.transform.GetChild(0).gameObject.GetComponent