Browse Source

Refactored Stage to use IStage interface

master
Christopher 9 years ago
parent
commit
d6cb967e15
  1. 63
      Assets/Fungus/Narrative/Scripts/IStage.cs
  2. 12
      Assets/Fungus/Narrative/Scripts/IStage.cs.meta
  3. 1
      Assets/Fungus/Narrative/Scripts/PortraitController.cs
  4. 83
      Assets/Fungus/Narrative/Scripts/Stage.cs

63
Assets/Fungus/Narrative/Scripts/IStage.cs

@ -0,0 +1,63 @@
using UnityEngine;
using UnityEngine.UI;
using System.Collections.Generic;
namespace Fungus
{
/// <summary>
/// Define a set of screen positions where character sprites can be displayed.
/// </summary>
public interface IStage
{
/// <summary>
/// Canvas object containing the stage positions.
/// </summary>
Canvas PortraitCanvas { get; }
/// <summary>
/// Dim portraits when a character is not speaking.
/// </summary>
bool DimPortraits { get; set; }
/// <summary>
/// Duration for fading character portraits in / out.
/// </summary>
float FadeDuration { get; set; }
/// <summary>
/// Duration for moving characters to a new position.
/// </summary>
float MoveDuration { get; set; }
/// <summary>
/// Ease type for the fade tween.
/// </summary>
LeanTweenType FadeEaseType { get; }
/// <summary>
/// Constant offset to apply to portrait position.
/// </summary>
Vector2 ShiftOffset { get; }
/// <summary>
/// The position object where characters appear by default.
/// </summary>
Image DefaultPosition { get; }
/// <summary>
/// List of stage position rect transforms in the stage.
/// </summary>
List<RectTransform> Positions { get; }
/// <summary>
/// List of currently active characters on the stage.
/// </summary>
List<Character> CharactersOnStage { get; }
/// <summary>
/// Searches the stage's named positions
/// If none matches the string provided, give a warning and return a new RectTransform
/// </summary>
RectTransform GetPosition(string positionString);
}
}

12
Assets/Fungus/Narrative/Scripts/IStage.cs.meta

@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: a88bde623f95a46e49febd46fe50b19c
timeCreated: 1473689190
licenseType: Free
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

1
Assets/Fungus/Narrative/Scripts/PortraitController.cs

@ -22,7 +22,6 @@ namespace Fungus
protected virtual void Awake()
{
stage = GetComponentInParent<Stage>();
stage.CachePositions();
}
protected virtual void FinishCommand(PortraitOptions options)

83
Assets/Fungus/Narrative/Scripts/Stage.cs

@ -12,36 +12,33 @@ namespace Fungus
/// Define a set of screen positions where character sprites can be displayed.
/// </summary>
[ExecuteInEditMode]
public class Stage : PortraitController
public class Stage : PortraitController, IStage
{
[Tooltip("Canvas object containing the stage positions.")]
[SerializeField] protected Canvas portraitCanvas;
public virtual Canvas PortraitCanvas { get { return portraitCanvas; } }
[Tooltip("Dim portraits when a character is not speaking.")]
[SerializeField] protected bool dimPortraits;
public virtual bool DimPortraits { get { return dimPortraits; } set { dimPortraits = value; } }
[Tooltip("Duration for fading character portraits in / out.")]
[SerializeField] protected float fadeDuration = 0.5f;
public virtual float FadeDuration { get { return fadeDuration; } set { fadeDuration = value; } }
[Tooltip("Duration for moving characters to a new position")]
[SerializeField] protected float moveDuration = 1f;
public virtual float MoveDuration { get { return moveDuration; } set { moveDuration = value; } }
[Tooltip("Ease type for the fade tween.")]
[SerializeField] protected LeanTweenType fadeEaseType;
public virtual LeanTweenType FadeEaseType { get { return fadeEaseType; } }
[Tooltip("Constant offset to apply to portrait position.")]
[SerializeField] protected Vector2 shiftOffset;
public virtual Vector2 ShiftOffset { get { return shiftOffset; } }
[Tooltip("The position object where characters appear by default.")]
[SerializeField] protected Image defaultPosition;
public virtual Image DefaultPosition { get { return defaultPosition; } }
[Tooltip("List of stage position rect transforms in the stage.")]
[SerializeField] protected List<RectTransform> positions;
public virtual List<RectTransform> Positions { get { return positions; } }
[SerializeField] protected RectTransform[] cachedPositions;
protected List<Character> charactersOnStage = new List<Character>();
public virtual List<Character> CharactersOnStage { get { return charactersOnStage; } }
static public List<Stage> activeStages = new List<Stage>();
@ -53,12 +50,6 @@ namespace Fungus
}
}
public void CachePositions()
{
cachedPositions = new RectTransform[positions.Count];
positions.CopyTo(cachedPositions);
}
protected virtual void OnDisable()
{
activeStages.Remove(this);
@ -74,39 +65,55 @@ namespace Fungus
}
}
/// <summary>
/// Searches the stage's named positions
/// If none matches the string provided, give a warning and return a new RectTransform
/// </summary>
/// <param name="position_string">Position name to search for</param>
/// <returns></returns>
public RectTransform GetPosition(String position_string)
public static Stage GetActiveStage()
{
if (string.IsNullOrEmpty(position_string))
if (Stage.activeStages == null ||
Stage.activeStages.Count == 0)
{
return null;
}
for (int i = 0; i < cachedPositions.Length; i++)
{
if ( String.Compare(cachedPositions[i].name, position_string, true) == 0 )
{
return cachedPositions[i];
}
}
return null;
return Stage.activeStages[0];
}
public static Stage GetActiveStage()
#region IStage implementation
public virtual Canvas PortraitCanvas { get { return portraitCanvas; } }
public virtual bool DimPortraits { get { return dimPortraits; } set { dimPortraits = value; } }
public virtual float FadeDuration { get { return fadeDuration; } set { fadeDuration = value; } }
public virtual float MoveDuration { get { return moveDuration; } set { moveDuration = value; } }
public virtual LeanTweenType FadeEaseType { get { return fadeEaseType; } }
public virtual Vector2 ShiftOffset { get { return shiftOffset; } }
public virtual Image DefaultPosition { get { return defaultPosition; } }
public virtual List<RectTransform> Positions { get { return positions; } }
public virtual List<Character> CharactersOnStage { get { return charactersOnStage; } }
public RectTransform GetPosition(string positionString)
{
if (Stage.activeStages == null ||
Stage.activeStages.Count == 0)
if (string.IsNullOrEmpty(positionString))
{
return null;
}
return Stage.activeStages[0];
for (int i = 0; i < positions.Count; i++)
{
if ( String.Compare(positions[i].name, positionString, true) == 0 )
{
return positions[i];
}
}
return null;
}
#endregion
}
}

Loading…
Cancel
Save