Browse Source

Refactored PortraitController to use IPortraitController interface and PortraitUtils file

master
Christopher 9 years ago
parent
commit
a1c104a386
  1. 125
      Assets/Fungus/Narrative/Scripts/IPortraitController.cs
  2. 12
      Assets/Fungus/Narrative/Scripts/IPortraitController.cs.meta
  3. 403
      Assets/Fungus/Narrative/Scripts/PortraitController.cs
  4. 156
      Assets/Fungus/Narrative/Scripts/PortraitUtils.cs
  5. 12
      Assets/Fungus/Narrative/Scripts/PortraitUtils.cs.meta

125
Assets/Fungus/Narrative/Scripts/IPortraitController.cs

@ -0,0 +1,125 @@
using UnityEngine;
using MoonSharp.Interpreter;
namespace Fungus
{
/// <summary>
/// Types of display operations supported by portraits
/// </summary>
public enum DisplayType
{
None,
Show,
Hide,
Replace,
MoveToFront
}
/// <summary>
/// Directions that character portraits can face.
/// </summary>
public enum FacingDirection
{
None,
Left,
Right
}
/// <summary>
/// Offset direction for position.
/// </summary>
public enum PositionOffset
{
None,
OffsetLeft,
OffsetRight
}
/// <summary>
/// Controls the Portrait sprites on stage
/// </summary>
public interface IPortraitController
{
/// <summary>
/// Using all portrait options available, run any portrait command.
/// </summary>
/// <param name="options">Portrait Options</param>
/// <param name="onComplete">The function that will run once the portrait command finishes</param>
void RunPortraitCommand(PortraitOptions options, System.Action onComplete);
/// <summary>
/// Moves Character in front of other characters on stage
/// </summary>
void MoveToFront(Character character);
/// <summary>
/// Moves Character in front of other characters on stage
/// </summary>
void MoveToFront(PortraitOptions options);
/// <summary>
/// Shows character at a named position in the stage
/// </summary>
/// <param name="character"></param>
/// <param name="position">Named position on stage</param>
void Show(Character character, string position);
/// <summary>
/// Shows character moving from a position to a position
/// </summary>
/// <param name="character"></param>
/// <param name="portrait"></param>
/// <param name="fromPosition">Where the character will appear</param>
/// <param name="toPosition">Where the character will move to</param>
void Show(Character character, string portrait, string fromPosition, string toPosition);
/// <summary>
/// From lua, you can pass an options table with named arguments
/// example:
/// stage.show{character=jill, portrait="happy", fromPosition="right", toPosition="left"}
/// Any option available in the PortraitOptions is available from Lua
/// </summary>
/// <param name="optionsTable">Moonsharp Table</param>
void Show(Table optionsTable);
/// <summary>
/// Show portrait with the supplied portrait options
/// </summary>
/// <param name="options"></param>
void Show(PortraitOptions options);
/// <summary>
/// Simple show command that shows the character with an available named portrait
/// </summary>
/// <param name="character">Character to show</param>
/// <param name="portrait">Named portrait to show for the character, i.e. "angry", "happy", etc</param>
void ShowPortrait(Character character, string portrait);
/// <summary>
/// Simple character hide command
/// </summary>
/// <param name="character">Character to hide</param>
void Hide(Character character);
/// <summary>
/// Move the character to a position then hide it
/// </summary>
/// <param name="character">Character to hide</param>
/// <param name="toPosition">Where the character will disapear to</param>
void Hide(Character character, string toPosition);
/// <summary>
/// From lua, you can pass an options table with named arguments
/// example:
/// stage.hide{character=jill, toPosition="left"}
/// Any option available in the PortraitOptions is available from Lua
/// </summary>
/// <param name="optionsTable">Moonsharp Table</param>
void Hide(Table optionsTable);
/// <summary>
/// Hide portrait with provided options
/// </summary>
void Hide(PortraitOptions options);
}
}

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

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

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

