Exemplo n.º 1
0
    /// <summary>
    /// Executes the provided <see cref="manip"/> with the provided parameters.
    /// </summary>
    /// <param name="manip">Manipulation to perform on the <see cref="SAV"/> box data.</param>
    /// <param name="box">Single box to modify; if <see cref="allBoxes"/> is set, this param is ignored.</param>
    /// <param name="allBoxes">Indicates if all boxes are to be manipulated, or just one box.</param>
    /// <param name="reverse">Manipulation action should be inverted (criteria) or reversed (sort).</param>
    /// <returns>True if operation succeeded, false if no changes made.</returns>
    public bool Execute(IBoxManip manip, int box, bool allBoxes, bool reverse = false)
    {
        bool usable = manip.Usable.Invoke(SAV);

        if (!usable)
        {
            return(false);
        }

        var start = allBoxes ? 0 : box;
        var stop  = allBoxes ? SAV.BoxCount - 1 : box;
        var param = new BoxManipParam(start, stop, reverse);

        var prompt = manip.GetPrompt(allBoxes);
        var fail   = manip.GetFail(allBoxes);

        if (!CanManipulateRegion(param.Start, param.Stop, prompt, fail))
        {
            return(false);
        }

        var result = manip.Execute(SAV, param);

        if (result <= 0)
        {
            return(false);
        }
        var success = manip.GetSuccess(allBoxes);

        FinishBoxManipulation(success, allBoxes, result);
        return(true);
    }
Exemplo n.º 2
0
 public abstract int Execute(SaveFile sav, BoxManipParam param);
Exemplo n.º 3
0
 public bool Equals(BoxManipParam p) => p.Start == Start && p.Stop == Stop && p.Reverse == Reverse;