Example: ScrambleApp.cpp
1// This file is generated by WOWCube SDK project wizard2//3// Application UUID: g8iPeaymU04//56#include <stdint.h>7#include <string>8#include <vector>9#include <string>10#include <memory>1112#include "AppManager.h"13#include "ScrambleApp.h"1415//Applicaton initialization callback. Called once when CUB application starts16void OnInit(Cubios::AppManager& appMgr)17{18 ScrambleApp* theApp = new ScrambleApp();1920 appMgr.SetApplication(theApp,"g8iPeaymU0");2122 theApp->InitializeResources();23}242526ScrambleApp::ScrambleApp():angles{0,90,180,270}27{28}2930ScrambleApp::~ScrambleApp()31{32 delete(this->scramble);33 delete(this->network);34}3536void 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);4546 switch(this->mapping.value[module][screen].place.face)47 {48 case Cubios::TOPOLOGY_orientation_t::ORIENTATION_UP: //049 {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: //160 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: //269 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: //378 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: //487 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: //596 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 }107108 this->scramble = new MyScramble();109 this->network = new Cubios::NetworkMessage();110}111112//This callback is called every "tick" of cubeapp application loop113void ScrambleApp::on_Tick(uint32_t currentTime, uint32_t deltaTime)114{115 if (this->IsMasterModule())116 {117 this->network->Reset(true);118119 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);125126 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);134135 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}144145//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());151152 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);153154 if(this->Module==0)155 {156 Cubios::GFX_drawText(120, 150-60, 12, 0, Cubios::text_align_t::TEXT_ALIGN_CENTER, 0xffff0000, "TAP");157 Cubios::GFX_drawText(120, 200-60, 12, 0, Cubios::text_align_t::TEXT_ALIGN_CENTER, 0xffff0000, "ME");158 }159160 Cubios::GFX_render();161 }162}163164//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}168169//This callback is called on programmable timer (if any)170void ScrambleApp::on_Timer(uint8_t timerID)171{172}173174//The cube topology change callback. Gets called when cube is twisted and its topological desctiption has been changed175void ScrambleApp::on_Twist(const Cubios::TOPOLOGY_twistInfo_t& twist)176{177}178179//The "inner network" callback. Gets called when WOWCube module receives a data packet from other module180void ScrambleApp::on_Message(uint32_t type, uint8_t* pkt, u32_t size)181{182 if (IsMasterModule())183 return;184185 this->network->SetData(pkt, size);186187 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}195196//The external data transfer callback. Gets called when WOWCube module receives a data over BLE from an external source197void ScrambleApp::on_ExternalMessage(uint8_t* pkt, u32_t size)198{199}200201//Screen tap callback202void ScrambleApp::on_Tap(uint32_t count)203{204 if (IsMasterModule())205 {206 int number_of_twists_to_scramble = 5;207208 this->scramble->SetMapping(&this->mapping);209210 this->scramble->StartScramble(number_of_twists_to_scramble);211212 //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 twists213 //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);218219 this->mapping = this->scramble->GetMapping();220 }221}222223//This callback is called before the application quits224void ScrambleApp::on_Close()225{226}