summaryrefslogtreecommitdiff
path: root/csgo-loader/csgo-client/UserExperience/UserInterface.cpp
blob: f8f465f4c46ff7cd3607afdfbd5c22eabdd800e6 (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
64
65
#include <UserExperience/UserInterface.hpp>

#include <UserExperience/MoneybotShared/d3d_sprite.hpp>
#include <UserExperience/MoneybotShared/window.hpp>
#include <UserExperience/MoneybotShared/ui.h>

// Global accessor for the user interface.
UserExperience::UserInterfacePtr UserInterface = std::make_unique<UserExperience::UserInterface>();

namespace UserExperience {
	void OnDirectXFrame() {
		if(g_d3d.run_frame(g_window.m_d3d_device)) {
			g_d3d.begin();
			for(auto& it : d3d::sprites) {
				it->begin(g_window.m_d3d_device);
			}

			static auto last_time = GetTickCount() * 0.001f;
			auto cur_time = GetTickCount() * 0.001f;

			auto deltatime = cur_time - last_time;

			last_time = cur_time;

			constexpr float anim_step = 1.0f / 15.f;
			static float anim_time = 0.f;
			static bool flip = false;
			if(anim_time == 1.0f) {
				flip = true;
			}
			if(anim_time == 0.f) {
				flip = false;
			}

			if(flip) anim_time = std::clamp(anim_time - anim_step * deltatime, 0.f, 1.0f);
			else anim_time = std::clamp(anim_time + anim_step * deltatime, 0.f, 1.0f);

			ui::set_animtime(anim_time);
			ui::render();

			RECT cur_rect{ };
			GetWindowRect(g_window.get_hwnd(), &cur_rect);

			g_d3d.end();
			for(auto& it : d3d::sprites) {
				it->end();
			}
		}
	}

	bool UserInterface::Start() {
		bool result = g_window.create();
		
		if(result) {
			std::this_thread::sleep_for(std::chrono::milliseconds(100));
			g_window.add_on_frame(&OnDirectXFrame);
		}

		return result;
	}

	void UserInterface::RunUiFrame() {
		g_window.on_frame();
	}
}