74 lines
2.0 KiB
C#
74 lines
2.0 KiB
C#
// (c) copyright Hutong Games, LLC 2010-2012. All rights reserved.
|
|
|
|
using UnityEngine;
|
|
|
|
namespace HutongGames.PlayMaker.Actions
|
|
{
|
|
[ActionCategory(ActionCategory.String)]
|
|
[Tooltip("Replaces each format item in a specified string with the text equivalent of variable's value. Stores the result in a string variable.")]
|
|
public class FormatString : FsmStateAction
|
|
{
|
|
[RequiredField]
|
|
[Tooltip("E.g. Hello {0} and {1}\nWith 2 variables that replace {0} and {1}\nSee C# string.Format docs.")]
|
|
public FsmString format;
|
|
|
|
[Tooltip("Variables to use for each formatting item.")]
|
|
public FsmVar[] variables;
|
|
|
|
[RequiredField]
|
|
[UIHint(UIHint.Variable)]
|
|
[Tooltip("Store the formatted result in a string variable.")]
|
|
public FsmString storeResult;
|
|
|
|
[Tooltip("Repeat every frame. This is useful if the variables are changing.")]
|
|
public bool everyFrame;
|
|
|
|
private object[] objectArray;
|
|
|
|
public override void Reset()
|
|
{
|
|
format = null;
|
|
variables = null;
|
|
storeResult = null;
|
|
everyFrame = false;
|
|
}
|
|
|
|
// Code that runs on entering the state.
|
|
public override void OnEnter()
|
|
{
|
|
objectArray = new object[variables.Length];
|
|
|
|
DoFormatString();
|
|
|
|
if (!everyFrame)
|
|
{
|
|
Finish();
|
|
}
|
|
}
|
|
|
|
public override void OnUpdate()
|
|
{
|
|
DoFormatString();
|
|
}
|
|
|
|
void DoFormatString()
|
|
{
|
|
for (var i = 0; i < variables.Length; i++)
|
|
{
|
|
variables[i].UpdateValue();
|
|
objectArray[i] = variables[i].GetValue();
|
|
}
|
|
|
|
try
|
|
{
|
|
storeResult.Value = string.Format(format.Value, objectArray);
|
|
}
|
|
catch (System.FormatException e)
|
|
{
|
|
LogError(e.Message);
|
|
Finish();
|
|
}
|
|
}
|
|
}
|
|
}
|