|
|
@@ -20,7 +20,10 @@
|
|
|
|
|
|
struct mock_scene : engine::scene {
|
|
|
mock_scene(std::shared_ptr<engine::game_dispatch> game)
|
|
|
- : engine::scene("mock", {}, game) {}
|
|
|
+ : engine::scene("mock", make_vector(0.f, 0.f), game) {}
|
|
|
+ mock_scene(std::shared_ptr<engine::game_dispatch> game,
|
|
|
+ math::vec2 dim)
|
|
|
+ : engine::scene("mock2", dim, game) {}
|
|
|
MOCK_METHOD1(update, void(float));
|
|
|
MOCK_METHOD0(render, void());
|
|
|
MOCK_METHOD1(handle_key_event, void(engine::event::key_event));
|
|
|
@@ -44,6 +47,7 @@ void GameDispatchTest::SetUp() {
|
|
|
env::resize_screen({{100, 100}});
|
|
|
renderer_.reset(new stub_renderer);
|
|
|
dispatch_.reset(new engine::game_dispatch(renderer_));
|
|
|
+ dispatch_->set_target_fps(env::fps::v60);
|
|
|
scene_.reset(new mock_scene(dispatch_));
|
|
|
game().register_scene(scene_);
|
|
|
game().activate_scene("mock");
|
|
|
@@ -82,6 +86,16 @@ TEST_F(GameDispatchTest, UpdateIsCappedInFrequencyByFPSParam) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+TEST_F(GameDispatchTest, FPSCanBeChanged) {
|
|
|
+ game().set_target_fps(env::fps::v120);
|
|
|
+ auto fps120 = 1.0 / 120.0;
|
|
|
+ EXPECT_CALL(scene(), update(Ge(fps120))).Times(AnyNumber());
|
|
|
+ EXPECT_CALL(scene(), update(Lt(fps120))).Times(0);
|
|
|
+ for (int i = 0; i < 10; i++) {
|
|
|
+ game().update();
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
TEST_F(GameDispatchTest, UpdateHasNoUpperBoundOnTime) {
|
|
|
EXPECT_CALL(scene(), update(Ge(0.03))).Times(1);
|
|
|
usleep(300000);
|
|
|
@@ -110,7 +124,10 @@ TEST_F(MouseEventTest, DispatchesToCurrentScene) {
|
|
|
}
|
|
|
|
|
|
TEST_F(MouseEventTest, TranslatesFrameOfRef) {
|
|
|
- // TODO: Actually set the local scene size element...
|
|
|
+ // Resize the scene (not a supported operation)
|
|
|
+ scene_.reset(new mock_scene(dispatch_, make_vector(10.f, 10.f)));
|
|
|
+ game().register_scene(scene_);
|
|
|
+ game().activate_scene("mock2");
|
|
|
auto mouse_pos = &engine::event::mouse_event::current_mouse_position;
|
|
|
auto const where = make_vector(5.f, 5.f);
|
|
|
EXPECT_CALL(scene(), handle_mouse_event(Field(mouse_pos, where))).Times(1);
|