Bläddra i källkod

Change game_dispatch to a shared_ptr to allow deferred construction with the renderer.

Sam Jaffe 6 år sedan
förälder
incheckning
f34030651b
1 ändrade filer med 10 tillägg och 9 borttagningar
  1. 10 9
      danmaku/GameScene.mm

+ 10 - 9
danmaku/GameScene.mm

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