/// <summary>
    /// Modifies a World Variable by name. You can set, add, multiply or subtract the value.
    /// </summary>
    /// <param name='modifier'>Modifier.</param>
    /// <param name='sourceTrans'>Source trans. Optional - this will output in the debug message if the World Variable is not found.</param>
    public static void ModifyPlayerStat(WorldVariableModifier modifier, Transform sourceTrans = null)
    {
        var statName = modifier._statName;

        if (!InGamePlayerStats.ContainsKey(statName))
        {
            LevelSettings.LogIfNew(string.Format("Transform '{0}' tried to modify a World Variable called '{1}', which was not found in this scene.",
                                                 sourceTrans == null ? LevelSettings.EmptyValue : sourceTrans.name,
                                                 statName));

            return;
        }

        var stat = InGamePlayerStats[statName];

        switch (modifier._varTypeToUse)
        {
        case VariableType._integer:
        case VariableType._float:
            stat.ModifyVariable(modifier);
            break;

        default:
            LevelSettings.LogIfNew("Write code for varType: " + modifier._varTypeToUse.ToString());
            break;
        }
    }
        private void Set()
        {
            var trans    = ((GameObject)gameObject.Value).transform;
            var modifier = new WorldVariableModifier(_name.Value, WorldVariableTracker.VariableType._float);

            modifier._modValueFloatAmt.curModMode = KillerVariable.ModMode.Set;
            modifier._modValueFloatAmt.Value      = value.Value;

            WorldVariableTracker.ModifyPlayerStat(modifier, trans);
        }
    public void ModifyVariable(WorldVariableModifier mod)
    {
        switch (mod._varTypeToUse)
        {
        case WorldVariableTracker.VariableType._integer:
            var modVal = mod._modValueIntAmt.Value;

            switch (mod._modValueIntAmt.curModMode)
            {
            case KillerVariable.ModMode.Add:
                AddToIntValue(modVal);
                break;

            case KillerVariable.ModMode.Set:
                SetIntValueIfAllowed(modVal);
                AddToIntValue(0);         // need to trigger game over if G.O. value reached
                break;

            case KillerVariable.ModMode.Sub:
                AddToIntValue(-modVal);
                break;

            case KillerVariable.ModMode.Mult:
                MultiplyByIntValue(modVal);
                break;

            default:
                LevelSettings.LogIfNew("Add code for modMode: " + mod._modValueIntAmt.curModMode.ToString());
                break;
            }

            break;

        case WorldVariableTracker.VariableType._float:
            var modFloatVal = mod._modValueFloatAmt.Value;

            switch (mod._modValueFloatAmt.curModMode)
            {
            case KillerVariable.ModMode.Add:
                AddToFloatValue(modFloatVal);
                break;

            case KillerVariable.ModMode.Set:
                SetFloatValueIfAllowed(modFloatVal);
                AddToFloatValue(0f);
                break;

            case KillerVariable.ModMode.Sub:
                AddToFloatValue(-modFloatVal);
                break;

            case KillerVariable.ModMode.Mult:
                MultiplyByFloatValue(modFloatVal);
                break;

            default:
                LevelSettings.LogIfNew("Add code for modMode: " + mod._modValueIntAmt.curModMode.ToString());
                break;
            }

            break;

        default:
            LevelSettings.LogIfNew("Add code for varType: " + mod._varTypeToUse.ToString());
            break;
        }
    }