1// This PAWN script is generated by WOWCube SDK project wizard
2
3#define G2D
4
5#pragma warning disable 203
6#pragma warning disable 213
7#pragma warning disable 229
8
9// Includes
10// -----------------------------
11
12#include "wowcore.inc"
13#include "topology.inc"
14#include "graphics.inc"
15#include "motion_sensor.inc"
16#include "math.inc"
17#include "log.inc"
18
19// Application defines
20// -----------------------------
21#define TEXT_SIZE 14
22
23// Application constants
24// ------------------------------
25new const Colors[.white, .black, .red, .green, .blue] =
26[
27 0xFFFFFFFF,
28 0xFF000000,
29 0xFFFF0000,
30 0xFF00FF00,
31 0xFF0000FF,
32];
33
34const e_Commands:
35{
36 cmd_paintGreen = 0,
37 cmd_paintBlue = 1,
38 cmd_paintRed = 2
39}
40
41// Application variables
42// -----------------------------
43new Application[bool:.received,.counter,.currentColor];
44
45
46// WOWCube application callbacks
47// -----------------------------
48
49//Applicaton initialization callback. Called once when CUB application starts
50public ON_Init(id, size, const pkt[])
51{
52 LOG_i("\n");
53 LOG_i("*** WOWCube SDK Example \"Network Messaging\" ***\n\n");
54
55 LOG_i("Cubeapp is initializing...\n");
56 LOG_i("Cubeapp is started on module %d\n",SELF_ID);
57
58 Application.received = false;
59 Application.counter = 0;
60 Application.currentColor = Colors.black;
61
62 LOG_i("Done.\n");
63}
64
65//Saved application state data load callback. Gets called in response to loadState() function call
66public ON_Load(id, size, const pkt[])
67{
68}
69
70//Main run loop callback. Gets called recurrently by the CUB application as frequent as application code allows.
71public ON_Tick()
72{
73}
74
75//This callback is gets called immediately after ON_Tick(). Use it for calling your rendering code.
76public ON_Render()
77{
78 for(new screenNumber = 0; screenNumber<3; screenNumber++)
79 {
80 GFX_setRenderTarget(screenNumber);
81
82 if(SELF_ID==0)
83 {
84 GFX_clear(Colors.red);
85
86 GFX_drawText([ 120,80 ], TEXT_SIZE, 0, 0, TEXT_ALIGN_CENTER, Colors.white, "TAP");
87 GFX_drawText([ 120,160 ], TEXT_SIZE, 0, 0, TEXT_ALIGN_CENTER, Colors.white, "ME");
88 }
89 else
90 {
91 GFX_clear(Application.currentColor);
92 }
93
94 GFX_render();
95 }
96}
97
98
99//The "physics" callback. Gets called recurrently with 30ms resolution.
100public ON_PhysicsTick()
101{
102}
103
104//The "inner network" callback. Gets called when WOWCube module receives a data packet from other module
105public ON_Packet(type, size, const pkt[])
106{
107 if(SELF_ID!=0)
108 {
109 switch (type)
110 {
111 case cmd_paintBlue:
112 {
113 Application.currentColor = Colors.blue;
114 }
115 case cmd_paintGreen:
116 {
117 Application.currentColor = Colors.green;
118 }
119 case cmd_paintRed:
120 {
121 Application.currentColor = Colors.red;
122 }
123
124 }
125 }
126}
127
128//The cube topology change callback. Gets called when cube is twisted and its topological desctiption has been changed
129public ON_Twist(twist[TOPOLOGY_TWIST_INFO])
130{
131 if (SELF_ID == 0)
132 {
133 }
134 else
135 {
136 }
137}
138
139//Device shake detection callback.
140public ON_Shake(const count)
141{
142}
143
144//Screen tap callback.
145public ON_Tap(const count, const display, const bool:opposite)
146{
147 if (SELF_ID == 0)
148 {
149 //When device is tapped, module 0 will broadcast commands to all neighbouring modules
150 sendDataToNeighbours();
151 }
152 else
153 {
154 }
155}
156
157//Application quit callback.
158public ON_Quit()
159{
160 //
161 //Save game data here
162 //
163}
164
165// User-defined functions
166// -----------------------------
167
168sendDataToNeighbours()
169{
170 new data[1];
171 new const type[3] = [cmd_paintBlue, cmd_paintGreen, cmd_paintRed];
172
173 broadcastPacket(type[Application.counter], data); // broadcast data over UART
174
175 if(Application.counter<2) Application.counter++; else Application.counter = 0;
176}