POC
This commit is contained in:
53
src/dawn/state/StateProvider.hpp
Normal file
53
src/dawn/state/StateProvider.hpp
Normal 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);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user