Calamity Engine 1.0.0
A cross-platform 2D game engine written in C++ and SDL3.
Loading...
Searching...
No Matches
signal.hpp
Go to the documentation of this file.
1#pragma once
2#include <functional>
3#include <algorithm>
4#include <vector>
5
6// btw, this signal class is genuinely so simple that it doesn't need to have a c++ file, i do have a signal.cpp file but it's there for "futureproofing" lmao
7
52template<typename... Args>
53class Signal {
54public:
55 bool fired = false;
56
57 void fire(Args... args) {
58 if(fired) return;
59 fired = true;
60 for (const auto& callback : callbacks) {
61 callback(args...);
62 }
63 }
64
65 void reset() {
66 fired = false;
67 }
68
69 void connect(std::function<void(Args...)> cb) {
70 callbacks.push_back(cb);
71 }
72
73 void disconnect(std::function<void(Args...)> cb) {
74 callbacks.erase(std::remove(callbacks.begin(), callbacks.end(), cb), callbacks.end());
75 }
76
77private:
78 std::vector<std::function<void(Args...)>> callbacks;
79};
Definition signal.hpp:53
void connect(std::function< void(Args...)> cb)
Definition signal.hpp:69
void fire(Args... args)
Definition signal.hpp:57
void disconnect(std::function< void(Args...)> cb)
Definition signal.hpp:73
void reset()
Definition signal.hpp:65
bool fired
Definition signal.hpp:55
float callback(b2ShapeId shapeId, b2Vec2 point, b2Vec2 normal, float fraction, void *context)
Definition definitions.cpp:108