Add user action evaluators: Player wealth, clonk energy, object mass, object speed

qteditor
Sven Eberhardt 2016-07-31 22:23:52 -04:00
parent bf35f92228
commit 2f4ffa0a0c
3 changed files with 55 additions and 2 deletions

View File

@ -262,6 +262,10 @@ func Definition(def)
} } );
AddEvaluator("Integer", nil, "$NumberOfObjects$", "$NumberOfObjectsHelp$", "object_count", [def, def.EvalCount, "ObjectList"], { }, new Evaluator.ObjectList { }, "Array");
AddEvaluator("Integer", nil, "$NumberOfPlayers$", "$NumberOfPlayersHelp$", "player_count", [def, def.EvalCount, "PlayerList"], { }, new Evaluator.PlayerList { }, "Array");
AddEvaluator("Integer", nil, "$PlayerWealth$", "$PlayerWealthHelp$", "player_wealth", [def, def.EvalInt_Wealth], { }, new Evaluator.Player { }, "Player");
AddEvaluator("Integer", nil, "$ClonkEnergy$", "$ClonkEnergyHelp$", "clonk_energy", [def, def.EvalInt_ClonkHealth], { }, GetObjectEvaluator("IsClonk", "$Clonk$"), "Clonk");
AddEvaluator("Integer", nil, "$ObjectMass$", "$ObjectMassHelp$", "object_mass", [def, def.EvalInt_ObjectMass], { }, new Evaluator.Object { }, "Object");
AddEvaluator("Integer", nil, "$ObjectSpeed$", "$ObjectSpeedHelp$", "object_speed", [def, def.EvalInt_ObjectSpeed], { }, new Evaluator.Object { }, "Object");
// String evaluators
AddEvaluator("String", nil, ["$Constant$", ""], "$ConstantHelp$", "string_constant", [def, def.EvalConstant], { Value="" }, { Type="string", Name="$Value$" });
AddEvaluator("String", nil, ["$ValueToString$", ""], "$ValueToStringHelp$", "value_to_string", [def, def.EvalStr_ValueToString], { }, new Evaluator.Any { });
@ -489,6 +493,14 @@ private func EvaluateOffset(proplist props, object context)
return EvaluateValue("Offset", props, context) ?? [0,0];
}
private func EvaluatePlayer(proplist props, object context)
{
// Execute player evaluator; nil means NO_OWNER
var plr = EvaluateValue("Player", props, context);
if (!GetType(plr)) plr = NO_OWNER;
return plr;
}
private func ResumeAction(proplist context, proplist resume_props)
{
//Log("ResumeAction %v %v", context, resume_props);
@ -722,7 +734,7 @@ private func EvalAct_CreateObject(proplist props, proplist context)
// Create a new object
var create_id = EvaluateValue("Definition", props.ID, context);
if (!create_id) return;
var owner = EvaluateValue("Player", props.Owner, context);
var owner = EvaluatePlayer(props.Owner, context);
var container = EvaluateValue("Object", props.Container, context);
var obj;
if (container)
@ -754,7 +766,7 @@ private func EvalAct_CastObjects(proplist props, proplist context)
// Cast objects in multiple directions
var create_id = EvaluateValue("Definition", props.ID, context);
if (!create_id) return;
var owner = EvaluateValue("Player", props.Owner, context);
var owner = EvaluatePlayer(props.Owner, context);
var amount = EvaluateValue("Integer", props.Amount, context);
var speed = EvaluateValue("Integer", props.Speed, context);
var mean_angle = EvaluateValue("Integer", props.MeanAngle, context);
@ -1013,6 +1025,29 @@ private func EvalInt_Distance(proplist props, proplist context)
return Distance(pA[0], pA[1], pB[0], pB[1]);
}
private func EvalInt_Wealth(proplist props, proplist context) { return GetWealth(EvaluatePlayer(props.Player, context)); }
private func EvalInt_ClonkHealth(proplist props, proplist context)
{
var clonk = EvaluateValue("Object", props.Clonk, context);
if (!clonk) return 0;
return clonk->GetEnergy();
}
private func EvalInt_ObjectMass(proplist props, proplist context)
{
var obj = EvaluateValue("Object", props.Object, context);
if (!obj) return 0;
return obj->GetMass();
}
private func EvalInt_ObjectSpeed(proplist props, proplist context)
{
var obj = EvaluateValue("Object", props.Object, context);
if (!obj) return 0;
return obj->GetSpeed();
}
private func EvalStr_ValueToString(proplist props, proplist context)
{
return Format("%v", EvaluateValue("Any", props.Value, context));

View File

@ -256,3 +256,12 @@ Div=Division
DivHelp=Teilt den linken Operanden durch den rechten Operanden. Das Ergebnis wird zur Null gerundet.
Mod=Modulo
ModHelp=Teilt den linken Operanden durch den rechten Operanden und gibt den Rest der Division zurueck.
PlayerWealth=Spieler Clunker
PlayerWealthHelp=Vermoegen eines Spielers (Geld, Gold, Clunker...).
ClonkEnergy=Clonk Energie
ClonkEnergyHelp=Lebenspunkte des Clonks.
Clonk=Clonk
ObjectMass=Objektmasse
ObjectMassHelp=Gewicht des angegebenen Objektes.
ObjectSpeed=Objektgeschwindigkeit
ObjectSpeedHelp=Geschwindigkeit des angegebenen Objektes in 1/10 Pixeln pro Frame.

View File

@ -256,3 +256,12 @@ Div=Division
DivHelp=Divides the left operand by the right operand. The result is rounded towards zero.
Mod=Modulo
ModHelp=Returns the remainder of the division of the left operand by the right operand.
PlayerWealth=Player wealth
PlayerWealthHelp=Wealth of a player (Money, gold, clunkers...).
ClonkEnergy=Clonk energy
ClonkEnergyHelp=Life points of the clonk.
Clonk=Clonk
ObjectMass=Object mass
ObjectMassHelp=Weight of the specified object.
ObjectSpeed=Object speed
ObjectSpeedHelp=Velocity of the specified object in 1/10th pixels per frame.