summaryrefslogtreecommitdiff
path: root/src/game.cpp
blob: a48cbfe648bd02d4ce382f89a4721be943d4584d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63

#include "game.hpp"
#include "imgui.h"

GameSettings pkeSettings{};

const uint64_t consoleBufferCount = 30;
const uint64_t consoleLineLength = 128;

char consoleBuffer[consoleBufferCount][consoleLineLength];
long consoleBufferIndex = 0;

void GameTick(double delta) {
	/*
	 * ECS_Tick() gets called first because it updates the public
	 *  `EntitiesToBeRemoved` for all other ticks to use.
	 */
	ECS_Tick(delta);
}

void RecordImGuiConsole(bool *pOpen) {
	static bool scrollToBottom = true;
	if (!ImGui::Begin("Console", pOpen)) {
		ImGui::End();
		return;
	}
	ImVec2 region = ImGui::GetContentRegionAvail();
	region.y -= 27;
	if (ImGui::BeginListBox("##ConsoleHistory", region)) {
		for (long i = consoleBufferIndex + 1; i < consoleBufferCount; ++i) {
			ImGui::Text("%s", consoleBuffer[i]);
		}
		for (long i = 0; i < consoleBufferIndex; ++i) {
			ImGui::Text("%s", consoleBuffer[i]);
		}
		if (scrollToBottom) ImGui::SetScrollHereY(1);
		scrollToBottom = false;
		ImGui::EndListBox();
	}
	ImGui::Separator();
	if (ImGui::InputText("##ConsoleInput", consoleBuffer[consoleBufferIndex], consoleLineLength, ImGuiInputTextFlags_EnterReturnsTrue)) {
		// TODO parse and execute.
		scrollToBottom = true;
		consoleBufferIndex = (consoleBufferIndex + 1) % consoleBufferCount;
		memset(consoleBuffer[consoleBufferIndex], '\0', consoleLineLength);
	}
	auto flags = (ImGuiFocusedFlags_ChildWindows);
	if (ImGui::IsWindowFocused(flags) && !ImGui::IsAnyItemFocused() && !ImGui::IsMouseClicked(ImGuiMouseButton_Left) && !ImGui::IsMouseClicked(ImGuiMouseButton_Left, true)) {
		ImGui::SetKeyboardFocusHere(-1);
	}
	ImGui::End();
}

void RecordImGuiEditor() {
	RecordImGuiConsole(&pkeSettings.isShowingEditor);
}

void GameInit() {
	for (long i = 0; i < consoleBufferCount; ++i) {
		memset(consoleBuffer[i], '\0', consoleLineLength);
	}
	RegisterCallback("RenderImGui", RecordImGuiEditor);
}