#if UNITY_EDITOR
using FIMSpace.FEditor;
using UnityEditor;
#endif
using FIMSpace.Generating.Planner.Nodes;
using FIMSpace.Graph;
using System;
using System.Collections.Generic;
using UnityEngine;
using FIMSpace.Generating.Rules.QuickSolutions;
namespace FIMSpace.Generating.Rules.ModGraph.Nodes
{
///
/// It's always sub-asset -> it's never project file asset
///
public abstract partial class ModNodeBase : PGGPlanner_NodeBase
{
public static bool Debugging = false;
/// Warning! Duplicate is refering to root project planner, In the nodes logics you can use CurrentExecutingPlanner for instance planner reference
[HideInInspector] public SR_ModGraph ParentPlanner;
[HideInInspector] public ScriptableObject ParentNodesContainer;
public string DebuggingInfo { get; protected set; }
public Action DebuggingGizmoEvent { get; protected set; }
//public virtual string TitleName() { return GetType().Name; }
public virtual string Tooltip() { string tooltipHelp = "(" + GetType().Name; return tooltipHelp + ")"; }
public override Vector2 NodeSize { get { return new Vector2(232, 90); } }
public override bool DrawInputConnector { get { return true; } }
public bool GetPlannerPort_IsContainingMultiple(PGGPlannerPort port)
{
if (port.ContainsMultiplePlanners) return true;
return false;
}
/// [Base is empty]
public virtual void PreGeneratePrepare()
{
}
/// [Base is not empty] Preparing initial debug message
public virtual void Prepare()
{
#if UNITY_EDITOR
DebuggingInfo = "Debug Info not Assigned";
#endif
}
public virtual void Execute()
{
// Node Procedures Code
}
#region Editor related
#if UNITY_EDITOR
public virtual void OnGUIModify()
{
}
[HideInInspector]
public bool _editor_drawRule = true;
protected UnityEditor.SerializedObject inspectorViewSO = null;
protected virtual void DrawGUIHeader(int i)
{
if (inspectorViewSO == null) inspectorViewSO = new UnityEditor.SerializedObject(this);
EditorGUILayout.BeginHorizontal(FGUI_Resources.BGInBoxLightStyle, GUILayout.Height(20)); // 1
Enabled = EditorGUILayout.Toggle(Enabled, GUILayout.Width(24));
string foldout = FGUI_Resources.GetFoldSimbol(_editor_drawRule);
string tip = Tooltip();
if (GUILayout.Button(new GUIContent(foldout + " " + GetDisplayName() + " " + foldout, tip), FGUI_Resources.HeaderStyle))
{
bool rmb = false;
if (rmb == false) _editor_drawRule = !_editor_drawRule;
}
int hh = 18;
if (i > 0) if (GUILayout.Button(new GUIContent(FGUI_Resources.Tex_ArrowUp), FGUI_Resources.ButtonStyle, GUILayout.Width(18), GUILayout.Height(hh))) { FGenerators.SwapElements(ParentPlanner.Procedures, i, i - 1); return; }
if (i < ParentPlanner.Procedures.Count - 1) if (GUILayout.Button(new GUIContent(FGUI_Resources.Tex_ArrowDown), FGUI_Resources.ButtonStyle, GUILayout.Width(18), GUILayout.Height(hh))) { FGenerators.SwapElements(ParentPlanner.Procedures, i, i + 1); return; }
if (GUILayout.Button("X", FGUI_Resources.ButtonStyle, GUILayout.Width(24), GUILayout.Height(hh)))
{
ParentPlanner.RemoveNodeFromGraph(this);
return;
}
EditorGUILayout.EndHorizontal(); // 1
}
protected virtual void DrawGUIFooter()
{
EditorGUILayout.EndVertical();
if (inspectorViewSO.ApplyModifiedProperties())
{
OnStartReadingNode();
}
}
#endif
#endregion
}
}