Skip to content

Commit

Permalink
let (Debug)PrintVar print up to 15 vars
Browse files Browse the repository at this point in the history
  • Loading branch information
Demorome committed Mar 15, 2023
1 parent 3a3222a commit 460c5aa
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 42 deletions.
73 changes: 37 additions & 36 deletions nvse/nvse/Commands_Scripting.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -642,53 +642,54 @@ bool Cmd_GetAllModLocalData_Execute(COMMAND_ARGS)
return true;
}

bool PrintVar_Call(COMMAND_ARGS)
bool Cmd_PrintVar_Execute(COMMAND_ARGS)
{
ExpressionEvaluator eval(PASS_COMMAND_ARGS);
if (!eval.ExtractArgs() || !eval.Arg(0) || !eval.Arg(0)->GetVar())
return true;
auto* token = eval.Arg(0);
std::string variableValue;
switch (token->Type())
UInt8 argNum = 0;
const auto numArgs = eval.NumArgs();
do // guaranteed to have at least 1 variable to print
{
case kTokenType_NumericVar:
variableValue = FormatString("%g", token->GetNumber());
break;
case kTokenType_StringVar:
variableValue = FormatString(R"("%s")", token->GetString());
break;
case kTokenType_ArrayVar:
if (auto* arrayVar = token->GetArrayVar())
variableValue = arrayVar->GetStringRepresentation();
else
variableValue = "uninitialized or invalid array";
break;
case kTokenType_RefVar:
if (auto* form = token->GetTESForm())
variableValue = form->GetStringRepresentation();
else
variableValue = "invalid form";
default:
break;
}
const auto toPrint = std::string(GetVariableName(token->GetVar(), scriptObj, eventList, token->refIdx))
+ ": " + variableValue;
if (toPrint.size() < 512)
Console_Print("%s", toPrint.c_str());
else
Console_Print_Long(toPrint);
return true;
}
auto* token = eval.Arg(argNum);
std::string variableValue;
switch (token->Type())
{
case kTokenType_NumericVar:
variableValue = FormatString("%g", token->GetNumber());
break;
case kTokenType_StringVar:
variableValue = FormatString(R"("%s")", token->GetString());
break;
case kTokenType_ArrayVar:
if (auto* arrayVar = token->GetArrayVar())
variableValue = arrayVar->GetStringRepresentation();
else
variableValue = "uninitialized or invalid array";
break;
case kTokenType_RefVar:
if (auto* form = token->GetTESForm())
variableValue = form->GetStringRepresentation();
else
variableValue = "invalid form";
[[fallthrough]];
default:
break;
}
const auto toPrint = std::string(GetVariableName(token->GetVar(), scriptObj, eventList, token->refIdx))
+ ": " + variableValue;
Console_Print_Str(toPrint);

bool Cmd_PrintVar_Execute(COMMAND_ARGS)
{
return PrintVar_Call(PASS_COMMAND_ARGS);
++argNum;
} while (argNum < numArgs);

return true;
}

bool Cmd_DebugPrintVar_Execute(COMMAND_ARGS)
{
if (ModDebugState(scriptObj))
return PrintVar_Call(PASS_COMMAND_ARGS);
return Cmd_PrintVar_Execute(PASS_COMMAND_ARGS);
return true;
}

Expand Down
32 changes: 26 additions & 6 deletions nvse/nvse/Commands_Scripting.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,8 @@ static ParamInfo kParams_CallFunctionCond[2] =
{ "bBreakIfFalse", kParamType_Integer, 1 },
};

DEFINE_CMD_COND(CallFunctionCond, "calls every UDF in a formlist and returns the result of the last one.", false, kParams_CallFunctionCond);
DEFINE_CMD_COND(CallFunctionCond, "calls every UDF in a formlist and returns the result of the last one.",
false, kParams_CallFunctionCond);

extern CommandInfo kCommandInfo_SetFunctionValue;

Expand All @@ -63,18 +64,37 @@ extern CommandInfo kCommandInfo_GetAllModLocalData;
extern CommandInfo kCommandInfo_Internal_PushExecutionContext;
extern CommandInfo kCommandInfo_Internal_PopExecutionContext;

static ParamInfo kParams_OneNVSEVariable[] =
// Up to 15 variables
static ParamInfo kParams_OneNVSEVariable_OptionalNVSEVariables[] =
{
{"variable", kNVSEParamType_Variable, 0}
{"variable", kNVSEParamType_Variable, 0},
{"variable", kNVSEParamType_Variable, 1},
{"variable", kNVSEParamType_Variable, 1},
{"variable", kNVSEParamType_Variable, 1},
{"variable", kNVSEParamType_Variable, 1},

{"variable", kNVSEParamType_Variable, 1},
{"variable", kNVSEParamType_Variable, 1},
{"variable", kNVSEParamType_Variable, 1},
{"variable", kNVSEParamType_Variable, 1},
{"variable", kNVSEParamType_Variable, 1},

{"variable", kNVSEParamType_Variable, 1},
{"variable", kNVSEParamType_Variable, 1},
{"variable", kNVSEParamType_Variable, 1},
{"variable", kNVSEParamType_Variable, 1},
{"variable", kNVSEParamType_Variable, 1},
};

static ParamInfo kParams_OneBoolean[] =
{
{ "boolean expression", kNVSEParamType_Boolean, 0 },
};

DEFINE_CMD_ALT_EXP(PrintVar, PrintV, , false, kParams_OneNVSEVariable);
DEFINE_CMD_ALT_EXP(DebugPrintVar, DPrintV, , false, kParams_OneNVSEVariable);
DEFINE_CMD_ALT_EXP(PrintVar, PrintV, , false, kParams_OneNVSEVariable_OptionalNVSEVariables);
DEFINE_CMD_ALT_EXP(DebugPrintVar, DPrintV, , false, kParams_OneNVSEVariable_OptionalNVSEVariables);

DEFINE_CMD_ALT_EXP(Assert, AssertTrue, , false, kParams_OneBoolean);
DEFINE_CMD_ALT_EXP(GetSelfAlt, ThisAlt, "Unlike GetSelf, will return ThisObj even if it isn't Persistent and is clutter.", false, nullptr);
DEFINE_CMD_ALT_EXP(GetSelfAlt, ThisAlt,
"Unlike GetSelf, will return ThisObj even if it isn't Persistent and is clutter.",
false, nullptr);

0 comments on commit 460c5aa

Please sign in to comment.