Пример #1
0
        public float CalcParamAfterChange(ParamChanges changer)
        {
            List <float> values = new List <float>();

            InitParam(changer.aimParam);

            foreach (Param p in changer.Parameters)
            {
                InitParam(p);
                values.Add(saveInfo.paramsDictionary[p.paramGUID]);
            }
            return(ExpressionSolver.CalculateFloat(changer.changeString, values));
        }
Пример #2
0
        private void DrawChanges(Path path)
        {
            ParamChanges removingChanger = null;

            for (int i = 0; i < path.changes.Count; i++)
            {
                GUILayout.Box("", new GUILayoutOption[] { GUILayout.ExpandWidth(true), GUILayout.Height(1) });
                EditorGUILayout.BeginHorizontal();
                if (GUILayout.Button("delete"))
                {
                    removingChanger = path.changes[i];
                }
                if (GUILayout.Button("add param"))
                {
                    Undo.RecordObject(p, "add path changer param");
                    path.changes[i].AddParam(p.Game.parameters[0]);
                }
                EditorGUILayout.EndHorizontal();
                EditorGUILayout.BeginHorizontal();
                if (!p.Game.parameters.Contains(path.changes[i].aimParam))
                {
                    if (p.Game.parameters.Count > 0)
                    {
                        path.changes[i].aimParam = p.Game.parameters[0];
                    }
                    else
                    {
                        removingChanger = path.changes[i];
                        continue;
                    }
                }
                EditorGUI.BeginChangeCheck();
                int paramIndex = EditorGUILayout.Popup(p.Game.parameters.IndexOf(path.changes[i].aimParam), p.Game.parameters.Select(x => x.paramName).ToArray(), GUILayout.Width(100));
                if (EditorGUI.EndChangeCheck())
                {
                    Undo.RecordObject(p, "chose path changer param");
                    path.changes[i].aimParam = p.Game.parameters[paramIndex];
                }
                GUILayout.Label("=", GUILayout.Width(15));
                GUI.backgroundColor = Color.white;
                try
                {
                    List <float> paramsV = new List <float>();
                    foreach (Param p in path.changes[i].Parameters)
                    {
                        paramsV.Add(1);
                    }
                    ExpressionSolver.CalculateFloat(path.changes[i].changeString, paramsV);
                }
                catch
                {
                    GUI.color = Color.red;
                }
                EditorGUI.BeginChangeCheck();
                string changeString = EditorGUILayout.TextField(path.changes[i].changeString);
                if (EditorGUI.EndChangeCheck())
                {
                    Undo.RecordObject(p, "change path changer string");
                    path.changes[i].changeString = changeString;
                }
                GUI.color = Color.white;
                Param removingParam = null;
                EditorGUILayout.EndHorizontal();
                for (int j = 0; j < path.changes[i].Parameters.Count; j++)
                {
                    EditorGUILayout.BeginHorizontal();
                    EditorGUILayout.LabelField("[p" + j + "]", GUILayout.Width(35));

                    if (!p.Game.parameters.Contains(path.changes[i].Parameters[j]))
                    {
                        if (p.Game.parameters.Count > 0)
                        {
                            path.changes[i].setParam(p.Game.parameters[0], j);
                        }
                        else
                        {
                            removingParam = path.changes[i].Parameters[j];
                            continue;
                        }
                    }
                    EditorGUI.BeginChangeCheck();
                    int v = EditorGUILayout.Popup(p.Game.parameters.IndexOf(path.changes[i].Parameters[j]), p.Game.parameters.Select(x => x.paramName).ToArray());
                    if (EditorGUI.EndChangeCheck())
                    {
                        Undo.RecordObject(p, "change path changer sub param");
                        path.changes[i].setParam(p.Game.parameters[v], j);
                    }
                    GUI.color = Color.red;
                    if (GUILayout.Button("", GUILayout.Height(15), GUILayout.Width(15)))
                    {
                        removingParam = path.changes[i].Parameters[j];
                    }
                    GUI.color = Color.white;
                    EditorGUILayout.EndHorizontal();
                }
                if (removingParam != null)
                {
                    Undo.RecordObject(p, "remove path changer sub param");
                    path.changes[i].RemoveParam(removingParam);
                }
                GUI.color = Color.white;
            }
            if (removingChanger != null)
            {
                Undo.RecordObject(p, "remove path changer param");
                path.changes.Remove(removingChanger);
            }
        }
Пример #3
0
 public float CalcDifference(ParamChanges changer)
 {
     return(CalcParamAfterChange(changer) - saveInfo.paramsDictionary[changer.aimParam.paramGUID]);
 }