Add user action evaluators: Offsets and coordinate positions

qteditor
Sven Eberhardt 2016-07-30 02:06:54 -04:00
parent 7c094c3bf1
commit 898aff0cc8
3 changed files with 92 additions and 3 deletions

View File

@ -35,9 +35,10 @@ func Definition(def)
Evaluator.Player = { Name="$UserPlayer$", Type="enum", OptionKey="Function", Options = [ { Name="$Noone$" } ] };
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 = [] };
Evaluator.Integer = { Name="$UserInteger$", Type="enum", OptionKey="Function", Options = [ {Name="0"} ] };
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$" } ] };
// Action evaluators
EvaluatorCallbacks = {};
EvaluatorDefs = {};
@ -102,6 +103,24 @@ func Definition(def)
// 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 });
AddEvaluator("Position", nil, "$Coordinates$", "$CoordinatesHelp$", "position_coordinates", [def, def.EvalCoordinates], def.GetDefaultCoordinates, { Type="proplist", Display="({{X}},{{Y}})", EditorProps = {
X = new Evaluator.Integer { Name="X", EditorHelp="$PosXHelp$" },
Y = new Evaluator.Integer { Name="Y", EditorHelp="$PosYHelp$" }
} } );
AddEvaluator("Position", nil, "$PositionOffset$", "$PositionOffsetHelp$", "position_offset", [def, def.EvalPositionOffset], { }, { Type="proplist", Display="{{Position}}+{{Offset}}", EditorProps = {
Position = new Evaluator.Position { EditorHelp="$PositionOffsetPositionHelp$" },
Offset = new Evaluator.Offset { EditorHelp="$PositionOffsetOffsetHelp$" }
} } );
// Offset evaluators
AddEvaluator("Offset", nil, "$ConstantOffsetRelative$", "$ConstantOffsetRelativeHelp$", "offset_constant", [def, def.EvalConstant], { Value=[0,0] }, { Type="point", Name="$Position$", Relative=true, Color=0xff30ff });
AddEvaluator("Offset", nil, "$Coordinates$", "$CoordinatesHelp$", "offset_coordinates", [def, def.EvalCoordinates], { Value={X=0,Y=0} }, { Type="proplist", Display="({{X}},{{Y}})", EditorProps = {
X = new Evaluator.Integer { Name="X", EditorHelp="$OffXHelp$" },
Y = new Evaluator.Integer { Name="Y", EditorHelp="$OffYHelp$" },
} } );
AddEvaluator("Offset", nil, "$AddOffsets$", "$AddOffsetsHelp$", "add_offsets", [def, def.EvalOffsetsAdd], { }, { Type="proplist", Display="{{Offset1}}+{{Offset2}}", EditorProps = {
Offset1 = new Evaluator.Offset1 { EditorHelp="$AddOffsetOffsetHelp$" },
Offset2 = new Evaluator.Offset2 { EditorHelp="$AddOffsetOffsetHelp$" }
} } );
// User action editor props
Prop = Evaluator.Action;
PropProgressMode = { Name="$UserActionProgressMode$", EditorHelp="$UserActionProgressModeHelp$", Type="enum", Options = [ { Name="$Session$", Value="session" }, { Name="$Player$", Value="player" }, { Name="$Global$" } ] };
@ -241,6 +260,12 @@ private func EvaluatePosition(proplist props, object context)
return position;
}
private func EvaluateOffset(proplist props, object context)
{
// Execute offset evaluator; fall back to [0, 0]
return EvaluateValue("Offset", props, context) ?? [0,0];
}
private func ResumeAction(proplist context, proplist resume_props)
{
//Log("ResumeAction %v %v", context, resume_props);
@ -411,6 +436,18 @@ private func GetDefaultPosition(object target_object)
return { Function="position_constant", Value=value };
}
private func GetDefaultCoordinates(object target_object)
{
// Default position for constant absolute position evaluator: Use selected object position
var value;
if (target_object)
value = {X={Function="int_constant", Value=target_object->GetX()}, Y={Function="int_constant", Value=target_object->GetY()}};
else
value = {X=0, Y=0};
value.Function="position_coordinates";
return value;
}
private func EvalPositionRelative(proplist props, proplist context)
{
// Return position relative to action_object
@ -420,6 +457,26 @@ private func EvalPositionRelative(proplist props, proplist context)
return props.Value;
}
private func EvalCoordinates(proplist props, proplist context)
{
// Coordinate evaluation: Make array [X, Y]
return [EvaluateValue("Integer", props.X, context), EvaluateValue("Integer", props.Y, context)];
}
private func EvalPositionOffset(proplist props, proplist context)
{
var p = EvaluatePosition(props.Position, context);
var o = EvaluateOffset(props.Offset, context);
return [p[0]+o[0], p[1]+o[1]];
}
private func EvalOffsetsAdd(proplist props, proplist context)
{
var o1 = EvaluateOffset(props.Offset1, context);
var o2 = EvaluateOffset(props.Offset2, context);
return [o1[0]+o2[0], o1[1]+o2[1]];
}
/* Context instance */

