Calamity Engine 1.0.0
A cross-platform 2D game engine written in C++ and SDL3.
Loading...
Searching...
No Matches
Signal< Args > Class Template Reference

#include <signal.hpp>

Public Member Functions

void fire (Args... args)
 
void reset ()
 
void connect (std::function< void(Args...)> cb)
 
void disconnect (std::function< void(Args...)> cb)
 

Public Attributes

bool fired = false
 

Detailed Description

template<typename... Args>
class Signal< Args >

Signal

A signal allows you to connect multiple callbacks to it and fire it with arguments. It's basically a Godot signal (because I like Godot), however with some notable differences:

First off, since Calamity is single-threaded (for now), a signal should generally be used by connecting callbacks:

Signal<int> mySignal;
mySignal.connect([](int value) {
Logger::info("The meaning of life is {}", value);
});
mySignal.fire(42);
// Output: "The meaning of life is 42"
static void info(fmt::format_string< Args... > fmt, Args &&...args)
Definition logger.hpp:28
Definition signal.hpp:53
void connect(std::function< void(Args...)> cb)
Definition signal.hpp:69
void fire(Args... args)
Definition signal.hpp:57

However, if you don't wish to use callbacks and you don't need arguments, you can check if the signal has been fired. For example, you could use this pattern if you want to wait for an AudioSource to finish playing:

std::shared_ptr<AudioSource> source = std::make_shared<AudioSource>("path/to/sound.wav");
source->play();
// then, in an update function (in a script, per se):
if (!source->finishedSignal.fired) return;
Logger::info("Sound finished playing!");
source->finishedSignal.reset();

Since fired is a boolean, to fire a signal again you have to reset it. This is usually done by the code which recieves the signal (like the previous example).

Signal<int> mySignal;
mySignal.connect([](int value) {
Logger::info("The meaning of life is {}", value);
mySignal.reset(); // reset the signal so it can be fired again
});
mySignal.fire(42);
mySignal.fire(43);
// Output: "The meaning of life is 42"
// Output: "The meaning of life is 43"
void reset()
Definition signal.hpp:65

Member Function Documentation

◆ connect()

template<typename... Args>
void Signal< Args >::connect ( std::function< void(Args...)>  cb)
inline

◆ disconnect()

template<typename... Args>
void Signal< Args >::disconnect ( std::function< void(Args...)>  cb)
inline

◆ fire()

template<typename... Args>
void Signal< Args >::fire ( Args...  args)
inline

◆ reset()

template<typename... Args>
void Signal< Args >::reset ( )
inline

Member Data Documentation

◆ fired

template<typename... Args>
bool Signal< Args >::fired = false

The documentation for this class was generated from the following file: