-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsquares_demo.cpp
102 lines (85 loc) · 2.63 KB
/
squares_demo.cpp
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
// Simple fbdev - Simple demo that uses linux framebuffer device
// Copyright (C) 2017-2018 Dawid Gan <deveee@gmail.com>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "device.hpp"
#include "squares_demo.hpp"
#define FRAMES_COUNT 500
#define ELEMENTS_COUNT 10
SquaresDemo::SquaresDemo()
{
}
SquaresDemo::~SquaresDemo()
{
}
bool SquaresDemo::init()
{
Device* device = Device::getDevice();
for (int i = 0; i < ELEMENTS_COUNT; i++)
{
Square square;
square.size = device->getHeight() / 10;
square.x = rand() % (device->getWidth() - square.size);
square.y = rand() % (device->getHeight() - square.size);
square.dx = (rand() % 10) + 1;
square.dy = (rand() % 10) + 1;
square.color[0] = rand() % 256;
square.color[1] = rand() % 256;
square.color[2] = rand() % 256;
m_squares.push_back(square);
}
return true;
}
void SquaresDemo::drawSquare(Square& square)
{
Device* device = Device::getDevice();
for (int i = 0; i < square.size; i++)
{
for (int j = 0; j < square.size; j++)
{
device->drawPixel(square.x + j, square.y + i, square.color);
}
}
}
void SquaresDemo::updatePosition(Square& square)
{
Device* device = Device::getDevice();
if ((square.x + square.dx < 0) ||
(square.x + square.dx > device->getWidth() - square.size))
{
square.dx = -square.dx;
}
if ((square.y + square.dy < 0) ||
(square.y + square.dy > device->getHeight() - square.size))
{
square.dy = -square.dy;
}
square.x += square.dx;
square.y += square.dy;
}
void SquaresDemo::run()
{
for (int i = 0; i < FRAMES_COUNT; i++)
{
Device* device = Device::getDevice();
device->clearScreen(100);
for (Square& square : m_squares)
{
drawSquare(square);
updatePosition(square);
}
device->swapBuffers();
device->sleep(15);
}
}