View File

@ -7,6 +7,7 @@ UserBoolean=Bedingung
UserCondition=Bedingung
UserDefinition=Objekttyp
UserPosition=Position
UserOffset=Verschiebung
None=Nichts
Noone=Niemand
AllPlayers=Alle Spieler
@ -90,6 +91,21 @@ EjectContentsNo=Inhalt entfernen
EjectContentsYes=Inhalt auswerfen
Position=Position
ConstantPositionAbsolute=Konstante (absolut)
ConstantPositionAbsoluteHelp=Legt eine Position in absoluten Landschaftskoordinaten fest. Die Position kann mit einem roten Marker im Sichtfenster verschiben werden.
ConstantPositionAbsoluteHelp=Legt eine Position in absoluten Landschaftskoordinaten fest. Die Position kann mit einem roten Marker im Sichtfenster verschoben werden.
ConstantPositionRelative=Konstante (relativ)
ConstantPositionRelativeHelp=Legt eine Position relativ zum bearbeiteten Objekt fest. Die Position kann mit einem roten Marker im Sichtfenster verschiben werden.
ConstantPositionRelativeHelp=Legt eine Position relativ zum bearbeiteten Objekt fest. Die Position kann mit einem roten Marker im Sichtfenster verschoben werden.
Coordinates=Koordinaten
CoordinatesHelp=Positionsangabe ueber X (horizontale) und Y (vertikale) Koordinaten.
PosXHelp=Horizontale Koordinate relativ zur linken Kante der Landschaft.
PosYHelp=Vertikale Koordinate relativ zur oberen Kante der Landschaft.
PositionOffset=Position+Offset
PositionOffsetHelp=Berechnet die Position aus Position plus Verschiebung.
PositionOffsetPositionHelp=Position von der verschoben wird.
PositionOffsetOffsetHelp=Verschiebung von der angegebenen Position.
ConstantOffsetRelative=Konstante Verschiebung
ConstantOffsetRelativeHelp=Legt eine konstante Verschiebung fest. Die Verschiebung kann mit einem pinken Marker im Sichtfenster bearbeitet werden.
OffXHelp=Horizontale Verschiebung.
OffYHelp=Vertikale Verschiebung.
AddOffsets=Verschiebungen addieren
AddOffsetsHelp=Addiert zwei Teilverschiebungen zu einer ganzen Verschiebung
AddOffsetOffsetHelp=Teilverschiebung

View File

@ -7,6 +7,7 @@ UserBoolean=Condition
UserCondition=Condition
UserDefinition=Object type
UserPosition=Position
UserOffset=Offset
None=Nothing
Noone=Noone
AllPlayers=All players
@ -93,3 +94,18 @@ ConstantPositionAbsolute=Constant (absolut)
ConstantPositionAbsoluteHelp=Defines a position in absolute landscape coordinates. The position can be adjusted using a red marker in the viewport.
ConstantPositionRelative=Constant (relativ)
ConstantPositionRelativeHelp=Defines a position relative to the edited object. The position can be adjusted using a red marker in the viewport.
Coordinates=Coordinates
CoordinatesHelp=Position defined via X (horizontal) and Y (vertical) coordinates.
PosXHelp=Horizontal coordinate relative to the left border of the landscape.
PosYHelp=Vertical coordinate relative to the top border of the landscape.
PositionOffset=Position+Offset
PositionOffsetHelp=Calculates a position as a base position plus an offset.
PositionOffsetPositionHelp=Base position to which the offset is applied.
PositionOffsetOffsetHelp=Offset to ve applied.
ConstantOffsetRelative=Constant offset
ConstantOffsetRelativeHelp=Defines a constant offset. The offset can be edited using a pink marker in the viewport.
OffXHelp=Horizontal offset.
OffYHelp=Vertical offset.
AddOffsets=Add offsets
AddOffsetsHelp=Adds two partial offsets to one big offset.
AddOffsetOffsetHelp=Partial offset.