|
using System; |
|
using System.Reflection; |
|
|
|
namespace Unity.MLAgents.Sensors.Reflection |
|
{ |
|
|
|
|
|
|
|
internal struct ReflectionSensorInfo |
|
{ |
|
public object Object; |
|
|
|
public FieldInfo FieldInfo; |
|
public PropertyInfo PropertyInfo; |
|
public ObservableAttribute ObservableAttribute; |
|
public string SensorName; |
|
|
|
public Type GetMemberType() |
|
{ |
|
return FieldInfo != null ? FieldInfo.FieldType : PropertyInfo.PropertyType; |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
internal abstract class ReflectionSensorBase : ISensor, IBuiltInSensor |
|
{ |
|
protected object m_Object; |
|
|
|
|
|
protected FieldInfo m_FieldInfo; |
|
protected PropertyInfo m_PropertyInfo; |
|
|
|
|
|
protected ObservableAttribute m_ObservableAttribute; |
|
|
|
|
|
string m_SensorName; |
|
ObservationSpec m_ObservationSpec; |
|
int m_NumFloats; |
|
|
|
public ReflectionSensorBase(ReflectionSensorInfo reflectionSensorInfo, int size) |
|
{ |
|
m_Object = reflectionSensorInfo.Object; |
|
m_FieldInfo = reflectionSensorInfo.FieldInfo; |
|
m_PropertyInfo = reflectionSensorInfo.PropertyInfo; |
|
m_ObservableAttribute = reflectionSensorInfo.ObservableAttribute; |
|
m_SensorName = reflectionSensorInfo.SensorName; |
|
m_ObservationSpec = ObservationSpec.Vector(size); |
|
m_NumFloats = size; |
|
} |
|
|
|
|
|
public ObservationSpec GetObservationSpec() |
|
{ |
|
return m_ObservationSpec; |
|
} |
|
|
|
|
|
public int Write(ObservationWriter writer) |
|
{ |
|
WriteReflectedField(writer); |
|
return m_NumFloats; |
|
} |
|
|
|
internal abstract void WriteReflectedField(ObservationWriter writer); |
|
|
|
|
|
|
|
|
|
|
|
|
|
protected object GetReflectedValue() |
|
{ |
|
return m_FieldInfo != null ? |
|
m_FieldInfo.GetValue(m_Object) : |
|
m_PropertyInfo.GetMethod.Invoke(m_Object, null); |
|
} |
|
|
|
|
|
public byte[] GetCompressedObservation() |
|
{ |
|
return null; |
|
} |
|
|
|
|
|
public void Update() { } |
|
|
|
|
|
public void Reset() { } |
|
|
|
|
|
public CompressionSpec GetCompressionSpec() |
|
{ |
|
return CompressionSpec.Default(); |
|
} |
|
|
|
|
|
public string GetName() |
|
{ |
|
return m_SensorName; |
|
} |
|
|
|
|
|
public BuiltInSensorType GetBuiltInSensorType() |
|
{ |
|
return BuiltInSensorType.ReflectionSensor; |
|
} |
|
} |
|
} |
|
|