private void OnGUI() { DrawGrid(20, 0.2f, Color.gray); DrawGrid(100, 0.4f, Color.gray); DrawNodes(); DrawConnections(); DrawConnectionLine(Event.current); var temp = (SkillTreeData)EditorGUILayout.ObjectField(MySkillTree, typeof(SkillTreeData), allowSceneObjects: false); if (temp != MySkillTree) { MySkillTree = temp; LoadNodes(temp); } DrawButtons(); ProcessNodeEvents(Event.current); ProcessEvents(Event.current); if (GUI.changed) { Repaint(); } }
void Awake() { skillPointsUpdateAction = EventManager.Convert <int>(SkillPointsUpdatedDelegate); EventManager.StartListening(GlobalEventsNameList.SKILL_POINTS_UPDATE, skillPointsUpdateAction); levelbutton = GetComponent <Button>(); //MTM - this is the image overlay which visually changes from dark overlay to no overlay, so bright and active activeImageLayer = GetComponent <Image>(); skillSetLevelDescription = GetComponentInChildren <TextMeshProUGUI>(); skillTreeData = GameObject.FindObjectOfType <SkillTreeData>(); //keep the initial state unavailable, so color of the activeImageLayer also unavailable. }
// Function for clearing data from the editor window private void ClearNodes() { MySkillTree = ScriptableObject.CreateInstance <SkillTreeData>(); if (nodes != null && nodes.Count > 0) { Node node; while (nodes.Count > 0) { node = nodes[0]; OnClickRemoveNode(node); } } }
private void LoadNodes(SkillTreeData skillData) { ClearNodes(); MySkillTree = skillData; // Store the SkillTree as an array of Skill Skill[] _skillTree = skillData.skills; // Create nodes for (int i = 0; i < _skillTree.Length; ++i) { if (nodes == null) { nodes = new List <Node>(); } nodes.Add(new Node(_skillTree[i].editor_position, 200, 150, nodeStyle, selectedNodeStyle, inPointStyle, outPointStyle, OnClickInPoint, OnClickOutPoint, OnClickRemoveNode, _skillTree[i].id, _skillTree[i].unlocked, _skillTree[i].name, _skillTree[i].cost, _skillTree[i].description, _skillTree[i].dependencies)); } Node outNode; // Create connections for (int i = 0; i < nodes.Count; ++i) { for (int j = 0; j < nodes[i].skill.dependencies.Length; ++j) { for (int k = 0; k < nodes.Count; k++) { if (nodes[i].skill.dependencies[j] == nodes[k].skill.id) { outNode = nodes[k]; OnClickOutPoint(outNode.outPoint); break; } } OnClickInPoint(nodes[i].inPoint); } } }
// Start is called before the first frame update void Awake() { skillTreeData = GameObject.FindObjectOfType <SkillTreeData>(); }