|
@@ -21,7 +21,7 @@ namespace env { namespace detail {
|
|
|
|
|
|
|
|
@implementation GameScene {
|
|
@implementation GameScene {
|
|
|
std::shared_ptr<graphics::direct_renderer> renderer;
|
|
std::shared_ptr<graphics::direct_renderer> renderer;
|
|
|
- engine::game_dispatch game;
|
|
|
|
|
|
|
+ std::shared_ptr<engine::game_dispatch> game;
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
- (id)initWithFrame:(NSRect)aRect {
|
|
- (id)initWithFrame:(NSRect)aRect {
|
|
@@ -41,10 +41,11 @@ namespace env { namespace detail {
|
|
|
// make the context current
|
|
// make the context current
|
|
|
[[self openGLContext] makeCurrentContext];
|
|
[[self openGLContext] makeCurrentContext];
|
|
|
|
|
|
|
|
|
|
+ // rest of your init method ...
|
|
|
using namespace graphics;
|
|
using namespace graphics;
|
|
|
renderer = std::make_shared<direct_renderer>(driver::openGL);
|
|
renderer = std::make_shared<direct_renderer>(driver::openGL);
|
|
|
|
|
+ game = std::make_shared<engine::game_dispatch>(renderer);
|
|
|
|
|
|
|
|
- // rest of your init method ...
|
|
|
|
|
return self;
|
|
return self;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -64,7 +65,7 @@ namespace env { namespace detail {
|
|
|
|
|
|
|
|
env::detail::resize_screen({{(int)dirtyRect.size.width,
|
|
env::detail::resize_screen({{(int)dirtyRect.size.width,
|
|
|
(int)dirtyRect.size.height}});
|
|
(int)dirtyRect.size.height}});
|
|
|
- game.render();
|
|
|
|
|
|
|
+ game->render();
|
|
|
// glFlush();
|
|
// glFlush();
|
|
|
// the correct way to do double buffering on Mac is this:
|
|
// the correct way to do double buffering on Mac is this:
|
|
|
[[self openGLContext] flushBuffer];
|
|
[[self openGLContext] flushBuffer];
|
|
@@ -98,14 +99,14 @@ namespace env { namespace detail {
|
|
|
- (void) press_key:(int)key forEvent:(NSEvent *)evt ns_key:(int)local
|
|
- (void) press_key:(int)key forEvent:(NSEvent *)evt ns_key:(int)local
|
|
|
down:(BOOL)pressed {
|
|
down:(BOOL)pressed {
|
|
|
if ([evt keyCode] == local) {
|
|
if ([evt keyCode] == local) {
|
|
|
- game.process_key_event(key, pressed);
|
|
|
|
|
|
|
+ game->process_key_event(key, pressed);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- (void) toggle_key:(int)key forEvent:(NSEvent *)evt ns_key:(int)local {
|
|
- (void) toggle_key:(int)key forEvent:(NSEvent *)evt ns_key:(int)local {
|
|
|
NSUInteger flags = [evt modifierFlags] &
|
|
NSUInteger flags = [evt modifierFlags] &
|
|
|
NSEventModifierFlagDeviceIndependentFlagsMask;
|
|
NSEventModifierFlagDeviceIndependentFlagsMask;
|
|
|
- game.process_key_event(key, flags & local);
|
|
|
|
|
|
|
+ game->process_key_event(key, flags & local);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- (void)keyDown:(NSEvent *)theEvent {
|
|
- (void)keyDown:(NSEvent *)theEvent {
|
|
@@ -136,7 +137,7 @@ namespace env { namespace detail {
|
|
|
[self press_key:RIGHT_ARROW forEvent:theEvent ns_key:0x007c down:YES];
|
|
[self press_key:RIGHT_ARROW forEvent:theEvent ns_key:0x007c down:YES];
|
|
|
|
|
|
|
|
// NSLog(@"keyDown -> { 0x%04x, 0x%08lx, 0x%02x=%c }", [theEvent keyCode], [theEvent modifierFlags], c, c);
|
|
// NSLog(@"keyDown -> { 0x%04x, 0x%08lx, 0x%02x=%c }", [theEvent keyCode], [theEvent modifierFlags], c, c);
|
|
|
- game.process_key_event(c, true);
|
|
|
|
|
|
|
+ game->process_key_event(c, true);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- (void)keyUp:(NSEvent *)theEvent {
|
|
- (void)keyUp:(NSEvent *)theEvent {
|
|
@@ -155,7 +156,7 @@ namespace env { namespace detail {
|
|
|
[self press_key:LEFT_ARROW forEvent:theEvent ns_key:0x007b down:NO];
|
|
[self press_key:LEFT_ARROW forEvent:theEvent ns_key:0x007b down:NO];
|
|
|
[self press_key:RIGHT_ARROW forEvent:theEvent ns_key:0x007c down:NO];
|
|
[self press_key:RIGHT_ARROW forEvent:theEvent ns_key:0x007c down:NO];
|
|
|
|
|
|
|
|
- game.process_key_event(c, false);
|
|
|
|
|
|
|
+ game->process_key_event(c, false);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
static NSTimer *timer = nil;
|
|
static NSTimer *timer = nil;
|
|
@@ -197,12 +198,12 @@ static NSTimeInterval const FRAME_INTERVAL = 1.0 / 60.0;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- (void)renderEvent:(NSTimer *)t {
|
|
- (void)renderEvent:(NSTimer *)t {
|
|
|
- game.render();
|
|
|
|
|
|
|
+ game->render();
|
|
|
[[self openGLContext] flushBuffer];
|
|
[[self openGLContext] flushBuffer];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- (void)timerEvent:(NSTimer *)t {
|
|
- (void)timerEvent:(NSTimer *)t {
|
|
|
- game.update();
|
|
|
|
|
|
|
+ game->update();
|
|
|
[self setNeedsDisplay:YES];
|
|
[self setNeedsDisplay:YES];
|
|
|
}
|
|
}
|
|
|
|
|
|