An easy to use Unity 3D library for creating illustrated Interactive Fiction games and more.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

113 lines
2.5 KiB

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
using Fungus.Script;
/**
* @package Fungus An open source library for Unity 3D for creating graphic interactive fiction games.
*/
namespace Fungus
{
/**
* Manages global game state and movement between rooms.
*/
[RequireComponent(typeof(LegacyDialog))]
public class Game : MonoBehaviour
{
/**
* Fade transition time when hiding/showing buttons.
*/
[Range(0,5)]
[Tooltip("Fade transition time when hiding/showing buttons.")]
public float buttonFadeDuration = 0.25f;
/**
* Time to elapse before buttons hide automatically.
*/
[Range(0, 60)]
[Tooltip("Time to elapse before buttons hide automatically.")]
public float autoHideButtonDuration = 5f;
/**
* Currently active Dialog object used to display character text and menus.
*/
[Tooltip("Currently active Dialog object used to display character text and menus.")]
public LegacyDialog dialog;
float autoHideButtonTimer;
static Game instance;
/**
* Returns the singleton instance for the Game class
*/
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()
{
// Auto-hide buttons should be visible at start of game
autoHideButtonTimer = autoHideButtonDuration;
}
public virtual void Update()
{
autoHideButtonTimer -= Time.deltaTime;
autoHideButtonTimer = Mathf.Max(autoHideButtonTimer, 0f);
if (Input.GetMouseButtonDown(0))
{
autoHideButtonTimer = autoHideButtonDuration;
}
}
public IDialog GetDialog()
{
if (dialog != null)
{
return dialog as IDialog;
}
return null;
}
/**
* Returns true if the game should display 'auto hide' buttons.
* Buttons will be displayed if the game is not currently displaying story text/options, and no Wait command is in progress.
*/
public bool GetShowAutoButtons()
{
CameraController cameraController = CameraController.GetInstance();
if (cameraController.waiting)
{
return false;
}
IDialog dialog = GetDialog();
if (dialog == null ||
dialog.GetDialogMode() == DialogMode.Idle)
{
return (autoHideButtonTimer > 0f);
}
return false;
}
}
}