forked from Mirrors/openclonk
Add user action evaluators: Random positions and offsets in rectangle or circle
parent
b1096786d8
commit
9522fb7e42
|
@ -100,7 +100,7 @@ func Definition(def)
|
|||
AddEvaluator("Boolean", nil, "$Constant$", "$ConstantHelp$", "bool_constant", [def, def.EvalConstant], { Value=true }, { Type="bool", Name="$Value$" });
|
||||
// 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.EvalRandomInt], { Min={Function="int_constant", Value=0}, Max={Function="int_constant", Value=99} }, { Type="proplist", Display="{{Min}}-{{Max}}", EditorProps = {
|
||||
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="{{Min}}-{{Max}}", EditorProps = {
|
||||
Min = new Evaluator.Integer { Name="$Min$", EditorHelp="$RandomMinHelp$" },
|
||||
Max = new Evaluator.Integer { Name="$Max$", EditorHelp="$RandomMaxHelp$" }
|
||||
} } );
|
||||
|
@ -116,6 +116,10 @@ func Definition(def)
|
|||
Offset = new Evaluator.Offset { EditorHelp="$PositionOffsetOffsetHelp$" }
|
||||
} } );
|
||||
AddEvaluator("Position", nil, "$ObjectPosition$", "$ObjectPositionHelp$", "object_position", [def, def.EvalPositionObject], { Object={Function="triggering_object"} }, new Evaluator.Object { EditorHelp="$ObjectPositionObjectHelp$" }, "Object");
|
||||
AddEvaluator("Position", "$RandomPosition$", "$RandomRectAbs$", "$RandomRectAbsHelp$", "random_pos_rect_abs", [def, def.EvalPos_RandomRect, false], def.GetDefaultRect, { Type="rect", Name="$Rectangle$", Relative=false, Color=0xffff00 }, "Area");
|
||||
AddEvaluator("Position", "$RandomPosition$", "$RandomRectRel$", "$RandomRectRelHelp$", "random_pos_rect_rel", [def, def.EvalPos_RandomRect, true], { Area=[-30,-30,60,60] }, { Type="rect", Name="$Rectangle$", Relative=true, Color=0x00ffff }, "Area");
|
||||
AddEvaluator("Position", "$RandomPosition$", "$RandomCircleAbs$", "$RandomCircleAbsHelp$", "random_pos_circle_abs", [def, def.EvalPos_RandomCircle, false], def.GetDefaultCircle, { Type="circle", Name="$Circle$", Relative=false, CanMoveCenter=true, Color=0xff00ff }, "Area");
|
||||
AddEvaluator("Position", "$RandomPosition$", "$RandomCircleRel$", "$RandomCircleRelHelp$", "random_pos_circle_rel", [def, def.EvalPos_RandomCircle, true], { Area=[50,0,0] }, { Type="circle", Name="$Circle$", Relative=true, CanMoveCenter=true, Color=0xa000a0 }, "Area");
|
||||
// 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 = {
|
||||
|
@ -130,6 +134,8 @@ func Definition(def)
|
|||
PositionA = new Evaluator.Position { Name="$PositionA$", EditorHelp="$PositionAHelp$" },
|
||||
PositionB = new Evaluator.Position { Name="$PositionB$", EditorHelp="$PositionBHelp$" }
|
||||
} } );
|
||||
AddEvaluator("Offset", nil, "$RandomOffRectRel$", "$RandomRectRelHelp$", "random_off_rect_rel", [def, def.EvalPos_RandomRect, "rect", false], { Area=[-30,-30,60,60] }, { Type="rect", Name="$Rectangle$", Relative=true, Color=0x00ffff }, "Area");
|
||||
AddEvaluator("Offset", nil, "$RandomOffCircleRel$", "$RandomCircleRelHelp$", "random_off_circle_rel", [def, def.EvalPos_RandomCircle, "circle", false], { Area=[0,0,50] }, { Type="circle", Name="$Circle$", Relative=true, CanMoveCenter=true, Color=0xa000a0 }, "Area");
|
||||
// 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$" } ] };
|
||||
|
@ -460,7 +466,23 @@ private func GetDefaultCoordinates(object target_object)
|
|||
return value;
|
||||
}
|
||||
|
||||
private func EvalRandomInt(proplist props, proplist context)
|
||||
private func GetDefaultRect(object target_object)
|
||||
{
|
||||
// Default rectangle around target object
|
||||
var r;
|
||||
if (target_object) r = [target_object->GetX()-30, target_object->GetY()-30, 60, 60]; else r = [100,100,100,100];
|
||||
return { Function="random_pos_rect_abs", Area=r };
|
||||
}
|
||||
|
||||
private func GetDefaultCircle(object target_object)
|
||||
{
|
||||
// Default circle around target object
|
||||
var r;
|
||||
if (target_object) r = [50, target_object->GetX(), target_object->GetY()]; else r = [50,100,100];
|
||||
return { Function="random_pos_circle_abs", Area=r };
|
||||
}
|
||||
|
||||
private func EvalIntRandom(proplist props, proplist context)
|
||||
{
|
||||
// Random value between min and max. Also allow them to be swapped.
|
||||
var min = EvaluateValue("Integer", props.Min, context);
|
||||
|
@ -498,6 +520,38 @@ private func EvalPositionObject(proplist props, proplist context)
|
|||
return [0,0]; // undefined object: Position is 0/0 default
|
||||
}
|
||||
|
||||
private func EvalPos_RandomRect(proplist props, proplist context, bool relative)
|
||||
{
|
||||
// Constant random distribution in rectangle
|
||||
var a = props.Area;
|
||||
var rval = [a[0] + Random(a[2]), a[1] + Random(a[3])];
|
||||
// Apply relative offset
|
||||
if (relative && context.action_object)
|
||||
{
|
||||
rval[0] += context.action_object->GetX();
|
||||
rval[1] += context.action_object->GetY();
|
||||
}
|
||||
return rval;
|
||||
}
|
||||
|
||||
private func EvalPos_RandomCircle(proplist props, proplist context, bool relative)
|
||||
{
|
||||
// Constant random distribution in circle
|
||||
var a = props.Area;
|
||||
var r = a[0];
|
||||
r = Sqrt(Random(r*r));
|
||||
var ang = Random(360);
|
||||
var x = Sin(ang, r), y = Cos(ang, r);
|
||||
var rval = [a[1]+x, a[2]+y];
|
||||
// Apply relative offset
|
||||
if (relative && context.action_object)
|
||||
{
|
||||
rval[0] += context.action_object->GetX();
|
||||
rval[1] += context.action_object->GetY();
|
||||
}
|
||||
return rval;
|
||||
}
|
||||
|
||||
private func EvalOffsetAdd(proplist props, proplist context)
|
||||
{
|
||||
var o1 = EvaluateOffset(props.Offset1, context);
|
||||
|
|
|
@ -110,7 +110,7 @@ AddOffsets=Verschiebungen addieren
|
|||
AddOffsetsHelp=Addiert zwei Teilverschiebungen zu einer ganzen Verschiebung
|
||||
AddOffsetOffsetHelp=Teilverschiebung
|
||||
Random=Zufallszahl
|
||||
RandomIntHelp=Zufaelliger Wert zwischen einem Minimum und einem Maximum.
|
||||
RandomIntHelp=Zufaelliger Wert zwischen einem Minimum (inklusive) und einem Maximum (inklusive).
|
||||
Min=Minimum
|
||||
RandomMinHelp=Kleinstmoegliche Zahl
|
||||
Max=Maximum
|
||||
|
@ -124,3 +124,18 @@ PositionA=Position A
|
|||
PositionAHelp=Startposition
|
||||
PositionB=Position B
|
||||
PositionBHelp=Endposition
|
||||
RandomPosition=Zufaellige Position...
|
||||
RandomRectAbs=...im Rechteck (absolut)
|
||||
RandomRectAbsHelp=Waehlt einen zufaelligen Punkt in einem Rechteck (gelb). Das Rechteck ist relativ zur Landschaft platziert.
|
||||
Rectangle=Rechteck
|
||||
RandomRectRel=...im Rechteck (relativ)
|
||||
RandomRectRelHelp=Waehlt einen zufaelligen Punkt in einem Rechteck (tuerkis). Das Rechteck ist relativ zum aufrufenden Objekt platziert.
|
||||
RandomCircleAbs=...im Kreis (absolut)
|
||||
RandomCircleAbsHelp=Waehlt einen zufaelligen Punkt in einem Kreis (lila). Der Kreis ist relativ zur Landschaft platziert.
|
||||
Circle=Kreis
|
||||
RandomCircleRel=...im Kreis (relativ)
|
||||
RandomCircleRelHelp=Waehlt einen zufaelligen Punkt in einem Kreis (lila). Der Kreis ist relativ zum aufrufenden Objekt platziert.
|
||||
RandomOffRectRel=Zufaellig im Rechteck
|
||||
RandomRectRelHelp=Waehlt eine zufaellige Verschiebung aus einem Rechteck (tuerkis).
|
||||
RandomOffCircleRel=Zufaellig im Kreis
|
||||
RandomCircleRelHelp=Waehlt eine zufaellige Verschiebung aus einem Kreis (lila).
|
||||
|
|
|
@ -110,7 +110,7 @@ AddOffsets=Add offsets
|
|||
AddOffsetsHelp=Adds two partial offsets to one big offset.
|
||||
AddOffsetOffsetHelp=Partial offset.
|
||||
Random=Random number
|
||||
RandomIntHelp=Random value between a minimum and a maximum
|
||||
RandomIntHelp=Random value between a minimum (inclusive) and a maximum (inclusive).
|
||||
Min=Minimum
|
||||
RandomMinHelp=Smallest possible number
|
||||
Max=Maximum
|
||||
|
@ -124,3 +124,18 @@ PositionA=Position A
|
|||
PositionAHelp=Start position
|
||||
PositionB=Position B
|
||||
PositionBHelp=End position
|
||||
RandomPosition=Random position...
|
||||
RandomRectAbs=...in a rectangle (absolute)
|
||||
RandomRectAbsHelp=Picks a random point within a square (yellow region). The region is placed relative to the landscape.
|
||||
Rectangle=Rectangle
|
||||
RandomRectRel=...in a rectangle (relative)
|
||||
RandomRectRelHelp=Picks a random point within a square (teal region). The region is placed relative to the selected object.
|
||||
RandomCircleAbs=...in a circle (absolute)
|
||||
RandomCircleAbsHelp=Picks a random point within a circle (purple region). The region is placed relative to the landscape.
|
||||
Circle=Circle
|
||||
RandomCircleRel=...in a circle (relative)
|
||||
RandomCircleRelHelp=Picks a random point within a circle (purple region). The region is placed relative to the selected object.
|
||||
RandomOffRectRel=Random in rectangle
|
||||
RandomRectRelHelp=Picks a random offset within a square (teal region).
|
||||
RandomOffCircleRel=Random in circle
|
||||
RandomCircleRelHelp=Picks a random offset within a square (purple region).
|
||||
|
|
Loading…
Reference in New Issue