From fa5403dccd986022b2a849e2078f043c3225348a Mon Sep 17 00:00:00 2001 From: Markus Mittendrein Date: Mon, 2 Jan 2017 19:33:41 +0100 Subject: Initial --- Items.c4d/Sensors.c4d/Timer.c4d/Script.c | 112 +++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 Items.c4d/Sensors.c4d/Timer.c4d/Script.c (limited to 'Items.c4d/Sensors.c4d/Timer.c4d/Script.c') diff --git a/Items.c4d/Sensors.c4d/Timer.c4d/Script.c b/Items.c4d/Sensors.c4d/Timer.c4d/Script.c new file mode 100644 index 0000000..e41043a --- /dev/null +++ b/Items.c4d/Sensors.c4d/Timer.c4d/Script.c @@ -0,0 +1,112 @@ +#strict 2 +#include SN7I + +local interval, timer, setupUser, repeats, repeatCount; + +func Init() +{ + interval = 35; +} + +func ControlThrow(object caller) +{ + Toggle(); + return ClearCom(caller); +} + +func ControlThrowDouble() { return ControlThrow(...); } + +func Triggers() { return [["$Timeout$"]];} + +func Setup(object caller, int &menuIndex) +{ + setupUser = caller; + AddMenuItem(Format("$Interval$", interval), "SetTimerEntry", GetID(), caller, 0, menuIndex++, 0, C4MN_Add_ForceNoDesc); + AddMenuItem(Format("$Repeats$", (repeats && Format("%d", repeats)) || "$InfRepeats$"), "SetRepeatsEntry", GetID(), caller, 0, menuIndex++, 0, C4MN_Add_ForceNoDesc); + AddMenuItem((!timer && "$Start$") || "$Stop$", "ToggleActive", GetID(), caller, 0, menuIndex++, 0, C4MN_Add_ForceNoDesc); + AddMenuItem("$Test$", "Timeout", GetID(), caller, 0, menuIndex++, 0, C4MN_Add_ForceNoDesc); + return true; +} + +func SetTimerEntry(id id, int menuIndex, bool right) +{ + interval = Max(1, interval - (right * 2 - 1)); + _Setup(setupUser); + SelectMenuItem(menuIndex, setupUser); + if(timer) + { + RemoveTimer(timer); + timer = 0; + timer = AddTimer("Timeout", interval); + } +} + +func SetRepeatsEntry(id id, int menuIndex, bool right) +{ + repeats = Max(0, repeats - (right * 2 - 1)); + _Setup(setupUser); + SelectMenuItem(menuIndex, setupUser); +} + +func ToggleActive(id id, int menuIndex, bool right) +{ + Toggle(); + _Setup(setupUser); + SelectMenuItem(menuIndex, setupUser); +} + +func Toggle() +{ + if(timer) + { + Stop(); + } + else + { + Start(); + } +} + +func Stop() +{ + if(timer) + { + RemoveTimer(timer); + timer = 0; + SetAction("Idle"); + } +} + +func Start() +{ + if(!timer) + { + timer = AddTimer("Timeout", interval); + SetAction("On"); + repeatCount = 0; + } +} + +func Timeout(sym, int menuIndex) +{ + Trigger(0, this); + if(GetType(sym) == C4V_C4ID) + { + _Setup(setupUser); + SelectMenuItem(menuIndex, setupUser); + } + else if(!sym && repeats && ++repeatCount >= repeats) + { + Stop(); + } +} + +func SingleShot() +{ + ScheduleCall(this, "Timeout", interval); +} + +func SensorCallbacks() +{ + return [["$SingleShot$", "SingleShot"], ["$Start$", "Start"], ["$Stop$", "Stop"]]; +} -- cgit v1.2.3-54-g00ecf