Esempio n. 1
0
    public void UpdateTotal()
    {
        // Defaults
        total       = is_value ? value : 0;
        valid_state = true;

        if (script_digit_upper != null)
        {
            Operator upper_op = script_digit_upper.GetOperator();
            if (script_digit_upper.GetIsValue() && !is_value)
            {
                // Above block is value and current block is operator, transfer total
                valid_op = true;
                total    = script_digit_upper.GetTotal();
            }
            else if (!script_digit_upper.GetIsValue() && is_value && upper_op != Operator.invalid)
            {
                // Above block is operator and current block is value, perform operation and calculate new total
                total = ApplyOperation(upper_op, script_digit_upper.GetTotal(), value);
            }
            else // Invalid placement
            {
                valid_state = false;
                script_digit_upper.SetValidState(false);
                script_digit_upper.UpdateColor();
                UpdateColor();
                return;
            }
        }

        // Update lower block's total if exists
        if (script_digit_lower != null)
        {
            script_digit_lower.UpdateTotal();
        }

        UpdateColor();
    }