forked from Mirrors/openclonk
Add user action evaluators: Offsets and coordinate positions
parent
7c094c3bf1
commit
898aff0cc8
|
@ -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 */
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
Loading…
Reference in New Issue