ppo-Pyramids-Training / com.unity.ml-agents /Runtime /Integrations /Match3 /Match3SensorComponent.cs
| using System; | |
| using Unity.MLAgents.Sensors; | |
| using UnityEngine; | |
| using UnityEngine.Serialization; | |
| namespace Unity.MLAgents.Integrations.Match3 | |
| { | |
| /// <summary> | |
| /// Sensor component for a Match3 game. | |
| /// </summary> | |
| [] | |
| public class Match3SensorComponent : SensorComponent, IDisposable | |
| { | |
| [] | |
| string m_SensorName = "Match3 Sensor"; | |
| /// <summary> | |
| /// Name of the generated Match3Sensor object. | |
| /// Note that changing this at runtime does not affect how the Agent sorts the sensors. | |
| /// </summary> | |
| public string SensorName | |
| { | |
| get => m_SensorName; | |
| set => m_SensorName = value; | |
| } | |
| [] | |
| Match3ObservationType m_ObservationType = Match3ObservationType.Vector; | |
| /// <summary> | |
| /// Type of observation to generate. | |
| /// </summary> | |
| public Match3ObservationType ObservationType | |
| { | |
| get => m_ObservationType; | |
| set => m_ObservationType = value; | |
| } | |
| private ISensor[] m_Sensors; | |
| /// <inheritdoc/> | |
| public override ISensor[] CreateSensors() | |
| { | |
| // Clean up any existing sensors | |
| Dispose(); | |
| var board = GetComponent<AbstractBoard>(); | |
| if (!board) | |
| { | |
| return Array.Empty<ISensor>(); | |
| } | |
| var cellSensor = Match3Sensor.CellTypeSensor(board, m_ObservationType, m_SensorName + " (cells)"); | |
| // This can be null if BoardSize.NumSpecialTypes is 0 | |
| var specialSensor = Match3Sensor.SpecialTypeSensor(board, m_ObservationType, m_SensorName + " (special)"); | |
| m_Sensors = specialSensor != null | |
| ? new ISensor[] { cellSensor, specialSensor } | |
| : new ISensor[] { cellSensor }; | |
| return m_Sensors; | |
| } | |
| /// <summary> | |
| /// Clean up the sensors created by CreateSensors(). | |
| /// </summary> | |
| public void Dispose() | |
| { | |
| if (m_Sensors != null) | |
| { | |
| for (var i = 0; i < m_Sensors.Length; i++) | |
| { | |
| ((Match3Sensor)m_Sensors[i]).Dispose(); | |
| } | |
| m_Sensors = null; | |
| } | |
| } | |
| } | |
| } | |