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.

237 lines
4.8 KiB

using UnityEngine;
using System;
using System.Collections;
namespace Fungus
{
/**
* Command classes have their own namespace to prevent them popping up in code completion.
*/
namespace Command
{
/**
* Sets the display rect for the active Page using a PageBounds object.
*/
public class SetPageBounds : CommandQueue.Command
{
PageBounds pageBounds;
Page.Layout pageLayout;
public SetPageBounds(PageBounds _pageBounds, Page.Layout _pageLayout)
{
pageBounds = _pageBounds;
pageLayout = _pageLayout;
}
public override void Execute(CommandQueue commandQueue, Action onComplete)
{
if (pageBounds != null)
{
pageBounds.UpdatePageRect();
Game.GetInstance().activePage.layout = pageLayout;
}
if (onComplete != null)
{
onComplete();
}
}
}
/**
* Sets the display rect for the active Page using normalized screen space coords.
*/
public class SetPageRect : CommandQueue.Command
{
Page.ScreenRect screenRect;
Page.Layout layout;
public SetPageRect(Page.ScreenRect _screenRect, Page.Layout _layout)
{
screenRect = _screenRect;
layout = _layout;
}
public override void Execute(CommandQueue commandQueue, Action onComplete)
{
Page page = Game.GetInstance().activePage;
page.pageRect = Page.CalcPageRect(screenRect);
page.layout = layout;
if (onComplete != null)
{
onComplete();
}
}
}
/**
* Sets the currently active Page Style for rendering Pages.
*/
public class SetPageStyle : CommandQueue.Command
{
PageStyle pageStyle;
public SetPageStyle(PageStyle _pageStyle)
{
pageStyle = _pageStyle;
}
public override void Execute(CommandQueue commandQueue, Action onComplete)
{
Game.GetInstance().activePageStyle = pageStyle;
if (onComplete != null)
{
onComplete();
}
}
}
/**
* Sets the header text displayed at the top of the active page.
*/
public class SetHeader : CommandQueue.Command
{
string titleText;
public SetHeader(string _titleText)
{
titleText = _titleText;
}
public override void Execute(CommandQueue commandQueue, Action onComplete)
{
Page page = Game.GetInstance().activePage;
if (page == null)
{
Debug.LogError("Active page must not be null");
}
else
{
page.SetHeader(titleText);
}
if (onComplete != null)
{
onComplete();
}
}
}
/**
* Sets the footer text displayed at the top of the active page.
*/
public class SetFooter : CommandQueue.Command
{
string titleText;
public SetFooter(string _titleText)
{
titleText = _titleText;
}
public override void Execute(CommandQueue commandQueue, Action onComplete)
{
Page page = Game.GetInstance().activePage;
if (page == null)
{
Debug.LogError("Active page must not be null");
}
else
{
page.SetFooter(titleText);
}
if (onComplete != null)
{
onComplete();
}
}
}
/**
* Writes story text to the currently active page.
* A 'continue' icon is displayed when the text has fully appeared.
*/
public class Say : CommandQueue.Command
{
string storyText;
public Say(string _storyText)
{
storyText = _storyText;
}
public override void Execute(CommandQueue commandQueue, Action onComplete)
{
Page page = Game.GetInstance().activePage;
if (page == null)
{
Debug.LogError("Active page must not be null");
}
else
{
page.Say(storyText, onComplete);
}
}
}
/**
* Adds an option button to the current list of options.
* Use the Choose command to display added options.
*/
public class AddOption : CommandQueue.Command
{
string optionText;
Action optionAction;
public AddOption(string _optionText, Action _optionAction)
{
optionText = _optionText;
optionAction = _optionAction;
}
public override void Execute(CommandQueue commandQueue, Action onComplete)
{
Page page = Game.GetInstance().activePage;
if (page == null)
{
Debug.LogError("Active page must not be null");
}
else
{
page.AddOption(optionText, optionAction);
}
if (onComplete != null)
{
onComplete();
}
}
}
/**
* Displays all previously added options.
*/
public class Choose : CommandQueue.Command
{
string chooseText;
public Choose(string _chooseText)
{
chooseText = _chooseText;
}
public override void Execute(CommandQueue commandQueue, Action onComplete)
{
Page page = Game.GetInstance().activePage;
if (page == null)
{
Debug.LogError("Active page must not be null");
}
else
{
page.Choose(chooseText);
}
// Choose always clears commandQueue, so no need to call onComplete()
}
}
}
}