WOWCube Docs logo
WOWCube Docs
Mission Control
Section Shortcuts
APIExamplesSourceWOWConnectChangelog
Filters
SDK and language defaults persist in cookies.
SDK version
Navigation Tree
Collapsed by default, focused on the active path.
Made byMcKay Seamons
GitHub
  1. Home
  2. Docs
  3. Examples
  4. ScrambleApp.cpp
Mission NodeSDK 6.3C++topologyProject Included

ScrambleApp.cpp

Example: ScrambleApp.cpp

Examples / SDK 6.3 / C++ / topology / Scrambling / project / src
ScrambleApp.cpp
CPP
1// This file is generated by WOWCube SDK project wizard
2//
3// Application UUID: g8iPeaymU0
4//
5
6#include <stdint.h>
7#include <string>
8#include <vector>
9#include <string>
10#include <memory>
11
12#include "AppManager.h"
13#include "ScrambleApp.h"
14
15//Applicaton initialization callback. Called once when CUB application starts
16void OnInit(Cubios::AppManager& appMgr)
17{
18 ScrambleApp* theApp = new ScrambleApp();
19
20 appMgr.SetApplication(theApp,"g8iPeaymU0");
21
22 theApp->InitializeResources();
23}
24
25
26ScrambleApp::ScrambleApp():angles{0,90,180,270}
27{
28}
29
30ScrambleApp::~ScrambleApp()
31{
32 delete(this->scramble);
33 delete(this->network);
34}
35
36void ScrambleApp::InitializeResources()
37{
38 for (uint8_t module = 0; module < MODULES_MAX; ++module)
39 {
40 for (uint8_t screen = 0; screen < SCREENS_MAX; ++screen)
41 {
42 Cubios::TOPOLOGY_place_t place;
43 TOPOLOGY_getPlace(module,screen,Cubios::TOPOLOGY_orientation_mode_t::ORIENTATION_MODE_MENU, &this->mapping.value[module][screen].place);
44 this->mapping.value[module][screen].place.face = Cubios::TOPOLOGY_getPlaceOrientation(this->mapping.value[module][screen].place.face, this->mapping.value[module][screen].place.position);
45
46 switch(this->mapping.value[module][screen].place.face)
47 {
48 case Cubios::TOPOLOGY_orientation_t::ORIENTATION_UP: //0
49 {
50 switch(this->mapping.value[module][screen].place.position)
51 {
52 case 0: this->mapping.value[module][screen].resourceID = Cubios::GFX_getAssetId("up3.png"); this->mapping.value[module][screen].angle = 0; break;
53 case 1: this->mapping.value[module][screen].resourceID = Cubios::GFX_getAssetId("up4.png"); this->mapping.value[module][screen].angle = 3; break;
54 case 2: this->mapping.value[module][screen].resourceID = Cubios::GFX_getAssetId("up1.png"); this->mapping.value[module][screen].angle = 2; break;
55 case 3: this->mapping.value[module][screen].resourceID = Cubios::GFX_getAssetId("up2.png"); this->mapping.value[module][screen].angle = 1; break;
56 }
57 }
58 break;
59 case Cubios::TOPOLOGY_orientation_t::ORIENTATION_DOWN: //1
60 switch(this->mapping.value[module][screen].place.position)
61 {
62 case 0: this->mapping.value[module][screen].resourceID = Cubios::GFX_getAssetId("down4.png"); this->mapping.value[module][screen].angle = 3; break;
63 case 1: this->mapping.value[module][screen].resourceID = Cubios::GFX_getAssetId("down1.png"); this->mapping.value[module][screen].angle = 2; break;
64 case 2: this->mapping.value[module][screen].resourceID = Cubios::GFX_getAssetId("down2.png"); this->mapping.value[module][screen].angle = 1; break;
65 case 3: this->mapping.value[module][screen].resourceID = Cubios::GFX_getAssetId("down3.png"); this->mapping.value[module][screen].angle = 0; break;
66 }
67 break;
68 case Cubios::TOPOLOGY_orientation_t::ORIENTATION_FRONT: //2
69 switch(this->mapping.value[module][screen].place.position)
70 {
71 case 0: this->mapping.value[module][screen].resourceID = Cubios::GFX_getAssetId("front2.png"); this->mapping.value[module][screen].angle = 1; break;
72 case 1: this->mapping.value[module][screen].resourceID = Cubios::GFX_getAssetId("front3.png"); this->mapping.value[module][screen].angle = 0; break;
73 case 2: this->mapping.value[module][screen].resourceID = Cubios::GFX_getAssetId("front4.png"); this->mapping.value[module][screen].angle = 3; break;
74 case 3: this->mapping.value[module][screen].resourceID = Cubios::GFX_getAssetId("front1.png"); this->mapping.value[module][screen].angle = 2; break;
75 }
76 break;
77 case Cubios::TOPOLOGY_orientation_t::ORIENTATION_BACK: //3
78 switch(this->mapping.value[module][screen].place.position)
79 {
80 case 0: this->mapping.value[module][screen].resourceID = Cubios::GFX_getAssetId("back3.png"); this->mapping.value[module][screen].angle = 0; break;
81 case 1: this->mapping.value[module][screen].resourceID = Cubios::GFX_getAssetId("back4.png"); this->mapping.value[module][screen].angle = 3; break;
82 case 2: this->mapping.value[module][screen].resourceID = Cubios::GFX_getAssetId("back1.png"); this->mapping.value[module][screen].angle = 2; break;
83 case 3: this->mapping.value[module][screen].resourceID = Cubios::GFX_getAssetId("back2.png"); this->mapping.value[module][screen].angle = 1; break;
84 }
85 break;
86 case Cubios::TOPOLOGY_orientation_t::ORIENTATION_LEFT: //4
87 switch(this->mapping.value[module][screen].place.position)
88 {
89 case 0: this->mapping.value[module][screen].resourceID = Cubios::GFX_getAssetId("left4.png"); this->mapping.value[module][screen].angle = 3; break;
90 case 1: this->mapping.value[module][screen].resourceID = Cubios::GFX_getAssetId("left1.png"); this->mapping.value[module][screen].angle = 2; break;
91 case 2: this->mapping.value[module][screen].resourceID = Cubios::GFX_getAssetId("left2.png"); this->mapping.value[module][screen].angle = 1; break;
92 case 3: this->mapping.value[module][screen].resourceID = Cubios::GFX_getAssetId("left3.png"); this->mapping.value[module][screen].angle = 0; break;
93 }
94 break;
95 case Cubios::TOPOLOGY_orientation_t::ORIENTATION_RIGHT: //5
96 switch(this->mapping.value[module][screen].place.position)
97 {
98 case 0: this->mapping.value[module][screen].resourceID = Cubios::GFX_getAssetId("right1.png"); this->mapping.value[module][screen].angle = 2; break;
99 case 1: this->mapping.value[module][screen].resourceID = Cubios::GFX_getAssetId("right2.png"); this->mapping.value[module][screen].angle = 1; break;
100 case 2: this->mapping.value[module][screen].resourceID = Cubios::GFX_getAssetId("right3.png"); this->mapping.value[module][screen].angle = 0; break;
101 case 3: this->mapping.value[module][screen].resourceID = Cubios::GFX_getAssetId("right4.png"); this->mapping.value[module][screen].angle = 3; break;
102 }
103 break;
104 }
105 }
106 }
107
108 this->scramble = new MyScramble();
109 this->network = new Cubios::NetworkMessage();
110}
111
112//This callback is called every "tick" of cubeapp application loop
113void ScrambleApp::on_Tick(uint32_t currentTime, uint32_t deltaTime)
114{
115 if (this->IsMasterModule())
116 {
117 this->network->Reset(true);
118
119 for(int m=0;m<MODULES_MAX;m++)
120 for(int s=0;s<SCREENS_MAX;s++)
121 {
122 this->network->WriteInt(this->mapping.value[m][s].place.face,5);
123 }
124 this->SendNetworkMessage(0, network);
125
126 this->network->Reset(true);
127 for(int m=0;m<MODULES_MAX;m++)
128 for(int s=0;s<SCREENS_MAX;s++)
129 {
130 this->network->WriteInt(this->mapping.value[m][s].place.position,4);
131 this->network->WriteInt(this->mapping.value[m][s].angle,4);
132 }
133 this->SendNetworkMessage(1, network);
134
135 this->network->Reset(true);
136 for(int m=0;m<MODULES_MAX;m++)
137 for(int s=0;s<SCREENS_MAX;s++)
138 {
139 this->network->WriteInt(this->mapping.value[m][s].resourceID,8);
140 }
141 this->SendNetworkMessage(2, network);
142 }
143}
144
145//This callback is called every time device is about to render visuals. Use it for calling your rendering code.
146void ScrambleApp::on_Render(std::array<Cubios::Screen, 3>& screens)
147{
148 for (auto it = screens.begin(); it != screens.end(); ++it)
149 {
150 Cubios::GFX_setRenderTarget(it->ID());
151
152 Cubios::GFX_drawImage(this->mapping.value[this->Module][it->ID()].resourceID, 120,120,0xFF, Cubios::Gfx::Colors::black, 100, 100, this->angles[this->mapping.value[this->Module][it->ID()].angle] ,Cubios::GFX_mirror_t::MIRROR_BLANK);
153
154 if(this->Module==0)
155 {
156 Cubios::GFX_drawText(120, 150-60, 12, 0, Cubios::text_align_t::TEXT_ALIGN_CENTER, 0xffff0000, "PAT");
157 Cubios::GFX_drawText(120, 200-60, 12, 0, Cubios::text_align_t::TEXT_ALIGN_CENTER, 0xffff0000, "ME");
158 }
159
160 Cubios::GFX_render();
161 }
162}
163
164//The "physics" callback. Gets called recurrently with at least 33ms resolution or less depending on the load.
165void ScrambleApp::on_PhysicsTick(const std::array<Cubios::Screen, 3>& screens)
166{
167}
168
169//This callback is called on programmable timer (if any)
170void ScrambleApp::on_Timer(uint8_t timerID)
171{
172}
173
174//The cube topology change callback. Gets called when cube is twisted and its topological desctiption has been changed
175void ScrambleApp::on_Twist(const Cubios::TOPOLOGY_twistInfo_t& twist)
176{
177}
178
179//The "inner network" callback. Gets called when WOWCube module receives a data packet from other module
180void ScrambleApp::on_Message(uint32_t type, uint8_t* pkt, u32_t size)
181{
182 if (IsMasterModule())
183 return;
184
185 this->network->SetData(pkt, size);
186
187 for(int m=0;m<MODULES_MAX;m++)
188 for(int s=0;s<SCREENS_MAX;s++)
189 {
190 if(type==0) this->mapping.value[m][s].place.face = this->network->ReadInt(5);
191 if(type==1) {this->mapping.value[m][s].place.position = this->network->ReadInt(4);this->mapping.value[m][s].angle = this->network->ReadInt(4);}
192 if(type==2) this->mapping.value[m][s].resourceID = this->network->ReadInt(8);
193 }
194}
195
196//The external data transfer callback. Gets called when WOWCube module receives a data over BLE from an external source
197void ScrambleApp::on_ExternalMessage(uint8_t* pkt, u32_t size)
198{
199}
200
201//Screen pat callback
202void ScrambleApp::on_Pat(uint32_t count)
203{
204 if (IsMasterModule())
205 {
206 int number_of_twists_to_scramble = 5;
207
208 this->scramble->SetMapping(&this->mapping);
209
210 this->scramble->StartScramble(number_of_twists_to_scramble);
211
212 //Please comment out the line above and uncomment the following lines if you want to perform some virtual twists "manually" instead of specifiying a number of random twists
213 //this->scramble->VirtualTwist(0, Cubios::TWIST_LEFT);
214 //this->scramble->VirtualTwist(1, Cubios::TWIST_RIGHT);
215 //this->scramble->VirtualTwist(2, Cubios::TWIST_LEFT);
216 //this->scramble->VirtualTwist(0, Cubios::TWIST_RIGHT);
217 //this->scramble->VirtualTwist(2, Cubios::TWIST_LEFT);
218
219 this->mapping = this->scramble->GetMapping();
220 }
221}
222
223//This callback is called before the application quits
224void ScrambleApp::on_Close()
225{
226}
Wrapped for easier reading. Turn wrap off to inspect exact line lengths.
Context Rail

Project files

MyScramble.cpp
project/src/MyScramble.cpp
MyScramble.h
project/src/MyScramble.h
ScrambleApp.cpp
project/src/ScrambleApp.cpp
ScrambleApp.h
project/src/ScrambleApp.h
wowcubeapp-build.json
project/wowcubeapp-build.json
Context Rail

Related nodes

MyScramble.cpp
Examples / SDK 6.3 / C++ / topology / Scrambling / project / src
MyScramble.h
Examples / SDK 6.3 / C++ / topology / Scrambling / project / src
ScrambleApp.h
Examples / SDK 6.3 / C++ / topology / Scrambling / project / src
Scrambling
Examples / SDK 6.3 / C++ / topology
Previous Node
MyScramble.h
Examples / SDK 6.3 / C++ / topology / Scrambling / project / src
Next Node
ScrambleApp.h
Examples / SDK 6.3 / C++ / topology / Scrambling / project / src