Started a tiny idle clicker demo called 'Clicker the Dog'. No idea what that means.

main
Zed A. Shaw 1 week ago
parent cf3da32681
commit 04f6fef921
  1. 12
      Makefile
  2. BIN
      assets/clicker_the_dog-1024.png
  3. 5
      assets/config.json
  4. 110
      demos/clicker_game.cpp
  5. 10
      meson.build

@ -30,20 +30,20 @@ test: build
run: build test run: build test
ifeq '$(OS)' 'Windows_NT' ifeq '$(OS)' 'Windows_NT'
powershell "cp ./builddir/calc.exe ." powershell "cp ./builddir/clicker_game.exe ."
./calc ./clicker_game
else else
./builddir/calc ./builddir/clicker_game
endif endif
debug: build debug: build
gdb --nx -x .gdbinit --ex run --args builddir/calc gdb --nx -x .gdbinit --ex run --args builddir/clicker_game
debug_run: build debug_run: build
gdb --nx -x .gdbinit --batch --ex run --ex bt --ex q --args builddir/calc gdb --nx -x .gdbinit --batch --ex run --ex bt --ex q --args builddir/clicker_game
debug_walk: build test debug_walk: build test
gdb --nx -x .gdbinit --batch --ex run --ex bt --ex q --args builddir/calc t gdb --nx -x .gdbinit --batch --ex run --ex bt --ex q --args builddir/clicker_game t
clean: clean:
meson compile --clean -C builddir meson compile --clean -C builddir

Binary file not shown.

After

Width:  |  Height:  |  Size: 808 KiB

@ -9,6 +9,11 @@
{"path": "assets/textures_test.png", {"path": "assets/textures_test.png",
"frame_width": 53, "frame_width": 53,
"frame_height": 34 "frame_height": 34
},
"clicker_the_dog":
{"path": "assets/clicker_the_dog-1024.png",
"frame_width": 1024,
"frame_height": 1024
} }
}, },
"graphics": { "graphics": {

@ -0,0 +1,110 @@
#include "guecs/sfml/backend.hpp"
#include "guecs/sfml/components.hpp"
#include "guecs/ui.hpp"
#include <fmt/xchar.h>
#include <deque>
constexpr const int WINDOW_WIDTH=1280;
constexpr const int WINDOW_HEIGHT=720;
constexpr const int FRAME_LIMIT=60;
constexpr const bool VSYNC=true;
using std::string, std::wstring;
enum class Event {
CLICKER, A_BUTTON
};
struct ClickerUI {
guecs::UI $gui;
ClickerUI() {
$gui.position(0, 0, WINDOW_WIDTH, WINDOW_HEIGHT);
$gui.layout(
"[_|*%(300,400)clicker|_|_|_]"
"[_|_ |_|_|_]"
"[_|_ |_|_|_]"
"[_|_ |_|_|_]"
"[a1|a2|a3|a4|a5]");
}
void init() {
$gui.set<guecs::Background>($gui.MAIN, {});
for(auto& [name, cell] : $gui.cells()) {
auto id = $gui.entity(name);
if(name != "clicker") {
$gui.set<guecs::Rectangle>(id, {});
$gui.set<guecs::Effect>(id, {});
$gui.set<guecs::Label>(id, { guecs::to_wstring(name) });
$gui.set<guecs::Clickable>(id, {
[&](auto, auto) { handle_button(Event::A_BUTTON); }
});
} else {
$gui.set<guecs::Sprite>(id, {"clicker_the_dog"});
$gui.set<guecs::Effect>(id, {0.1f, "ui_shader"});
$gui.set<guecs::Clickable>(id, {
[&](auto, auto) { handle_button(Event::CLICKER); }
});
}
}
$gui.init();
}
void render(sf::RenderWindow& window) {
$gui.render(window);
// $gui.debug_layout(window);
}
void mouse(float x, float y, bool hover) {
$gui.mouse(x, y, hover);
}
void handle_button(Event ev) {
using enum Event;
switch(ev) {
case CLICKER:
fmt::println("CLICKER LOVES YOU!");
break;
case A_BUTTON:
fmt::println("a button clicked");
break;
default:
assert(false && "invalid event");
}
}
};
int main() {
sfml::Backend backend;
guecs::init(&backend);
sf::RenderWindow window(sf::VideoMode({WINDOW_WIDTH, WINDOW_HEIGHT}), "LEL-GUECS Calculator");
window.setFramerateLimit(FRAME_LIMIT);
window.setVerticalSyncEnabled(VSYNC);
ClickerUI clicker;
clicker.init();
while(window.isOpen()) {
while (const auto event = window.pollEvent()) {
if(event->is<sf::Event::Closed>()) {
window.close();
}
if(const auto* mouse = event->getIf<sf::Event::MouseButtonPressed>()) {
if(mouse->button == sf::Mouse::Button::Left) {
sf::Vector2f pos = window.mapPixelToCoords(mouse->position);
clicker.mouse(pos.x, pos.y, false);
}
}
}
clicker.render(window);
window.display();
}
}

@ -112,6 +112,16 @@ executable('runtests', sfml_impl + [
link_with: [lel_guecs_lib], link_with: [lel_guecs_lib],
dependencies: dependencies + [catch2]) dependencies: dependencies + [catch2])
executable('clicker_game', sfml_impl + [
'demos/clicker_game.cpp',
],
cpp_args: cpp_args,
link_args: link_args,
override_options: exe_defaults,
include_directories: lel_guecs_inc,
link_with: [lel_guecs_lib],
dependencies: dependencies)
executable('calc', sfml_impl + [ executable('calc', sfml_impl + [
'demos/calc.cpp', 'demos/calc.cpp',
], ],

Loading…
Cancel
Save