private void OnDisable() { BehaviourEditorWindow.Save(null); }
/// <summary> /// Create all the Behaviour objects from its json string. /// </summary> /// <param name="behaviour"></param> public static void Serialize(this EliotBehaviour behaviour) { behaviour.Nodes = new List <Node>(); BehaviourEditorWindow.Nodes = new List <Node>(); var jObj = new JsonObject(behaviour.Json); var jNodes = jObj["nodes"].Objects; if (jNodes == null) { behaviour.Nodes = new List <Node>(); behaviour.Transitions = new List <NodesTransition>(); BehaviourEditorWindow.Nodes = behaviour.Nodes; BehaviourEditorWindow.Clear(null); } else { if (jNodes.Count > 0) { foreach (var node in jNodes) { behaviour.Nodes.Add(BehaviourEditorWindow.TemplateNode(((JsonObject)node)["type"].String).Serialize((JsonObject)node)); } } behaviour.Transitions = new List <NodesTransition>(); var jTransitions = jObj["transitions"].Objects; foreach (var trans in jTransitions) { var transition = (JsonObject)trans; if (transition["startID"] == null) { break; } var startId = transition["startID"].Int; var endId = transition["endID"].Int; var isNeg = transition["type"].String.Equals("negative"); int minRate, maxRate; float minCooldown, maxCooldown; bool terminate; try { minRate = transition["minRate"].Int; maxRate = transition["maxRate"].Int; minCooldown = transition["minCooldown"].Float; maxCooldown = transition["maxCooldown"].Float; terminate = transition["terminate"].Bool; } catch (Exception) { minRate = 1; maxRate = 1; minCooldown = 0f; maxCooldown = 0f; terminate = false; } var color = BehaviourEditorWindow.NeutralColor; var tColor = transition["color"]; if (tColor != null) { var r = transition["color"]["r"].Float; var g = transition["color"]["g"].Float; var b = transition["color"]["b"].Float; var a = Mathf.Clamp(1f / (maxRate * 0.2f) + 0.2f, 0.5f, 2f); color = new Color(r, g, b, a); } var t = BehaviourEditorWindow.TemplateTransition(); t.Start = behaviour.Nodes[startId]; t.End = behaviour.Nodes[endId]; t.IsNegative = isNeg; t.MinRate = minRate; t.MaxRate = maxRate; t.MinCooldown = minCooldown; t.MaxCooldown = maxCooldown; t.Terminate = terminate; t.Color = color; behaviour.Nodes[startId].Transitions.Add(t); behaviour.Transitions.Add(t); } BehaviourEditorWindow.Nodes = behaviour.Nodes; } }