Type select adds `[TypeSelector]` attribute putting this on a property will allow you to select an inherited type in the editor as shown here:
WARNING
to make sure your types get serialized correctly you need to make use of the `[JsonPolymorphic]` and `[JsonDerivedType]` attributes. And for the latter make sure to set a typeDiscirimnator or it wil not work !!!!
EXAMPLE CODE
[GameResource( "Quest", "quest", "A quest given to the user !", Category = "quest" )]
public class Quest : GameResource
{
[Property,InlineEditor,TypeSelector] public TaskBase Task { get; set; }
}
//The two attributes here are from .net
[JsonPolymorphic]
[JsonDerivedType( typeof(Collect), "Collect" )] // Yeah you have to do this for every type. blame C#, not me.
public abstract class TaskBase //Because this class is abstract it will not showup in the menu.
{
[Property] public string QuestName {get;set};// all types will show this
}
public class Collect : TaskBase
{
[Property] public int AmountToCollect {get;set;}
}
public class TalkTo : TaskBase
{
[Property] public GameObject Target {get;set;}
}