przenieś fabułę i teksturowane obiekty do osobnych plików
This commit is contained in:
232
fabula.cpp
Normal file
232
fabula.cpp
Normal file
@@ -0,0 +1,232 @@
|
||||
#include "fabula.hpp"
|
||||
|
||||
|
||||
std::vector<std::vector<bool>> wzory = {
|
||||
|
||||
// GK
|
||||
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 1, 1, 1, 0, 1, 0, 0, 1, 0,
|
||||
0, 1, 0, 0, 0, 1, 0, 1, 1, 0,
|
||||
1, 1, 0, 0, 0, 1, 1, 1, 0, 0,
|
||||
1, 0, 0, 0, 0, 1, 1, 0, 0, 0,
|
||||
1, 0, 1, 1, 0, 1, 1, 0, 0, 0,
|
||||
1, 0, 0, 1, 1, 1, 1, 1, 0, 0,
|
||||
1, 1, 0, 0, 1, 1, 0, 1, 1, 0,
|
||||
0, 1, 1, 1, 1, 1, 0, 0, 1, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 1, 1},
|
||||
|
||||
// Ślimak
|
||||
{0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
|
||||
1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
1, 0, 0, 1, 1, 1, 1, 1, 1, 0,
|
||||
1, 0, 1, 1, 0, 0, 0, 0, 1, 0,
|
||||
1, 0, 1, 0, 1, 0, 0, 0, 1, 0,
|
||||
1, 0, 1, 1, 1, 0, 0, 0, 1, 0,
|
||||
1, 0, 0, 0, 0, 1, 1, 1, 1, 0,
|
||||
1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||
|
||||
// Sygnał TTL
|
||||
{0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
|
||||
1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 1, 1, 1, 1, 1, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
|
||||
0, 0, 0, 0, 1, 1, 1, 1, 1, 0,
|
||||
1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
|
||||
1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
|
||||
|
||||
// Okrąg
|
||||
{0, 0, 1, 1, 1, 1, 1, 0, 0, 0,
|
||||
0, 1, 1, 0, 0, 0, 1, 1, 1, 0,
|
||||
0, 1, 0, 0, 0, 0, 0, 0, 1, 0,
|
||||
1, 1, 0, 0, 0, 0, 0, 0, 1, 1,
|
||||
1, 0, 0, 0, 0, 0, 0, 0, 0, 1,
|
||||
1, 1, 0, 0, 0, 0, 0, 0, 1, 1,
|
||||
0, 1, 0, 0, 0, 0, 0, 0, 1, 0,
|
||||
0, 1, 1, 0, 0, 0, 0, 1, 1, 0,
|
||||
0, 0, 1, 1, 1, 0, 0, 1, 0, 0,
|
||||
0, 0, 0, 0, 1, 1, 1, 1, 1, 1},
|
||||
|
||||
// Kwadrat
|
||||
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
|
||||
1, 0, 0, 0, 0, 0, 0, 1, 0, 0,
|
||||
1, 0, 0, 0, 0, 0, 0, 1, 0, 0,
|
||||
1, 0, 0, 0, 0, 0, 0, 1, 1, 1,
|
||||
1, 0, 0, 0, 0, 0, 0, 1, 1, 1,
|
||||
1, 0, 0, 0, 0, 0, 0, 1, 0, 0,
|
||||
1, 0, 0, 0, 0, 0, 0, 1, 0, 0,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||
|
||||
// ABACABA
|
||||
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
|
||||
0, 0, 0, 1, 0, 0, 0, 1, 0, 0,
|
||||
0, 0, 0, 1, 0, 0, 0, 1, 0, 0,
|
||||
0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
|
||||
0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
|
||||
|
||||
// Paski
|
||||
{1, 1, 1, 0, 1, 0, 1, 0, 1, 0,
|
||||
1, 0, 1, 1, 1, 0, 1, 0, 1, 0,
|
||||
1, 0, 1, 0, 1, 1, 1, 0, 1, 0,
|
||||
1, 0, 1, 0, 1, 0, 1, 1, 1, 0,
|
||||
1, 0, 1, 0, 1, 0, 1, 0, 1, 1,
|
||||
1, 0, 1, 0, 1, 0, 1, 0, 1, 1,
|
||||
1, 0, 1, 0, 1, 0, 1, 1, 1, 0,
|
||||
1, 0, 1, 0, 1, 1, 1, 0, 1, 0,
|
||||
1, 0, 1, 1, 1, 0, 1, 0, 1, 0,
|
||||
1, 1, 1, 0, 1, 0, 1, 0, 1, 0},
|
||||
|
||||
// Puste pole
|
||||
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||
|
||||
};
|
||||
|
||||
std::vector<unsigned short> siatka = {
|
||||
|
||||
// Możliwe stany pól siatki:
|
||||
// - 0 - niezamalowana, nie do zamalowania (zielony)
|
||||
// - 1 - niezamalowana, do zamalowania (złoty)
|
||||
// - 2 - zamalowana, nie do zamalowania (czerwony)
|
||||
// - 3 - zamalowana, do zamalowania (jasnozielony)
|
||||
|
||||
// 1. bit mówi o tym, czy jest do zamalowania
|
||||
// 2. bit mówi o tym, czy jest zamalowana
|
||||
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
||||
|
||||
};
|
||||
|
||||
void sprawdzPostepGry() {
|
||||
unsigned short zgodne_pola = 0;
|
||||
for (int i = 0; i < 10; i++) {
|
||||
for (int j = 0; j < 10; j++) {
|
||||
// std::cout << "zgp: " << zgodne_pola << "\n";
|
||||
unsigned short pole_w_siatce = siatka[10*i + (9 - j)];
|
||||
bool pole_we_wzorach = wzory[biezacy_wzor][10*i + (9 - j)];
|
||||
if (pole_w_siatce == 0 && pole_we_wzorach == 0) zgodne_pola++;
|
||||
else if (pole_w_siatce == 3 && pole_we_wzorach == 1) zgodne_pola++;
|
||||
else {
|
||||
// std::cout << "dla i=" << i << " j=" << j << " otrzymano p_w_s " << pole_w_siatce << " a spodziewano sie p_w_w: " << pole_we_wzorach << "\n";
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (zgodne_pola == 100) {
|
||||
biezacy_wzor = (biezacy_wzor + 1) % (wzory.size() + 1);
|
||||
Foward = 45.0f;
|
||||
Sides = -45.0f;
|
||||
Rotation = 270.0f;
|
||||
nadpiszNowaSiatke(biezacy_wzor);
|
||||
} else {
|
||||
// std::cout << "zgodne_pola: " << zgodne_pola << "\n";
|
||||
}
|
||||
}
|
||||
|
||||
void ustalPozycjeGracza(GLfloat gracz_x, GLfloat gracz_z, short &grid_x, short &grid_z) {
|
||||
grid_x = static_cast<int>(gracz_x) / 90;
|
||||
grid_z = static_cast<int>(gracz_z) / 90;
|
||||
|
||||
// zapobiega rysowaniu ze "spawna"
|
||||
if (gracz_x < 0 && gracz_x > -90) grid_x = -1; // ten przypadek dotyczy tylko noclipa
|
||||
if (gracz_z < 0 && gracz_z > -90) grid_z = -1;
|
||||
}
|
||||
|
||||
void ustawSiatkeNaWzorNieNadpisujacPostepu() {
|
||||
for (int i = 0; i < 10; i++) {
|
||||
for (int j = 0; j < 10; j++) {
|
||||
bool ma_byc_zamalowana = wzory[biezacy_wzor][10*i + (10 - j)];
|
||||
if (ma_byc_zamalowana) siatka[10*i + (10 - j)] |= 1;
|
||||
else siatka[10*i + (10 - j)] = siatka[10*i + (10 - j)] - siatka[10*i + (10 - j)] % 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void nadpiszNowaSiatke(short nowy_wzor) {
|
||||
std::cout << "Przepisz zawartosc siatki!\n";
|
||||
biezacy_wzor = nowy_wzor;
|
||||
for (int i = 0; i < 10; i++) {
|
||||
for (int j = 0; j < 10; j++) {
|
||||
siatka[10*i + (10 - j)] = static_cast<unsigned short>(wzory[biezacy_wzor][10*i + (10 - j)]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void tworzKratke(unsigned int grid_x, unsigned int grid_z, unsigned short grid_value) {
|
||||
|
||||
// https://rgbcolorpicker.com/0-1
|
||||
switch (grid_value) {
|
||||
|
||||
case 0:
|
||||
// niezamalowana, nie do zamalowania (zielony)
|
||||
glColor3d(0.031, 0.51, 0.094);
|
||||
break;
|
||||
|
||||
case 1:
|
||||
// niezamalowana, do zamalowania (złoty)
|
||||
glColor3d(0.7, 0.5, 0.259);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
// zamalowana, nie do zamalowania (czerwony)
|
||||
glColor3d(1, 0.122, 0);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
// zamalowana, do zamalowania (biały)
|
||||
glColor3d(1, 1, 1);
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
platforma(45.0f + grid_x * 90.0f, 0.0f, 45.0f + grid_z * 90.0f, 45.0f, 45.0f);
|
||||
|
||||
}
|
||||
|
||||
void tworzKratkiZSiatki() {
|
||||
for (int i = 0; i < 10; i++) {
|
||||
// Aby nie musieć rysować wzorów w odbiciu
|
||||
// lustrzanym, musimy tutaj przyjąć inną sekwencję
|
||||
for (int j = 0; j < 10; j++) {
|
||||
tworzKratke(i, j, siatka[10*i + (9 - j)]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void aktualizujBiezacaKratke(short grid_x, short grid_z) {
|
||||
if (grid_x < 0 || grid_z < 0) return;
|
||||
unsigned short a = siatka[10*grid_x + (9 - grid_z)];
|
||||
siatka[10*grid_x + (9 - grid_z)] |= 2;
|
||||
// jeżeli coś się zmieniło
|
||||
if (siatka[10*grid_x + (9 - grid_z)] != a) {
|
||||
sprawdzPostepGry();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user