summaryrefslogtreecommitdiffstats
path: root/Items.c4d/Sensors.c4d/Timer.c4d/Script.c
blob: e41043abac5912ce4ac45435f7eaf05a755b036b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
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"]];
}