#if defined(Hiro_Timer) @implementation CocoaTimer : NSObject -(id) initWith:(hiro::mTimer&)timerReference { if(self = [super init]) { timer = &timerReference; instance = nil; } return self; } -(NSTimer*) instance { return instance; } -(void) update { if(instance) { [instance invalidate]; instance = nil; } if(timer->enabled()) { instance = [NSTimer scheduledTimerWithTimeInterval:timer->state.interval / 1000.0 target:self selector:@selector(run:) userInfo:nil repeats:YES ]; } } -(void) run:(NSTimer*)instance { if(hiro::Application::state().quit) return; if(timer->enabled()) { timer->doActivate(); } } @end namespace hiro { auto pTimer::construct() -> void { @autoreleasepool { cocoaTimer = [[CocoaTimer alloc] initWith:self()]; } } auto pTimer::destruct() -> void { @autoreleasepool { if([cocoaTimer instance]) [[cocoaTimer instance] invalidate]; [cocoaTimer release]; } } auto pTimer::setEnabled(bool enabled) -> void { @autoreleasepool { [cocoaTimer update]; } } auto pTimer::setInterval(uint interval) -> void { @autoreleasepool { [cocoaTimer update]; } } } #endif