mirror of
https://github.com/Kiritow/MiniEngine.git
synced 2024-03-22 13:11:22 +08:00
Add Template Variable Parameter For class Timer
This commit is contained in:
parent
43ff36f8c6
commit
06f2d8e448
|
@ -1257,14 +1257,28 @@ namespace MiniEngine
|
||||||
SDL_StopTextInput();
|
SDL_StopTextInput();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Global Executor For class Timer
|
||||||
|
Uint32 _global_timer_executor(Uint32 interval,void* param)
|
||||||
|
{
|
||||||
|
printf("DEBUG: Global Timer Executor.\n");
|
||||||
|
auto p=reinterpret_cast<std::function<Uint32(Uint32 interval)>*>(param);
|
||||||
|
return (*p)(interval);
|
||||||
|
}
|
||||||
|
|
||||||
Timer::Timer()
|
Timer::Timer()
|
||||||
{
|
{
|
||||||
_enabled=false;
|
_enabled=false;
|
||||||
_detached=false;
|
_detached=false;
|
||||||
|
_delete_on_disable=false;
|
||||||
id=-1;
|
id=-1;
|
||||||
}
|
}
|
||||||
|
|
||||||
Timer::Timer(SDL_TimerCallback callback,Uint32 interval,void* param) : Timer()
|
Timer::Timer(SDL_TimerCallback callback,Uint32 interval,void* param) : Timer()
|
||||||
|
{
|
||||||
|
_real_timer_call(callback,interval,param);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Timer::_real_timer_call(SDL_TimerCallback callback,Uint32 interval,void* param)
|
||||||
{
|
{
|
||||||
_callback=callback;
|
_callback=callback;
|
||||||
_interval=interval;
|
_interval=interval;
|
||||||
|
@ -1293,6 +1307,15 @@ namespace MiniEngine
|
||||||
SDL_RemoveTimer(id);
|
SDL_RemoveTimer(id);
|
||||||
_enabled=false;
|
_enabled=false;
|
||||||
id=-1;
|
id=-1;
|
||||||
|
_callback=nullptr;
|
||||||
|
|
||||||
|
if(_delete_on_disable)
|
||||||
|
{
|
||||||
|
_delete_delegator(reinterpret_cast<std::function<Uint32(Uint32 interval)>*>(_param));
|
||||||
|
_delete_on_disable=false;
|
||||||
|
}
|
||||||
|
|
||||||
|
_param=nullptr;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1314,6 +1337,12 @@ namespace MiniEngine
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//static
|
||||||
|
void Timer::_delete_delegator(std::function<Uint32(Uint32)>* param)
|
||||||
|
{
|
||||||
|
delete param;
|
||||||
|
}
|
||||||
|
|
||||||
AudioPlayer::AudioPlayer()
|
AudioPlayer::AudioPlayer()
|
||||||
{
|
{
|
||||||
if (!_sysAudioCounter)
|
if (!_sysAudioCounter)
|
||||||
|
|
19
MiniEngine.h
19
MiniEngine.h
|
@ -426,24 +426,43 @@ namespace MiniEngine
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Uint32 _global_timer_executor(Uint32 interval,void* param);
|
||||||
|
|
||||||
class Timer
|
class Timer
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Timer();
|
Timer();
|
||||||
/// Uint32 func(Uint32,void*) ...
|
/// Uint32 func(Uint32,void*) ...
|
||||||
|
template<typename Callable,typename... Args>
|
||||||
|
Timer(Callable&& callable,Uint32 interval,Args&&... args) : Timer()
|
||||||
|
{
|
||||||
|
auto realCall=[&](Uint32 interval)->Uint32{return callable(interval,args...);};
|
||||||
|
auto pfunc=new std::function<Uint32(Uint32 interval)>(realCall);
|
||||||
|
_real_timer_call(_global_timer_executor,interval,pfunc);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Restore For Capability
|
||||||
Timer(SDL_TimerCallback callback,Uint32 interval,void* param);
|
Timer(SDL_TimerCallback callback,Uint32 interval,void* param);
|
||||||
|
|
||||||
int enable();
|
int enable();
|
||||||
int disable();
|
int disable();
|
||||||
bool isenable();
|
bool isenable();
|
||||||
void detach();
|
void detach();
|
||||||
~Timer();
|
~Timer();
|
||||||
|
|
||||||
|
static void _delete_delegator(std::function<Uint32(Uint32)>* Delegator);
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
void _real_timer_call(SDL_TimerCallback callback,Uint32 interval,void* param);
|
||||||
|
|
||||||
SDL_TimerCallback _callback;
|
SDL_TimerCallback _callback;
|
||||||
Uint32 _interval;
|
Uint32 _interval;
|
||||||
void* _param;
|
void* _param;
|
||||||
SDL_TimerID id;
|
SDL_TimerID id;
|
||||||
bool _enabled;
|
bool _enabled;
|
||||||
bool _detached;
|
bool _detached;
|
||||||
|
/// Reserved Variable For Template variable Parameter
|
||||||
|
bool _delete_on_disable;
|
||||||
};
|
};
|
||||||
|
|
||||||
class AudioPlayer
|
class AudioPlayer
|
||||||
|
|
Loading…
Reference in New Issue
Block a user