Browse Source

Fixing up keys a little (in progress)...
Add graphics utilities to osx_env.mm
Use double for delta-time.

Sam Jaffe 6 years ago
parent
commit
f4fc222ab7

+ 10 - 11
engine/include/game/engine/events.hpp

@@ -13,17 +13,16 @@
 #include "engine_fwd.hpp"
 
 namespace engine {
-  namespace key {
-    enum default_keys : key_enum_t {
-      FORWARD,
-      LEFT,
-      BACKWARD,
-      RIGHT,
-      JUMP,
-      CROUCH,
-      INTERACT,
-      QUIT
-    };
+  namespace keys {
+    enum default_keys : key_enum_t { QUIT = 'q' };
+    extern key_enum_t const UP_ARROW;
+    extern key_enum_t const DOWN_ARROW;
+    extern key_enum_t const LEFT_ARROW;
+    extern key_enum_t const RIGHT_ARROW;
+    extern key_enum_t const MOD_SHIFT;
+    extern key_enum_t const MOD_CONTROL;
+    extern key_enum_t const MOD_ALT;
+    extern key_enum_t const MOD_COMMAND;
   }
 
   namespace event {

+ 2 - 2
engine/include/game/engine/game_dispatch.hpp

@@ -30,9 +30,9 @@ namespace engine {
     void quit();
 
   private:
-    void single_frame(tick t) {}
+    void single_frame(double) {}
     tick get_tick();
-    tick next_frame();
+    double next_frame();
     void cleanup_resources() {} // TODO ???
   private:
     math::vec2 screen_size;

+ 10 - 0
engine/src/events.cpp

@@ -6,3 +6,13 @@
 //
 
 #include "game/engine/events.hpp"
+
+engine::key_enum_t const engine::keys::RIGHT_ARROW = 0x0CF;
+engine::key_enum_t const engine::keys::LEFT_ARROW = 0x0D0;
+engine::key_enum_t const engine::keys::DOWN_ARROW = 0x0D1;
+engine::key_enum_t const engine::keys::UP_ARROW = 0x0D2;
+
+engine::key_enum_t const engine::keys::MOD_CONTROL = 0x160; // 0x164
+engine::key_enum_t const engine::keys::MOD_SHIFT = 0x161;   // 0x165
+engine::key_enum_t const engine::keys::MOD_ALT = 0x162;     // 0x166
+engine::key_enum_t const engine::keys::MOD_COMMAND = 0x163; // 0x167

+ 2 - 2
engine/src/game_dispatch.cpp

@@ -53,7 +53,7 @@ namespace engine {
     return {now, now - current_timestamp};
   }
 
-  tick game_dispatch::next_frame() {
+  double game_dispatch::next_frame() {
     tick t = get_tick();
 
     while (t.since < minimum_frame_duration) {
@@ -62,7 +62,7 @@ namespace engine {
     }
 
     current_timestamp = t.now;
-    return t;
+    return std::chrono::duration<double>(t.since).count();
   }
 
   void game_dispatch::gameloop() try {

+ 1 - 1
engine/src/scene.cpp

@@ -41,7 +41,7 @@ void scene::render() {
 }
 
 void scene::handle_key_event(event::key_event evt) {
-  if (evt.type & event::PRESSED_MASK && evt.key == key::QUIT) {
+  if (evt.type & event::PRESSED_MASK && evt.key == keys::QUIT) {
     dispatch_.lock()->quit();
   }
 }

+ 14 - 2
util/gameutils.xcodeproj/project.pbxproj

@@ -10,6 +10,7 @@
 		CD62FD04229195FF00376440 /* files.cxx in Sources */ = {isa = PBXBuildFile; fileRef = CD62FD02229195FF00376440 /* files.cxx */; };
 		CD62FD082291988F00376440 /* osx_env.mm in Sources */ = {isa = PBXBuildFile; fileRef = CD62FD072291988F00376440 /* osx_env.mm */; };
 		CD7E87772295FA1F00D877FE /* time.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CD7E876F2295FA1F00D877FE /* time.cpp */; };
+		CD7E884822960F4800D877FE /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD7E884722960F4800D877FE /* AppKit.framework */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXContainerItemProxy section */
@@ -51,6 +52,7 @@
 		CD62FD02229195FF00376440 /* files.cxx */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = files.cxx; sourceTree = "<group>"; };
 		CD62FD072291988F00376440 /* osx_env.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = osx_env.mm; sourceTree = "<group>"; };
 		CD7E876F2295FA1F00D877FE /* time.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = time.cpp; sourceTree = "<group>"; };
+		CD7E884722960F4800D877FE /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -58,6 +60,7 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				CD7E884822960F4800D877FE /* AppKit.framework in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -71,6 +74,7 @@
 				CD62FCFF2291953700376440 /* game */,
 				CD3AC70A1D2C0726002B4BB0 /* src */,
 				CD3AC7091D2C0726002B4BB0 /* Products */,
+				CD7E884622960F4700D877FE /* Frameworks */,
 			);
 			sourceTree = "<group>";
 		};
@@ -104,6 +108,14 @@
 			name = Products;
 			sourceTree = "<group>";
 		};
+		CD7E884622960F4700D877FE /* Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+				CD7E884722960F4800D877FE /* AppKit.framework */,
+			);
+			name = Frameworks;
+			sourceTree = "<group>";
+		};
 /* End PBXGroup section */
 
 /* Begin PBXHeadersBuildPhase section */
@@ -287,7 +299,7 @@
 				MTL_ENABLE_DEBUG_INFO = YES;
 				ONLY_ACTIVE_ARCH = YES;
 				SDKROOT = macosx;
-				USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/include $(PROJECT_DIR)/../include/";
+				USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/include $(PROJECT_DIR)/../include/ $(PROJECT_DIR)/../math/ $(PROJECT_DIR)/../math/include/ $(PROJECT_DIR)/../include/expect/include/";
 			};
 			name = Debug;
 		};
