private void ShowTreeCondition(ConditionMusicTreeNode cond)
        {
            var treeAsset = MusicTreeEditorManager.Instance.TreeAsset;

            if (treeAsset == null)
            {
                return;
            }

            var treeVars = treeAsset.vars;
            var varNames = treeVars.Select(x => x.name).ToArray();

            int treeVarIndex = treeVars.FindIndex(x => x.name == cond.condition.variableName);


            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Variable");
            treeVarIndex = EditorGUILayout.Popup(treeVarIndex, varNames);
            EditorGUILayout.EndHorizontal();



            if (treeVarIndex == -1)
            {
                cond.condition.variableName = "";
                return;
            }

            cond.condition.variableName = varNames[treeVarIndex];
            var currentVar = treeVars[treeVarIndex];

            ShowVarCondition(cond, currentVar);
        }
        private static void ShowFloatVarCondition(ConditionMusicTreeNode cond, ConditionVariables.ConditionVariable currentVar)
        {
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Condition Type");
            cond.condition.floatCondition = (ConditionVariables.Condition.FloatCondition)EditorGUILayout.EnumPopup((Enum)cond.condition.floatCondition);
            EditorGUILayout.EndHorizontal();

            cond.condition.floatVal = EditorGUILayout.FloatField("Value", cond.condition.floatVal);
        }
        public void Visit(ConditionMusicTreeNode n, CachedMusicTreeNode nContainer)
        {
            var child = nContainer.LeftmostChild;

            if (nContainer.isRunning || Environment.Evaluate(n.condition))
            {
                child.Accept(this);
                nContainer.ExecutionState = child.ExecutionState;
                nContainer.ActiveChild    = child;
            }
            else
            {
                nContainer.ExecutionState = CachedMusicTreeNode.State.Failed;
            }
        }
        private static void ShowVarCondition(ConditionMusicTreeNode cond, ConditionVariables.ConditionVariable currentVar)
        {
            switch (currentVar.value.type)
            {
            case ConditionVariables.ConditionVariableValue.Type.Boolean:
                ShowBoolVarCondition(cond);
                break;

            case ConditionVariables.ConditionVariableValue.Type.Float:
                ShowFloatVarCondition(cond, currentVar);
                break;

            case ConditionVariables.ConditionVariableValue.Type.Integer:
                ShowIntVarCondition(cond);
                break;

            default:
                throw new NotImplementedException();
            }
        }
 private static void ShowBoolVarCondition(ConditionMusicTreeNode cond)
 {
     cond.condition.boolVal = GUILayout.Toggle(cond.condition.boolVal, new GUIContent("Value"));
 }