using System;
using UnityFusion.CLR.Method;
using UnityFusion.Runtime.Enviorment;
using UnityFusion.Runtime.Intepreter;
namespace UnityFusion.CLRBinding.Adapter
{
///
/// Adapter for .
/// Allows custom sorting logic for Unity Transforms within the hot-reload domain.
///
public class IComparer_1_TransformAdapter : CrossBindingAdaptor
{
static CrossBindingFunctionInfo mCompare_0 = new CrossBindingFunctionInfo("Compare");
public override Type BaseCLRType
{
get
{
return typeof(System.Collections.Generic.IComparer);
}
}
public override Type AdaptorType
{
get
{
return typeof(Adapter);
}
}
public override object CreateCLRInstance(UnityFusion.Runtime.Enviorment.AppDomain appdomain, ILTypeInstance instance)
{
return new Adapter(appdomain, instance);
}
///
/// The implementation class that bridges IComparer calls to the hot-reload domain.
///
public class Adapter : System.Collections.Generic.IComparer, CrossBindingAdaptorType
{
ILTypeInstance instance;
UnityFusion.Runtime.Enviorment.AppDomain appdomain;
public Adapter()
{
}
public Adapter(UnityFusion.Runtime.Enviorment.AppDomain appdomain, ILTypeInstance instance)
{
this.appdomain = appdomain;
this.instance = instance;
}
public ILTypeInstance ILInstance { get { return instance; } }
public System.Int32 Compare(UnityEngine.Transform x, UnityEngine.Transform y)
{
return mCompare_0.Invoke(this.instance, x, y);
}
public override string ToString()
{
IMethod m = appdomain.ObjectType.GetMethod("ToString", 0);
m = instance.Type.GetVirtualMethod(m);
if (m == null || m is ILMethod)
{
return instance.ToString();
}
else
return instance.Type.FullName;
}
}
}
}