public NodeMenuItem[] AddNodeMenuItems(NodeMachineModel model, Vector2 mousePosition, NodeMachineEditor editor)
        {
            NodeMenuItem menuItem;

            if (model.machinePropsSchema.Count > 0)
            {
                menuItem = new NodeMenuItem("Conditional/Condition", () =>
                {
                    // TODO : CONDITIONS AND PROPERTIES WITH NO STANDARD TYPES???
                    KeyValuePair <string, Type> kvp      = model.machinePropsSchema.First();
                    Condition.ConditionType?tryParseType = Condition.ParseConditionType(kvp.Value);
                    if (tryParseType == null)
                    {
                        EditorUtility.DisplayDialog("Error", "There was an error while creating the condition!", "OK");
                        return;
                    }
                    Condition.ConditionType fieldType = (Condition.ConditionType)tryParseType;
                    string fieldName    = kvp.Key;
                    Condition condition = new Condition(fieldName, fieldType, Condition.Comparison.EQUAL, Condition.GetDefaultValue(fieldType, kvp.Value));
                    ConditionNode node  = new ConditionNode(editor._model, condition, mousePosition);
                    editor.AddNode(node);
                }, false, false);
            }
            else
            {
                menuItem = new NodeMenuItem("Conditional/Condition", null, false, true);
            }

            NodeMenuItem[] menuItems = { menuItem };
            return(menuItems);
        }
示例#2
0
        bool ConditionMet(Machine machine)
        {
            Condition.ConditionType type = condition._valueType;
            string propName = condition._propName;

            if (condition._compareMode == Condition.CompareTo.PROP)
            {
                Type compType = Condition.FromConditionType(condition._valueType);
                condition.SetComparisonValue(Convert.ChangeType(machine.GetProp(condition._compPropName), compType));
            }
            if (type == Condition.ConditionType.FLOAT)
            {
                return(condition.Compare((float)machine.GetProp(propName)));
            }
            else if (type == Condition.ConditionType.INT)
            {
                return(condition.Compare((int)machine.GetProp(propName)));
            }
            else if (type == Condition.ConditionType.BOOL)
            {
                return(condition.Compare((bool)machine.GetProp(propName)));
            }
            else if (type == Condition.ConditionType.STRING)
            {
                return(condition.Compare((string)machine.GetProp(propName)));
            }
            else if (type == Condition.ConditionType.ENUM)
            {
                return(condition.Compare(machine.GetProp(propName)));
            }
            return(false);
        }
示例#3
0
 public LinkConditionSerialized(Condition.Comparison comparison, string propName, Condition.ConditionType compareType, string compareValue)
 {
     this.comparison   = comparison;
     this.propName     = propName;
     this.compareType  = compareType;
     this.compareValue = compareValue;
 }
示例#4
0
        public static Type FromConditionType(Condition.ConditionType valueType)
        {
            Type compareType = null;

            switch (valueType)
            {
            case ConditionType.FLOAT:
                compareType = typeof(float);
                break;

            case ConditionType.INT:
                compareType = typeof(int);
                break;

            case ConditionType.BOOL:
                compareType = typeof(bool);
                break;

            case ConditionType.STRING:
                compareType = typeof(string);
                break;

            case ConditionType.ENUM:
                compareType = typeof(Enum);
                break;
            }
            return(compareType);
        }
示例#5
0
 public string[] GetPropNamesForType(Condition.ConditionType type)
 {
     string[] propNames = null;
     if (type == Condition.ConditionType.FLOAT)
     {
         propNames = _floats.Keys.ToArray();
     }
     else if (type == Condition.ConditionType.INT)
     {
         propNames = _ints.Keys.ToArray();
     }
     else if (type == Condition.ConditionType.BOOL)
     {
         propNames = _bools.Keys.ToArray();
     }
     return(propNames);
 }
示例#6
0
        public ConditionGroup CloseGroup(Condition.ConditionType nextGroupType)
        {
            string group = getGroupString();

            andList.Clear();
            orList.Clear();

            if (nextGroupType == Condition.ConditionType.And)
            {
                closedGroups.AddLast(String.Format(" {0} and ", group));
            }
            if (nextGroupType == Condition.ConditionType.Or)
            {
                closedGroups.AddLast(String.Format(" {0} or ", group));
            }

            return(this);
        }
示例#7
0
 public static Condition.ConditionType ConditionTypeFromString(string s)
 {
     Condition.ConditionType parsed_enum = (Condition.ConditionType)System.Enum.Parse(typeof(Condition.ConditionType), s);
     return(parsed_enum);
 }