private void OnDrawElement(Rect rect, int index, bool isactive, bool isfocused) { DialogAnswerCondition condition = answer.conditions[index]; float spacing = rect.width / 2; int propIndex = EditorGUI.Popup(new Rect(rect.x, rect.y, spacing, EditorGUIUtility.singleLineHeight), GetIndexFrom(AvailablePropertyNames(), condition.propertyName), AvailablePropertyNames()); condition.propertyName = GetSelectionByIndex(AvailablePropertyNames(), propIndex); DialogProperty prop = null; try { prop = container.Properties.Find(p => p.Name == condition.propertyName); }catch (ArgumentNullException) {} var r = new Rect(rect.x + (spacing * 1.5f), rect.y, spacing / 2, EditorGUIUtility.singleLineHeight); if (prop != null) { switch (prop.type) { case DialogProperty.Type.BOOL: condition.BoolcompareType = (BoolCondition)EditorGUI.EnumPopup(new Rect(rect.x + spacing, rect.y, spacing / 2, EditorGUIUtility.singleLineHeight), condition.BoolcompareType); condition.boolValue = EditorGUI.Toggle(new Rect(rect.xMax - 15, rect.y, 15, EditorGUIUtility.singleLineHeight), condition.boolValue); break; case DialogProperty.Type.FLOAT: condition.NumcompareType = (NumericCondition)EditorGUI.EnumPopup(new Rect(rect.x + spacing, rect.y, spacing / 2, EditorGUIUtility.singleLineHeight), condition.NumcompareType); condition.floatValue = EditorGUI.FloatField(r, condition.floatValue); break; case DialogProperty.Type.INT: condition.NumcompareType = (NumericCondition)EditorGUI.EnumPopup(new Rect(rect.x + spacing, rect.y, spacing / 2, EditorGUIUtility.singleLineHeight), condition.NumcompareType); condition.intValue = EditorGUI.IntField(r, condition.intValue); break; } } }
public object Clone() { DialogContainer container = ScriptableObject.CreateInstance(typeof(DialogContainer)) as DialogContainer; container.Properties = new List <DialogProperty>(); container.Statements = new List <DialogStatement>(); foreach (var property in Properties) { var t = new DialogProperty(); t.Name = property.Name; t.type = property.type; t.boolValue = property.boolValue; t.floatValue = property.floatValue; t.intValue = property.intValue; container.Properties.Add(t); } foreach (var statement in Statements) { var x = ScriptableObject.CreateInstance(typeof(DialogStatement)) as DialogStatement; container.Statements.Add(x); x.Id = statement.Id; x.speaker = statement.speaker; x.text = statement.text; x.name = statement.name; } container.StartingPoint = container.Statements.Find(s => s.Id == StartingPoint.Id); // after all statements are there, do transitions foreach (var statement in Statements) { var x = container.Statements.Find(s => s.Id == statement.Id); x.Answers = new List <DialogAnswer>(); foreach (var answer in statement.Answers) { var y = ScriptableObject.CreateInstance(typeof(DialogAnswer)) as DialogAnswer; y.From = x; y.To = container.Statements.Find(s => s.Id == answer.To.Id); y.title = answer.title; y.parent = container; y.conditions = new List <DialogAnswerCondition>(); foreach (var condition in answer.conditions) { var c = new DialogAnswerCondition(); c.BoolcompareType = condition.BoolcompareType; c.NumcompareType = condition.NumcompareType; c.boolValue = condition.boolValue; c.floatValue = condition.floatValue; c.intValue = condition.intValue; c.type = condition.type; c.propertyName = condition.propertyName; y.conditions.Add(c); } x.Answers.Add(y); } } return(container); }