114 LOG_ERROR(
"Can't init rendering manager");
119 float real_fps = 1.0f;
121 while (!glfwWindowShouldClose(
window))
123 double currentFrame = glfwGetTime();
124 auto start = std::chrono::steady_clock::now();
127 auto end = start + std::chrono::microseconds(1000000 / 60);
137 ImGui_ImplOpenGL3_NewFrame();
138 ImGui_ImplGlfw_NewFrame();
146 ImGui::SetNextWindowPos(ImVec2(0, 0));
147 ImGui::SetNextWindowSize(ImVec2(290, 70));
149 ImGui::Begin(
"Position",
nullptr, ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoCollapse);
150 ImGui::Text(
"%f, %f, %f", position.
x, position.
y, position.
z);
157 ImGui::SetNextWindowPos(ImVec2(0, 75));
158 ImGui::SetNextWindowSize(ImVec2(290, 70));
159 ImGui::Begin(
"Targeted cube",
nullptr, ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoCollapse);
165 6.0f, raycasted_pos, raycasted_normal);
166 if (raycasted_blockstate !=
nullptr)
168 ImGui::Text(
"Watching block at %i, %i, %i", raycasted_pos.
x, raycasted_pos.
y, raycasted_pos.
z);
169 ImGui::Text(
"Block: %s", raycasted_blockstate->
GetName().c_str());
170 if (ImGui::IsItemHovered(ImGuiHoveredFlags_::ImGuiHoveredFlags_AllowWhenDisabled))
172 ImGui::BeginTooltip();
174 ImGui::Text(
"Air: "); ImGui::SameLine(); raycasted_blockstate->
IsAir() ? ImGui::TextColored(ImVec4(0.0, 1.0, 0.0, 1.0),
"1") : ImGui::TextColored(ImVec4(1.0, 0.0, 0.0, 1.0),
"0");
175 ImGui::Text(
"Solid: "); ImGui::SameLine(); raycasted_blockstate->
IsSolid() ? ImGui::TextColored(ImVec4(0.0, 1.0, 0.0, 1.0),
"1") : ImGui::TextColored(ImVec4(1.0, 0.0, 0.0, 1.0),
"0");
176 ImGui::Text(
"Transparent: "); ImGui::SameLine(); raycasted_blockstate->
IsTransparent() ? ImGui::TextColored(ImVec4(0.0, 1.0, 0.0, 1.0),
"1") : ImGui::TextColored(ImVec4(1.0, 0.0, 0.0, 1.0),
"0");
177 ImGui::Text(
"Lava: "); ImGui::SameLine(); raycasted_blockstate->
IsLava() ? ImGui::TextColored(ImVec4(0.0, 1.0, 0.0, 1.0),
"1") : ImGui::TextColored(ImVec4(1.0, 0.0, 0.0, 1.0),
"0");
178 ImGui::Text(
"Water: "); ImGui::SameLine(); raycasted_blockstate->
IsWater() ? ImGui::TextColored(ImVec4(0.0, 1.0, 0.0, 1.0),
"1") : ImGui::TextColored(ImVec4(1.0, 0.0, 0.0, 1.0),
"0");
179 ImGui::Text(
"Waterlogged: "); ImGui::SameLine(); raycasted_blockstate->
IsWaterlogged() ? ImGui::TextColored(ImVec4(0.0, 1.0, 0.0, 1.0),
"1") : ImGui::TextColored(ImVec4(1.0, 0.0, 0.0, 1.0),
"0");
180 ImGui::Text(
"Fluid Falling: "); ImGui::SameLine(); raycasted_blockstate->
IsFluidFalling() ? ImGui::TextColored(ImVec4(0.0, 1.0, 0.0, 1.0),
"1") : ImGui::TextColored(ImVec4(1.0, 0.0, 0.0, 1.0),
"0");
181 ImGui::Text(
"Climbable: "); ImGui::SameLine(); raycasted_blockstate->
IsClimbable() ? ImGui::TextColored(ImVec4(0.0, 1.0, 0.0, 1.0),
"1") : ImGui::TextColored(ImVec4(1.0, 0.0, 0.0, 1.0),
"0");
182 ImGui::Text(
"Hazardous: "); ImGui::SameLine(); raycasted_blockstate->
IsHazardous() ? ImGui::TextColored(ImVec4(0.0, 1.0, 0.0, 1.0),
"1") : ImGui::TextColored(ImVec4(1.0, 0.0, 0.0, 1.0),
"0");
183 ImGui::Text(
"Slime: "); ImGui::SameLine(); raycasted_blockstate->
IsSlime() ? ImGui::TextColored(ImVec4(0.0, 1.0, 0.0, 1.0),
"1") : ImGui::TextColored(ImVec4(1.0, 0.0, 0.0, 1.0),
"0");
184 ImGui::Text(
"Bed: "); ImGui::SameLine(); raycasted_blockstate->
IsBed() ? ImGui::TextColored(ImVec4(0.0, 1.0, 0.0, 1.0),
"1") : ImGui::TextColored(ImVec4(1.0, 0.0, 0.0, 1.0),
"0");
185 ImGui::Text(
"Soul Sand: "); ImGui::SameLine(); raycasted_blockstate->
IsSoulSand() ? ImGui::TextColored(ImVec4(0.0, 1.0, 0.0, 1.0),
"1") : ImGui::TextColored(ImVec4(1.0, 0.0, 0.0, 1.0),
"0");
186 ImGui::Text(
"Honey: "); ImGui::SameLine(); raycasted_blockstate->
IsHoney() ? ImGui::TextColored(ImVec4(0.0, 1.0, 0.0, 1.0),
"1") : ImGui::TextColored(ImVec4(1.0, 0.0, 0.0, 1.0),
"0");
187 ImGui::Text(
"Scaffolding: "); ImGui::SameLine(); raycasted_blockstate->
IsScaffolding() ? ImGui::TextColored(ImVec4(0.0, 1.0, 0.0, 1.0),
"1") : ImGui::TextColored(ImVec4(1.0, 0.0, 0.0, 1.0),
"0");
188 ImGui::Text(
"Cobweb: "); ImGui::SameLine(); raycasted_blockstate->
IsCobweb() ? ImGui::TextColored(ImVec4(0.0, 1.0, 0.0, 1.0),
"1") : ImGui::TextColored(ImVec4(1.0, 0.0, 0.0, 1.0),
"0");
189 ImGui::Text(
"UpBubbleColumn: "); ImGui::SameLine(); raycasted_blockstate->
IsUpBubbleColumn() ? ImGui::TextColored(ImVec4(0.0, 1.0, 0.0, 1.0),
"1") : ImGui::TextColored(ImVec4(1.0, 0.0, 0.0, 1.0),
"0");
190 ImGui::Text(
"DownBubbleColumn: "); ImGui::SameLine(); raycasted_blockstate->
IsDownBubbleColumn() ? ImGui::TextColored(ImVec4(0.0, 1.0, 0.0, 1.0),
"1") : ImGui::TextColored(ImVec4(1.0, 0.0, 0.0, 1.0),
"0");
191 ImGui::Text(
"Berry Bush: "); ImGui::SameLine(); raycasted_blockstate->
IsBerryBush() ? ImGui::TextColored(ImVec4(0.0, 1.0, 0.0, 1.0),
"1") : ImGui::TextColored(ImVec4(1.0, 0.0, 0.0, 1.0),
"0");
192 ImGui::Text(
"Powder Snow: "); ImGui::SameLine(); raycasted_blockstate->
IsPowderSnow() ? ImGui::TextColored(ImVec4(0.0, 1.0, 0.0, 1.0),
"1") : ImGui::TextColored(ImVec4(1.0, 0.0, 0.0, 1.0),
"0");
193 ImGui::Text(
"Fluid Height: "); ImGui::SameLine(); ImGui::TextUnformatted(std::to_string(raycasted_blockstate->
GetFluidHeight()).data());
194 ImGui::Text(
"Hardness: "); ImGui::SameLine(); ImGui::TextUnformatted(std::to_string(raycasted_blockstate->
GetHardness()).data());
195 ImGui::Text(
"Friction: "); ImGui::SameLine(); ImGui::TextUnformatted(std::to_string(raycasted_blockstate->
GetFriction()).data());
202 ImGui::Text(
"Watching block at");
203 ImGui::Text(
"Block: ");
208 const float current_day_time =
day_time;
209 std::vector<float> current_color(3);
210 for (
int i = 0; i < 3; ++i)
212 current_color[i] = 2.0f * ((0.5f - std::abs(current_day_time - 0.5f)) *
color_day[i] + (0.5f - std::min(std::abs(1.0f - current_day_time), current_day_time)) *
color_night[i]);
214 glClearColor(current_color[0], current_color[1], current_color[2], 1.0f);
215 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
223 my_shader->SetMat4(
"projection", projection);
236 int num_chunks, num_rendered_chunks, num_entities, num_rendered_entities, num_faces, num_rendered_faces;
237 world_renderer->RenderFaces(&num_chunks, &num_rendered_chunks, &num_entities, &num_rendered_entities, &num_faces, &num_rendered_faces);
239 ImGui::SetNextWindowPos(ImVec2(
static_cast<float>(
current_window_width), 0.0f), 0, ImVec2(1.0f, 0.0f));
240 ImGui::SetNextWindowSize(ImVec2(180.0f, 170.0f));
241 ImGui::Begin(
"Rendering",
nullptr, ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoCollapse);
243 ImGui::Text(
"Real FPS: %.1f (%.2fms)", 1.0 / real_fps, real_fps * 1000.0);
244 ImGui::Text(
"Loaded sections: %i", num_chunks);
245 ImGui::Text(
"Rendered sections: %i", num_rendered_chunks);
246 ImGui::Text(
"Num entities: %i", num_entities);
247 ImGui::Text(
"Rendered entities: %i", num_rendered_entities);
248 ImGui::Text(
"Loaded faces: %i", num_faces);
249 ImGui::Text(
"Rendered faces: %i", num_rendered_faces);
256 glBindVertexArray(0);
257 glBindTexture(GL_TEXTURE_2D, 0);
263 const int blackboard_width =
static_cast<int>((
static_cast<float>(
current_window_width) - 30.0f) / 4.0f);
265 ImGui::SetNextWindowPos(ImVec2(15.0f, 15.0f), 0, ImVec2(0.0f, 0.0f));
267 ImGui::Begin(
"Blackboard",
nullptr, ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_HorizontalScrollbar | ImGuiWindowFlags_NoCollapse);
271 ImGui::SetNextWindowPos(ImVec2(15.0f + blackboard_width, 15.0f), 0, ImVec2(0.0f, 0.0f));
273 ImGui::Begin(
"Behaviour",
nullptr, ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoCollapse);
283 ImGui::Begin(
"Inventory",
nullptr, ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoCollapse);
286 const std::map<short, ProtocolCraft::Slot>& slots =
inventory_manager->GetPlayerInventory()->GetSlots();
289 auto it = slots.find(i);
290 if (it == slots.end())
296 ImGui::Text(
"Crafting output");
300 ImGui::Text(
"Crafting input");
304 ImGui::Text(
"Equiped Armor");
308 ImGui::Text(
"Inventory");
312 ImGui::Text(
"Hotbar");
316 ImGui::Text(
"Offhand");
319 if (name !=
"minecraft:air")
321 ImGui::Text(std::string(
" (%i) " + name +
" (x%i)").c_str(), i, it->second.GetItemCount());
332 ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());
348 real_fps =
static_cast<float>(std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::steady_clock::now() - start).count() / 1e6);
360 ImGui_ImplOpenGL3_Shutdown();
361 ImGui_ImplGlfw_Shutdown();
362 ImGui::DestroyContext();
365 glfwDestroyWindow(
window);