@ -9,159 +9,23 @@ using MoonSharp.Interpreter;
namespace Fungus namespace Fungus
{ {
public class PortraitOptions
{
public Character character;
public Character replacedCharacter;
public Sprite portrait;
public DisplayType display;
public PositionOffset offset;
public RectTransform fromPosition;
public RectTransform toPosition;
public FacingDirection facing;
public bool useDefaultSettings;
public float fadeDuration;
public float moveDuration;
public Vector2 shiftOffset;
public bool move; //sets to position to be the same as from
public bool shiftIntoPlace;
public bool waitUntilFinished;
public Action onComplete;
/// <summary>
/// Contains all options to run a portrait command.
/// </summary>
/// <param name="useDefaultSettings">Will use stage default times for animation and fade</param>
public PortraitOptions(bool useDefaultSettings = true)
{
character = null;
replacedCharacter = null;
portrait = null;
display = DisplayType.None;
offset = PositionOffset.None;
fromPosition = null;
toPosition = null;
facing = FacingDirection.None;
shiftOffset = new Vector2(0, 0);
move = false;
shiftIntoPlace = false;
waitUntilFinished = false;
onComplete = null;
// Special values that can be overridden
fadeDuration = 0.5f;
moveDuration = 1f;
this.useDefaultSettings = useDefaultSettings;
}
}
public class PortraitState
{
public bool onScreen;
public bool dimmed;
public DisplayType display;
public Sprite portrait;
public RectTransform position;
public FacingDirection facing;
public Image portraitImage;
}
public enum DisplayType
{
None,
Show,
Hide,
Replace,
MoveToFront
}
public enum FacingDirection
{
None,
Left,
Right
}
public enum PositionOffset
{
None,
OffsetLeft,
OffsetRight
}
/// <summary> /// <summary>
/// Controls the Portrait sprites on stage /// Controls the Portrait sprites on stage
/// </summary> /// </summary>
public class PortraitController : MonoBehaviour public class PortraitController : MonoBehaviour, IPortraitController
{ {
// Timer for waitUntilFinished functionality // Timer for waitUntilFinished functionality
protected float waitTimer; protected float waitTimer;
protected Stage stage; protected Stage stage;
void Awake() protected virtual void Awake()
{ {
stage = GetComponentInParent<Stage>(); stage = GetComponentInParent<Stage>();
stage.CachePositions(); stage.CachePositions();
} }
/// <summary> protected virtual void FinishCommand(PortraitOptions options)
/// Using all portrait options available, run any portrait command.
/// </summary>
/// <param name="options">Portrait Options</param>
/// <param name="onComplete">The function that will run once the portrait command finishes</param>
public void RunPortraitCommand(PortraitOptions options, Action onComplete)
{
waitTimer = 0f;
// If no character specified, do nothing
if (options.character == null)
{
onComplete();
return;
}
// If Replace and no replaced character specified, do nothing
if (options.display == DisplayType.Replace && options.replacedCharacter == null)
{
onComplete();
return;
}
// Early out if hiding a character that's already hidden
if (options.display == DisplayType.Hide &&
!options.character.State.onScreen)
{
onComplete();
return;
}
options = CleanPortraitOptions(options);
options.onComplete = onComplete;
switch (options.display)
{
case (DisplayType.Show):
Show(options);
break;
case (DisplayType.Hide):
Hide(options);
break;
case (DisplayType.Replace):
Show(options);
Hide(options.replacedCharacter, options.replacedCharacter.State.position.name);
break;
case (DisplayType.MoveToFront):
MoveToFront(options);
break;
}
}
protected void FinishCommand(PortraitOptions options)
{ {
if (options.onComplete != null) if (options.onComplete != null)
{ {
@ -185,7 +49,7 @@ namespace Fungus
/// </summary> /// </summary>
/// <param name="options"></param> /// <param name="options"></param>
/// <returns></returns> /// <returns></returns>
protected PortraitOptions CleanPortraitOptions(PortraitOptions options) protected virtual PortraitOptions CleanPortraitOptions(PortraitOptions options)
{ {
// Use default stage settings // Use default stage settings
if (options.useDefaultSettings) if (options.useDefaultSettings)
@ -276,7 +140,7 @@ namespace Fungus
/// </summary> /// </summary>
/// <param name="character"></param> /// <param name="character"></param>
/// <param name="fadeDuration"></param> /// <param name="fadeDuration"></param>
protected void CreatePortraitObject(Character character, float fadeDuration) protected virtual void CreatePortraitObject(Character character, float fadeDuration)
{ {
// Create a new portrait object // Create a new portrait object
GameObject portraitObj = new GameObject(character.name, GameObject portraitObj = new GameObject(character.name,
@ -303,7 +167,7 @@ namespace Fungus
character.State.portraitImage = portraitImage; character.State.portraitImage = portraitImage;
} }
protected IEnumerator WaitUntilFinished(float duration, Action onComplete = null) protected virtual IEnumerator WaitUntilFinished(float duration, Action onComplete = null)
{ {
// Wait until the timer has expired // Wait until the timer has expired
// Any method can modify this timer variable to delay continuing. // Any method can modify this timer variable to delay continuing.
@ -321,7 +185,7 @@ namespace Fungus
} }
} }
protected void SetupPortrait(PortraitOptions options) protected virtual void SetupPortrait(PortraitOptions options)
{ {
SetRectTransform(options.character.State.portraitImage.rectTransform, options.fromPosition); SetRectTransform(options.character.State.portraitImage.rectTransform, options.fromPosition);
@ -357,26 +221,7 @@ namespace Fungus
oldRectTransform.localScale = newRectTransform.localScale; oldRectTransform.localScale = newRectTransform.localScale;
} }
/// <summary> protected virtual void DoMoveTween(Character character, RectTransform fromPosition, RectTransform toPosition, float moveDuration, Boolean waitUntilFinished)
/// Moves Character in front of other characters on stage
/// </summary>
/// <param name="character"></param>
public void MoveToFront(Character character)
{
PortraitOptions options = new PortraitOptions(true);
options.character = character;
MoveToFront(CleanPortraitOptions(options));
}
public void MoveToFront(PortraitOptions options)
{
options.character.State.portraitImage.transform.SetSiblingIndex(options.character.State.portraitImage.transform.parent.childCount);
options.character.State.display = DisplayType.MoveToFront;
FinishCommand(options);
}
public void DoMoveTween(Character character, RectTransform fromPosition, RectTransform toPosition, float moveDuration, Boolean waitUntilFinished)
{ {
PortraitOptions options = new PortraitOptions(true); PortraitOptions options = new PortraitOptions(true);
options.character = character; options.character = character;
@ -388,7 +233,7 @@ namespace Fungus
DoMoveTween(options); DoMoveTween(options);
} }
public void DoMoveTween(PortraitOptions options) protected virtual void DoMoveTween(PortraitOptions options)
{ {
CleanPortraitOptions(options); CleanPortraitOptions(options);
@ -404,12 +249,74 @@ namespace Fungus
} }
} }
/// <summary> #region IPortraitController implentation
/// Shows character at a named position in the stage
/// </summary> public virtual void RunPortraitCommand(PortraitOptions options, Action onComplete)
/// <param name="character"></param> {
/// <param name="position">Named position on stage</param> waitTimer = 0f;
public void Show(Character character, string position)
// If no character specified, do nothing
if (options.character == null)
{
onComplete();
return;
}
// If Replace and no replaced character specified, do nothing
if (options.display == DisplayType.Replace && options.replacedCharacter == null)
{
onComplete();
return;
}
// Early out if hiding a character that's already hidden
if (options.display == DisplayType.Hide &&
!options.character.State.onScreen)
{
onComplete();
return;
}
options = CleanPortraitOptions(options);
options.onComplete = onComplete;
switch (options.display)
{
case (DisplayType.Show):
Show(options);
break;
case (DisplayType.Hide):
Hide(options);
break;
case (DisplayType.Replace):
Show(options);
Hide(options.replacedCharacter, options.replacedCharacter.State.position.name);
break;
case (DisplayType.MoveToFront):
MoveToFront(options);
break;
}
}
public virtual void MoveToFront(Character character)
{
PortraitOptions options = new PortraitOptions(true);
options.character = character;
MoveToFront(CleanPortraitOptions(options));
}
public virtual void MoveToFront(PortraitOptions options)
{
options.character.State.portraitImage.transform.SetSiblingIndex(options.character.State.portraitImage.transform.parent.childCount);
options.character.State.display = DisplayType.MoveToFront;
FinishCommand(options);
}
public virtual void Show(Character character, string position)
{ {
PortraitOptions options = new PortraitOptions(true); PortraitOptions options = new PortraitOptions(true);
options.character = character; options.character = character;
@ -418,14 +325,7 @@ namespace Fungus
Show(options); Show(options);
} }
/// <summary> public virtual void Show(Character character, string portrait, string fromPosition, string toPosition)
/// Shows character moving from a position to a position
/// </summary>
/// <param name="character"></param>
/// <param name="portrait"></param>
/// <param name="fromPosition">Where the character will appear</param>
/// <param name="toPosition">Where the character will move to</param>
public void Show(Character character, string portrait, string fromPosition, string toPosition)
{ {
PortraitOptions options = new PortraitOptions(true); PortraitOptions options = new PortraitOptions(true);
options.character = character; options.character = character;
@ -437,23 +337,12 @@ namespace Fungus
Show(options); Show(options);
} }
/// <summary> public virtual void Show(Table optionsTable)
/// From lua, you can pass an options table with named arguments
/// example:
/// stage.show{character=jill, portrait="happy", fromPosition="right", toPosition="left"}
/// Any option available in the PortraitOptions is available from Lua
/// </summary>
/// <param name="optionsTable">Moonsharp Table</param>
public void Show(Table optionsTable)
{ {
Show(PortraitUtil.ConvertTableToPortraitOptions(optionsTable, stage)); Show(PortraitUtil.ConvertTableToPortraitOptions(optionsTable, stage));
} }
/// <summary> public virtual void Show(PortraitOptions options)
/// Show portrait with the supplied portrait options
/// </summary>
/// <param name="options"></param>
public void Show(PortraitOptions options)
{ {
options = CleanPortraitOptions(options); options = CleanPortraitOptions(options);
@ -464,13 +353,13 @@ namespace Fungus
{ {
options.fromPosition.anchoredPosition = options.fromPosition.anchoredPosition =
new Vector2(options.fromPosition.anchoredPosition.x - Mathf.Abs(options.shiftOffset.x), new Vector2(options.fromPosition.anchoredPosition.x - Mathf.Abs(options.shiftOffset.x),
options.fromPosition.anchoredPosition.y - Mathf.Abs(options.shiftOffset.y)); options.fromPosition.anchoredPosition.y - Mathf.Abs(options.shiftOffset.y));
} }
else if (options.offset == PositionOffset.OffsetRight) else if (options.offset == PositionOffset.OffsetRight)
{ {
options.fromPosition.anchoredPosition = options.fromPosition.anchoredPosition =
new Vector2(options.fromPosition.anchoredPosition.x + Mathf.Abs(options.shiftOffset.x), new Vector2(options.fromPosition.anchoredPosition.x + Mathf.Abs(options.shiftOffset.x),
options.fromPosition.anchoredPosition.y + Mathf.Abs(options.shiftOffset.y)); options.fromPosition.anchoredPosition.y + Mathf.Abs(options.shiftOffset.y));
} }
else else
{ {
@ -527,12 +416,7 @@ namespace Fungus
options.character.State.position = options.toPosition; options.character.State.position = options.toPosition;
} }
/// <summary> public virtual void ShowPortrait(Character character, string portrait)
/// Simple show command that shows the character with an available named portrait
/// </summary>
/// <param name="character">Character to show</param>
/// <param name="portrait">Named portrait to show for the character, i.e. "angry", "happy", etc</param>
public void ShowPortrait(Character character, string portrait)
{ {
PortraitOptions options = new PortraitOptions(true); PortraitOptions options = new PortraitOptions(true);
options.character = character; options.character = character;
@ -550,11 +434,7 @@ namespace Fungus
Show(options); Show(options);
} }
/// <summary> public virtual void Hide(Character character)
/// Simple character hide command
/// </summary>
/// <param name="character">Character to hide</param>
public void Hide(Character character)
{ {
PortraitOptions options = new PortraitOptions(true); PortraitOptions options = new PortraitOptions(true);
options.character = character; options.character = character;
@ -562,12 +442,7 @@ namespace Fungus
Hide(options); Hide(options);
} }
/// <summary> public virtual void Hide(Character character, string toPosition)
/// Move the character to a position then hide it
/// </summary>
/// <param name="character"></param>
/// <param name="toPosition">Where the character will disapear to</param>
public void Hide(Character character, string toPosition)
{ {
PortraitOptions options = new PortraitOptions(true); PortraitOptions options = new PortraitOptions(true);
options.character = character; options.character = character;
@ -577,23 +452,12 @@ namespace Fungus
Hide(options); Hide(options);
} }
/// <summary> public virtual void Hide(Table optionsTable)
/// From lua, you can pass an options table with named arguments
/// example:
/// stage.hide{character=jill, toPosition="left"}
/// Any option available in the PortraitOptions is available from Lua
/// </summary>
/// <param name="optionsTable">Moonsharp Table</param>
public void Hide(Table optionsTable)
{ {
Hide(PortraitUtil.ConvertTableToPortraitOptions(optionsTable, stage)); Hide(PortraitUtil.ConvertTableToPortraitOptions(optionsTable, stage));
} }
/// <summary> public virtual void Hide(PortraitOptions options)
/// Hide portrait with provided options
/// </summary>
/// <param name="options"></param>
public void Hide(PortraitOptions options)
{ {
CleanPortraitOptions(options); CleanPortraitOptions(options);
@ -623,7 +487,7 @@ namespace Fungus
FinishCommand(options); FinishCommand(options);
} }
public void SetDimmed(Character character, bool dimmedState) public virtual void SetDimmed(Character character, bool dimmedState)
{ {
if (character.State.dimmed == dimmedState) if (character.State.dimmed == dimmedState)
{ {
@ -639,96 +503,7 @@ namespace Fungus
LeanTween.color(character.State.portraitImage.rectTransform, targetColor, duration).setEase(stage.FadeEaseType); LeanTween.color(character.State.portraitImage.rectTransform, targetColor, duration).setEase(stage.FadeEaseType);
} }
}
/// <summary>
/// Util functions that I wanted to keep the main class clean of
/// </summary>
public class PortraitUtil
{
/// <summary>
/// Convert a Moonsharp table to portrait options
/// If the table returns a null for any of the parameters, it should keep the defaults
/// </summary>
/// <param name="table">Moonsharp Table</param>
/// <param name="stage">Stage</param>
/// <returns></returns>
public static PortraitOptions ConvertTableToPortraitOptions(Table table, Stage stage)
{
PortraitOptions options = new PortraitOptions(true);
// If the table supplies a nil, keep the default
options.character = table.Get("character").ToObject<Character>()
?? options.character;
options.replacedCharacter = table.Get("replacedCharacter").ToObject<Character>()
?? options.replacedCharacter;
if (!table.Get("portrait").IsNil())
{
options.portrait = options.character.GetPortrait(table.Get("portrait").CastToString());
}
if (!table.Get("display").IsNil())
{
options.display = table.Get("display").ToObject<DisplayType>();
}
if (!table.Get("offset").IsNil()) #endregion
{
options.offset = table.Get("offset").ToObject<PositionOffset>();
}
if (!table.Get("fromPosition").IsNil())
{
options.fromPosition = stage.GetPosition(table.Get("fromPosition").CastToString());
}
if (!table.Get("toPosition").IsNil())
{
options.toPosition = stage.GetPosition(table.Get("toPosition").CastToString());
}
if (!table.Get("facing").IsNil())
{
options.facing = table.Get("facing").ToObject<FacingDirection>();
}
if (!table.Get("useDefaultSettings").IsNil())
{
options.useDefaultSettings = table.Get("useDefaultSettings").CastToBool();
}
if (!table.Get("fadeDuration").IsNil())
{
options.fadeDuration = table.Get("fadeDuration").ToObject<float>();
}
if (!table.Get("moveDuration").IsNil())
{
options.moveDuration = table.Get("moveDuration").ToObject<float>();
}
if (!table.Get("move").IsNil())
{
options.move = table.Get("move").CastToBool();
}
else if (options.fromPosition != options.toPosition)
{
options.move = true;
}
if (!table.Get("shiftIntoPlace").IsNil())
{
options.shiftIntoPlace = table.Get("shiftIntoPlace").CastToBool();
}
if (!table.Get("waitUntilFinished").IsNil())
{
options.waitUntilFinished = table.Get("waitUntilFinished").CastToBool();
}
return options;
}
} }
} }

156
Assets/Fungus/Narrative/Scripts/PortraitUtils.cs

@ -0,0 +1,156 @@
using UnityEngine;
using UnityEngine.UI;
using MoonSharp.Interpreter;
namespace Fungus
{
/// <summary>
/// Contains all options to run a portrait command.
/// </summary>
public class PortraitOptions
{
public Character character;
public Character replacedCharacter;
public Sprite portrait;
public DisplayType display;
public PositionOffset offset;
public RectTransform fromPosition;
public RectTransform toPosition;
public FacingDirection facing;
public bool useDefaultSettings;
public float fadeDuration;
public float moveDuration;
public Vector2 shiftOffset;
public bool move; //sets to position to be the same as from
public bool shiftIntoPlace;
public bool waitUntilFinished;
public System.Action onComplete;
public PortraitOptions(bool useDefaultSettings = true)
{
character = null;
replacedCharacter = null;
portrait = null;
display = DisplayType.None;
offset = PositionOffset.None;
fromPosition = null;
toPosition = null;
facing = FacingDirection.None;
shiftOffset = new Vector2(0, 0);
move = false;
shiftIntoPlace = false;
waitUntilFinished = false;
onComplete = null;
// Special values that can be overridden
fadeDuration = 0.5f;
moveDuration = 1f;
this.useDefaultSettings = useDefaultSettings;
}
}
/// <summary>
/// Represents the current state of a character portrait on the stage.
/// </summary>
public class PortraitState
{
public bool onScreen;
public bool dimmed;
public DisplayType display;
public Sprite portrait;
public RectTransform position;
public FacingDirection facing;
public Image portraitImage;
}
/// <summary>
/// Util functions for working with portraits.
/// </summary>
public static class PortraitUtil
{
/// <summary>
/// Convert a Moonsharp table to portrait options
/// If the table returns a null for any of the parameters, it should keep the defaults
/// </summary>
/// <param name="table">Moonsharp Table</param>
/// <param name="stage">Stage</param>
/// <returns></returns>
public static PortraitOptions ConvertTableToPortraitOptions(Table table, Stage stage)
{
PortraitOptions options = new PortraitOptions(true);
// If the table supplies a nil, keep the default
options.character = table.Get("character").ToObject<Character>()
?? options.character;
options.replacedCharacter = table.Get("replacedCharacter").ToObject<Character>()
?? options.replacedCharacter;
if (!table.Get("portrait").IsNil())
{
options.portrait = options.character.GetPortrait(table.Get("portrait").CastToString());
}
if (!table.Get("display").IsNil())
{
options.display = table.Get("display").ToObject<DisplayType>();
}
if (!table.Get("offset").IsNil())
{
options.offset = table.Get("offset").ToObject<PositionOffset>();
}
if (!table.Get("fromPosition").IsNil())
{
options.fromPosition = stage.GetPosition(table.Get("fromPosition").CastToString());
}
if (!table.Get("toPosition").IsNil())
{
options.toPosition = stage.GetPosition(table.Get("toPosition").CastToString());
}
if (!table.Get("facing").IsNil())
{
options.facing = table.Get("facing").ToObject<FacingDirection>();
}
if (!table.Get("useDefaultSettings").IsNil())
{
options.useDefaultSettings = table.Get("useDefaultSettings").CastToBool();
}
if (!table.Get("fadeDuration").IsNil())
{
options.fadeDuration = table.Get("fadeDuration").ToObject<float>();
}
if (!table.Get("moveDuration").IsNil())
{
options.moveDuration = table.Get("moveDuration").ToObject<float>();
}
if (!table.Get("move").IsNil())
{
options.move = table.Get("move").CastToBool();
}
else if (options.fromPosition != options.toPosition)
{
options.move = true;
}
if (!table.Get("shiftIntoPlace").IsNil())
{
options.shiftIntoPlace = table.Get("shiftIntoPlace").CastToBool();
}
if (!table.Get("waitUntilFinished").IsNil())
{
options.waitUntilFinished = table.Get("waitUntilFinished").CastToBool();
}
return options;
}
}
}

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

@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: fb7c101397bef4707a151a471d0acbdf
timeCreated: 1473686219
licenseType: Free
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
Loading…
Cancel
Save