Files
LowPolyRPG/Assets/Plugins/Nullframes/Intrigues/Scripts/Editor/IE Graph/RuleSearchMenu.cs
Caleb Sandford deQuincey 715fb68744 Initial commitment
2025-06-25 11:10:11 +01:00

455 lines
17 KiB
C#

using System.Collections.Generic;
using Nullframes.Intrigues.Utils;
using UnityEditor.Experimental.GraphView;
using UnityEngine;
namespace Nullframes.Intrigues.Graph.Nodes
{
public class RuleSearchMenu : ScriptableObject, ISearchWindowProvider
{
private IEGraphView ieGraphView;
private Texture2D spaceIcon;
public void Init(IEGraphView _ieGraphView)
{
ieGraphView = _ieGraphView;
spaceIcon = new Texture2D(1, 1);
spaceIcon.SetPixel(0, 0, Color.clear);
spaceIcon.Apply();
}
public List<SearchTreeEntry> CreateSearchTree(SearchWindowContext context)
{
var searchTreeEntries = new List<SearchTreeEntry>()
{
new SearchTreeGroupEntry(new GUIContent("Elements")),
new(new GUIContent("New Rule", spaceIcon))
{
level = 1, userData = 0
},
new(new GUIContent("Log", spaceIcon))
{
level = 1, userData = 133
},
new(new GUIContent("Success", spaceIcon))
{
level = 1, userData = 1
},
new(new GUIContent("Error", spaceIcon))
{
level = 1, userData = 31
},
new(new GUIContent("Warning", spaceIcon))
{
level = 1, userData = 32
},
new(new GUIContent("Comment", spaceIcon))
{
level = 1, userData = 33
},
new(new GUIContent("Invoke", spaceIcon))
{
level = 1, userData = 47
},
new(new GUIContent("Return [Actor]", spaceIcon))
{
level = 1, userData = 333
},
new(new GUIContent("Return [Dual] Actor", spaceIcon))
{
level = 1, userData = 334
},
new(new GUIContent("Return [Clan]", spaceIcon))
{
level = 1, userData = 335
},
new(new GUIContent("Return [Family]", spaceIcon))
{
level = 1, userData = 33515
},
new SearchTreeGroupEntry(new GUIContent("All"), 1),
new(new GUIContent("Get Variable", spaceIcon))
{
level = 2, userData = 2
},
new(new GUIContent("Get [Clan] Variable", spaceIcon))
{
level = 2, userData = 8879
},
new(new GUIContent("Get [Family] Variable", spaceIcon))
{
level = 2, userData = 8880
},
new(new GUIContent("Get Relation Variable", spaceIcon))
{
level = 2, userData = 336
},
new(new GUIContent("Get Relation Variable", spaceIcon))
{
level = 2, userData = 336
},
new(new GUIContent("Scheme Is Active", spaceIcon))
{
level = 2, userData = 99
},
// new(new GUIContent("Get Active Scheme Variable | Table", spaceIcon))
// {
// level = 2, userData = 1444
// },
new(new GUIContent("Check Actor", spaceIcon))
{
level = 2, userData = 3
},
new(new GUIContent("Check Clan", spaceIcon))
{
level = 2, userData = 4
},
new(new GUIContent("Check Family", spaceIcon))
{
level = 2, userData = 5
},
new(new GUIContent("Check Role", spaceIcon))
{
level = 2, userData = 6
},
new(new GUIContent("Check Culture", spaceIcon))
{
level = 2, userData = 7
},
new(new GUIContent("Has Policy", spaceIcon))
{
level = 2, userData = 8
},
new(new GUIContent("Same Clan", spaceIcon))
{
level = 2, userData = 9
},
new(new GUIContent("Same Family", spaceIcon))
{
level = 2, userData = 10
},
new(new GUIContent("Same Culture", spaceIcon))
{
level = 2, userData = 11
},
new(new GUIContent("Same Gender", spaceIcon))
{
level = 2, userData = 12
},
new(new GUIContent("Age", spaceIcon))
{
level = 2, userData = 13
},
new(new GUIContent("Gender", spaceIcon))
{
level = 2, userData = 14
},
new(new GUIContent("Is AI", spaceIcon))
{
level = 2, userData = 15
},
new(new GUIContent("Check State", spaceIcon))
{
level = 2, userData = 16
},
new(new GUIContent("Is Relative", spaceIcon))
{
level = 2, userData = 17
},
new(new GUIContent("Is Parent", spaceIcon))
{
level = 2, userData = 18
},
new(new GUIContent("Is Grandparent", spaceIcon))
{
level = 2, userData = 19
},
new(new GUIContent("Is Grandchildren", spaceIcon))
{
level = 2, userData = 20
},
new(new GUIContent("Is Spouse", spaceIcon))
{
level = 2, userData = 21
},
new(new GUIContent("Is Child", spaceIcon))
{
level = 2, userData = 22
},
new(new GUIContent("Is Sibling", spaceIcon))
{
level = 2, userData = 23
},
new(new GUIContent("Has Heir", spaceIcon))
{
level = 2, userData = 24
},
new(new GUIContent("Parent Count", spaceIcon))
{
level = 2, userData = 25
},
new(new GUIContent("Grandparent Count", spaceIcon))
{
level = 2, userData = 26
},
new(new GUIContent("Grandchildren Count", spaceIcon))
{
level = 2, userData = 27
},
new(new GUIContent("Children Count", spaceIcon))
{
level = 2, userData = 28
},
new(new GUIContent("Spouse Count", spaceIcon))
{
level = 2, userData = 29
},
new(new GUIContent("Sibling Count", spaceIcon))
{
level = 2, userData = 30
},
};
return searchTreeEntries;
}
public bool OnSelectEntry(SearchTreeEntry SearchTreeEntry, SearchWindowContext context)
{
if (!ieGraphView.graphElements.ToList().Exists(e => e is RuleGroup) &&
SearchTreeEntry.userData is not 0)
{
NDebug.Log("You need a Rule Group to create a Node.", NLogType.Error);
return false;
}
var localPosition = ieGraphView.GetLocalMousePosition(context.screenMousePosition, true);
switch (SearchTreeEntry.userData)
{
case 0:
{
ieGraphView.CreateRuleGroup(localPosition);
return true;
}
case 1:
{
ieGraphView.AddElement(ieGraphView.CreateNode<SuccessRuleNode>(localPosition, true, true));
return true;
}
case 2:
{
ieGraphView.AddElement(ieGraphView.CreateNode<GetVariableRuleNode>(localPosition, true, true));
return true;
}
case 8879:
{
ieGraphView.AddElement(ieGraphView.CreateNode<GetClanVariableRuleNode>(localPosition, true, true));
return true;
}
case 8880:
{
ieGraphView.AddElement(ieGraphView.CreateNode<GetFamilyVariableRuleNode>(localPosition, true, true));
return true;
}
case 3:
{
ieGraphView.AddElement(ieGraphView.CreateNode<GetActorRuleNode>(localPosition, true, true));
return true;
}
case 4:
{
ieGraphView.AddElement(ieGraphView.CreateNode<GetClanRuleNode>(localPosition, true, true));
return true;
}
case 5:
{
ieGraphView.AddElement(ieGraphView.CreateNode<GetFamilyRuleNode>(localPosition, true, true));
return true;
}
case 6:
{
ieGraphView.AddElement(ieGraphView.CreateNode<GetRoleRuleNode>(localPosition, true, true));
return true;
}
case 7:
{
ieGraphView.AddElement(ieGraphView.CreateNode<GetCultureRuleNode>(localPosition, true, true));
return true;
}
case 8:
{
ieGraphView.AddElement(ieGraphView.CreateNode<GetPolicyRuleNode>(localPosition, true, true));
return true;
}
case 9:
{
ieGraphView.AddElement(ieGraphView.CreateNode<SameClanRuleNode>(localPosition, true, true));
return true;
}
case 10:
{
ieGraphView.AddElement(ieGraphView.CreateNode<SameFamilyRuleNode>(localPosition, true, true));
return true;
}
case 11:
{
ieGraphView.AddElement(ieGraphView.CreateNode<SameCultureRuleNode>(localPosition, true, true));
return true;
}
case 12:
{
ieGraphView.AddElement(ieGraphView.CreateNode<SameGenderRuleNode>(localPosition, true, true));
return true;
}
case 13:
{
ieGraphView.AddElement(ieGraphView.CreateNode<AgeRuleNode>(localPosition, true, true));
return true;
}
case 14:
{
ieGraphView.AddElement(ieGraphView.CreateNode<GenderRuleNode>(localPosition, true, true));
return true;
}
case 15:
{
ieGraphView.AddElement(ieGraphView.CreateNode<IsAIRuleNode>(localPosition, true, true));
return true;
}
case 16:
{
ieGraphView.AddElement(ieGraphView.CreateNode<GetStateRuleNode>(localPosition, true, true));
return true;
}
case 17:
{
ieGraphView.AddElement(ieGraphView.CreateNode<IsRelativeRuleNode>(localPosition, true, true));
return true;
}
case 18:
{
ieGraphView.AddElement(ieGraphView.CreateNode<IsParentRuleNode>(localPosition, true, true));
return true;
}
case 19:
{
ieGraphView.AddElement(ieGraphView.CreateNode<IsGrandParentRuleNode>(localPosition, true, true));
return true;
}
case 20:
{
ieGraphView.AddElement(ieGraphView.CreateNode<IsGrandChildRuleNode>(localPosition, true, true));
return true;
}
case 21:
{
ieGraphView.AddElement(ieGraphView.CreateNode<IsSpouseRuleNode>(localPosition, true, true));
return true;
}
case 22:
{
ieGraphView.AddElement(ieGraphView.CreateNode<IsChildRuleNode>(localPosition, true, true));
return true;
}
case 23:
{
ieGraphView.AddElement(ieGraphView.CreateNode<IsSiblingRuleNode>(localPosition, true, true));
return true;
}
case 24:
{
ieGraphView.AddElement(ieGraphView.CreateNode<HasHeirRuleNode>(localPosition, true, true));
return true;
}
case 25:
{
ieGraphView.AddElement(ieGraphView.CreateNode<ParentCountRuleNode>(localPosition, true, true));
return true;
}
case 26:
{
ieGraphView.AddElement(ieGraphView.CreateNode<GrandparentCountRuleNode>(localPosition, true, true));
return true;
}
case 27:
{
ieGraphView.AddElement(ieGraphView.CreateNode<GrandchildCountRuleNode>(localPosition, true, true));
return true;
}
case 28:
{
ieGraphView.AddElement(ieGraphView.CreateNode<ChildCountRuleNode>(localPosition, true, true));
return true;
}
case 29:
{
ieGraphView.AddElement(ieGraphView.CreateNode<SpouseCountRuleNode>(localPosition, true, true));
return true;
}
case 30:
{
ieGraphView.AddElement(ieGraphView.CreateNode<SiblingCountRuleNode>(localPosition, true, true));
return true;
}
case 31:
{
ieGraphView.AddElement(ieGraphView.CreateNode<ErrorRuleNode>(localPosition, true, true));
return true;
}
case 32:
{
ieGraphView.AddElement(ieGraphView.CreateNode<WarningRuleNode>(localPosition, true, true));
return true;
}
case 33:
{
ieGraphView.AddElement(ieGraphView.CreateNode<CommentRuleNode>(localPosition, true, true));
return true;
}
case 99:
{
ieGraphView.AddElement(ieGraphView.CreateNode<SchemeIsActiveRuleNode>(localPosition, true, true));
return true;
}
case 333: {
ieGraphView.AddElement(ieGraphView.CreateNode<ReturnActorRuleNode>(localPosition, true, true));
return true;
}
case 334: {
ieGraphView.AddElement(ieGraphView.CreateNode<DualActorRuleNode>(localPosition, true, true));
return true;
}
case 335: {
ieGraphView.AddElement(ieGraphView.CreateNode<ReturnClanRuleNode>(localPosition, true, true));
return true;
}
case 33515: {
ieGraphView.AddElement(ieGraphView.CreateNode<ReturnFamilyRuleNode>(localPosition, true, true));
return true;
}
case 336: {
ieGraphView.AddElement(ieGraphView.CreateNode<GetRelationVariableRuleNode>(localPosition, true, true));
return true;
}
case 1444:
{
ieGraphView.AddElement(ieGraphView.CreateNode<GetSchemeTableVariableRuleNode>(localPosition, true, true));
return true;
}
case 47: {
ieGraphView.AddElement(ieGraphView.CreateNode<InvokeRuleNode>(localPosition, true, true));
return true;
}
case 133:
{
ieGraphView.AddElement(ieGraphView.CreateNode<LogRuleNode>(localPosition, true, true));
return true;
}
default:
{
return false;
}
}
}
}
}