Now runs with SFML 3.0

This commit is contained in:
Zed A. Shaw 2025-03-27 14:05:30 -04:00
parent 2fa68351fc
commit 713dd9212f
12 changed files with 178 additions and 145 deletions

100
main.cpp
View file

@ -11,9 +11,9 @@
#include "dbc.hpp"
void Window_update(sf::RenderWindow &window, sf::Sprite &player) {
window.clear();
window.draw(player);
window.display();
window.clear();
window.draw(player);
window.display();
}
struct BoxTest {
@ -51,48 +51,40 @@ struct BoxTest Box2d_setup(b2World &world) {
void Handle_events(sf::RenderWindow &window, BoxTest &box, sf::Sound &click) {
sf::Event event;
// is this a main event loop
while (window.pollEvent(event)) {
switch(event.type) {
case sf::Event::Closed:
fmt::print("Exiting...\n");
window.close();
break;
case sf::Event::KeyPressed:
if(sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) {
b2Vec2 force(-200, 1000);
box.body->ApplyForceToCenter(force, true);
box.body->ApplyTorque(100.0f, true);
click.play();
} else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) {
b2Vec2 force(200, 1000);
box.body->ApplyForceToCenter(force, true);
box.body->ApplyTorque(-100.0f, true);
click.play();
}
break;
case sf::Event::MouseButtonPressed:
if(sf::Mouse::isButtonPressed(sf::Mouse::Left)) {
b2Vec2 force(-200, 1000);
box.body->ApplyForceToCenter(force, true);
box.body->ApplyTorque(100.0f, true);
click.play();
} else if (sf::Mouse::isButtonPressed(sf::Mouse::Right)) {
b2Vec2 force(200, 1000);
box.body->ApplyForceToCenter(force, true);
box.body->ApplyTorque(-100.0f, true);
click.play();
}
break;
default:
return; // just here to shutup warnings
while (const auto event = window.pollEvent()) {
if(event->is<sf::Event::Closed>()) {
fmt::print("Exiting...\n");
window.close();
} else if (const auto* key = event->getIf<sf::Event::KeyPressed>()) {
if(key->scancode == sf::Keyboard::Scan::Left) {
b2Vec2 force(-200, 1000);
box.body->ApplyForceToCenter(force, true);
box.body->ApplyTorque(100.0f, true);
click.play();
} else if(key->scancode == sf::Keyboard::Scan::Right) {
b2Vec2 force(200, 1000);
box.body->ApplyForceToCenter(force, true);
box.body->ApplyTorque(-100.0f, true);
click.play();
}
} else if(const auto* mouse = event->getIf<sf::Event::MouseButtonPressed>()) {
if(mouse->button == sf::Mouse::Button::Left) {
b2Vec2 force(-200, 1000);
box.body->ApplyForceToCenter(force, true);
box.body->ApplyTorque(100.0f, true);
click.play();
} else if(mouse->button == sf::Mouse::Button::Right) {
b2Vec2 force(200, 1000);
box.body->ApplyForceToCenter(force, true);
box.body->ApplyTorque(-100.0f, true);
click.play();
}
}
}
}
sf::Time Update_entities(sf::RenderWindow &window, b2World &world, sf::Clock &clock, sf::Clock &deltaClock, sf::Time &tick, BoxTest &box, sf::Sprite &player) {
sf::Time Update_entities(sf::RenderWindow &window, b2World &world, sf::Clock &clock, sf::Time &tick, BoxTest &box, sf::Sprite &player) {
sf::Vector2u winSize = window.getSize();
float timeStep = 1.0f / 60.0f;
int velocityIterations = 6;
@ -104,8 +96,8 @@ sf::Time Update_entities(sf::RenderWindow &window, b2World &world, sf::Clock &cl
b2Vec2 position = box.body->GetPosition();
float angle = box.body->GetAngle();
player.setPosition(position.x * 100.0f, winSize.y - position.y * 100.0f);
player.setRotation(angle * 180.0f / M_PI);
player.setPosition({position.x * 100.0f, winSize.y - position.y * 100.0f});
player.setRotation(sf::degrees(angle * 180.0f / M_PI));
Window_update(window, player);
@ -113,28 +105,30 @@ sf::Time Update_entities(sf::RenderWindow &window, b2World &world, sf::Clock &cl
}
void Create_player(sf::RenderWindow &window, sf::Sprite &player, sf::Texture &texture) {
sf::Sprite Create_player(sf::RenderWindow &window, sf::Texture &texture) {
if(!texture.loadFromFile("sprite.png")) {
fmt::print("Error loading sprite!");
}
texture.setSmooth(true);
sf::Sprite player(texture);
player.setTexture(texture);
// position the prite
sf::Vector2u winSize = window.getSize();
player.setPosition(winSize.x / 2, winSize.y / 2);
player.setOrigin(50.f, 50.f);
player.setPosition({float(winSize.x) / 2, float(winSize.y) / 2});
player.setOrigin({50.f, 50.f});
return player;
}
int main() {
fmt::print("Setting up a window for you...\n");
sf::ContextSettings settings;
settings.antialiasingLevel = 8;
sf::RenderWindow window(sf::VideoMode(1280, 720), "Simple Game Demo", sf::Style::Default, settings);
sf::RenderWindow window(sf::VideoMode({1280, 720}), "Simple Game Demo");
window.setFramerateLimit(60);
window.setVerticalSyncEnabled(true);
@ -142,16 +136,14 @@ int main() {
if(!buffer.loadFromFile("click.mp3")) {
fmt::print("Failed to load click.ogg!\n");
}
sf::Sound click;
click.setBuffer(buffer);
sf::Sound click(buffer);
sf::Clock deltaClock;
sf::Clock clock;
sf::Time tick = clock.getElapsedTime();
sf::Sprite player;
sf::Texture texture;
Create_player(window, player, texture);
auto player = Create_player(window, texture);
b2Vec2 gravity(0.0f, -10.0f);
b2World world(gravity);
@ -160,6 +152,6 @@ int main() {
while (window.isOpen()) {
Handle_events(window, box, click);
// preparing for refactoring this into a class or struct for everything
tick = Update_entities(window, world, clock, deltaClock, tick, box, player);
tick = Update_entities(window, world, clock, tick, box, player);
}
}