Add user action comparison evaluators

qteditor
Sven Eberhardt 2016-07-30 17:39:15 -04:00
parent ea3603b991
commit a01c6d4db9
3 changed files with 108 additions and 0 deletions

View File

@ -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

View File

@ -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

View File

@ -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