forked from Mirrors/openclonk
Add user action comparison evaluators
parent
ea3603b991
commit
a01c6d4db9
|
@ -39,6 +39,7 @@ func Definition(def)
|
|||
Evaluator.PlayerList = { Name="$UserPlayerList$", Type="enum", OptionKey="Function", Options = [ { Name="$Noone$" } ] };
|
||||
Evaluator.Boolean = { Name="$UserBoolean$", Type="enum", OptionKey="Function", Options = [] };
|
||||
Evaluator.Integer = { Name="$UserInteger$", Type="enum", OptionKey="Function", Options = [ {Name="0"} ] };
|
||||
Evaluator.String = { Name="$UserString$", Type="enum", OptionKey="Function", Options = [] };
|
||||
Evaluator.Condition = { Name="$UserCondition$", Type="enum", OptionKey="Function", Options = [ { Name="$None$" } ] };
|
||||
Evaluator.Position = { Name="$UserPosition$", Type="enum", OptionKey="Function", Options = [ { Name="$Here$" } ] };
|
||||
Evaluator.Offset = { Name="$UserOffset$", Type="enum", OptionKey="Function", Options = [ { Name="$None$" } ] };
|
||||
|
@ -111,12 +112,58 @@ func Definition(def)
|
|||
AddEvaluator("PlayerList", nil, "$AllPlayers$", "$AllPlayersHelp$", "all_players", [def, def.EvalPlrList_All]);
|
||||
// Boolean (condition) evaluators
|
||||
AddEvaluator("Boolean", nil, ["$Constant$", ""], "$ConstantHelp$", "bool_constant", [def, def.EvalConstant], { Value=true }, { Type="bool", Name="$Value$" });
|
||||
AddEvaluator("Boolean", "$Comparison$", "$CompareInteger$", "$ComparisonHelp$", "compare_int", [def, def.EvalComparison, "Integer"], { }, { Type="proplist", Display="{{LeftOperand}}{{Operator}}{{RightOperand}}", ShowFullName=true, EditorProps = {
|
||||
LeftOperand = new Evaluator.Integer { Name="$LeftOperand$", EditorHelp="$LeftOperandHelp$" },
|
||||
Operator = { Type="enum", Name="$Operator$", EditorHelp="$OperatorHelp$", Options = [
|
||||
{ Name="==", EditorHelp="$EqualHelp$" },
|
||||
{ Name="!=", EditorHelp="$NotEqualHelp$", Value="ne" },
|
||||
{ Name="<", EditorHelp="$LessThanHelp$", Value="lt" },
|
||||
{ Name=">", EditorHelp="$GreaterThanHelp$", Value="gt" },
|
||||
{ Name="<=", EditorHelp="$LessOrEqualHelp$", Value="le" },
|
||||
{ Name=">=", EditorHelp="$GreaterOrEqualHelp$", Value="ge" }
|
||||
] },
|
||||
RightOperand = new Evaluator.Integer { Name="$RightOperand$", EditorHelp="$RightOperandHelp$" }
|
||||
} } );
|
||||
AddEvaluator("Boolean", "$Comparison$", "$CompareObject$", "$ComparisonHelp$", "compare_object", [def, def.EvalComparison, "Object"], { }, { Type="proplist", Display="{{LeftOperand}}{{Operator}}{{RightOperand}}", ShowFullName=true, EditorProps = {
|
||||
LeftOperand = new Evaluator.Object { Name="$LeftOperand$", EditorHelp="$LeftOperandHelp$" },
|
||||
Operator = { Type="enum", Name="$Operator$", EditorHelp="$OperatorHelp$", Options = [
|
||||
{ Name="==", EditorHelp="$EqualHelp$" },
|
||||
{ Name="!=", EditorHelp="$NotEqualHelp$", Value="ne" },
|
||||
] },
|
||||
RightOperand = new Evaluator.Object { Name="$RightOperand$", EditorHelp="$RightOperandHelp$" }
|
||||
} } );
|
||||
AddEvaluator("Boolean", "$Comparison$", "$CompareString$", "$ComparisonHelp$", "compare_string", [def, def.EvalComparison, "String"], { LeftOperand={Function="string_constant", Value=""}, RightOperand={Function="string_constant", Value=""} }, { Type="proplist", Display="{{LeftOperand}}{{Operator}}{{RightOperand}}", ShowFullName=true, EditorProps = {
|
||||
LeftOperand = new Evaluator.String { Name="$LeftOperand$", EditorHelp="$LeftOperandHelp$" },
|
||||
Operator = { Type="enum", Name="$Operator$", EditorHelp="$OperatorHelp$", Options = [
|
||||
{ Name="==", EditorHelp="$EqualHelp$" },
|
||||
{ Name="!=", EditorHelp="$NotEqualHelp$", Value="ne" },
|
||||
] },
|
||||
RightOperand = new Evaluator.String { Name="$RightOperand$", EditorHelp="$RightOperandHelp$" }
|
||||
} } );
|
||||
AddEvaluator("Boolean", "$Comparison$", "$CompareDefinition$", "$ComparisonHelp$", "compare_definition", [def, def.EvalComparison, "Definition"], { }, { Type="proplist", Display="{{LeftOperand}}{{Operator}}{{RightOperand}}", ShowFullName=true, EditorProps = {
|
||||
LeftOperand = new Evaluator.Definition { Name="$LeftOperand$", EditorHelp="$LeftOperandHelp$" },
|
||||
Operator = { Type="enum", Name="$Operator$", EditorHelp="$OperatorHelp$", Options = [
|
||||
{ Name="==", EditorHelp="$EqualHelp$" },
|
||||
{ Name="!=", EditorHelp="$NotEqualHelp$", Value="ne" },
|
||||
] },
|
||||
RightOperand = new Evaluator.Definition { Name="$RightOperand$", EditorHelp="$RightOperandHelp$" }
|
||||
} } );
|
||||
AddEvaluator("Boolean", "$Comparison$", "$ComparePlayer$", "$ComparisonHelp$", "compare_player", [def, def.EvalComparison, "Player"], { }, { Type="proplist", Display="{{LeftOperand}}{{Operator}}{{RightOperand}}", ShowFullName=true, EditorProps = {
|
||||
LeftOperand = new Evaluator.Player { Name="$LeftOperand$", EditorHelp="$LeftOperandHelp$" },
|
||||
Operator = { Type="enum", Name="$Operator$", EditorHelp="$OperatorHelp$", Options = [
|
||||
{ Name="==", EditorHelp="$EqualHelp$" },
|
||||
{ Name="!=", EditorHelp="$NotEqualHelp$", Value="ne" },
|
||||
] },
|
||||
RightOperand = new Evaluator.Player { Name="$RightOperand$", EditorHelp="$RightOperandHelp$" }
|
||||
} } );
|
||||
// Integer evaluators
|
||||
AddEvaluator("Integer", nil, ["$Constant$", ""], "$ConstantHelp$", "int_constant", [def, def.EvalConstant], { Value=0 }, { Type="int", Name="$Value$" });
|
||||
AddEvaluator("Integer", nil, "$Random$", "$RandomIntHelp$", "int_random", [def, def.EvalIntRandom], { Min={Function="int_constant", Value=0}, Max={Function="int_constant", Value=99} }, { Type="proplist", Display="Rnd({{Min}}..{{Max}})", EditorProps = {
|
||||
Min = new Evaluator.Integer { Name="$Min$", EditorHelp="$RandomMinHelp$" },
|
||||
Max = new Evaluator.Integer { Name="$Max$", EditorHelp="$RandomMaxHelp$" }
|
||||
} } );
|
||||
// String evaluators
|
||||
AddEvaluator("String", nil, ["$Constant$", ""], "$ConstantHelp$", "string_constant", [def, def.EvalConstant], { Value="" }, { Type="string", Name="$Value$" });
|
||||
// Position evaluators
|
||||
AddEvaluator("Position", nil, ["$ConstantPositionAbsolute$", ""], "$ConstantPositionAbsoluteHelp$", "position_constant", [def, def.EvalConstant], def.GetDefaultPosition, { Type="point", Name="$Position$", Relative=false, Color=0xff2000 });
|
||||
AddEvaluator("Position", nil, ["$ConstantPositionRelative$", "+"], "$ConstantPositionRelativeHelp$", "position_constant_rel", [def, def.EvalPositionRelative], { Value=[0,0] }, { Type="point", Name="$Position$", Relative=true, Color=0xff0050 });
|
||||
|
@ -350,6 +397,27 @@ private func EvalPlrList_All(proplist props, proplist context, fn)
|
|||
return result;
|
||||
}
|
||||
|
||||
private func EvalComparison(proplist props, proplist context, data_type)
|
||||
{
|
||||
var left = EvaluateValue(data_type, props.LeftOperand, context);
|
||||
var right = EvaluateValue(data_type, props.RightOperand, context);
|
||||
if (!left) left = nil; // 0 ==nil
|
||||
if (!right) right = nil; // 0 == nil
|
||||
var op = props.Operator;
|
||||
if (!op)
|
||||
return left == right;
|
||||
else if (op == "ne")
|
||||
return left != right;
|
||||
else if (op == "lt")
|
||||
return left < right;
|
||||
else if (op == "gt")
|
||||
return left > right;
|
||||
else if (op == "le")
|
||||
return left <= right;
|
||||
else if (op == "ge")
|
||||
return left >= right;
|
||||
}
|
||||
|
||||
private func EvalAct_Sequence(proplist props, proplist context)
|
||||
{
|
||||
// Sequence execution: Iterate over actions until one action puts the context on hold
|
||||
|
|
|
@ -3,6 +3,7 @@ UserObject=Objekt
|
|||
UserPlayer=Spieler
|
||||
UserPlayerList=Spieler
|
||||
UserInteger=Zahl
|
||||
UserString=Text
|
||||
UserBoolean=Bedingung
|
||||
UserCondition=Bedingung
|
||||
UserDefinition=Objekttyp
|
||||
|
@ -153,3 +154,22 @@ CastObjectsMeanAngleHelp=Mittlerer Winkel in Grad, in dem Objekte gestreut werde
|
|||
AngleDeviation=Winkelstreuuung
|
||||
CastObjectsAngleDeviationHelp=Winkelbereich, in dem Objekte geschleudert werden. Mit Winkelbereich 360 koennen Objekte in alle Richtungen fliegen.
|
||||
CastObjectsOwnerHelp=Besitzer der neu erstellten Objekte.
|
||||
Comparison=Vergleiche
|
||||
CompareInteger=Vergleiche Zahlen
|
||||
ComparisonHelp=Vergleiche zwei Werte mit Operator
|
||||
LeftOperand=Linker Operand
|
||||
LeftOperandHelp=Wert links vom Vergleichsoperator
|
||||
Operator=Operator
|
||||
OperatorHelp=Vergleichsoperation
|
||||
EqualHelp=Wahr, wenn beide Operanden gleich sind
|
||||
NotEqualHelp=Wahr, wenn beide Operanden ungleich sind
|
||||
LessThanHelp=Wahr, wenn der linke Operand kleiner als der rechte Operand ist
|
||||
GreaterThanHelp=Wahr, wenn der linke Operand groesser als der rechte Operand ist
|
||||
LessOrEqualHelp=Wahr, wenn der linke Operand kleiner oder gleich dem rechten Operanden ist
|
||||
GreaterOrEqualHelp=Wahr, wenn der linke Operand groesser oder gleich dem rechten Operanden ist
|
||||
RightOperand=Rechter Operand
|
||||
RightOperandHelp=Wert rechts vom Vergleichsoperator
|
||||
CompareObject=Vergleiche Objekte
|
||||
CompareString=Vergleiche Texte
|
||||
CompareDefinition=Vergleiche Objekttypen
|
||||
ComparePlayer=Vergleiche Spieler
|
||||
|
|
|
@ -3,6 +3,7 @@ UserObject=Object
|
|||
UserPlayer=Player
|
||||
UserPlayerList=Players
|
||||
UserInteger=Integer
|
||||
UserString=Text
|
||||
UserBoolean=Condition
|
||||
UserCondition=Condition
|
||||
UserDefinition=Object type
|
||||
|
@ -153,3 +154,22 @@ CastObjectsMeanAngleHelp=Mean angle in degrees at which objects are cast. 0 is u
|
|||
AngleDeviation=Angle deviation
|
||||
CastObjectsAngleDeviationHelp=Angle range in which objects are cast. Set to 360 to cast in all directions.
|
||||
CastObjectsOwnerHelp=Ownser of newly created objects.
|
||||
Comparison=Comparison
|
||||
CompareInteger=Compare numbers
|
||||
ComparisonHelp=Compares two values with an operator.
|
||||
LeftOperand=Left operand
|
||||
LeftOperandHelp=Value left of the comparison operator.
|
||||
Operator=Operator
|
||||
OperatorHelp=Comparison operator
|
||||
EqualHelp=True if both operands are equal.
|
||||
NotEqualHelp=True if operands are not equal.
|
||||
LessThanHelp=True if the left operand is smaller than the right operand.
|
||||
GreaterThanHelp=True if the left operand is larger than the right operand.
|
||||
LessOrEqualHelp=True if the left operand is smaller than or equal to the right operand.
|
||||
GreaterOrEqualHelp=True if the left operand is smaller than or equal to the right operand.
|
||||
RightOperand=Right operand
|
||||
RightOperandHelp=Value right of the comparison operator.
|
||||
CompareObject=Compare objects
|
||||
CompareString=Compare texts
|
||||
CompareDefinition=Compare object types
|
||||
ComparePlayer=Compare players
|
||||
|
|
Loading…
Reference in New Issue