Files
beyond/Assets/Plugins/Pixel Crushers/Quest Machine/Scripts/Quest/Quest Subasset/Quest Action/SetCounterValueQuestAction.cs
2024-11-20 15:21:28 +01:00

103 lines
3.2 KiB
C#

// Copyright (c) Pixel Crushers. All rights reserved.
using UnityEngine;
namespace PixelCrushers.QuestMachine
{
/// <summary>
/// Sets a counter value.
/// </summary>
public class SetCounterValueQuestAction : QuestAction
{
[Tooltip("Index of counter to set.")]
[SerializeField]
private int m_counterIndex;
public enum Operation { SetToValue, ModifyByValue, Randomize }
[Tooltip("Set an absolute value or modify the current value?")]
[SerializeField]
private Operation m_operation;
[Tooltip("Value to set the counter to, modify the counter by, or min value for Randomize.")]
[SerializeField]
private int m_operationValue;
[Tooltip("Max value for Randomize.")]
[SerializeField]
private int m_maxValue;
public int counterIndex
{
get { return m_counterIndex; }
set { m_counterIndex = value; }
}
public Operation operation
{
get { return m_operation; }
set { m_operation = value; }
}
public int operationValue
{
get { return m_operationValue; }
set { m_operationValue = value; }
}
public int maxValue
{
get { return m_maxValue; }
set { m_maxValue = value; }
}
public override string GetEditorName()
{
if (quest == null || quest.counterList == null || !(0 <= counterIndex && counterIndex < quest.counterList.Count)) return "Set Counter";
var counterName = quest.counterList[counterIndex].name;
switch (m_operation)
{
case Operation.SetToValue:
return "Set Counter: " + counterName + " = " + operationValue;
case Operation.ModifyByValue:
return "Set Counter: " + counterName + " += " + operationValue;
case Operation.Randomize:
return "Set Counter: " + counterName + " to random in [" + operationValue + "," + maxValue + "]";
default:
return "Set Counter x";
}
}
public override void Execute()
{
if (quest == null)
{
if (Debug.isDebugBuild) Debug.LogWarning("Quest Machine: SetCounterQuestAction was passed a null quest.");
return;
}
var counter = quest.GetCounter(counterIndex);
if (counter == null)
{
if (Debug.isDebugBuild) Debug.LogWarning("Quest Machine: SetCounterQuestAction can't find a counter at index " + counterIndex + " in quest '" + quest.GetEditorName() + "'.");
return;
}
switch (m_operation)
{
case Operation.SetToValue:
counter.SetValue(operationValue);
break;
case Operation.ModifyByValue:
counter.SetValue(counter.currentValue + operationValue);
break;
case Operation.Randomize:
counter.SetValue(Random.Range(operationValue, maxValue + 1));
break;
}
}
}
}