public override void OnFocus(object obj, plyBlock fieldOfBlock)
        {
            //InventoryItemBaseFieldData target = obj == null ? new InventoryItemBaseFieldData() : obj as InventoryItemBaseFieldData;
            //if (itemsAsset == null)
            //{
            //    itemsAsset = (ItemsAsset)EdGlobal.LoadOrCreateAsset<ItemsAsset>(plyEdUtil.DATA_PATH_SYSTEM + "items.asset", "Item Definitions");
            //}

            //itemsAsset.UpdateItemCache();

            //// check if saved still valid
            //if (!string.IsNullOrEmpty(target.id))
            //{
            //    bool found = false;
            //    UniqueID id = new UniqueID(target.id);
            //    for (int i = 0; i < itemsAsset.items.Count; i++)
            //    {
            //        if (id == itemsAsset.items[i].prefabId) { found = true; break; }
            //    }
            //    if (!found)
            //    {
            //        target.id = "";
            //        target.cachedName = "";
            //        ed.ForceSerialise();
            //    }
            //}
        }
        public override void OnFocus(object obj, plyBlock fieldOfBlock)
        {
            //InventoryItemBaseFieldData target = obj == null ? new InventoryItemBaseFieldData() : obj as InventoryItemBaseFieldData;
            //if (itemsAsset == null)
            //{
            //    itemsAsset = (ItemsAsset)EdGlobal.LoadOrCreateAsset<ItemsAsset>(plyEdUtil.DATA_PATH_SYSTEM + "items.asset", "Item Definitions");
            //}

            //itemsAsset.UpdateItemCache();

            //// check if saved still valid
            //if (!string.IsNullOrEmpty(target.id))
            //{
            //    bool found = false;
            //    UniqueID id = new UniqueID(target.id);
            //    for (int i = 0; i < itemsAsset.items.Count; i++)
            //    {
            //        if (id == itemsAsset.items[i].prefabId) { found = true; break; }
            //    }
            //    if (!found)
            //    {
            //        target.id = "";
            //        target.cachedName = "";
            //        ed.ForceSerialise();
            //    }
            //}
        }
        public override bool DrawField(ref object obj, plyBlock fieldOfBlock)
        {
            bool ret = (obj == null);
            plyGraphFieldData target = obj == null ? new plyGraphFieldData() : obj as plyGraphFieldData;
            plyGraphManager asset = DiaQEdGlobal.GraphsAsset;

            if (GUILayout.Button(string.IsNullOrEmpty(target.cachedName) ? "-select-" : target.cachedName))
            {
                List<object> l = new List<object>();
                for (int i = 0; i < asset.graphs.Count; i++) l.Add(new UniqueIdNamePair() { id = asset.graphs[i].id.Copy(), name = asset.graphs[i].name });
                plyListSelectWiz.ShowWiz("Select Graph", l, true, null, OnSelect, new object[] { ed, target });
            }

            obj = target;
            return ret;
        }
        public override bool DrawField(ref object obj, plyBlock fieldOfBlock)
        {
            bool ret    = (obj == null);
            var  target = obj == null ? new InventoryItemBaseFieldData() : obj as InventoryItemBaseFieldData;

            ObjectPickerUtility.RenderObjectPickerForType <InventoryItemBase>("", target.item, item =>
            {
                target.item = item;
                GUI.changed = true;

                ed.ForceSerialise();
                ed.Repaint();
            });

            obj = target;
            return(ret);
        }
        public override void OnFocus(object obj, plyBlock fieldOfBlock)
        {
            DiaQuestFieldData target = obj == null ? new DiaQuestFieldData() : obj as DiaQuestFieldData;
            DiaQuestManager asset = DiaQEdGlobal.QuestsAsset;

            // check if saved still valid
            if (target.id >= 0)
            {
                bool found = false;
                for (int i = 0; i < asset.quests.Count; i++)
                {
                    if (target.id == asset.quests[i].id) { found = true; break; }
                }
                if (!found)
                {
                    target.id = -1;
                    target.cachedName = "";
                    ed.ForceSerialise();
                }
            }
        }
        public override bool DrawField(ref object obj, plyBlock fieldOfBlock)
        {
            bool ret = (obj == null);
            InventoryItemBaseFieldData target = obj == null ? new InventoryItemBaseFieldData() : obj as InventoryItemBaseFieldData;

            if (GUILayout.Button((target.item == null) ? "(No item selected)" : target.item.name, EditorStyles.objectField))
            {
                var picker = InventoryItemPicker.Get();
                picker.Show(InventoryEditorUtil.GetItemDatabase(true, false));
                picker.OnPickObject += (item) =>
                {
                    target.item = item;

                    GUI.changed = true;
                    ed.ForceSerialise();
                    ed.Repaint();
                };
            }

            obj = target;
            return ret;
        }
        public override void OnFocus(object obj, plyBlock fieldOfBlock)
        {
            plyGraphFieldData target = obj == null ? new plyGraphFieldData() : obj as plyGraphFieldData;
            plyGraphManager asset = DiaQEdGlobal.GraphsAsset;

            // check if saved still valid
            if (!string.IsNullOrEmpty(target.id))
            {
                bool found = false;
                UniqueID id = new UniqueID(target.id);
                for (int i = 0; i < asset.graphs.Count; i++)
                {
                    if (id == asset.graphs[i].id) { found = true; break; }
                }
                if (!found)
                {
                    target.id = "";
                    target.cachedName = "";
                    ed.ForceSerialise();
                }
            }
        }
        public override bool DrawField(ref object obj, plyBlock fieldOfBlock)
        {
            bool ret = (obj == null);
            InventoryItemBaseFieldData target = obj == null ? new InventoryItemBaseFieldData() : obj as InventoryItemBaseFieldData;


            if (GUILayout.Button((target.item == null) ? "(No item selected)" : target.item.name, EditorStyles.objectField))
            {
                var picker = InventoryItemPicker.Get();
                picker.Show(InventoryEditorUtil.GetItemDatabase(true, false));
                picker.OnPickObject += (item) =>
                {
                    target.item = item;

                    GUI.changed = true;
                    ed.ForceSerialise();
                    ed.Repaint();
                };
            }

            obj = target;
            return(ret);
        }