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. Source
  4. Scramble.cpp
Mission NodeSDK 6.1C++scramble.cpp

Scramble.cpp

SDK Source File: Scramble.cpp

Source / SDK 6.1 / C++ / Core

Scramble.cpp

Scramble.cpp
CPP
1/* Copyright Statement:
2 *
3 * (C) 2021-2024 Cubios Inc. All rights reserved.
4 */
5
6#include "Scramble.h"
7
8namespace Cubios
9{
10
11 void Scramble::rememberCurrentTopology()
12 {
13 for (uint8_t screen = 0; screen < SCREENS_MAX; ++screen)
14 {
15 Cubios::TOPOLOGY_getAdjacentFacelet(0, screen, NEIGHBOR_TOP, &TopFaceletsStarting[screen][0]);
16
17 for (uint8_t i = 1; i < MODULES_MAX / 2; ++i)
18 {
19 Cubios::TOPOLOGY_getAdjacentFacelet(TopFaceletsStarting[screen][i - 1].module, TopFaceletsStarting[screen][i - 1].screen, NEIGHBOR_TOP, &TopFaceletsStarting[screen][i]);
20 Cubios::TOPOLOGY_getAdjacentFacelet(TopFaceletsStarting[screen][i].module, TopFaceletsStarting[screen][i].screen, NEIGHBOR_RIGHT, &TopFaceletsStarting[screen][i]);
21 }
22 }
23 memcpy(&TopFaceletsEndind, &TopFaceletsStarting, sizeof(TopFaceletsStarting));
24 };
25
26 void Scramble::rotate(uint8_t scr, uint8_t dir)
27 {
28 Cubios::TOPOLOGY_twistInfo_t twist;
29 twist.count = 1;
30 twist.screen = scr;
31 twist.direction = dir;
32
33 this->on_BeforeTwist();
34
35 if (dir == TWIST_LEFT)
36 {
37 for (uint8_t i = 0; i < MODULES_MAX / 2 - 1; ++i)
38 {
39 std::swap(TopFaceletsEndind[twist.screen][i], TopFaceletsEndind[twist.screen][(i + 1)]);
40 }
41 }
42 else if (dir == TWIST_RIGHT)
43 {
44 for (uint8_t i = MODULES_MAX / 2 - 1; i >= 1; --i)
45 {
46 std::swap(TopFaceletsEndind[twist.screen][i], TopFaceletsEndind[twist.screen][(i - 1)]);
47 }
48 }
49
50 for (uint8_t i = 0; i < MODULES_MAX / 2; ++i)
51 {
52 for (uint8_t screen = 0; screen < SCREENS_MAX; ++screen)
53 {
54 this->on_MappingChanged(
55 TopFaceletsEndind[twist.screen][i].module,
56 (TopFaceletsEndind[twist.screen][i].screen + screen) % SCREENS_MAX,
57 TopFaceletsStarting[twist.screen][i].module,
58 (TopFaceletsStarting[twist.screen][i].screen + screen) % SCREENS_MAX);
59 }
60 }
61
62 this->on_Twist(twist);
63 };
64
65 void Scramble::StartScramble(uint8_t twistsCount)
66 {
67 if (twistsCount < 1)
68 return;
69
70 uint8_t screen;
71 uint8_t direction;
72
73 for (uint32_t twistI = 0; twistI < twistsCount; ++twistI)
74 {
75 this->rememberCurrentTopology();
76
77 screen = Cubios::random(0, SCREENS_MAX - 1);
78 direction = Cubios::random(TWIST_LEFT, TWIST_RIGHT);
79
80 if (screen == this->previosTwist.screen)
81 {
82 screen = ++screen % SCREENS_MAX;
83 }
84
85 this->rotate(screen, direction);
86
87 memcpy(&TopFaceletsStarting, &TopFaceletsEndind, sizeof(TopFaceletsStarting));
88
89 this->previosTwist.screen = screen;
90 this->previosTwist.direction = direction;
91 }
92 };
93
94 void Scramble::VirtualTwist(uint8_t screen, uint8_t direction)
95 {
96 if (direction != TWIST_LEFT && direction != TWIST_RIGHT)
97 return;
98 if (screen >= SCREENS_MAX)
99 return;
100
101 this->rememberCurrentTopology();
102
103 this->rotate(screen, direction);
104 };
105}
106
Wrapped for easier reading. Turn wrap off to inspect exact line lengths.
Context Rail

Related nodes

AppManager.cpp
Source / SDK 6.1 / C++ / Core
AppManager.h
Source / SDK 6.1 / C++ / Core
Gfx.h
Source / SDK 6.1 / C++ / Core
native access.h
Source / SDK 6.1 / C++ / Core
Previous Node
SceneObject.h
Source / SDK 6.1 / C++ / Core
Next Node
Scramble.h
Source / SDK 6.1 / C++ / Core