From 0d78332f2b82438a4cc47df4a4f923c2b23a7a38 Mon Sep 17 00:00:00 2001 From: LaG1924 <12997935+LaG1924@users.noreply.github.com> Date: Mon, 22 Apr 2019 00:34:40 +0500 Subject: Second iteration of changing to single-threaded model --- src/Game.cpp | 41 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 5 deletions(-) (limited to 'src/Game.cpp') diff --git a/src/Game.cpp b/src/Game.cpp index 927cdc2..a3f2b50 100644 --- a/src/Game.cpp +++ b/src/Game.cpp @@ -12,6 +12,7 @@ State state; std::unique_ptr nc; std::unique_ptr gs; std::unique_ptr render; +std::unique_ptr timer; EventListener listener; void InitEvents() { @@ -126,6 +127,7 @@ void InitEvents() { default: break; } + LOG(INFO) << "Changed key"; }); listener.RegisterHandler("MouseMove", [](const Event& eventData) { @@ -136,23 +138,33 @@ void InitEvents() { }); listener.RegisterHandler("ReceivedPacket", [](const Event& eventData) { + if (!gs) + return; std::shared_ptr packet = eventData.get>(); gs->UpdatePacket(packet); }); listener.RegisterHandler("LmbPressed",[](const Event& eventData) { + if (!gs) + return; gs->StartDigging(); }); listener.RegisterHandler("LmbReleased",[](const Event& eventData) { + if (!gs) + return; gs->CancelDigging(); }); listener.RegisterHandler("RmbPressed", [](const Event& eventData) { + if (!gs) + return; gs->PlaceBlock(); }); listener.RegisterHandler("SelectedBlockChanged", [](const Event& eventData) { + if (!gs) + return; //TODO: //gs->CancelDigging(); }); @@ -161,17 +173,32 @@ void InitEvents() { void RunGame() { InitEvents(); + timer = std::make_unique(std::chrono::milliseconds(16)); + render = std::make_unique(900, 480, "AltCraft"); - SetState(State::MainMenu); - LoopExecutionTimeController time(std::chrono::milliseconds(16)); + SetState(State::MainMenu); while (isRunning) { listener.HandleAllEvents(); - if (gs) - gs->Update(time.GetDeltaS()); + if (gs) { + if (GetState() == State::Playing) { + if (isMoving[GameState::FORWARD]) + gs->HandleMovement(GameState::FORWARD, timer->GetRealDeltaS()); + if (isMoving[GameState::BACKWARD]) + gs->HandleMovement(GameState::BACKWARD, timer->GetRealDeltaS()); + if (isMoving[GameState::LEFT]) + gs->HandleMovement(GameState::LEFT, timer->GetRealDeltaS()); + if (isMoving[GameState::RIGHT]) + gs->HandleMovement(GameState::RIGHT, timer->GetRealDeltaS()); + if (isMoving[GameState::JUMP]) + gs->HandleMovement(GameState::JUMP, timer->GetRealDeltaS()); + } + + gs->Update(timer->GetRealDeltaS()); + } render->Update(); - time.Update(); + timer->Update(); } render.reset(); @@ -198,3 +225,7 @@ Render *GetRender() { NetworkClient *GetNetworkClient() { return nc.get(); } + +LoopExecutionTimeController* GetTime() { + return timer.get(); +} -- cgit v1.2.3