This commit is contained in:
2023-03-09 22:52:22 -08:00
parent 12b6f4091d
commit f69312e9f9
16 changed files with 448 additions and 423 deletions

View File

@ -0,0 +1,53 @@
// Copyright (c) 2023 Dominic Masters
//
// This software is released under the MIT License.
// https://opensource.org/licenses/MIT
#pragma once
#include "state/State.hpp"
namespace Dawn {
class SceneItemComponent;
template<typename D, typename...A>
struct StateListener {
std::function<void(A...)> callback;
D data;
};
template<typename D, typename...A>
struct StateProviderSet {
private:
std::vector<StateListener<D,A...>> listeners;
public:
std::function<void()> addEffect(
std::function<void(A...)> callback,
D data
) {
struct StateListener<D, A...> l;
l.callback = callback;
l.data = data;
this->listeners.push_back(l);
l.callback();
return std::bind([&](struct StateListener<D, A...> listener) {
assertUnreachable();
}, l);
}
};
class TimeProvider {
public:
StateProviderSet<float_t> effect;
};
std::function<void()> useTimeout(
std::function<void()> someCallback,
float_t timeout,
SceneItemComponent *context
) {
return (TimeProvider()).effect.addEffect(someCallback, timeout);
}
}