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.

124 lines
2.4 KiB

using UnityEngine;
using System.Collections;
namespace Fungus.Script
{
public class Set : FungusCommand
{
public enum SetOperator
{
Assign, // =
Negate, // !
Add, // +
Subtract, // -
Multiply, // *
Divide // /
}
public string variableKey;
public SetOperator setOperator;
public BooleanData booleanData;
public IntegerData integerData;
public FloatData floatData;
public StringData stringData;
public override void OnEnter()
{
if (variableKey.Length == 0)
{
Continue();
return;
}
Variable v = parentFungusScript.GetVariable(variableKey);
if (v == null)
{
Debug.LogError("Variable " + variableKey + " not defined.");
}
else
{
switch (v.type)
{
case VariableType.Boolean:
switch (setOperator)
{
default:
case SetOperator.Assign:
v.BooleanValue = booleanData.value;
break;
case SetOperator.Negate:
v.BooleanValue = !booleanData.value;
break;
}
break;
case VariableType.Integer:
switch (setOperator)
{
default:
case SetOperator.Assign:
v.IntegerValue = integerData.value;
break;
case SetOperator.Negate:
v.IntegerValue = -integerData.value;
break;
case SetOperator.Add:
v.IntegerValue += integerData.value;
break;
case SetOperator.Subtract:
v.IntegerValue -= integerData.value;
break;
case SetOperator.Multiply:
v.IntegerValue *= integerData.value;
break;
case SetOperator.Divide:
v.IntegerValue /= integerData.value;
break;
}
break;
case VariableType.Float:
switch (setOperator)
{
default:
case SetOperator.Assign:
v.FloatValue = floatData.value;
break;
case SetOperator.Negate:
v.FloatValue = -floatData.value;
break;
case SetOperator.Add:
v.FloatValue += floatData.value;
break;
case SetOperator.Subtract:
v.FloatValue -= floatData.value;
break;
case SetOperator.Multiply:
v.FloatValue *= floatData.value;
break;
case SetOperator.Divide:
v.FloatValue /= floatData.value;
break;
}
break;
case VariableType.String:
switch (setOperator)
{
default:
case SetOperator.Assign:
v.StringValue = stringData.value;
break;
}
break;
}
}
Continue();
}
}
}