@@ -334,7 +346,7 @@
 				MACOSX_DEPLOYMENT_TARGET = 10.10;
 				MTL_ENABLE_DEBUG_INFO = NO;
 				SDKROOT = macosx;
-				USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/include $(PROJECT_DIR)/../include/";
+				USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/include $(PROJECT_DIR)/../include/ $(PROJECT_DIR)/../math/ $(PROJECT_DIR)/../math/include/ $(PROJECT_DIR)/../include/expect/include/";
 			};
 			name = Release;
 		};

+ 4 - 0
util/include/game/util/env.hpp

@@ -10,6 +10,10 @@
 
 #include <string>
 
+#include "game/math/math_fwd.hpp"
+
 namespace env {
   std::string resource_file(std::string const & relative_path);
+  void resize_screen(math::vec2i const & size);
+  math::vec2i screen_size();
 }

+ 30 - 0
util/src/osx_env.mm

@@ -10,6 +10,8 @@
 
 #import <Cocoa/Cocoa.h>
 
+#include "vector/vector.hpp"
+
 namespace {
   NSUInteger encoding = NSUTF8StringEncoding;
   NSString* translate(std::string const & str) {
@@ -32,4 +34,32 @@ namespace env {
     char const* abs_path = [url cStringUsingEncoding:encoding];
     return abs_path ? std::string(abs_path) : std::string();
   }
+  
+  namespace detail {
+    math::vec2i init_screen() {
+      NSRect frame = [[NSView focusView] frame];
+      return make_vector(static_cast<int>(frame.size.width),
+                         static_cast<int>(frame.size.height));
+    }
+    
+    math::vec2i screenSize = init_screen();
+    
+    void resize_screen(math::vec2i const& size) {
+      screenSize = size;
+    }
+  }
+  
+  math::vec2i screen_resolution() {
+    return detail::screenSize * 2; // TODO: aquire this programmatically
+  }
+  
+  math::vec2i screen_size() {
+    return detail::screenSize;
+  }
+  
+  void resize_screen(math::vec2i const& size) {
+    NSSize sz = NSMakeSize(size[0], size[1]);
+    [[NSView focusView] setFrameSize:sz];
+    detail::resize_screen(size);
+  }
 }