From 7eee5c483291ae32512d60c3e8b81d59e88f3192 Mon Sep 17 00:00:00 2001 From: Sven Eberhardt Date: Sat, 30 Jul 2016 11:03:26 -0400 Subject: [PATCH] Add user action evaluator: Random integer --- .../Helpers.ocd/UserAction.ocd/Script.c | 16 ++++++++++++++++ .../Helpers.ocd/UserAction.ocd/StringTblDE.txt | 6 ++++++ .../Helpers.ocd/UserAction.ocd/StringTblUS.txt | 6 ++++++ 3 files changed, 28 insertions(+) diff --git a/planet/Objects.ocd/Helpers.ocd/UserAction.ocd/Script.c b/planet/Objects.ocd/Helpers.ocd/UserAction.ocd/Script.c index 87e077119..e7f02e583 100644 --- a/planet/Objects.ocd/Helpers.ocd/UserAction.ocd/Script.c +++ b/planet/Objects.ocd/Helpers.ocd/UserAction.ocd/Script.c @@ -100,6 +100,10 @@ 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 = { + Min = new Evaluator.Integer { Name="$Min$", EditorHelp="$RandomMinHelp$" }, + Max = new Evaluator.Integer { Name="$Max$", EditorHelp="$RandomMaxHelp$" } + } } ); // 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 }); @@ -195,6 +199,9 @@ public func EvaluateValue(string eval_type, proplist props, proplist context) } // Not on hold: Perform evaluation var cb = EvaluatorCallbacks[props.Function]; + /*var rval = cb[0]->Call(cb[1], props, context, cb[2]); + Log("%v <- EvaluateValue %v %v %v", rval, eval_type, props, context); + return rval;*/ return cb[0]->Call(cb[1], props, context, cb[2]); } @@ -448,6 +455,15 @@ private func GetDefaultCoordinates(object target_object) return value; } +private func EvalRandomInt(proplist props, proplist context) +{ + // Random value between min and max. Also allow them to be swapped. + var min = EvaluateValue("Integer", props.Min, context); + var max = EvaluateValue("Integer", props.Max, context); + var rmin = Min(min,max); + return Random(Max(max,min)-rmin) + rmin; +} + private func EvalPositionRelative(proplist props, proplist context) { // Return position relative to action_object diff --git a/planet/Objects.ocd/Helpers.ocd/UserAction.ocd/StringTblDE.txt b/planet/Objects.ocd/Helpers.ocd/UserAction.ocd/StringTblDE.txt index ce96a1203..c1e3bd591 100644 --- a/planet/Objects.ocd/Helpers.ocd/UserAction.ocd/StringTblDE.txt +++ b/planet/Objects.ocd/Helpers.ocd/UserAction.ocd/StringTblDE.txt @@ -109,3 +109,9 @@ OffYHelp=Vertikale Verschiebung. AddOffsets=Verschiebungen addieren AddOffsetsHelp=Addiert zwei Teilverschiebungen zu einer ganzen Verschiebung AddOffsetOffsetHelp=Teilverschiebung +Random=Zufallszahl +RandomIntHelp=Zufaelliger Wert zwischen einem Minimum und einem Maximum. +Min=Minimum +RandomMinHelp=Kleinstmoegliche Zahl +Max=Maximum +RandomMaxHelp=Groesstmoegliche Zahl diff --git a/planet/Objects.ocd/Helpers.ocd/UserAction.ocd/StringTblUS.txt b/planet/Objects.ocd/Helpers.ocd/UserAction.ocd/StringTblUS.txt index 7e1ca4965..b9804164a 100644 --- a/planet/Objects.ocd/Helpers.ocd/UserAction.ocd/StringTblUS.txt +++ b/planet/Objects.ocd/Helpers.ocd/UserAction.ocd/StringTblUS.txt @@ -109,3 +109,9 @@ OffYHelp=Vertical offset. 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 +Min=Minimum +RandomMinHelp=Smallest possible number +Max=Maximum +RandomMaxHelp=Largest possible number