Files
BepInEx/Projects/BanquetForFools/Source/Assembly-CSharp/Diorama.cs
2025-05-21 20:40:04 +02:00

3103 lines
86 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using DarkTonic.MasterAudio;
using LOS;
using Pathfinding;
using PixelCrushers.DialogueSystem;
using TheVegetationEngine;
using UnityEngine;
// Token: 0x02000085 RID: 133
[ExecuteInEditMode]
public class Diorama : MonoBehaviour
{
// Token: 0x06000CEA RID: 3306 RVA: 0x000F9D51 File Offset: 0x000F7F51
private void Awake()
{
this.sceneInfo = base.gameObject.GetComponent<SceneInfo>();
}
// Token: 0x06000CEB RID: 3307 RVA: 0x000F9D64 File Offset: 0x000F7F64
private void Start()
{
if (Links.x)
{
this.linksParty = Links.x.portraitOrder;
for (int i = 0; i < this.sceneViews.Count; i++)
{
this.sceneViews[i].Setup();
}
for (int j = 0; j < this.fogColliders.Count; j++)
{
this.fogColliders[j].enabled = false;
}
this.blueFogBounds.Clear();
for (int k = 0; k < this.blueFog.Count; k++)
{
this.blueFog[k].enabled = false;
this.blueFogBounds.Add(this.blueFog[k].bounds);
}
if (this.cameraPoints)
{
foreach (object obj in this.cameraPoints)
{
Transform transform = (Transform)obj;
if (transform != this.cameraPoints)
{
transform.gameObject.layer = 10;
transform.gameObject.SetActive(true);
}
}
}
foreach (object obj2 in base.transform)
{
Transform transform2 = (Transform)obj2;
if (transform2.gameObject.name.Contains("Ghost Point"))
{
this.ghostPoint = transform2.gameObject;
}
}
Links.x.fogOfWar = this.fogOfWar;
Links.x.fogOfWarInterior = this.fogOfWarInterior;
Links.x.diorama = this;
if (this.sceneDirectionalLight)
{
this.sceneDirectionalLight.gameObject.SetActive(false);
Links.x.gameplay.sunlightAnimator.exteriorRotation = this.sceneDirectionalLight.gameObject.transform.rotation.eulerAngles;
}
if (this.vegetation)
{
this.vegetation.mainCamera = Links.x.worldCamera;
this.globalVegVolume = this.vegetation.transform;
this.globalVegVolume.localScale = new Vector3(80f, 80f, 80f);
}
if (this.sceneCamera)
{
this.sceneCamera.enabled = false;
}
Links.x.cameraEffects.usesTimeOfDay = this.timeOfDay;
Links.x.cameraEffects.hasDirectionalLight = true;
if (this.sceneViews.Count > 0)
{
this.currentCameraView = this.sceneViews[0].sceneCamera;
}
else
{
this.currentCameraView = this.sceneCamera;
}
Links.x.gaia.NewSceneLoaded();
Links.x.sensory = base.gameObject.GetComponent<Sensory>();
this.quads = Links.x.quads;
this.party = Links.x.party;
Links.x.cameraEffects.SetFog();
if (Links.x.options.graphicsQuality == 0)
{
this.SetTerrainQuality(0f);
}
else if (Links.x.options.graphicsQuality == 1)
{
this.SetTerrainQuality(0.6f);
}
else
{
this.SetTerrainQuality(1f);
}
}
this.itemIDs.Clear();
this.itemSaveIDs.Clear();
this.itemAmts.Clear();
this.itemSocketsA.Clear();
this.itemSocketsB.Clear();
this.itemsForSaleStates.Clear();
this.itemPositions.Clear();
this.itemLinks.Clear();
this.itemLinkIDs.Clear();
this.itemPrompts.Clear();
this.itemOriginals.Clear();
if (!this.promptsFolder)
{
this.promptsFolder = GameObject.Find("~ Prompts");
}
if (this.promptsFolder)
{
this.prompts = this.promptsFolder.GetComponentsInChildren<Prompts>(true);
}
this.activeView = null;
Shader.SetGlobalFloat("_InGhostFog", 0f);
this.mainCharacterInGhostFog = false;
this.boatCollider = GameObject.Find("collider_boat");
if (this.boatCollider)
{
GameObject gameObject = GameObject.Find("collider_water");
if (gameObject)
{
this.waterY = gameObject.transform.position.y;
}
else
{
this.waterY = 20f;
}
this.boatCollider.transform.position = new Vector3(this.boatCollider.transform.position.x, gameObject.transform.position.y - 1f, this.boatCollider.transform.position.z);
this.boatColliderY = this.boatCollider.transform.position.y;
return;
}
this.boatColliderY = 19.5f;
this.waterY = 20f;
}
// Token: 0x06000CEC RID: 3308 RVA: 0x000FA2A4 File Offset: 0x000F84A4
public Transform ReturnJumpPoint()
{
if (Records.x.editor && QuestLog.GetQuestState("CharacterCreation") == QuestState.Success)
{
List<Transform> list = new List<Transform>();
foreach (object obj in base.transform)
{
Transform transform = (Transform)obj;
if (transform.gameObject.name.Contains("Jump"))
{
list.Add(transform);
}
}
if (list.Count > 0)
{
if (Random.Range(0, 10) == 0)
{
return this.playerStartDefault;
}
return list[Random.Range(0, list.Count)];
}
}
return this.playerStartDefault;
}
// Token: 0x06000CED RID: 3309 RVA: 0x000FA36C File Offset: 0x000F856C
public void SetTerrainQuality(float n)
{
if ((float)Screen.height < 1000f && n > 0f && n < 1f)
{
n = 0.35f;
}
for (int i = 0; i < this.terrains.Count; i++)
{
this.terrains[i].detailObjectDensity = n;
this.terrains[i].detailObjectDistance = 500f;
}
}
// Token: 0x06000CEE RID: 3310 RVA: 0x000FA3DB File Offset: 0x000F85DB
public void GetGhostNode()
{
if (this.ghostPoint)
{
this.ghostNode = Links.x.main.NearNode(this.ghostPoint.transform.position, false, 0, -1, 0);
}
}
// Token: 0x06000CEF RID: 3311 RVA: 0x000FA413 File Offset: 0x000F8613
public SceneCamera GetIndoorView()
{
if (this.sceneViews.Count > 1)
{
return this.sceneViews[1];
}
return null;
}
// Token: 0x06000CF0 RID: 3312 RVA: 0x000FA431 File Offset: 0x000F8631
public SceneCamera GetOutdoorView()
{
return this.sceneViews[0];
}
// Token: 0x06000CF1 RID: 3313 RVA: 0x000FA43F File Offset: 0x000F863F
public string GetCurrentCaptureCameraID()
{
if (this.activeView)
{
return this.activeView.id;
}
return "";
}
// Token: 0x06000CF2 RID: 3314 RVA: 0x000FA460 File Offset: 0x000F8660
public void ToggleSceneCameras(bool interior, string captureCameraId)
{
if (!interior)
{
int num = 0;
if (captureCameraId != "")
{
for (int i = 0; i < this.sceneViews.Count; i++)
{
if (this.sceneViews[i].id == captureCameraId)
{
num = this.sceneViews[i].index;
}
}
}
this.activeView = this.sceneViews[num];
this.currentCameraView = this.activeView.sceneCamera;
this.activeView.On();
this.pointLightTransforms = 0;
Links.x.cameraEffects.pointLightShadows.pointLightObject.SetActive(false);
if (this.currentInteriorLight)
{
this.currentInteriorLight.TurnOffLights();
this.currentInteriorLight.InactiveLights();
}
Links.x.fellowship.ClearCompanionNodes();
this.currentInteriorLight = null;
}
else
{
int num2 = 1;
if (captureCameraId != "")
{
for (int j = 0; j < this.sceneViews.Count; j++)
{
if (this.sceneViews[j].id == captureCameraId)
{
num2 = this.sceneViews[j].index;
}
}
}
if (num2 < this.sceneViews.Count)
{
this.activeView = this.sceneViews[num2];
this.currentCameraView = this.activeView.sceneCamera;
this.activeView.On();
InteriorLights pointLights = this.sceneViews[1].GetPointLights(Links.x.rtsCamera.coll);
if (this.currentInteriorLight != pointLights)
{
if (this.currentInteriorLight)
{
this.currentInteriorLight.InactiveLights();
}
this.pointLightTransforms = this.sceneViews[1].GetPointLightCount(Links.x.rtsCamera.coll);
this.currentInteriorLight = pointLights;
if (this.currentInteriorLight)
{
this.currentInteriorLight.TurnOffLights();
this.currentInteriorLight.ActiveLights();
}
if (this.currentInteriorLight)
{
this.currentInteriorLight.SetUpCompanionNodes();
}
}
if (pointLights)
{
Links.x.cameraEffects.pointLightShadows.pointLightObject.SetActive(true);
}
else
{
Links.x.cameraEffects.pointLightShadows.pointLightObject.SetActive(false);
}
}
}
if (this.prevView && this.prevView != this.activeView)
{
this.prevView.Off();
}
this.prevView = this.activeView;
}
// Token: 0x06000CF3 RID: 3315 RVA: 0x000FA70C File Offset: 0x000F890C
public void ChangeTimeOfDay(bool sendDayNightEvent, bool timeJump)
{
if (this.prevTimeOfDay != Links.x.gameplay.timeOfDay)
{
if (Links.x.gameplay.timeOfDay == "Morning")
{
if (this.morningFolder)
{
this.morningFolder.SetActive(true);
}
if (this.afternoonFolder)
{
this.afternoonFolder.SetActive(false);
}
if (this.eveningFolder)
{
this.eveningFolder.SetActive(false);
}
if (this.nightFolder)
{
this.nightFolder.SetActive(false);
}
}
if (Links.x.gameplay.timeOfDay == "Afternoon")
{
if (this.morningFolder)
{
this.morningFolder.SetActive(false);
}
if (this.afternoonFolder)
{
this.afternoonFolder.SetActive(true);
}
if (this.eveningFolder)
{
this.eveningFolder.SetActive(false);
}
if (this.nightFolder)
{
this.nightFolder.SetActive(false);
}
}
if (Links.x.gameplay.timeOfDay == "Evening")
{
if (this.morningFolder)
{
this.morningFolder.SetActive(false);
}
if (this.afternoonFolder)
{
this.afternoonFolder.SetActive(false);
}
if (this.eveningFolder)
{
this.eveningFolder.SetActive(true);
}
if (this.nightFolder)
{
this.nightFolder.SetActive(false);
}
}
if (Links.x.gameplay.timeOfDay == "Night")
{
if (this.morningFolder)
{
this.morningFolder.SetActive(false);
}
if (this.afternoonFolder)
{
this.afternoonFolder.SetActive(false);
}
if (this.eveningFolder)
{
this.eveningFolder.SetActive(false);
}
if (this.nightFolder)
{
this.nightFolder.SetActive(true);
}
}
Links.x.hudControl.UpdateTimeOfDay();
}
if (sendDayNightEvent)
{
this.DayNightSwitch(timeJump);
}
float num = Links.x.gameplay.gameHours;
num = Mathf.Floor(num);
string text = Links.x.gameplay.ShowHour(num);
Links.x.gameFeed.AddFeed("New hour: " + text);
if (this.prevTimeOfDay != Links.x.gameplay.timeOfDay)
{
if (Links.x.gameplay.timeOfDay == "Night")
{
Links.x.gameFeed.AddFeed("Sunset");
}
else if (Links.x.gameplay.timeOfDay == "Morning")
{
Links.x.gameFeed.AddFeed("Sunrise");
}
}
this.prevTimeOfDay = Links.x.gameplay.timeOfDay;
this.CheckRespawns();
this.CheckResurrections();
this.CheckStunsAndQuestChange();
}
// Token: 0x06000CF4 RID: 3316 RVA: 0x000FAA34 File Offset: 0x000F8C34
public bool InResurrectionFog(Vector3 pt)
{
bool flag = false;
bool flag2 = true;
if (this.fogColliders.Count == 0 && !this.underground)
{
return false;
}
if (this.underground && !this.blackFow)
{
return false;
}
if (this.sceneName.Contains("C6") && QuestLog.GetQuestState("C6_Ghosts") == QuestState.Success)
{
flag2 = false;
}
if (!flag2)
{
return false;
}
if (this.blackFow)
{
return true;
}
for (int i = 0; i < this.fogColliders.Count; i++)
{
if (!flag)
{
Vector3 center = this.fogColliderBounds[i].center;
pt.y = center.y;
float num = this.fogColliderBounds[i].extents.x;
if ((pt - center).sqrMagnitude < num * num)
{
flag = true;
}
}
}
return flag;
}
// Token: 0x06000CF5 RID: 3317 RVA: 0x000FAB10 File Offset: 0x000F8D10
public bool InSporeForest(Vector3 pt)
{
bool flag = false;
if (this.sporeColliders.Count == 0)
{
return false;
}
for (int i = 0; i < this.sporeColliders.Count; i++)
{
if (!flag)
{
Vector3 center = this.sporeColliderBounds[i].center;
pt.y = center.y;
float num = this.sporeColliderBounds[i].extents.x;
if ((pt - center).sqrMagnitude < num * num)
{
flag = true;
}
}
}
return flag;
}
// Token: 0x06000CF6 RID: 3318 RVA: 0x000FABA0 File Offset: 0x000F8DA0
public bool InTown(Vector3 pt)
{
bool flag = false;
if (this.townColliders.Count == 0)
{
return false;
}
for (int i = 0; i < this.townColliders.Count; i++)
{
if (!flag)
{
Vector3 center = this.townColliderBounds[i].center;
pt.y = center.y;
float num = this.townColliderBounds[i].extents.x;
if ((pt - center).sqrMagnitude < num * num)
{
flag = true;
}
}
}
return flag;
}
// Token: 0x06000CF7 RID: 3319 RVA: 0x000FAC30 File Offset: 0x000F8E30
public void SetVolume()
{
for (int i = 0; i < this.quads.Count; i++)
{
this.quads[i].SetVolume();
}
}
// Token: 0x06000CF8 RID: 3320 RVA: 0x000FAC64 File Offset: 0x000F8E64
public void GhostFogOn()
{
this.GhostMaterials();
this.mapCanResurrect = true;
if (this.underground)
{
if (this.fogFadeCorout != null)
{
base.StopCoroutine(this.fogFadeCorout);
this.fogFadeCorout = null;
}
this.fogFadeCorout = this.FadeGhostFog(this.currentFogValue, 1f);
base.StartCoroutine(this.fogFadeCorout);
}
}
// Token: 0x06000CF9 RID: 3321 RVA: 0x000FACC8 File Offset: 0x000F8EC8
public void GhostMaterials()
{
for (int i = 0; i < this.quads.Count; i++)
{
if (this.quads[i].art.sharedMaterial && this.quads[i].art.sharedMaterial.GetFloat("_IsGhostArea") >= 1f && !this.quads[i].art.sharedMaterial.shader.name.Contains("Ghost"))
{
this.quads[i].art.sharedMaterial.shader = Links.x.backgroundShaderGhosts;
}
}
}
// Token: 0x06000CFA RID: 3322 RVA: 0x000FAD88 File Offset: 0x000F8F88
public void GhostFogOff()
{
if (Records.x.editor)
{
Debug.Log("Ghost fog off");
}
for (int i = 0; i < this.quads.Count; i++)
{
if (this.quads[i].art.sharedMaterial && this.quads[i].art.sharedMaterial.shader.name.Contains("Ghost"))
{
this.quads[i].art.sharedMaterial.shader = Links.x.backgroundShader;
}
}
this.mapCanResurrect = false;
if (this.underground)
{
if (this.fogFadeCorout != null)
{
base.StopCoroutine(this.fogFadeCorout);
this.fogFadeCorout = null;
}
this.fogFadeCorout = this.FadeGhostFog(this.currentFogValue, 0f);
base.StartCoroutine(this.fogFadeCorout);
}
}
// Token: 0x06000CFB RID: 3323 RVA: 0x000FAE80 File Offset: 0x000F9080
public Character FindCharacterHerder()
{
for (int i = 0; i < this.creatureActions.Count; i++)
{
if (this.creatureActions[i] && this.creatureActions[i].xmlName != null && this.creatureActions[i].xmlName.Contains("Herder"))
{
Character firstCharacter = this.creatureActions[i].GetFirstCharacter();
if (firstCharacter && !firstCharacter.dead && !firstCharacter.stunned && !firstCharacter.sleeping)
{
return firstCharacter;
}
}
}
return null;
}
// Token: 0x06000CFC RID: 3324 RVA: 0x000FAF20 File Offset: 0x000F9120
public Character FindCharacter(string n)
{
for (int i = 0; i < this.creatureActions.Count; i++)
{
if (this.creatureActions[i] && this.creatureActions[i].xmlName == n)
{
return this.creatureActions[i].GetFirstCharacter();
}
}
return null;
}
// Token: 0x06000CFD RID: 3325 RVA: 0x000FAF84 File Offset: 0x000F9184
public DoorActions FindDoor(string n)
{
for (int i = 0; i < this.doorActions.Count; i++)
{
if (this.doorActions[i].gameObject.name == n)
{
return this.doorActions[i];
}
}
return null;
}
// Token: 0x06000CFE RID: 3326 RVA: 0x000FAFD4 File Offset: 0x000F91D4
public Character FindCharacterAnyState(string n)
{
int count = this.creatureActions.Count;
for (int i = 0; i < count; i++)
{
CreatureActions creatureActions = this.creatureActions[i];
if (creatureActions.xmlName == n)
{
return creatureActions.GetFirstCharacter(true);
}
}
return null;
}
// Token: 0x06000CFF RID: 3327 RVA: 0x000FB020 File Offset: 0x000F9220
public PromptActions GetPromptWithQuest(string n)
{
foreach (PromptActions promptActions in this.promptActions)
{
if (promptActions.prompt.type == Prompts.types.puzzle && promptActions.prompt.questName.ToString() == n)
{
return promptActions;
}
}
return null;
}
// Token: 0x06000D00 RID: 3328 RVA: 0x000FB0A0 File Offset: 0x000F92A0
public void CheckCampCleared()
{
foreach (PromptActions promptActions in this.promptActions)
{
if (promptActions.prompt.type == Prompts.types.campCleared)
{
promptActions.CheckStatus();
}
}
}
// Token: 0x06000D01 RID: 3329 RVA: 0x000FB104 File Offset: 0x000F9304
public void CheckQuestChange()
{
for (int i = 0; i < this.creatureActions.Count; i++)
{
this.creatureActions[i].CheckQuestSwap();
}
}
// Token: 0x06000D02 RID: 3330 RVA: 0x000FB138 File Offset: 0x000F9338
private void CheckStunsAndQuestChange()
{
for (int i = 0; i < this.creatureActions.Count; i++)
{
this.creatureActions[i].CheckStuns();
this.creatureActions[i].CheckQuestSwap();
}
for (int j = 0; j < this.party.Count; j++)
{
if (this.party[j] && this.party[j].stunned && Mathf.Floor((float)Links.x.gameplay.GetCurrentGameTimeHours()) >= this.party[j].timeOfDeath)
{
this.party[j].EndStun();
}
}
foreach (PromptActions promptActions in this.promptActions)
{
if (promptActions.prompt.type == Prompts.types.campCleared)
{
promptActions.CheckHour();
}
}
}
// Token: 0x06000D03 RID: 3331 RVA: 0x000FB248 File Offset: 0x000F9448
private void CheckResurrections()
{
for (int i = 0; i < this.creatureActions.Count; i++)
{
this.creatureActions[i].CheckResurrections();
}
}
// Token: 0x06000D04 RID: 3332 RVA: 0x000FB27C File Offset: 0x000F947C
private void CheckRespawns()
{
for (int i = 0; i < this.creatureActions.Count; i++)
{
this.creatureActions[i].CheckHourRespawn();
}
}
// Token: 0x06000D05 RID: 3333 RVA: 0x000FB2B0 File Offset: 0x000F94B0
public void TimeJump()
{
this.enemiesInCamp.Clear();
this.prevTimeOfDay = Links.x.gameplay.timeOfDay;
for (int i = 0; i < this.creatureActions.Count; i++)
{
this.creatureActions[i].ChangingTime(Links.x.gameplay.gameHours, true);
}
}
// Token: 0x06000D06 RID: 3334 RVA: 0x000FB314 File Offset: 0x000F9514
public bool SeenWhileResting()
{
return this.enemiesInCamp.Count > 0;
}
// Token: 0x06000D07 RID: 3335 RVA: 0x000FB328 File Offset: 0x000F9528
public void EnemiesInCampAlert()
{
if (this.enemiesInCamp.Count > 0)
{
for (int i = 0; i < this.linksParty.Count; i++)
{
if (this.linksParty[i])
{
Links.x.sensory.AddFootstep(this.linksParty[i]);
}
}
}
}
// Token: 0x06000D08 RID: 3336 RVA: 0x000FB388 File Offset: 0x000F9588
public void DayNightSwitch(bool timeJump)
{
for (int i = 0; i < this.creatureActions.Count; i++)
{
this.creatureActions[i].DayNightSwitch(timeJump);
}
}
// Token: 0x06000D09 RID: 3337 RVA: 0x000FB3C0 File Offset: 0x000F95C0
public void CheckDistanceToRestingParty(Character character)
{
float num = character.stats.SightRadius(false, false, false);
float num2 = num * num;
for (int i = 0; i < this.linksParty.Count; i++)
{
if (this.linksParty[i] && this.linksParty[i].party && (this.linksParty[i].tr.position - character.tr.position).sqrMagnitude < num2 && this.linksParty[i].indoorID == character.indoorID)
{
this.enemiesInCamp.Add(character);
if (Records.x.editor)
{
string text = ((character != null) ? character.ToString() : null);
string text2 = " interrupted sleep for ";
Character character2 = this.linksParty[i];
Debug.Log(text + text2 + ((character2 != null) ? character2.ToString() : null));
}
}
}
}
// Token: 0x06000D0A RID: 3338 RVA: 0x000FB4C4 File Offset: 0x000F96C4
public global::Item CheckGroundForItem(Creatures linked, int linkedID, int itemID, Vector3 point, Character character, int index)
{
int count = this.groundItems.Count;
for (int i = 0; i < count; i++)
{
global::Item item = this.groundItems[i];
if (item && item.ID == itemID && item.active && item.gameObject.activeSelf && (item.linkedCreatures == linked || !linked) && (item.linkedCreatureID == linkedID || !linked) && (item.tr.position - point).sqrMagnitude < 400f)
{
return item;
}
}
for (int j = 0; j < count; j++)
{
global::Item item = this.groundItems[j];
if (item && item.active && item.gameObject.activeSelf && (item.tr.position - point).sqrMagnitude < 400f && !item.linkedCreatures)
{
if (index == 0 || index == 32)
{
if (item.invRow._DmgMax > 0 && character.stats.IsGoodWeaponMatch(character, item))
{
return item;
}
}
else if (index == 18)
{
if (item.invRow._Tag == "Armor" && character.stats.IsGoodArmorMatch(character, item))
{
return item;
}
}
else if (index == 2)
{
if (character.stats.IsGoodShieldMatch(character, item))
{
return item;
}
}
else if (index > 36 || index == 14 || index == 26 || index == 28)
{
if (item.invRow._Life > 0)
{
return item;
}
}
else if ((index > 36 || index == 8 || index == 10 || index == 12) && item.invRow._Tag == "Ammunition" && character.stats.IsGoodAmmoMatch(character, item))
{
return item;
}
}
}
return null;
}
// Token: 0x06000D0B RID: 3339 RVA: 0x000FB6D8 File Offset: 0x000F98D8
public void SetOriginalSceneItemLink(string sceneItemName, GameObject creatureObject)
{
for (int i = 0; i < this.itemOriginals.Count; i++)
{
if (this.itemOriginals[i] == sceneItemName)
{
this.itemLinks[i] = "";
}
}
foreach (SceneItem sceneItem in this.sceneItems)
{
if (sceneItem.gameObject.name == sceneItemName)
{
sceneItem.linkedCharacter = null;
}
}
this.itemsNoRespawn.Add(sceneItemName);
}
// Token: 0x06000D0C RID: 3340 RVA: 0x000FB760 File Offset: 0x000F9960
public void HasForSaleGroundItems(Creatures linked)
{
int num = this.sceneItems.Length;
for (int i = 0; i < num; i++)
{
SceneItem sceneItem = this.sceneItems[i];
if (sceneItem.forSale && linked == sceneItem.linkedCharacter && !this.HasSpawnedItem(sceneItem))
{
this.SpawnSceneItem(sceneItem);
}
}
}
// Token: 0x06000D0D RID: 3341 RVA: 0x000FB7B8 File Offset: 0x000F99B8
public void CheckDoors(Character character)
{
Vector3 position = character.tr.position;
if (character.currentDoor > 0 && character.currentDoor > 0 && character.currentDoor - 1 < this.doorActions.Count)
{
position.y = this.doorActions[character.currentDoor - 1].center.y;
if (this.SubtractVectors(position, this.doorActions[character.currentDoor - 1].center).sqrMagnitude >= this.doorActions[character.currentDoor - 1].openDistance)
{
this.doorActions[character.currentDoor - 1].AddRemoveCharacterOnCollider(character, false);
character.currentDoor = 0;
}
}
int count = this.doorActions.Count;
for (int i = 0; i < count; i++)
{
DoorActions doorActions = this.doorActions[i];
if (i != character.currentDoor - 1 && doorActions.swings && !doorActions.destroyed)
{
position.y = this.doorActions[i].center.y;
if (this.SubtractVectors(position, this.doorActions[i].center).sqrMagnitude < this.doorActions[i].openDistance)
{
this.doorActions[i].AddRemoveCharacterOnCollider(character, true);
character.currentDoor = i + 1;
return;
}
}
}
}
// Token: 0x06000D0E RID: 3342 RVA: 0x000FB94C File Offset: 0x000F9B4C
public Vector3 SubtractVectors(Vector3 a, Vector3 b)
{
Vector3 vector;
vector.x = a.x - b.x;
vector.y = a.y - b.y;
vector.z = a.z - b.z;
return vector;
}
// Token: 0x06000D0F RID: 3343 RVA: 0x000FB998 File Offset: 0x000F9B98
public Vector3 SubtractVectorsSameY(Vector3 a, Vector3 b)
{
Vector3 vector;
vector.x = a.x - b.x;
vector.y = 0f;
vector.z = a.z - b.z;
return vector;
}
// Token: 0x06000D10 RID: 3344 RVA: 0x000FB9DC File Offset: 0x000F9BDC
public bool InMoonlight(Vector3 pt)
{
bool flag = true;
this.currentInteriorLight;
if (!flag)
{
for (int i = 0; i < this.moonlights.Count; i++)
{
Moonlight moonlight = this.moonlights[i];
if (moonlight)
{
pt.y = moonlight.tr.position.y;
if ((pt - moonlight.tr.position).sqrMagnitude < moonlight.radius)
{
flag = true;
break;
}
}
}
}
return flag;
}
// Token: 0x06000D11 RID: 3345 RVA: 0x000FBA68 File Offset: 0x000F9C68
public void MoonlightList(Moonlight moonlight, bool state)
{
int num = this.moonlights.IndexOf(moonlight);
if (state)
{
if (num == -1)
{
this.moonlights.Add(moonlight);
return;
}
}
else if (num > -1)
{
this.moonlights.RemoveAt(num);
}
}
// Token: 0x06000D12 RID: 3346 RVA: 0x000FBAA8 File Offset: 0x000F9CA8
public void StartQuadCulling()
{
this.quads = Links.x.quads;
this.party = Links.x.party;
for (int i = 0; i < 2; i++)
{
if (i < this.sceneViews.Count)
{
Plane plane = new Plane(Vector3.up, new Vector3(0f, this.sceneViews[i].cameraCollider.bounds.center.y, 0f));
float num = this.sceneViews[i].sceneCamera.orthographicSize * 2f;
float num2 = num * 1.7777778f;
num2 /= 2f;
num /= 2f;
Vector3 position = this.sceneViews[i].sceneCamera.gameObject.transform.position;
Vector3 forward = this.sceneViews[i].sceneCamera.gameObject.transform.forward;
Vector3 right = this.sceneViews[i].sceneCamera.gameObject.transform.right;
Vector3 up = this.sceneViews[i].sceneCamera.gameObject.transform.up;
Vector3 vector = position - num2 * right + num * up;
Ray ray = new Ray(vector, forward);
float num3;
if (plane.Raycast(ray, out num3))
{
vector = ray.GetPoint(num3);
}
Vector3 vector2 = position + num2 * right + num * up;
ray = new Ray(vector2, forward);
float num4;
if (plane.Raycast(ray, out num4))
{
vector2 = ray.GetPoint(num4);
}
Vector3 vector3 = position + num2 * right - num * up;
ray = new Ray(vector3, forward);
float num5;
if (plane.Raycast(ray, out num5))
{
vector3 = ray.GetPoint(num5);
}
Vector3 vector4 = position - num2 * right - num * up;
ray = new Ray(vector4, forward);
float num6;
if (plane.Raycast(ray, out num6))
{
vector4 = ray.GetPoint(num6);
}
if (i == 0)
{
Links.x.rtsCamera.topLeftBounds = vector;
Links.x.rtsCamera.topRightBounds = vector2;
Links.x.rtsCamera.bottomRightBounds = vector3;
Links.x.rtsCamera.bottomLeftBounds = vector4;
Links.x.main.CreateSphere(Links.x.rtsCamera.topLeftBounds, 1E-05f);
Links.x.main.CreateSphere(Links.x.rtsCamera.topRightBounds, 1E-05f);
Links.x.main.CreateSphere(Links.x.rtsCamera.bottomRightBounds, 1E-05f);
Links.x.main.CreateSphere(Links.x.rtsCamera.bottomLeftBounds, 1E-05f);
}
else
{
Links.x.rtsCamera.topLeftBoundsInterior = vector;
Links.x.rtsCamera.topRightBoundsInterior = vector2;
Links.x.rtsCamera.bottomRightBoundsInterior = vector3;
Links.x.rtsCamera.bottomLeftBoundsInterior = vector4;
Links.x.main.CreateSphere(Links.x.rtsCamera.topLeftBoundsInterior, 1E-05f);
Links.x.main.CreateSphere(Links.x.rtsCamera.topRightBoundsInterior, 1E-05f);
Links.x.main.CreateSphere(Links.x.rtsCamera.bottomRightBoundsInterior, 1E-05f);
Links.x.main.CreateSphere(Links.x.rtsCamera.bottomLeftBoundsInterior, 1E-05f);
}
}
}
}
// Token: 0x06000D13 RID: 3347 RVA: 0x000FBEA4 File Offset: 0x000FA0A4
public void CheckQuadState(bool turnAllOff)
{
if (!this.activeView)
{
return;
}
Vector3 vector = Vector3.zero;
Vector3 vector2 = new Vector3((float)Screen.width / 2f, (float)Screen.height / 2f, 0f);
Ray ray = Links.x.worldCamera.ScreenPointToRay(vector2);
float num = 0f;
if (this.sceneInfo)
{
num = this.sceneInfo.groundY;
}
Plane plane = new Plane(Vector3.up, this.activeView.cameraCollider.bounds.center.y + num);
float num2;
if (plane.Raycast(ray, out num2))
{
vector = ray.GetPoint(num2);
}
int index = this.activeView.index;
bool flag = false;
if (this.activeView.index > 1)
{
flag = true;
}
for (int i = 0; i < this.quads.Count; i++)
{
bool flag2 = false;
Culling culling = this.quads[i];
if (culling.sceneCamera.index == index)
{
flag2 = true;
}
bool flag3 = false;
bool flag4 = false;
if (flag2 && !flag)
{
flag4 = true;
}
if (flag4 && (vector - new Vector3(culling.center.x, vector.y, culling.center.z)).sqrMagnitude < 22500f)
{
flag3 = true;
}
if (flag && flag2)
{
flag3 = true;
}
if (flag && !flag2)
{
if (this.activeView.isInterior)
{
if (culling.sceneCamera.index == 1)
{
flag3 = true;
}
}
else if (culling.sceneCamera.index == 0)
{
flag3 = true;
}
}
if (Records.x.editor && Records.x.testPatrols && culling.sceneCamera.index < 2)
{
flag3 = true;
}
if (flag3)
{
if (!culling.isOn)
{
if (flag && !flag2)
{
culling.ChangeState(true, true);
}
else
{
culling.ChangeState(true, false);
}
this.activeQuads.Add(culling);
}
else if (culling.isOn && !culling.art.enabled && flag2)
{
culling.ArtOn();
}
else if (culling.isOn && flag && !flag2 && culling.art.enabled)
{
culling.ChangeState(true, true);
}
}
else if (culling.isOn)
{
culling.ChangeState(false, false);
int num3 = this.activeQuads.IndexOf(culling);
if (num3 > -1)
{
this.activeQuads.RemoveAt(num3);
}
}
}
if (turnAllOff)
{
for (int j = 0; j < this.quads.Count; j++)
{
this.quads[j].ChangeState(false, false);
}
}
if (this.currentInteriorLight && (Links.x.main.tr.position - this.prevMainPosition).sqrMagnitude > 16f)
{
this.currentInteriorLight.SetUpCompanionNodes();
this.prevMainPosition = Links.x.main.tr.position;
}
}
// Token: 0x06000D14 RID: 3348 RVA: 0x000FC1E0 File Offset: 0x000FA3E0
private void LateUpdate()
{
if (Links.x)
{
if (this.quads != null && this.party != null && Links.x.gaia.sceneLoaded)
{
this.CheckQuadState(false);
}
if (Time.timeSinceLevelLoad > this.queueUpdate + 2f)
{
this.queueUpdate = Time.timeSinceLevelLoad;
int count = this.promptQueue.Count;
for (int i = 0; i < count; i++)
{
if (i < this.promptQueue.Count)
{
PromptActions promptActions = this.promptQueue[i];
if (promptActions && promptActions.state != 1)
{
promptActions.Action(true);
}
}
}
uint num = 0U;
this.UpdateMapExits(num);
}
if (this.currentInteriorLight)
{
this.currentInteriorLight.ActiveLights();
}
Links.x.inventory.LookForTorch();
bool flag = this.mainCharacterInGhostFog;
if (Links.x.hasMain)
{
this.mainCharacterInGhostFog = this.InResurrectionFog(Links.x.main.tr.position);
if (flag != this.mainCharacterInGhostFog)
{
if (this.fogFadeCorout != null)
{
base.StopCoroutine(this.fogFadeCorout);
this.fogFadeCorout = null;
}
if (this.mainCharacterInGhostFog)
{
this.fogFadeCorout = this.FadeGhostFog(this.currentFogValue, 1f);
base.StartCoroutine(this.fogFadeCorout);
}
else
{
this.fogFadeCorout = this.FadeGhostFog(this.currentFogValue, 0f);
base.StartCoroutine(this.fogFadeCorout);
}
}
}
for (int j = 0; j < this.characters.Count; j++)
{
Character character = this.characters[j];
if (character && !character.inactive)
{
character.UpdatePositions();
}
}
}
}
// Token: 0x06000D15 RID: 3349 RVA: 0x000FC3B3 File Offset: 0x000FA5B3
private IEnumerator FadeGhostFog(float fogStart, float fogTarget)
{
float timeToLerp = 1.5f;
float percentage = 0f;
float startTime = Time.time;
yield return new WaitForSeconds(0.1f);
while (Records.x.removeControls)
{
yield return null;
}
while (percentage < 1f)
{
percentage = (Time.time - startTime) / timeToLerp;
this.currentFogValue = Mathf.Lerp(fogStart, fogTarget, percentage);
Shader.SetGlobalFloat("_InGhostFog", this.currentFogValue);
yield return null;
}
yield break;
}
// Token: 0x06000D16 RID: 3350 RVA: 0x000FC3D0 File Offset: 0x000FA5D0
public void AddPromptToQueue(PromptActions queue)
{
if (this.promptQueue.IndexOf(queue) == -1)
{
this.promptQueue.Add(queue);
}
}
// Token: 0x06000D17 RID: 3351 RVA: 0x000FC3F0 File Offset: 0x000FA5F0
public void RemovePromptFromQueue(PromptActions queue)
{
int num = this.promptQueue.IndexOf(queue);
if (num > -1)
{
this.promptQueue.RemoveAt(num);
}
}
// Token: 0x06000D18 RID: 3352 RVA: 0x000FC41C File Offset: 0x000FA61C
public void BombBomb(Vector3 pt, Character bomber)
{
GameObject pooledGameObject = Links.x.cellar.GetPooledGameObject(135);
pooledGameObject.transform.position = pt + new Vector3(0f, 0.2f, 0f);
pooledGameObject.SetActive(true);
MasterAudio.PlaySound3DAtVector3AndForget("Elixir", pt, Random.Range(0.5f, 0.6f), new float?(1f), 0f, "", null);
MasterAudio.PlaySound3DAtVector3AndForget("Interactives", pt, 0.5f, new float?(1f), 0f, "Chest Break", null);
float num = 36f;
if (bomber)
{
num = 81f;
}
for (int i = 0; i < this.characters.Count; i++)
{
Character character = this.characters[i];
if (character && this.SubtractVectorsSameY(character.currentPosition, pt).sqrMagnitude < num && !character.stats.dead)
{
Effects effects = character.gameObject.AddComponent<Effects>();
Links.x.cellar.AddEffects(effects);
effects.gameObject.SetActive(true);
effects.target = character;
effects.effectName = "Impact";
if (!bomber)
{
effects.source = character;
effects.sourceLevel = Mathf.Clamp(5f - Vector3.Distance(character.currentPosition, pt), 1f, 5f);
}
else
{
effects.source = bomber;
effects.sourceLevel = (float)bomber.stats.level * 5f;
}
effects.Inflicted(true);
character.Bounce(bomber, "Hit", 0f);
}
}
for (int j = 0; j < this.breakableActions.Count; j++)
{
BreakableActions breakableActions = this.breakableActions[j];
if (breakableActions && !breakableActions.destroyed && this.SubtractVectorsSameY(breakableActions.pt, pt).sqrMagnitude < num)
{
breakableActions.currentHealth = 0;
breakableActions.ClickToBreak(Links.x.main, false, false);
}
}
for (int k = 0; k < this.chestActions.Count; k++)
{
ChestActions chestActions = this.chestActions[k];
if (chestActions && !chestActions.destroyed && this.SubtractVectorsSameY(chestActions.transform.position, pt).sqrMagnitude < num)
{
chestActions.currentHealth = 0;
chestActions.ClickToBreak(Links.x.main, false);
}
}
for (int l = 0; l < this.doorActions.Count; l++)
{
DoorActions doorActions = this.doorActions[l];
if (doorActions && !doorActions.destroyed && this.SubtractVectorsSameY(doorActions.lockColliderPosition, pt).sqrMagnitude < num)
{
doorActions.currentHealth = 0;
doorActions.ClickToBreak(Links.x.main, false);
}
}
}
// Token: 0x06000D19 RID: 3353 RVA: 0x000FC750 File Offset: 0x000FA950
public void SetupInteractives1()
{
string text = Records.x.openBook + "/Map_" + this.sceneDisplayName + ".es3";
this.firstTimeOnScene = true;
if (ES3.FileExists(text))
{
this.saveFile = new ES3File(text);
this.breakableNames.Clear();
this.breakableNames = this.saveFile.Load<List<string>>("BreakableNames");
this.breakableStates.Clear();
this.breakableStates = this.saveFile.Load<List<int>>("Breakables");
this.chestNames.Clear();
this.chestNames = this.saveFile.Load<List<string>>("ChestNames");
this.chestStates.Clear();
this.chestStates = this.saveFile.Load<List<int>>("ChestStates");
this.doorNames.Clear();
this.doorNames = this.saveFile.Load<List<string>>("DoorNames");
this.doorLocked.Clear();
this.doorLocked = this.saveFile.Load<List<bool>>("DoorLocked");
this.doorHealth.Clear();
this.doorHealth = this.saveFile.Load<List<int>>("DoorHealth");
this.resourceStates.Clear();
this.resourceStates = this.saveFile.Load<List<bool>>("ResourceStates");
this.resourceTime.Clear();
this.resourceTime = this.saveFile.Load<List<float>>("ResourceTime");
this.promptStates.Clear();
this.promptStates = this.saveFile.Load<List<int>>("Prompts");
this.promptNames.Clear();
this.promptNames = this.saveFile.Load<List<string>>("PromptNames");
this.mapExitNames.Clear();
this.mapExitNames = this.saveFile.Load<List<string>>("MapExitNames");
this.mapExitStates.Clear();
this.mapExitStates = this.saveFile.Load<List<int>>("MapExitStates");
if (this.saveFile.KeyExists("TimeOnScene"))
{
this.lastTimeOnScene = this.saveFile.Load<float>("TimeOnScene");
}
if (this.saveFile.KeyExists("GameVersionForThisScene"))
{
if (Records.x.demo)
{
this.lastVersionForThisScene = this.saveFile.Load<float>("GameVersionForThisScene");
}
else
{
this.lastVersionForThisScene = this.saveFile.Load<float>("GameVersionForThisScene");
}
}
else
{
this.lastVersionForThisScene = 1.27f;
}
this.firstTimeOnScene = false;
}
int count = this.mapExitNames.Count;
for (int i = 0; i < this.mapExits.Count; i++)
{
if (this.mapExits[i])
{
this.mapExits[i].SetupNodeLink();
string name = this.mapExits[i].gameObject.name;
for (int j = 0; j < count; j++)
{
if (this.mapExitNames[j] == name)
{
if (this.mapExitStates[j] == 1)
{
this.mapExits[i].visited = true;
}
else
{
this.mapExits[i].visited = false;
}
}
}
}
}
int count2 = this.puzzles.Count;
for (int k = 0; k < count2; k++)
{
PuzzleActions puzzleActions = this.puzzles[k].gameObject.AddComponent<PuzzleActions>();
this.puzzleActions.Add(puzzleActions);
}
this.breakableActions.Clear();
for (int l = 0; l < this.breakables.Count; l++)
{
BreakableActions breakableActions = this.breakables[l].gameObject.AddComponent<BreakableActions>();
this.breakableActions.Add(breakableActions);
breakableActions.breakable = this.breakables[l];
breakableActions.resourceLocation = -1;
if (this.firstTimeOnScene)
{
breakableActions.NewGameSetup();
}
}
this.chestActions.Clear();
for (int m = 0; m < this.chests.Count; m++)
{
ChestActions chestActions = this.chests[m].gameObject.AddComponent<ChestActions>();
this.chestActions.Add(chestActions);
chestActions.chest = this.chests[m];
}
this.doorActions.Clear();
for (int n = 0; n < this.doors.Count; n++)
{
DoorActions doorActions = this.doors[n].gameObject.AddComponent<DoorActions>();
this.doorActions.Add(doorActions);
doorActions.door = this.doors[n];
if (this.firstTimeOnScene)
{
this.doorActions[n].NewGameSetup();
}
}
for (int num = 0; num < this.prompts.Length; num++)
{
PromptActions promptActions = this.prompts[num].gameObject.AddComponent<PromptActions>();
this.promptActions.Add(promptActions);
promptActions.prompt = this.prompts[num];
promptActions.Setup();
}
}
// Token: 0x06000D1A RID: 3354 RVA: 0x000FCC74 File Offset: 0x000FAE74
public void SetupInteractives2()
{
int num = this.breakableNames.Count;
int num2 = this.breakableActions.Count;
for (int i = 0; i < num; i++)
{
bool flag = false;
string text = this.breakableNames[i];
for (int j = 0; j < num2; j++)
{
if (!flag && text == this.breakableActions[j].saveName)
{
flag = true;
if (this.breakableStates[i] <= 0)
{
this.breakableActions[j].ClickToBreak(null, true, false);
}
else
{
this.breakableActions[j].LoadGameSetup(this.breakableStates[i]);
}
}
}
}
num = this.chestNames.Count;
num2 = this.chestActions.Count;
for (int k = 0; k < num; k++)
{
bool flag2 = false;
string text2 = this.chestNames[k];
for (int l = 0; l < num2; l++)
{
if (!flag2 && text2 == this.chestActions[l].saveName)
{
flag2 = true;
this.chestActions[l].LoadGameSetup(this.chestStates[k]);
}
}
}
num = this.doorNames.Count;
num2 = this.doorActions.Count;
for (int m = 0; m < num; m++)
{
bool flag3 = false;
string text3 = this.doorNames[m];
for (int n = 0; n < num2; n++)
{
if (!flag3 && text3 == this.doorActions[n].saveName)
{
flag3 = true;
this.doorActions[n].LoadGameSetup(this.doorHealth[m], this.doorLocked[m]);
}
}
}
num = this.promptNames.Count;
num2 = this.promptActions.Count;
for (int num3 = 0; num3 < num; num3++)
{
bool flag4 = false;
string text4 = this.promptNames[num3];
for (int num4 = 0; num4 < num2; num4++)
{
if (!flag4 && text4 == this.promptActions[num4].saveName)
{
flag4 = true;
this.promptActions[num4].state = this.promptStates[num3];
}
}
}
for (int num5 = 0; num5 < this.promptActions.Count; num5++)
{
this.promptActions[num5].FinishSetup();
}
int num6 = 0;
bool flag5 = false;
if (this.resourceLocations.Count > 0)
{
if (this.resourceStates.Count != this.resourceLocations.Count || this.firstTimeOnScene || flag5)
{
int num7 = Mathf.RoundToInt((float)this.resourceLocations.Count / 6f);
num6 = Random.Range(Mathf.RoundToInt((float)this.resourceLocations.Count / 8f), num7);
if (flag5)
{
num6 = this.resourceLocations.Count;
}
for (int num8 = 0; num8 < this.resourceLocations.Count; num8++)
{
this.resourceStates.Add(false);
this.resourceTime.Add(0f);
this.resourcePrefabs.Add(null);
}
}
else
{
this.resourcePrefabs.Clear();
for (int num9 = 0; num9 < this.resourceLocations.Count; num9++)
{
if (this.resourceStates[num9])
{
this.resourcePrefabs.Add(null);
this.SetupResource(this.resourceTypes[num9], num9);
}
else if (this.resourceTime[num9] > 0f)
{
if (this.resourceTime[num9] > (float)(Links.x.gameplay.GetCurrentGameTime() + 1))
{
num6++;
this.resourceTime[num9] = 0f;
}
this.resourcePrefabs.Add(null);
}
else
{
this.resourcePrefabs.Add(null);
}
}
}
List<int> list = new List<int>();
for (int num10 = 0; num10 < num6; num10++)
{
bool flag6 = false;
for (int num11 = 0; num11 < 200; num11++)
{
if (!flag6)
{
int num12 = Random.Range(0, this.resourceStates.Count);
if (!this.resourceStates[num12] && !list.Contains(num12))
{
list.Add(num12);
flag6 = true;
}
}
}
}
if (flag5)
{
list.Clear();
for (int num13 = 0; num13 < num6; num13++)
{
list.Add(num13);
}
}
for (int num14 = 0; num14 < list.Count; num14++)
{
if (list[num14] < this.resourceTypes.Count && list[num14] > -1)
{
Breakable.ComponentTypes componentTypes = this.resourceTypes[list[num14]];
this.resourceStates[list[num14]] = true;
this.resourceTime[list[num14]] = 0f;
int num15 = list[num14];
this.SetupResource(componentTypes, num15);
}
}
}
for (int num16 = 0; num16 < this.puzzleActions.Count; num16++)
{
this.puzzleActions[num16].LoadPuzzleInfo();
}
}
// Token: 0x06000D1B RID: 3355 RVA: 0x000FD1F4 File Offset: 0x000FB3F4
private void SetupResource(Breakable.ComponentTypes component, int index)
{
if (component == Breakable.ComponentTypes.Acorn)
{
GameObject pooledGameObject = Links.x.cellar.GetPooledGameObject(59);
pooledGameObject.SetActive(true);
pooledGameObject.transform.position = this.resourceLocations[index];
pooledGameObject.transform.rotation = this.resourceRotations[index];
pooledGameObject.gameObject.GetComponent<BreakableActions>().resourceLocation = index;
this.resourcePrefabs[index] = pooledGameObject;
}
if (component == Breakable.ComponentTypes.Berry)
{
GameObject pooledGameObject2 = Links.x.cellar.GetPooledGameObject(93);
pooledGameObject2.SetActive(true);
pooledGameObject2.transform.position = this.resourceLocations[index];
pooledGameObject2.transform.rotation = this.resourceRotations[index];
pooledGameObject2.gameObject.GetComponent<BreakableActions>().resourceLocation = index;
this.resourcePrefabs[index] = pooledGameObject2;
}
if (component == Breakable.ComponentTypes.Shell)
{
RaycastHit raycastHit;
if (Physics.Raycast(this.resourceLocations[index] + new Vector3(0f, 10f, 0f), Vector3.up * -1f, out raycastHit, 100f, Links.x.floor))
{
this.resourceLocations[index] = raycastHit.point;
}
GameObject gameObject = Object.Instantiate<GameObject>(Links.x.critters.crab, this.resourceLocations[index], this.resourceRotations[index], Links.x.diorama.transform);
CritterActions critterActions = gameObject.transform.GetChild(0).gameObject.AddComponent<CritterActions>();
gameObject.transform.GetChild(0).gameObject.SetActive(true);
gameObject.transform.GetChild(1).gameObject.SetActive(false);
critterActions.resourceLocation = index;
critterActions.resourcePoint = this.resourceLocations[index];
critterActions.dead = false;
critterActions.isResource = true;
critterActions.MakeRandomPath(null);
Links.x.critters.AddActiveCritter(critterActions);
this.resourcePrefabs[index] = gameObject;
}
if (component == Breakable.ComponentTypes.Mushroom)
{
GameObject pooledGameObject3 = Links.x.cellar.GetPooledGameObject(54);
pooledGameObject3.SetActive(true);
pooledGameObject3.transform.position = this.resourceLocations[index];
pooledGameObject3.transform.rotation = this.resourceRotations[index];
pooledGameObject3.gameObject.GetComponent<BreakableActions>().resourceLocation = index;
this.resourcePrefabs[index] = pooledGameObject3;
}
if (component == Breakable.ComponentTypes.Rock)
{
GameObject pooledGameObject4 = Links.x.cellar.GetPooledGameObject(52);
pooledGameObject4.SetActive(true);
pooledGameObject4.transform.position = this.resourceLocations[index];
pooledGameObject4.transform.rotation = this.resourceRotations[index];
pooledGameObject4.gameObject.GetComponent<BreakableActions>().resourceLocation = index;
this.resourcePrefabs[index] = pooledGameObject4;
}
if (component == Breakable.ComponentTypes.Frog)
{
GameObject pooledGameObject5 = Links.x.cellar.GetPooledGameObject(50);
pooledGameObject5.SetActive(true);
pooledGameObject5.transform.position = this.resourceLocations[index];
pooledGameObject5.transform.rotation = this.resourceRotations[index];
pooledGameObject5.gameObject.GetComponent<BreakableActions>().resourceLocation = index;
this.resourcePrefabs[index] = pooledGameObject5;
}
if (component == Breakable.ComponentTypes.Stick)
{
GameObject pooledGameObject6 = Links.x.cellar.GetPooledGameObject(51);
pooledGameObject6.SetActive(true);
pooledGameObject6.transform.position = this.resourceLocations[index];
pooledGameObject6.transform.rotation = this.resourceRotations[index];
pooledGameObject6.gameObject.GetComponent<BreakableActions>().resourceLocation = index;
this.resourcePrefabs[index] = pooledGameObject6;
}
if (component == Breakable.ComponentTypes.HollowStick)
{
GameObject pooledGameObject7 = Links.x.cellar.GetPooledGameObject(53);
pooledGameObject7.SetActive(true);
pooledGameObject7.transform.position = this.resourceLocations[index] + new Vector3(0f, 1.4f, 0f);
pooledGameObject7.transform.rotation = Quaternion.identity;
pooledGameObject7.gameObject.GetComponent<BreakableActions>().resourceLocation = index;
this.resourcePrefabs[index] = pooledGameObject7;
}
if (this.resourcePrefabs[index] && component != Breakable.ComponentTypes.Shell)
{
this.resourcePrefabs[index].transform.parent = null;
this.resourcePrefabs[index].transform.parent = Links.x.cellar.tr;
}
}
// Token: 0x06000D1C RID: 3356 RVA: 0x000FD6A4 File Offset: 0x000FB8A4
public void ReturnResource(int index, GameObject go)
{
if (index < this.resourceTime.Count && index > -1)
{
this.resourceTime[index] = (float)Links.x.gameplay.GetCurrentGameTime();
this.resourceStates[index] = false;
Breakable.ComponentTypes componentTypes = this.resourceTypes[index];
if (componentTypes == Breakable.ComponentTypes.Acorn)
{
Links.x.cellar.ReturnPooledGameObject(59, go);
}
if (componentTypes == Breakable.ComponentTypes.Mushroom)
{
Links.x.cellar.ReturnPooledGameObject(54, go);
}
if (componentTypes == Breakable.ComponentTypes.Stick)
{
Links.x.cellar.ReturnPooledGameObject(51, go);
}
if (componentTypes == Breakable.ComponentTypes.HollowStick)
{
Links.x.cellar.ReturnPooledGameObject(53, go);
}
}
}
// Token: 0x06000D1D RID: 3357 RVA: 0x000FD764 File Offset: 0x000FB964
public void RemoveResourcePrefabs()
{
for (int i = 0; i < this.resourcePrefabs.Count; i++)
{
GameObject gameObject = this.resourcePrefabs[i];
if (gameObject)
{
Breakable.ComponentTypes componentTypes = this.resourceTypes[i];
if (componentTypes == Breakable.ComponentTypes.Rock)
{
Links.x.cellar.ReturnPooledGameObject(52, gameObject);
}
if (componentTypes == Breakable.ComponentTypes.Frog)
{
Links.x.cellar.ReturnPooledGameObject(50, gameObject);
}
if (componentTypes == Breakable.ComponentTypes.Stick)
{
Links.x.cellar.ReturnPooledGameObject(51, gameObject);
}
if (componentTypes == Breakable.ComponentTypes.HollowStick)
{
Links.x.cellar.ReturnPooledGameObject(53, gameObject);
}
if (componentTypes == Breakable.ComponentTypes.Acorn)
{
Links.x.cellar.ReturnPooledGameObject(59, gameObject);
}
if (componentTypes == Breakable.ComponentTypes.Mushroom)
{
Links.x.cellar.ReturnPooledGameObject(54, gameObject);
}
if (componentTypes == Breakable.ComponentTypes.Berry)
{
Links.x.cellar.ReturnPooledGameObject(93, gameObject);
}
}
}
}
// Token: 0x06000D1E RID: 3358 RVA: 0x000FD84C File Offset: 0x000FBA4C
public void ReturnItemsPrefabs()
{
foreach (global::Item item in this.groundItems)
{
if (item)
{
item.DestroyItem(false, true);
}
}
}
// Token: 0x06000D1F RID: 3359 RVA: 0x000FD8A8 File Offset: 0x000FBAA8
public void GetBreakableTiles()
{
for (int i = 0; i < this.breakableActions.Count; i++)
{
this.breakableActions[i].GetNode();
}
}
// Token: 0x06000D20 RID: 3360 RVA: 0x000FD8DC File Offset: 0x000FBADC
public void SetupItems()
{
this.sceneItems = this.items.gameObject.GetComponentsInChildren<SceneItem>();
int num = this.sceneItems.Length;
string text = Records.x.openBook + "/Map_" + this.sceneDisplayName + ".es3";
if (ES3.FileExists(text))
{
this.saveFile = new ES3File(text);
this.itemIDs.Clear();
this.itemSaveIDs = this.saveFile.Load<List<string>>("ItemIDs");
this.itemAmts = this.saveFile.Load<List<int>>("ItemAmts");
this.itemSocketsA = this.saveFile.Load<List<Vector3>>("ItemSocketsA");
this.itemSocketsB = this.saveFile.Load<List<Vector3>>("ItemSocketsB");
this.itemsForSaleStates = this.saveFile.Load<List<bool>>("ItemForSaleStates");
this.itemPositions = this.saveFile.Load<List<Vector3>>("ItemPositions");
this.itemRotations = this.saveFile.Load<List<Quaternion>>("ItemRotations");
this.itemLinks = this.saveFile.Load<List<string>>("ItemLinks");
this.itemLinkIDs = this.saveFile.Load<List<int>>("ItemLinkIDs");
this.itemPrompts = this.saveFile.Load<List<string>>("ItemPrompts");
this.itemTimes = this.saveFile.Load<List<Vector4>>("ItemTimes");
this.itemOriginals = this.saveFile.Load<List<string>>("ItemOriginals");
this.itemsNoRespawn = this.saveFile.Load<List<string>>("ItemsNoRespawn");
int count = this.itemSaveIDs.Count;
for (int i = 0; i < count; i++)
{
int invRowID = Links.x.library.GetInvRowID(this.itemSaveIDs[i]);
this.itemIDs.Add(invRowID);
global::Item item = Links.x.inventory.groundBag.DropLoot(invRowID, this.itemAmts[i], this.itemSocketsA[i], this.itemSocketsB[i], this.itemTimes[i], null, this.itemPositions[i], false, this.itemsForSaleStates[i], -1);
if (item)
{
item.sceneItemName = this.itemOriginals[i];
item.transform.rotation = this.itemRotations[i];
item.forSale = this.itemsForSaleStates[i];
item.durability = this.itemTimes[i];
if (item.forSale && item.invRow._NeedFullStack)
{
this.itemAmts[i] = item.invRow._MaxStackSize;
item.stackSize = item.invRow._MaxStackSize;
}
if (this.itemLinks[i] != "")
{
foreach (Creatures creatures in this.creatureControllers)
{
if (creatures.gameObject.name == this.itemLinks[i])
{
item.linkedCreatures = creatures;
item.linkedCreatureID = this.itemLinkIDs[i];
break;
}
}
}
if (this.itemPrompts[i] != "")
{
Prompts[] array2 = this.prompts;
int j = 0;
while (j < array2.Length)
{
Prompts prompts = array2[j];
if (prompts.gameObject.name == this.itemPrompts[i])
{
item.linkedPrompt = prompts;
if (item.linkedPrompt)
{
item.SetupLinkedItem();
break;
}
break;
}
else
{
j++;
}
}
}
this.AddItem(item);
if (this.itemLinks[i] == "")
{
for (int k = 0; k < num; k++)
{
if (this.sceneItems[k].gameObject.name == item.sceneItemName)
{
this.sceneItems[k].linkedCharacter = null;
}
}
}
item.GetLinkedCharacter();
}
}
foreach (SceneItem sceneItem in this.sceneItems)
{
if (sceneItem.deactivateFromQuest != Creatures.Adventures.None)
{
global::Item item2 = this.HasSpawnedItem(sceneItem);
if (item2)
{
item2.deactivateFromQuest = sceneItem.deactivateFromQuest;
item2.stateOfQuest_ = sceneItem.stateOfQuest_;
}
}
else if (sceneItem.versionNumber > this.lastVersionForThisScene && sceneItem.versionNumber > 0f)
{
bool flag = true;
if (sceneItem.activateFromQuest != Creatures.Adventures.None)
{
flag = QuestLog.GetQuestState(sceneItem.activateFromQuest.ToString()) == Records.x.StringToQuestState(sceneItem.stateOfQuest.ToString()) && sceneItem.stateOfQuest != Creatures.AdventureStates.NotApplicable;
}
if (flag)
{
this.SpawnSceneItem(sceneItem);
}
}
if (this.itemsNoRespawn.Contains(sceneItem.gameObject.name))
{
sceneItem.linkedCharacter = null;
}
}
this.CheckItemsThatMightActivate();
}
else
{
foreach (SceneItem sceneItem2 in this.sceneItems)
{
bool flag2 = true;
if (sceneItem2.activateFromQuest != Creatures.Adventures.None)
{
flag2 = QuestLog.GetQuestState(sceneItem2.activateFromQuest.ToString()) == Records.x.StringToQuestState(sceneItem2.stateOfQuest.ToString()) && sceneItem2.stateOfQuest != Creatures.AdventureStates.NotApplicable;
}
if (flag2)
{
this.SpawnSceneItem(sceneItem2);
}
}
}
this.itemSaveIDs.Clear();
}
// Token: 0x06000D21 RID: 3361 RVA: 0x000FDEA4 File Offset: 0x000FC0A4
private global::Item SpawnSceneItem(SceneItem t)
{
string text = t.item.ToString();
Library.Inventory invRowFromName = Links.x.library.GetInvRowFromName(text);
if (Records.x.editor && invRowFromName == null)
{
Debug.Log("row null: " + text);
}
int id = invRowFromName._ID;
if (t.durability.x == 0f)
{
t.durability.x = (float)invRowFromName._DurabilityMax;
}
global::Item item = Links.x.inventory.groundBag.DropLoot(id, t.amount, t.socketA, t.socketB, t.durability, null, t.gameObject.transform.position, false, t.forSale, -1);
Vector3 eulerAngles = t.gameObject.transform.rotation.eulerAngles;
eulerAngles.y += 300f;
if (item)
{
item.transform.rotation = Quaternion.Euler(eulerAngles);
item.forSale = t.forSale;
item.linkedCreatures = t.linkedCharacter;
item.linkedCreatureID = 0;
item.linkedPrompt = t.linkedPrompt;
item.sceneItemName = t.gameObject.name;
if (item.linkedPrompt)
{
item.SetupLinkedItem();
}
item.deactivateFromQuest = t.deactivateFromQuest;
item.stateOfQuest_ = t.stateOfQuest_;
this.AddItem(item);
item.GetLinkedCharacter();
}
return item;
}
// Token: 0x06000D22 RID: 3362 RVA: 0x000FE024 File Offset: 0x000FC224
public void UpdateMapExits(uint area)
{
for (int i = 0; i < this.mapExits.Count; i++)
{
if (this.mapExits[i])
{
this.mapExits[i].PartyInRoom(area);
}
}
}
// Token: 0x06000D23 RID: 3363 RVA: 0x000FE06C File Offset: 0x000FC26C
public void FindCreatures()
{
this.creatureControllers = this.creatures.gameObject.GetComponentsInChildren<Creatures>();
foreach (Creatures creatures in this.creatureControllers)
{
CreatureActions creatureActions = creatures.gameObject.GetComponent<CreatureActions>();
if (!creatureActions)
{
creatureActions = creatures.gameObject.AddComponent<CreatureActions>();
creatureActions.creatures = creatures;
this.creatureActions.Add(creatureActions);
creatureActions.LoadCreatures();
}
}
}
// Token: 0x06000D24 RID: 3364 RVA: 0x000FE0E4 File Offset: 0x000FC2E4
public void CombatEndPrompts()
{
foreach (PromptActions promptActions in this.promptActions)
{
if (promptActions)
{
promptActions.CheckCombatEnd();
}
}
}
// Token: 0x06000D25 RID: 3365 RVA: 0x000FE140 File Offset: 0x000FC340
public void CheckQuestActivations()
{
this.CheckCreaturesThatMightActivate();
this.CheckPromptsThatMightActivate();
this.CheckItemsThatMightActivate();
}
// Token: 0x06000D26 RID: 3366 RVA: 0x000FE154 File Offset: 0x000FC354
public void CheckItemsThatMightActivate()
{
foreach (SceneItem sceneItem in this.sceneItems)
{
bool flag = false;
if (sceneItem.activateFromQuest != Creatures.Adventures.None && !this.HasSpawnedItem(sceneItem) && QuestLog.GetQuestState(sceneItem.activateFromQuest.ToString()) == Records.x.StringToQuestState(sceneItem.stateOfQuest.ToString()) && sceneItem.stateOfQuest != Creatures.AdventureStates.NotApplicable)
{
flag = true;
}
if (flag)
{
this.SpawnSceneItem(sceneItem);
}
}
foreach (global::Item item in this.groundItems)
{
if (item && item.active && item.deactivateFromQuest != Creatures.Adventures.None && QuestLog.GetQuestState(item.deactivateFromQuest.ToString()) == Records.x.StringToQuestState(item.stateOfQuest_.ToString()))
{
item.DestroyItem(false, false);
}
}
foreach (global::Item item2 in this.groundItems)
{
if (item2 && item2.linkedCreatures)
{
item2.GetLinkedCharacter();
Character linkedCharacter = item2.linkedCharacter;
if (linkedCharacter && !linkedCharacter.stunned && !linkedCharacter.dead)
{
if (((linkedCharacter.creatures.isDay && linkedCharacter.creatures.daySleep) || (!linkedCharacter.creatures.isDay && linkedCharacter.creatures.nightSleep)) && !linkedCharacter.dead && item2.clickable && item2.forSale)
{
item2.SetDayNight(false);
}
if (!item2.clickable && ((linkedCharacter.creatures.isDay && !linkedCharacter.creatures.daySleep) || (!linkedCharacter.creatures.isDay && !linkedCharacter.creatures.nightSleep)) && item2.forSale)
{
item2.SetDayNight(true);
}
}
}
}
}
// Token: 0x06000D27 RID: 3367 RVA: 0x000FE3C8 File Offset: 0x000FC5C8
public void CheckLinkedCharacters(Character deadCharacter)
{
foreach (global::Item item in this.groundItems)
{
if (item && item.linkedCreatures)
{
item.GetLinkedCharacter();
}
}
}
// Token: 0x06000D28 RID: 3368 RVA: 0x000FE430 File Offset: 0x000FC630
public void CheckCreaturesThatMightActivate()
{
foreach (CreatureActions creatureActions in this.creatureActions)
{
if (creatureActions.waitingForPrompt && !this.HasPrompt(creatureActions.gameObject) && creatureActions.CanActivate())
{
creatureActions.SetupCreatures();
creatureActions.enabled = true;
}
}
}
// Token: 0x06000D29 RID: 3369 RVA: 0x000FE4A8 File Offset: 0x000FC6A8
private void CheckPromptsThatMightActivate()
{
foreach (PromptActions promptActions in this.promptActions)
{
if (promptActions.prompt.type == Prompts.types.toggleGameObjectFromQuest)
{
promptActions.CheckStatus();
}
}
}
// Token: 0x06000D2A RID: 3370 RVA: 0x000FE50C File Offset: 0x000FC70C
private global::Item HasSpawnedItem(SceneItem sceneItem)
{
string text = sceneItem.item.ToString();
int id = Links.x.library.GetInvRowFromName(text)._ID;
for (int i = 0; i < this.groundItems.Count; i++)
{
if (this.groundItems[i].ID == id && this.groundItems[i].active && this.groundItems[i].sceneItemName == sceneItem.gameObject.name)
{
return this.groundItems[i];
}
}
return null;
}
// Token: 0x06000D2B RID: 3371 RVA: 0x000FE5B0 File Offset: 0x000FC7B0
public void SetupCreatures()
{
bool flag = false;
if (this.sceneName == "F4_BanquetIsle")
{
flag = true;
}
foreach (CreatureActions creatureActions in this.creatureActions)
{
if (!this.HasPrompt(creatureActions.gameObject) && creatureActions.CanActivate())
{
creatureActions.SetupCreatures();
if (flag)
{
creatureActions.CheckForTextureSwap();
}
}
else
{
creatureActions.waitingForPrompt = true;
}
}
}
// Token: 0x06000D2C RID: 3372 RVA: 0x000FE640 File Offset: 0x000FC840
public bool HasPrompt(GameObject x)
{
for (int i = 0; i < this.prompts.Length; i++)
{
if (this.prompts[i].ambushCharacters && (this.prompts[i].ambushCharacters == x || this.prompts[i].ambushCharacters == x.transform.parent.gameObject) && this.prompts[i].GetComponent<PromptActions>().state != 1)
{
return true;
}
}
return false;
}
// Token: 0x06000D2D RID: 3373 RVA: 0x000FE6C8 File Offset: 0x000FC8C8
public CreatureActions SetCreatureState(string xmlName, string newState, int num)
{
foreach (CreatureActions creatureActions in this.creatureActions)
{
if (creatureActions.xmlName == xmlName)
{
creatureActions.SetStateByIndex(num, newState);
return creatureActions;
}
}
return null;
}
// Token: 0x06000D2E RID: 3374 RVA: 0x000FE734 File Offset: 0x000FC934
public CreatureActions MatchCreatureActions(string s)
{
for (int i = 0; i < this.creatureActions.Count; i++)
{
if (this.creatureActions[i].gameObject.name == s)
{
return this.creatureActions[i];
}
}
return null;
}
// Token: 0x06000D2F RID: 3375 RVA: 0x000FE784 File Offset: 0x000FC984
public void SetupTemporaryCreatures(string creaturesName, int temperament, string xmlName, int xmlNameIndex, string originalMap, string previousMap, Vector3 position, string state, int life, string savedEffects, int tempIndex, float delay)
{
GameObject gameObject = new GameObject(creaturesName);
gameObject.transform.parent = this.creatures;
Creatures creatures = gameObject.AddComponent<Creatures>();
CreatureActions creatureActions = gameObject.AddComponent<CreatureActions>();
creatureActions.creatures = creatures;
GameObject gameObject2 = new GameObject("DayNight");
gameObject2.transform.parent = gameObject.transform;
gameObject2.transform.position = position;
GameObject gameObject3 = new GameObject("Walk Point");
gameObject3.transform.parent = gameObject2.transform;
gameObject3.transform.position = position;
creatures.number = 1;
creatureActions.temporary = true;
creatureActions.SetTemperament(temperament);
creatureActions.SetState(tempIndex, state);
creatureActions.temporaryState = state;
creatureActions.creatures.characterName = (Creatures.xmlNames)xmlNameIndex;
creatureActions.originalScene = originalMap;
if (delay > 0f)
{
creatureActions.UpdateDelays(delay, 0, previousMap);
creatureActions.temporaryStartNode = Links.x.gaia.playerStartingNode;
creatureActions.hunting = true;
}
creatureActions.SetupCreatures();
creatureActions.temporaryIndex = tempIndex;
if (originalMap == "")
{
creatureActions.onlyTemporary = true;
creatureActions.temporary = false;
}
this.creatureActions.Add(creatureActions);
}
// Token: 0x06000D30 RID: 3376 RVA: 0x000FE8B0 File Offset: 0x000FCAB0
public void UpdateTemporaryCreatureStartNodes()
{
for (int i = 0; i < this.creatureActions.Count; i++)
{
if (this.creatureActions[i].hunting)
{
this.creatureActions[i].temporaryStartNode = Links.x.gaia.playerStartingNode;
this.creatureActions[i].UpdatePosition((Vector3)Links.x.gaia.playerStartingNode.position);
}
}
}
// Token: 0x06000D31 RID: 3377 RVA: 0x000FE930 File Offset: 0x000FCB30
public void CheckDelayedCharacters(string map)
{
for (int i = 0; i < this.creatureActions.Count; i++)
{
if (this.creatureActions[i].waitingForDelay)
{
this.creatureActions[i].UpdateTemporaryListsFromMapChange(map);
}
}
}
// Token: 0x06000D32 RID: 3378 RVA: 0x000FE978 File Offset: 0x000FCB78
public void AddCreature(CreatureActions c)
{
this.creatureActions.Add(c);
}
// Token: 0x06000D33 RID: 3379 RVA: 0x000FE988 File Offset: 0x000FCB88
public void SaveCreatures()
{
foreach (CreatureActions creatureActions in this.creatureActions)
{
creatureActions.SaveCreatures();
}
Links.x.cellar.SaveEnemySummons();
}
// Token: 0x06000D34 RID: 3380 RVA: 0x000FE9E8 File Offset: 0x000FCBE8
public void PrepareItemsToSave()
{
this.savingItems = true;
}
// Token: 0x06000D35 RID: 3381 RVA: 0x000FE9F4 File Offset: 0x000FCBF4
public void SaveGroundItems()
{
string text = Records.x.openBook + "/Map_" + this.sceneDisplayName + ".es3";
this.saveFile = new ES3File(text);
if (Records.x.demo)
{
this.saveFile.Save<float>("GameVersionForThisScene", Records.x.gameVersionDemo);
}
else
{
this.saveFile.Save<float>("GameVersionForThisScene", Records.x.gameVersion);
}
this.saveFile.Save<float>("TimeOnScene", (float)Links.x.gameplay.gameDays);
this.itemIDs.Clear();
this.itemAmts.Clear();
this.itemSocketsA.Clear();
this.itemSocketsB.Clear();
this.itemsForSaleStates.Clear();
this.itemPositions.Clear();
this.itemRotations.Clear();
this.itemLinks.Clear();
this.itemPrompts.Clear();
this.itemTimes.Clear();
this.itemSaveIDs.Clear();
this.itemOriginals.Clear();
int count = this.groundItems.Count;
for (int i = 0; i < count; i++)
{
global::Item item = this.groundItems[i];
if (item)
{
bool flag = false;
if (item.onGround && item.linkedPrompt && item.linkedPrompt.gameObject.GetComponent<PromptActions>().state == 0)
{
flag = true;
}
if (item.active || (!item.active && item.instantiating) || flag)
{
this.itemIDs.Add(item.ID);
this.itemSaveIDs.Add(item.invRow._Name);
this.itemAmts.Add(item.stackSize);
this.itemSocketsA.Add(item.socketA);
this.itemSocketsB.Add(item.socketB);
this.itemsForSaleStates.Add(item.forSale);
this.itemPositions.Add(item.gameObject.transform.position);
this.itemRotations.Add(item.gameObject.transform.rotation);
this.itemTimes.Add(item.durability);
if (item.linkedCreatures)
{
this.itemLinks.Add(item.linkedCreatures.gameObject.name);
this.itemLinkIDs.Add(item.linkedCreatureID);
}
else
{
this.itemLinks.Add("");
this.itemLinkIDs.Add(0);
}
if (item.linkedPrompt)
{
this.itemPrompts.Add(item.linkedPrompt.gameObject.name);
}
else
{
this.itemPrompts.Add("");
}
this.itemOriginals.Add(item.sceneItemName);
}
}
}
this.saveFile.Save<List<string>>("ItemIDs", this.itemSaveIDs);
this.saveFile.Save<List<int>>("ItemAmts", this.itemAmts);
this.saveFile.Save<List<Vector3>>("ItemSocketsA", this.itemSocketsA);
this.saveFile.Save<List<Vector3>>("ItemSocketsB", this.itemSocketsB);
this.saveFile.Save<List<bool>>("ItemForSaleStates", this.itemsForSaleStates);
this.saveFile.Save<List<Vector3>>("ItemPositions", this.itemPositions);
this.saveFile.Save<List<Quaternion>>("ItemRotations", this.itemRotations);
this.saveFile.Save<List<string>>("ItemLinks", this.itemLinks);
this.saveFile.Save<List<int>>("ItemLinkIDs", this.itemLinkIDs);
this.saveFile.Save<List<Vector4>>("ItemTimes", this.itemTimes);
this.saveFile.Save<List<string>>("ItemPrompts", this.itemPrompts);
this.saveFile.Save<List<string>>("ItemOriginals", this.itemOriginals);
this.saveFile.Save<List<string>>("ItemsNoRespawn", this.itemsNoRespawn);
this.savingItems = false;
}
// Token: 0x06000D36 RID: 3382 RVA: 0x000FEE1C File Offset: 0x000FD01C
public void SaveInteractives()
{
this.breakableNames.Clear();
this.breakableStates.Clear();
int num = this.breakableActions.Count;
for (int i = 0; i < num; i++)
{
BreakableActions breakableActions = this.breakableActions[i];
if (breakableActions)
{
if (breakableActions.breakable.armor == 0)
{
if (breakableActions.destroyed)
{
this.breakableStates.Add(0);
}
else
{
this.breakableStates.Add(1);
}
}
else
{
this.breakableStates.Add(breakableActions.currentHealth);
}
this.breakableNames.Add(breakableActions.gameObject.name);
}
}
this.saveFile.Save<List<int>>("Breakables", this.breakableStates);
this.saveFile.Save<List<string>>("BreakableNames", this.breakableNames);
this.chestNames.Clear();
this.chestStates.Clear();
num = this.chestActions.Count;
for (int j = 0; j < num; j++)
{
ChestActions chestActions = this.chestActions[j];
if (chestActions)
{
this.chestStates.Add(chestActions.currentHealth);
this.chestNames.Add(chestActions.gameObject.name);
}
}
this.saveFile.Save<List<int>>("ChestStates", this.chestStates);
this.saveFile.Save<List<string>>("ChestNames", this.chestNames);
this.doorNames.Clear();
this.doorHealth.Clear();
this.doorLocked.Clear();
num = this.doorActions.Count;
for (int k = 0; k < num; k++)
{
DoorActions doorActions = this.doorActions[k];
if (doorActions)
{
this.doorHealth.Add(doorActions.currentHealth);
this.doorLocked.Add(doorActions.door.locked);
this.doorNames.Add(doorActions.gameObject.name);
}
}
this.saveFile.Save<List<int>>("DoorHealth", this.doorHealth);
this.saveFile.Save<List<bool>>("DoorLocked", this.doorLocked);
this.saveFile.Save<List<string>>("DoorNames", this.doorNames);
this.promptNames.Clear();
this.promptStates.Clear();
num = this.promptActions.Count;
for (int l = 0; l < num; l++)
{
PromptActions promptActions = this.promptActions[l];
if (promptActions)
{
this.promptStates.Add(promptActions.state);
this.promptNames.Add(promptActions.gameObject.name);
}
}
this.saveFile.Save<List<int>>("Prompts", this.promptStates);
this.saveFile.Save<List<string>>("PromptNames", this.promptNames);
num = this.mapExits.Count;
this.mapExitNames.Clear();
this.mapExitStates.Clear();
for (int m = 0; m < num; m++)
{
this.mapExitNames.Add(this.mapExits[m].gameObject.name);
if (this.mapExits[m].visited)
{
this.mapExitStates.Add(1);
}
else
{
this.mapExitStates.Add(0);
}
}
this.saveFile.Save<List<string>>("MapExitNames", this.mapExitNames);
this.saveFile.Save<List<int>>("MapExitStates", this.mapExitStates);
this.saveFile.Save<List<float>>("ResourceTime", this.resourceTime);
this.saveFile.Save<List<bool>>("ResourceStates", this.resourceStates);
this.saveFile.Sync();
for (int n = 0; n < this.puzzleActions.Count; n++)
{
this.puzzleActions[n].SavePuzzleInfo();
}
}
// Token: 0x06000D37 RID: 3383 RVA: 0x000FF214 File Offset: 0x000FD414
public MapExit MatchMapExit(string sceneFrom, string subExit)
{
for (int i = 0; i < this.mapExits.Count; i++)
{
if (this.mapExits[i].sceneTo == sceneFrom && (this.mapExits[i].subExit == subExit || subExit == "None"))
{
return this.mapExits[i].mapExit;
}
}
return null;
}
// Token: 0x06000D38 RID: 3384 RVA: 0x000FF28C File Offset: 0x000FD48C
public Door GetBuddyDoor(MapExit entrance)
{
for (int i = 0; i < this.mapExits.Count; i++)
{
if (entrance != this.mapExits[i].mapExit)
{
if (this.mapExits[i].sceneTo == "Interiors" && entrance.exitTo == MapExit.exitToNames.Exterior)
{
if (this.mapExits[i].mapExit.interiorConnection == entrance.exteriorConnection)
{
return this.mapExits[i].door;
}
}
else if (this.mapExits[i].sceneTo == "Exterior" && entrance.exitTo == MapExit.exitToNames.Interiors)
{
if (this.mapExits[i].mapExit.exteriorConnection == entrance.interiorConnection)
{
return this.mapExits[i].door;
}
}
else if (this.mapExits[i].sceneTo == "Interiors" && entrance.exitTo == MapExit.exitToNames.Interiors && this.mapExits[i].mapExit.interiorConnection == entrance.interiorConnection)
{
return this.mapExits[i].door;
}
}
}
return null;
}
// Token: 0x06000D39 RID: 3385 RVA: 0x000FF3D8 File Offset: 0x000FD5D8
public MapExit MatchMapExitInteriorExterior(bool toInterior, MapExit.interiorNames exitName, MapExit entrance)
{
for (int i = 0; i < this.mapExits.Count; i++)
{
if (entrance != this.mapExits[i].mapExit && ((this.mapExits[i].sceneTo == "Interiors" && !toInterior) || (this.mapExits[i].sceneTo == "Interiors" && toInterior) || (this.mapExits[i].sceneTo == "Exterior" && toInterior) || (this.mapExits[i].sceneTo == "Exterior" && !toInterior)))
{
if (!toInterior && this.mapExits[i].mapExit.interiorConnection == exitName)
{
return this.mapExits[i].mapExit;
}
if (toInterior)
{
if (this.mapExits[i].mapExit.exteriorConnection == exitName)
{
return this.mapExits[i].mapExit;
}
if (this.mapExits[i].mapExit.interiorConnection == exitName)
{
return this.mapExits[i].mapExit;
}
}
}
}
return null;
}
// Token: 0x06000D3A RID: 3386 RVA: 0x000FF52C File Offset: 0x000FD72C
public MapExit MatchMapExitDoorway(bool toInterior, MapExit.interiorNames exitName)
{
for (int i = 0; i < this.mapExits.Count; i++)
{
if ((this.mapExits[i].sceneTo == "Interiors" && toInterior) || (this.mapExits[i].sceneTo == "Exterior" && !toInterior))
{
if (toInterior && this.mapExits[i].mapExit.interiorConnection == exitName)
{
return this.mapExits[i].mapExit;
}
if (!toInterior && this.mapExits[i].mapExit.exteriorConnection == exitName)
{
return this.mapExits[i].mapExit;
}
}
}
return null;
}
// Token: 0x06000D3B RID: 3387 RVA: 0x000FF5F1 File Offset: 0x000FD7F1
public bool IsInteriorExit(MapExit exit)
{
return exit.exitTo == MapExit.exitToNames.Interiors;
}
// Token: 0x06000D3C RID: 3388 RVA: 0x000FF600 File Offset: 0x000FD800
public MapExit ClosestMapEntrance(Vector3 pt)
{
MapExit mapExit = null;
float num = float.PositiveInfinity;
for (int i = 0; i < this.mapExits.Count; i++)
{
float sqrMagnitude = (this.mapExits[i].mapExit.doorPoint - pt).sqrMagnitude;
if (sqrMagnitude < num)
{
num = sqrMagnitude;
mapExit = this.mapExits[i].mapExit;
}
}
return mapExit;
}
// Token: 0x06000D3D RID: 3389 RVA: 0x000FF66C File Offset: 0x000FD86C
public MapExit.interiorNames GetMapExitName(string n)
{
if (n == "A")
{
return MapExit.interiorNames.A;
}
if (n == "B")
{
return MapExit.interiorNames.B;
}
if (n == "C")
{
return MapExit.interiorNames.C;
}
if (n == "D")
{
return MapExit.interiorNames.D;
}
if (n == "E")
{
return MapExit.interiorNames.E;
}
if (n == "F")
{
return MapExit.interiorNames.F;
}
if (n == "G")
{
return MapExit.interiorNames.G;
}
if (n == "H")
{
return MapExit.interiorNames.H;
}
if (n == "I")
{
return MapExit.interiorNames.I;
}
if (n == "J")
{
return MapExit.interiorNames.J;
}
if (n == "K")
{
return MapExit.interiorNames.K;
}
if (n == "L")
{
return MapExit.interiorNames.L;
}
if (n == "M")
{
return MapExit.interiorNames.M;
}
if (n == "N")
{
return MapExit.interiorNames.N;
}
if (n == "O")
{
return MapExit.interiorNames.O;
}
if (n == "P")
{
return MapExit.interiorNames.P;
}
if (n == "Q")
{
return MapExit.interiorNames.Q;
}
if (n == "R")
{
return MapExit.interiorNames.R;
}
if (n == "S")
{
return MapExit.interiorNames.S;
}
if (n == "T")
{
return MapExit.interiorNames.T;
}
if (n == "U")
{
return MapExit.interiorNames.U;
}
if (n == "V")
{
return MapExit.interiorNames.V;
}
if (n == "W")
{
return MapExit.interiorNames.W;
}
if (n == "X")
{
return MapExit.interiorNames.X;
}
if (n == "Y")
{
return MapExit.interiorNames.Y;
}
if (n == "Z")
{
return MapExit.interiorNames.Z;
}
return MapExit.interiorNames.None;
}
// Token: 0x06000D3E RID: 3390 RVA: 0x000FF812 File Offset: 0x000FDA12
public void AddItem(global::Item item)
{
if (this.groundItems.IndexOf(item) == -1)
{
this.groundItems.Add(item);
}
}
// Token: 0x06000D3F RID: 3391 RVA: 0x000FF830 File Offset: 0x000FDA30
public void CheckTileEffects(TileEffects effects)
{
for (int i = 0; i < this.breakableActions.Count; i++)
{
if (!this.breakableActions[i].destroyed)
{
effects.CheckTileInteractive(this.breakableActions[i].gameObject);
}
}
for (int j = 0; j < this.chestActions.Count; j++)
{
if (!this.chestActions[j].destroyed)
{
effects.CheckTileInteractive(this.chestActions[j].gameObject);
}
}
for (int k = 0; k < this.doorActions.Count; k++)
{
if (!this.doorActions[k].destroyed)
{
effects.CheckTileInteractive(this.doorActions[k].gameObject);
}
}
}
// Token: 0x04001492 RID: 5266
public string sceneName;
// Token: 0x04001493 RID: 5267
public string sceneDisplayName;
// Token: 0x04001494 RID: 5268
public bool underground;
// Token: 0x04001495 RID: 5269
public bool exteriorForest;
// Token: 0x04001496 RID: 5270
public bool exteriorDeepForest;
// Token: 0x04001497 RID: 5271
public bool exteriorWaterBeach;
// Token: 0x04001498 RID: 5272
public bool exteriorBog;
// Token: 0x04001499 RID: 5273
public bool exteriorMountains;
// Token: 0x0400149A RID: 5274
public bool interiorCave;
// Token: 0x0400149B RID: 5275
public bool interiorTomb;
// Token: 0x0400149C RID: 5276
public bool horror;
// Token: 0x0400149D RID: 5277
public static GameObject origin;
// Token: 0x0400149E RID: 5278
public static Links x;
// Token: 0x0400149F RID: 5279
public bool timeOfDay;
// Token: 0x040014A0 RID: 5280
public bool saveOverTerrain;
// Token: 0x040014A1 RID: 5281
public bool singleCharacter;
// Token: 0x040014A2 RID: 5282
public bool blackFow;
// Token: 0x040014A3 RID: 5283
public bool mapCanResurrect;
// Token: 0x040014A4 RID: 5284
public float cameraDistance;
// Token: 0x040014A5 RID: 5285
public SceneInfo sceneInfo;
// Token: 0x040014A6 RID: 5286
public float lastVersionForThisScene;
// Token: 0x040014A7 RID: 5287
public bool savingItems;
// Token: 0x040014A8 RID: 5288
public int groupID;
// Token: 0x040014A9 RID: 5289
public float lastTimeOnScene;
// Token: 0x040014AA RID: 5290
public float boatColliderY;
// Token: 0x040014AB RID: 5291
public float waterY;
// Token: 0x040014AC RID: 5292
[Header("LISTS")]
public List<Character> characters = new List<Character>();
// Token: 0x040014AD RID: 5293
public Creatures[] creatureControllers = new Creatures[0];
// Token: 0x040014AE RID: 5294
public List<CreatureActions> creatureActions = new List<CreatureActions>();
// Token: 0x040014AF RID: 5295
public List<Transform> creatureHolders = new List<Transform>();
// Token: 0x040014B0 RID: 5296
public SceneItem[] sceneItems = new SceneItem[0];
// Token: 0x040014B1 RID: 5297
public List<global::Item> groundItems = new List<global::Item>();
// Token: 0x040014B2 RID: 5298
public List<Breakable> breakables = new List<Breakable>();
// Token: 0x040014B3 RID: 5299
public List<BreakableActions> breakableActions = new List<BreakableActions>();
// Token: 0x040014B4 RID: 5300
public List<Door> doors = new List<Door>();
// Token: 0x040014B5 RID: 5301
public List<DoorActions> doorActions = new List<DoorActions>();
// Token: 0x040014B6 RID: 5302
public List<Chest> chests = new List<Chest>();
// Token: 0x040014B7 RID: 5303
public List<ChestActions> chestActions = new List<ChestActions>();
// Token: 0x040014B8 RID: 5304
public List<PromptActions> promptActions = new List<PromptActions>();
// Token: 0x040014B9 RID: 5305
public Prompts[] prompts = new Prompts[0];
// Token: 0x040014BA RID: 5306
public List<int> promptStates = new List<int>();
// Token: 0x040014BB RID: 5307
public List<MeshCollider> meshColliders = new List<MeshCollider>();
// Token: 0x040014BC RID: 5308
public List<SphereCollider> blueFog = new List<SphereCollider>();
// Token: 0x040014BD RID: 5309
public List<SphereCollider> fogColliders = new List<SphereCollider>();
// Token: 0x040014BE RID: 5310
private List<Bounds> blueFogBounds = new List<Bounds>();
// Token: 0x040014BF RID: 5311
public List<Bounds> fogColliderBounds = new List<Bounds>();
// Token: 0x040014C0 RID: 5312
public List<SphereCollider> townColliders = new List<SphereCollider>();
// Token: 0x040014C1 RID: 5313
public List<Bounds> townColliderBounds = new List<Bounds>();
// Token: 0x040014C2 RID: 5314
public List<SphereCollider> sporeColliders = new List<SphereCollider>();
// Token: 0x040014C3 RID: 5315
public List<Bounds> sporeColliderBounds = new List<Bounds>();
// Token: 0x040014C4 RID: 5316
public List<Character> enemiesInCamp = new List<Character>();
// Token: 0x040014C5 RID: 5317
public List<GameObject> resourcePrefabs = new List<GameObject>();
// Token: 0x040014C6 RID: 5318
public List<Vector3> resourceLocations = new List<Vector3>();
// Token: 0x040014C7 RID: 5319
public List<Quaternion> resourceRotations = new List<Quaternion>();
// Token: 0x040014C8 RID: 5320
public List<Breakable.ComponentTypes> resourceTypes = new List<Breakable.ComponentTypes>();
// Token: 0x040014C9 RID: 5321
public List<Moonlight> moonlights = new List<Moonlight>();
// Token: 0x040014CA RID: 5322
public List<Puzzle> puzzles = new List<Puzzle>();
// Token: 0x040014CB RID: 5323
public List<PuzzleActions> puzzleActions = new List<PuzzleActions>();
// Token: 0x040014CC RID: 5324
public List<PromptActions> promptQueue = new List<PromptActions>();
// Token: 0x040014CD RID: 5325
public Transform cameraPoints;
// Token: 0x040014CE RID: 5326
public List<Transform> camPoints = new List<Transform>();
// Token: 0x040014CF RID: 5327
public List<Terrain> terrains = new List<Terrain>();
// Token: 0x040014D0 RID: 5328
[Header("GAMEPLAY OBJECTS")]
public Light sceneDirectionalLight;
// Token: 0x040014D1 RID: 5329
public Light scenePointLight;
// Token: 0x040014D2 RID: 5330
public GameObject pointLightShadows;
// Token: 0x040014D3 RID: 5331
public List<LOSSource> pointShadowCameras = new List<LOSSource>();
// Token: 0x040014D4 RID: 5332
public FOWSystem fogOfWar;
// Token: 0x040014D5 RID: 5333
public FOWSystemInterior fogOfWarInterior;
// Token: 0x040014D6 RID: 5334
public Transform items;
// Token: 0x040014D7 RID: 5335
public Transform creatures;
// Token: 0x040014D8 RID: 5336
public Transform throats;
// Token: 0x040014D9 RID: 5337
public Transform town;
// Token: 0x040014DA RID: 5338
public Transform spores;
// Token: 0x040014DB RID: 5339
public TVEGlobalVolume vegetation;
// Token: 0x040014DC RID: 5340
private List<Culling> quads;
// Token: 0x040014DD RID: 5341
public List<Culling> activeQuads = new List<Culling>();
// Token: 0x040014DE RID: 5342
public List<Character> party = new List<Character>();
// Token: 0x040014DF RID: 5343
private List<Character> linksParty;
// Token: 0x040014E0 RID: 5344
public MeshRenderer terrain;
// Token: 0x040014E1 RID: 5345
public GameObject promptsFolder;
// Token: 0x040014E2 RID: 5346
public Transform globalVegVolume;
// Token: 0x040014E3 RID: 5347
public GameObject morningFolder;
// Token: 0x040014E4 RID: 5348
public GameObject afternoonFolder;
// Token: 0x040014E5 RID: 5349
public GameObject eveningFolder;
// Token: 0x040014E6 RID: 5350
public GameObject nightFolder;
// Token: 0x040014E7 RID: 5351
public int pointLightTransforms;
// Token: 0x040014E8 RID: 5352
public InteriorLights currentInteriorLight;
// Token: 0x040014E9 RID: 5353
public GameObject ghostPoint;
// Token: 0x040014EA RID: 5354
public GraphNode ghostNode;
// Token: 0x040014EB RID: 5355
public GameObject boatCollider;
// Token: 0x040014EC RID: 5356
[Header("CAMERA OBJECTS")]
public Camera sceneCamera;
// Token: 0x040014ED RID: 5357
public Collider currCameraCollider;
// Token: 0x040014EE RID: 5358
public Transform cameraDirection;
// Token: 0x040014EF RID: 5359
public List<SceneCamera> sceneViews = new List<SceneCamera>();
// Token: 0x040014F0 RID: 5360
public Camera currentCameraView;
// Token: 0x040014F1 RID: 5361
public SceneCamera activeView;
// Token: 0x040014F2 RID: 5362
private SceneCamera prevView;
// Token: 0x040014F3 RID: 5363
[Header("STARTING LOCATIONS")]
public Transform playerStartDefault;
// Token: 0x040014F4 RID: 5364
public Transform playerStartBoatDefault;
// Token: 0x040014F5 RID: 5365
public List<MapExitActions> mapExits = new List<MapExitActions>();
// Token: 0x040014F6 RID: 5366
[Header("BAKE VARIABLES")]
public Vector2 aspect;
// Token: 0x040014F7 RID: 5367
public Vector2 resolution;
// Token: 0x040014F8 RID: 5368
public Vector2 split;
// Token: 0x040014F9 RID: 5369
public float quadOverlap;
// Token: 0x040014FA RID: 5370
public int fogOfWarSize;
// Token: 0x040014FB RID: 5371
public List<int> itemIDs = new List<int>();
// Token: 0x040014FC RID: 5372
public List<string> itemSaveIDs = new List<string>();
// Token: 0x040014FD RID: 5373
public List<int> itemAmts = new List<int>();
// Token: 0x040014FE RID: 5374
public List<Vector3> itemSocketsA = new List<Vector3>();
// Token: 0x040014FF RID: 5375
public List<Vector3> itemSocketsB = new List<Vector3>();
// Token: 0x04001500 RID: 5376
public List<bool> itemsForSaleStates = new List<bool>();
// Token: 0x04001501 RID: 5377
public List<Vector3> itemPositions = new List<Vector3>();
// Token: 0x04001502 RID: 5378
public List<Quaternion> itemRotations = new List<Quaternion>();
// Token: 0x04001503 RID: 5379
public List<string> itemLinks = new List<string>();
// Token: 0x04001504 RID: 5380
public List<int> itemLinkIDs = new List<int>();
// Token: 0x04001505 RID: 5381
public List<Vector4> itemTimes = new List<Vector4>();
// Token: 0x04001506 RID: 5382
public List<string> itemPrompts = new List<string>();
// Token: 0x04001507 RID: 5383
public List<string> itemOriginals = new List<string>();
// Token: 0x04001508 RID: 5384
public List<string> itemsNoRespawn = new List<string>();
// Token: 0x04001509 RID: 5385
private ES3File saveFile;
// Token: 0x0400150A RID: 5386
public List<int> breakableStates = new List<int>();
// Token: 0x0400150B RID: 5387
public List<bool> resourceStates = new List<bool>();
// Token: 0x0400150C RID: 5388
public List<float> resourceTime = new List<float>();
// Token: 0x0400150D RID: 5389
public List<int> chestStates = new List<int>();
// Token: 0x0400150E RID: 5390
public List<int> doorHealth = new List<int>();
// Token: 0x0400150F RID: 5391
public List<bool> doorLocked = new List<bool>();
// Token: 0x04001510 RID: 5392
public List<string> breakableNames = new List<string>();
// Token: 0x04001511 RID: 5393
public List<string> doorNames = new List<string>();
// Token: 0x04001512 RID: 5394
public List<string> chestNames = new List<string>();
// Token: 0x04001513 RID: 5395
public List<string> promptNames = new List<string>();
// Token: 0x04001514 RID: 5396
public List<string> mapExitNames = new List<string>();
// Token: 0x04001515 RID: 5397
public List<int> mapExitStates = new List<int>();
// Token: 0x04001516 RID: 5398
private bool firstTimeOnScene;
// Token: 0x04001517 RID: 5399
private bool mainCharacterInGhostFog;
// Token: 0x04001518 RID: 5400
private float queueUpdate;
// Token: 0x04001519 RID: 5401
private Vector3 prevMainPosition;
// Token: 0x0400151A RID: 5402
private string prevTimeOfDay;
// Token: 0x0400151B RID: 5403
private IEnumerator fogFadeCorout;
// Token: 0x0400151C RID: 5404
private float currentFogValue;
}