using UnityEngine; using System.Collections; using System.Collections.Generic; namespace Fungus { // Manages global game state and movement between rooms public class Game : MonoBehaviour { public Room activeRoom; public bool showLinks = true; public string continueText = "Continue"; public int charactersPerSecond = 60; // Fixed Z coordinate of camera public float cameraZ = - 10f; public float fadeDuration = 1f; public Texture2D fadeTexture; [HideInInspector] public View activeView; [HideInInspector] public Page activePage; [HideInInspector] public GameState state = new GameState(); [HideInInspector] public StringTable stringTable = new StringTable(); [HideInInspector] public CommandQueue commandQueue; [HideInInspector] public CameraController cameraController; static Game instance; public static Game GetInstance() { if (!instance) { instance = GameObject.FindObjectOfType(typeof(Game)) as Game; if (!instance) { Debug.LogError("There must be one active Game object in your scene."); } } return instance; } public virtual void Start() { commandQueue = gameObject.AddComponent(); cameraController = gameObject.AddComponent(); if (activeRoom == null) { // Pick first room found if none is specified activeRoom = GameObject.FindObjectOfType(typeof(Room)) as Room; } if (activeRoom != null) { MoveToRoom(activeRoom); } } public void MoveToRoom(Room room) { if (room == null) { Debug.LogError("Failed to move to room. Room must not be null."); return; } // Fade out screen cameraController.Fade(0f, fadeDuration / 2f, delegate { activeRoom = room; // Notify room script that the Room is being entered // Calling private method on Room to hide implementation activeRoom.gameObject.SendMessage("Enter"); // Fade in screen cameraController.Fade(1f, fadeDuration / 2f, null); }); } } }