Some jank test visual effects are working.
This commit is contained in:
parent
243d15c123
commit
f9bf8f06ea
4 changed files with 66 additions and 18 deletions
52
gui.cpp
52
gui.cpp
|
@ -17,6 +17,7 @@
|
||||||
#include <fmt/core.h>
|
#include <fmt/core.h>
|
||||||
#include "dbc.hpp"
|
#include "dbc.hpp"
|
||||||
#include "gui.hpp"
|
#include "gui.hpp"
|
||||||
|
#include "rand.hpp"
|
||||||
|
|
||||||
using std::string;
|
using std::string;
|
||||||
using namespace fmt;
|
using namespace fmt;
|
||||||
|
@ -36,6 +37,10 @@ std::array<sf::Color, 10> VALUES{
|
||||||
sf::Color::Transparent, // white
|
sf::Color::Transparent, // white
|
||||||
};
|
};
|
||||||
|
|
||||||
|
sf::Color GUI::color(int val) {
|
||||||
|
return VALUES[size_t(val)];
|
||||||
|
}
|
||||||
|
|
||||||
sf::Color GUI::color(Value val) {
|
sf::Color GUI::color(Value val) {
|
||||||
return VALUES[size_t(val)];
|
return VALUES[size_t(val)];
|
||||||
}
|
}
|
||||||
|
@ -128,6 +133,7 @@ void GUI::handle_events() {
|
||||||
$game_map.clear_target($player.location);
|
$game_map.clear_target($player.location);
|
||||||
$player.move({x, y});
|
$player.move({x, y});
|
||||||
} else {
|
} else {
|
||||||
|
$shake_it = true;
|
||||||
$hit_sound.play();
|
$hit_sound.play();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -139,6 +145,7 @@ void GUI::handle_events() {
|
||||||
|
|
||||||
if($enemy.location.x == $player.location.x && $enemy.location.y == $player.location.y) {
|
if($enemy.location.x == $player.location.x && $enemy.location.y == $player.location.y) {
|
||||||
$player.event(EntityEvent::HIT);
|
$player.event(EntityEvent::HIT);
|
||||||
|
$burn_baby_burn = true;
|
||||||
} else if($goal.x == $player.location.x && $goal.y == $player.location.y) {
|
} else if($goal.x == $player.location.x && $goal.y == $player.location.y) {
|
||||||
$status_text = "YOU WIN!";
|
$status_text = "YOU WIN!";
|
||||||
}
|
}
|
||||||
|
@ -146,16 +153,53 @@ void GUI::handle_events() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GUI::burn() {
|
||||||
|
for(int i = 0; i < 20; ++i) {
|
||||||
|
$text.setFillColor(color(i % VALUES.size()));
|
||||||
|
int x = Random::rand_int(-10,10);
|
||||||
|
int y = Random::rand_int(-10,10);
|
||||||
|
$text.setPosition({(float)x,(float)y});
|
||||||
|
$window.draw($text);
|
||||||
|
$window.display();
|
||||||
|
std::this_thread::sleep_for(2ms);
|
||||||
|
}
|
||||||
|
|
||||||
|
$text.setFillColor(color(Value::LIGHT_DARK));
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void draw_screen(sf::RenderWindow &window, sf::Text &text, float x=0, float y=0) {
|
||||||
|
text.setPosition({x,y});
|
||||||
|
window.clear();
|
||||||
|
window.draw(text);
|
||||||
|
window.display();
|
||||||
|
}
|
||||||
|
|
||||||
|
void GUI::shake() {
|
||||||
|
for(int i = 0; i < 10; ++i) {
|
||||||
|
int x = Random::rand_int(-10,10);
|
||||||
|
int y = Random::rand_int(-10,10);
|
||||||
|
draw_screen($window, $text, (float)x, (float)y);
|
||||||
|
std::this_thread::sleep_for(1ms);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void GUI::render_scene() {
|
void GUI::render_scene() {
|
||||||
Render($screen, $document->Render());
|
Render($screen, $document->Render());
|
||||||
std::string $screenout = $screen.ToString();
|
std::string $screenout = $screen.ToString();
|
||||||
std::wstring utf8 = $converter.from_bytes($screenout);
|
std::wstring utf8 = $converter.from_bytes($screenout);
|
||||||
$text.setString(utf8);
|
$text.setString(utf8);
|
||||||
$text.setPosition({0,0});
|
|
||||||
|
|
||||||
$window.clear();
|
if($shake_it) {
|
||||||
$window.draw($text);
|
shake();
|
||||||
$window.display();
|
$shake_it = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if($burn_baby_burn) {
|
||||||
|
burn();
|
||||||
|
$burn_baby_burn = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
draw_screen($window, $text, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int GUI::main() {
|
int GUI::main() {
|
||||||
|
|
7
gui.hpp
7
gui.hpp
|
@ -30,7 +30,6 @@ enum class Value {
|
||||||
};
|
};
|
||||||
|
|
||||||
class GUI {
|
class GUI {
|
||||||
sf::Color color(Value val);
|
|
||||||
Map $game_map;
|
Map $game_map;
|
||||||
sf::SoundBuffer $hit_buf;
|
sf::SoundBuffer $hit_buf;
|
||||||
sf::Sound $hit_sound;
|
sf::Sound $hit_sound;
|
||||||
|
@ -44,6 +43,8 @@ class GUI {
|
||||||
Canvas $canvas;
|
Canvas $canvas;
|
||||||
sf::Font $font;
|
sf::Font $font;
|
||||||
sf::Text $text;
|
sf::Text $text;
|
||||||
|
bool $shake_it = false;
|
||||||
|
bool $burn_baby_burn = false;
|
||||||
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> $converter;
|
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> $converter;
|
||||||
sf::RenderWindow $window;
|
sf::RenderWindow $window;
|
||||||
Screen $screen;
|
Screen $screen;
|
||||||
|
@ -53,9 +54,13 @@ public:
|
||||||
// disable copying
|
// disable copying
|
||||||
GUI(GUI &gui) = delete;
|
GUI(GUI &gui) = delete;
|
||||||
|
|
||||||
|
sf::Color color(Value val);
|
||||||
|
sf::Color color(int val);
|
||||||
void create_renderer();
|
void create_renderer();
|
||||||
void render_scene();
|
void render_scene();
|
||||||
void handle_events();
|
void handle_events();
|
||||||
|
void shake();
|
||||||
|
void burn();
|
||||||
|
|
||||||
int main();
|
int main();
|
||||||
};
|
};
|
||||||
|
|
23
map.cpp
23
map.cpp
|
@ -2,11 +2,9 @@
|
||||||
#include "dbc.hpp"
|
#include "dbc.hpp"
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <fmt/core.h>
|
#include <fmt/core.h>
|
||||||
#include <random>
|
#include "rand.hpp"
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
std::random_device $RNG;
|
|
||||||
std::mt19937 $GENERATOR($RNG());
|
|
||||||
|
|
||||||
using std::vector, std::pair;
|
using std::vector, std::pair;
|
||||||
using namespace fmt;
|
using namespace fmt;
|
||||||
|
@ -116,8 +114,8 @@ inline int make_split(Room &cur, bool horiz) {
|
||||||
size_t dimension = horiz ? cur.height : cur.width;
|
size_t dimension = horiz ? cur.height : cur.width;
|
||||||
int min = dimension / 4;
|
int min = dimension / 4;
|
||||||
int max = dimension - min;
|
int max = dimension - min;
|
||||||
std::uniform_int_distribution<int> rand_dim(min, max);
|
|
||||||
return rand_dim($GENERATOR);
|
return Random::rand_int(min, max);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Map::partition_map(Room &cur, int depth) {
|
void Map::partition_map(Room &cur, int depth) {
|
||||||
|
@ -212,26 +210,25 @@ void Map::set_door(Room &room, int value) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void rand_side(Room &room, Point &door) {
|
void rand_side(Room &room, Point &door) {
|
||||||
std::uniform_int_distribution<int> rand_side(0, 3);
|
int rand_x = Random::rand_int(0, room.width - 1);
|
||||||
std::uniform_int_distribution<int> rand_x(0, room.width - 1);
|
int rand_y = Random::rand_int(0, room.height - 1);
|
||||||
std::uniform_int_distribution<int> rand_y(0, room.height - 1);
|
|
||||||
|
|
||||||
switch(rand_side($GENERATOR)) {
|
switch(Random::rand_int(0,3)) {
|
||||||
case 0: // north
|
case 0: // north
|
||||||
door.x = room.x + rand_x($GENERATOR);
|
door.x = room.x + rand_x;
|
||||||
door.y = room.y-1;
|
door.y = room.y-1;
|
||||||
break;
|
break;
|
||||||
case 1: // south
|
case 1: // south
|
||||||
door.x = room.x + rand_x($GENERATOR);
|
door.x = room.x + rand_x;
|
||||||
door.y = room.y + room.height;
|
door.y = room.y + room.height;
|
||||||
break;
|
break;
|
||||||
case 2: // east
|
case 2: // east
|
||||||
door.x = room.x + room.width;
|
door.x = room.x + room.width;
|
||||||
door.y = room.y + rand_y($GENERATOR);
|
door.y = room.y + rand_y;
|
||||||
break;
|
break;
|
||||||
case 3: // west
|
case 3: // west
|
||||||
door.x = room.x - 1;
|
door.x = room.x - 1;
|
||||||
door.y = room.y + rand_y($GENERATOR);
|
door.y = room.y + rand_y;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
dbc::sentinel("impossible side");
|
dbc::sentinel("impossible side");
|
||||||
|
|
|
@ -17,6 +17,7 @@ runtests = executable('runtests', [
|
||||||
'dbc.cpp',
|
'dbc.cpp',
|
||||||
'map.cpp',
|
'map.cpp',
|
||||||
'entity.cpp',
|
'entity.cpp',
|
||||||
|
'rand.cpp',
|
||||||
'tests/fsm.cpp',
|
'tests/fsm.cpp',
|
||||||
'tests/dbc.cpp',
|
'tests/dbc.cpp',
|
||||||
'tests/map.cpp',
|
'tests/map.cpp',
|
||||||
|
@ -28,6 +29,7 @@ roguish = executable('roguish', [
|
||||||
'main.cpp',
|
'main.cpp',
|
||||||
'map.cpp',
|
'map.cpp',
|
||||||
'gui.cpp',
|
'gui.cpp',
|
||||||
|
'rand.cpp',
|
||||||
'entity.cpp',
|
'entity.cpp',
|
||||||
],
|
],
|
||||||
dependencies: dependencies)
|
dependencies: dependencies)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue