using Unity.MLAgents.Actuators;
using UnityEngine;
using UnityEngine.Serialization;
namespace Unity.MLAgents.Extensions.Match3
{
///
/// Actuator component for a Match 3 game. Generates a Match3Actuator at runtime.
///
public class Match3ActuatorComponent : ActuatorComponent
{
///
/// Name of the generated Match3Actuator object.
/// Note that changing this at runtime does not affect how the Agent sorts the actuators.
///
public string ActuatorName = "Match3 Actuator";
///
/// Force using the Agent's Heuristic() method to decide the action. This should only be used in testing.
///
[FormerlySerializedAs("ForceRandom")]
[Tooltip("Force using the Agent's Heuristic() method to decide the action. This should only be used in testing.")]
public bool ForceHeuristic;
///
public override IActuator CreateActuator()
{
var board = GetComponent();
var agent = GetComponentInParent();
return new Match3Actuator(board, ForceHeuristic, agent, ActuatorName);
}
///
public override ActionSpec ActionSpec
{
get
{
var board = GetComponent();
if (board == null)
{
return ActionSpec.MakeContinuous(0);
}
var numMoves = Move.NumPotentialMoves(board.Rows, board.Columns);
return ActionSpec.MakeDiscrete(numMoves);
}
}
}
}