void InstantiateSubactionVarDataCard(SubactionVarData varData, SubactionData subaction)
    {
        GameObject            go    = NGUITools.AddChild(gameObject, varDataCardPrefab);
        SubactionVarDataPanel panel = go.GetComponent <SubactionVarDataPanel>();

        panel.varData = varData;
        panel.BroadcastMessage("OnSubactionChanged", subaction, SendMessageOptions.DontRequireReceiver);
        children.Add(go);
    }
    public void changedValue(string newVal)
    {
        //Because this window will only ever be visible when a create hitbox subaction is selected, we just need to get the current subaction.
        SubactionData    createHitboxSubaction = editor.currentSubaction;
        SubactionVarData varData = createHitboxSubaction.arguments[varDataName];

        //Convert this to a LegacyAction
        ChangeSubactionVarDataInput legacyAction = ScriptableObject.CreateInstance <ChangeSubactionVarDataInput>();

        legacyAction.init(varData, newVal);

        LegacyEditorData.instance.DoAction(legacyAction);
        input.value = varData.data;
    }
    void OnSubactionChanged(SubactionData subaction)
    {
        //Since this is fired even when the panel is deactivated, we need to check if it's a createHitboxAction
        if (editor?.currentSubaction?.SubactionName == "CreateHitbox")
        {
            SubactionData createHitboxSubaction = editor.currentSubaction;

            SubactionVarData varData = createHitboxSubaction.arguments[varDataName];

            //We need to change the text without firing another update, so unready then re-ready after setting
            ready       = false;
            input.value = varData.data;
            ready       = true;
        }
    }
示例#4
0
    public override void Execute(BattleObject actor, GameAction action)
    {
        base.Execute(actor, action);
        SubactionVarData variable = arg_dict["variable"];
        SubactionVarData data     = arg_dict["value"];

        if (variable.source == SubactionSource.OWNER)
        {
            //Only set the variable if there isn't already one present
            if (!actor.HasVar(variable.data))
            {
                variable.SetVariableInTarget(actor, action, data.GetData(actor, action));
            }
        }
        else if (variable.source == SubactionSource.ACTION)
        {
            //Only set the variable if there isn't already one present
            if (!action.HasVar(variable.data))
            {
                variable.SetVariableInTarget(actor, action, data.GetData(actor, action));
            }
        }
    }
 public void init(SubactionVarData varData, SubactionSource source)
 {
     varDataToEdit = varData;
     sourceToSet   = source;
 }
示例#6
0
    /// <summary>
    /// Given a line containing the definition of a SubactionData, return that SubactionData as an object.
    /// This uses reflection to get the Subactions, so the spelling of the SubName is key.
    /// </summary>
    /// <param name="line">The line being parsed</param>
    /// <returns>A proper SubactionData object, ready for injecting into a Dynamic Action</returns>
    private static SubactionData processSubactionLine(string line, int lineNumber)
    {
        string[] startParenSplit = line.Split('(');

        //This string should contain EXACTLY one parenthesis pair. Any more or less and you f****d up your script, dawg
        if (startParenSplit.Length != 2 || !line.EndsWith(")"))
        {
            //Debug.Log(startParenSplit.Length);
            //Debug.Log(line.EndsWith(")"));
            throwException("Incorrect parenthesis in subDataLine: " + line, lineNumber);
            return(null);
        }
        string subDataName = startParenSplit[0];
        string argList     = startParenSplit[1].Substring(0, startParenSplit[1].Length - 1);
        //Debug.Log(string.Format("PARSING SUBACTION {0}\n\tArguments: {1}",subDataName,argList));


        SubactionDataDefault subDataDef = Resources.Load <SubactionDataDefault>("SubactionData/" + subDataName);

        if (subDataDef != null)
        {
            SubactionData subData   = subDataDef.CreateSubactionData();
            string[]      splitArgs = new string[0];
            if (argList.Length > 0)
            {
                splitArgs = argList.Split(',');
            }
            if (subDataDef.scriptArgNames.Count != splitArgs.Length)
            {
                throwException(string.Format("Subaction {0} has {1} arguments, expecting {2}", subDataName, splitArgs.Length, subDataDef.scriptArgNames.Count), lineNumber);
                return(null);
            }
            for (int i = 0; i < splitArgs.Length; i++)
            {
                string argumentName = subDataDef.scriptArgNames[i];

                SubactionSource source = SubactionSource.CONSTANT;
                if (splitArgs[i].StartsWith("owner."))
                {
                    source       = SubactionSource.OWNER;
                    splitArgs[i] = splitArgs[i].Substring("owner.".Length);
                }
                else if (splitArgs[i].StartsWith("action."))
                {
                    source       = SubactionSource.ACTION;
                    splitArgs[i] = splitArgs[i].Substring("action.".Length);
                }

                SubactionVarType varType = subDataDef.arguments[argumentName].type;

                SubactionVarData argVarData = new SubactionVarData(argumentName, source, varType, splitArgs[i]);
                subData.arguments[argumentName] = argVarData;
            }
            return(subData);
        }
        else
        {
            throwException("No Subaction found with name " + subDataName, lineNumber);
        }
        return(null);
    }
    public override void Execute(BattleObject obj, GameAction action)
    {
        SubactionVarData var1 = arg_dict["var1"];
        SubactionVarData var2 = arg_dict["var2"];
        string           cond = (string)GetArgument("cond", obj, action, "==");

        bool value = false; //If the cond isn't set right, this subaction will always return false

        if (cond == "==")
        {
            value = (var1.GetData(obj, action) == var2.GetData(obj, action));
        }
        if (cond == "!=")
        {
            value = (var1.GetData(obj, action) != var2.GetData(obj, action));
        }

        if (var1.IsNumeric() && var2.IsNumeric()) //If they're both numeric, we can compare them
        {
            float var1data = (float)var1.GetData(obj, action);
            float var2data = (float)var2.GetData(obj, action);

            if (cond == "<")
            {
                value = (var1data < var2data);
            }
            if (cond == ">")
            {
                value = (var1data > var2data);
            }
            if (cond == "<=")
            {
                value = (var1data <= var2data);
            }
            if (cond == ">=")
            {
                value = (var1data >= var2data);
            }
        }

        if (var1.type == SubactionVarType.BOOL && var2.type == SubactionVarType.BOOL)
        {
            bool var1data = (bool)var1.GetData(obj, action);
            bool var2data = (bool)var2.GetData(obj, action);

            if (cond == "&&")
            {
                value = var1data && var2data;
            }
            if (cond == "||")
            {
                value = var1data || var2data;
            }
            if (cond == "^")
            {
                value = var1data ^ var2data;
            }
            if (cond == "!&")
            {
                value = !(var1data && var2data);
            }
            if (cond == "!|")
            {
                value = !(var1data || var2data);
            }
            if (cond == "!^")
            {
                value = !(var1data ^ var2data);
            }
        }

        action.cond_list.Add(value);
        action.cond_depth++;
    }
 public void init(SubactionVarData varData, string data)
 {
     varDataToEdit = varData;
     dataToSet     = data;
 }