Add localization support for string evaluators, gravestone and signpost inscriptions and custom game goal texts

alut-include-path
Sven Eberhardt 2017-05-07 15:03:11 -04:00
parent 9eedfe268c
commit bc4425462c
5 changed files with 21 additions and 15 deletions

View File

@ -20,7 +20,7 @@ public func GetInteractionMetaInfo(object clonk)
public func Interact(object clonk)
{
if (!clonk) return false;
Dialogue->MessageBox(inscription, clonk, this, clonk->GetController(), true);
Dialogue->MessageBox(GetTranslatedString(inscription), clonk, this, clonk->GetController(), true);
return true;
}
@ -47,5 +47,5 @@ public func Definition(def)
def.MeshTransformation = Trans_Scale(360);
// Inscription props
if (!def.EditorProps) def.EditorProps = {};
def.EditorProps.inscription = { Name="$Inscription$", Type="string", EditorHelp="$InscriptionHelp$", Set="SetInscription", Save="Inscription" };
def.EditorProps.inscription = { Name="$Inscription$", Type="string", EditorHelp="$InscriptionHelp$", Set="SetInscription", Save="Inscription", Translatable=true };
}

View File

@ -56,7 +56,7 @@ public func Definition(def)
{
// Properties
if (!def.EditorProps) def.EditorProps = {};
def.EditorProps.Description = { Name="$PropDescription$", EditorHelp="$PropDescriptionHelp$", Type="string", Save="Description" };
def.EditorProps.Description = { Name="$PropDescription$", EditorHelp="$PropDescriptionHelp$", Type="string", Save="Description", Translatable=true };
def.EditorProps.overlay_picture = { Name="$Picture$", EditorHelp="$PictureHelp$", Type="def", Set="SetOverlayPicture", Save="Picture" };
// User actions
UserAction->AddEvaluator("Action", "Game", "$SetScriptGoalData$", "$SetScriptGoalDataDesc$", "set_script_goal_data", [def, def.EvalAct_SetData],
@ -84,7 +84,7 @@ private func EvalAct_SetData(props, context)
{
var target = UserAction->EvaluateValue("Objct", props.Target, context);
if (!target || !target->~IsScriptGoal()) return;
target.Description = UserAction->EvaluateValue("String", props.Description, context);
target.Description = UserAction->EvaluateString(props.Description, context);
target->~SetOverlayPicture(UserAction->EvaluateValue("Definition", props.OverlayPicture, context));
target->~SetFulfilled(UserAction->EvaluateValue("Boolean", props.Fulfilled, context));
}

View File

@ -602,12 +602,12 @@ private func EvalAct_Message(proplist props, proplist context)
for (var opt in props.Options)
{
opt._goto = UserAction->EvaluateValue("Integer", opt.Goto, context); // evaluated in UserAction menu callback
options_msg[i] = [UserAction->EvaluateValue("String", opt.Text, context) ?? "", Format("MenuSelectOption(%d)", i)];
options_msg[i] = [UserAction->EvaluateString(opt.Text, context), Format("MenuSelectOption(%d)", i)];
++i;
}
props._options_msg = options_msg;
}
var text = UserAction->EvaluateValue("String", props.Text, context) ?? "";
var text = UserAction->EvaluateString(props.Text, context);
// Show message to desired players
for(var plr in UserAction->EvaluateValue("PlayerList", props.TargetPlayers, context))
{

View File

@ -403,7 +403,7 @@ func Definition(def)
AddEvaluator("Integer", nil, "$PositionY$", "$PositionYHelp$", "position_y", [def, def.EvalInt_PosCoord, 1], { }, new Evaluator.Position { }, "Position");
AddEvaluator("Integer", nil, "$IteratedInteger$", "$IteratedIntegerHelp$", "iterated_int", [def, def.EvalContextValue, "for_int"]);
// String evaluators
AddEvaluator("String", nil, ["$Constant$", ""], "$ConstantHelp$", "string_constant", [def, def.EvalConstant], { Value="" }, { Type="string", Name="$Value$" });
AddEvaluator("String", nil, ["$Constant$", ""], "$ConstantHelp$", "string_constant", [def, def.EvalStringConstant], { Value="" }, { Type="string", Name="$Value$", Translatable=true });
AddEvaluator("String", nil, ["$ValueToString$", ""], "$ValueToStringHelp$", "value_to_string", [def, def.EvalStr_ValueToString], { }, new Evaluator.Any { });
AddEvaluator("String", nil, "$Concat$", "$ConcatHelp$", "string_concat", [def, def.EvalStr_Concat], { Substrings=[] }, { Type="proplist", HideFullName=true, DescendPath="Substrings", Display="{{Substrings}}", EditorProps = {
Substrings = { Name="$Substrings$", Type="array", Elements=Evaluator.String }
@ -651,6 +651,11 @@ public func EvaluateCondition(proplist props, object action_object, object trigg
return result;
}
public func EvaluateString(proplist props, object context)
{
return EvaluateValue("String", props, context) ?? "";
}
private func EvaluatePosition(proplist props, object context)
{
// Execute position evaluator; fall back to position of action object
@ -703,6 +708,7 @@ private func FinishAction(proplist context)
}
private func EvalConstant(proplist props, proplist context) { return props.Value; }
private func EvalStringConstant(proplist props, proplist context) { return GetTranslatedString(props.Value); }
private func EvalContextValue(proplist props, proplist context, string name) { return context[name]; }
private func EvalObj_ActionObject(proplist props, proplist context) { return context.action_object; }
private func EvalObj_TriggeringObject(proplist props, proplist context) { return context.triggering_object; }
@ -1236,7 +1242,7 @@ private func EvalConditionalValue(proplist props, proplist context, eval_type)
private func EvalAct_Log(proplist props, proplist context)
{
Log(EvaluateValue("String", props.Message, context) ?? "");
Log(EvaluateString(props.Message, context));
}
private func EvalAct_Nop(proplist props, proplist context) {}
@ -1262,7 +1268,7 @@ private func EvalAct_SetVariable(proplist props, proplist context)
{
// Assign variable
var var_context = GetVariableContext(props.Context, context);
var var_name = StringToIdentifier(EvaluateValue("String", props.VariableName, context) ?? "");
var var_name = StringToIdentifier(EvaluateString(props.VariableName, context));
var value = EvaluateValue("Any", props.Value, context);
var_context[var_name] = value;
}
@ -1271,7 +1277,7 @@ private func EvalVariable(proplist props, proplist context, expected_type)
{
// Get variable value
var var_context = GetVariableContext(props.Context, context);
var var_name = StringToIdentifier(EvaluateValue("String", props.VariableName, context) ?? "");
var var_name = StringToIdentifier(EvaluateString(props.VariableName, context));
var value = var_context[var_name];
// Check type (except for C4V_Nil which means "Any" here)
var val_type = GetType(value);
@ -1321,7 +1327,7 @@ private func EvalScript(proplist props, proplist context)
{
script_context = Global;
}
var script = EvaluateValue("String", props.Script, context) ?? "";
var script = EvaluateString(props.Script, context);
return script_context->eval(script, true);
}
@ -1527,7 +1533,7 @@ private func EvalStr_ValueToString(proplist props, proplist context)
private func EvalStr_Concat(proplist props, proplist context)
{
var result="";
for (var s in props.Substrings) result = Format("%s%s", result, EvaluateValue("String", s, context) ?? "");
for (var s in props.Substrings) result = Format("%s%s", result, EvaluateString(s, context));
return result;
}

View File

@ -29,7 +29,7 @@ public func SetInscription(object dead)
}
// Set the inscription message directly.
public func SetInscriptionMessage(string message)
public func SetInscriptionMessage(message)
{
grave_inscription = message;
return true;
@ -44,13 +44,13 @@ public func GetInteractionMetaInfo(object clonk)
public func Interact(object clonk)
{
return PlayerMessage(clonk->GetController(), grave_inscription);
return PlayerMessage(clonk->GetController(), GetTranslatedString(grave_inscription));
}
public func Definition(def)
{
if (!def.EditorProps) def.EditorProps = {};
def.EditorProps.grave_inscription = { Name="$Inscription$", Type="string", EditorHelp="$InscriptionHelp$", Set="SetInscriptionMessage", Save="Inscription" };
def.EditorProps.grave_inscription = { Name="$Inscription$", Type="string", EditorHelp="$InscriptionHelp$", Set="SetInscriptionMessage", Save="Inscription", Translatable=true };
}