aboutsummaryrefslogtreecommitdiff
path: root/game/menus/endgame/EndGameSubScene.cpp
blob: 0b72bdc0d47ef6b5a8b65a740ea6a54160717168 (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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#include "EndGameSubScene.h"
#include "EndGameSubScript.h"

#include "../../Config.h"
#include "../ButtonSubScene.h"
#include "../FloatingWindowSubScene.h"

#include <string>

#include <crepe/api/BehaviorScript.h>
#include <crepe/api/GameObject.h>
#include <crepe/api/Text.h>
#include <crepe/types.h>

using namespace crepe;
using namespace std;

void EndGameSubScene::create(Scene & scn) {

	const std::string TAG = "end_game_tag";
	GameObject script = scn.new_object("script");
	script.add_component<BehaviorScript>().set_script<EndGameSubScript>(TAG);

	// Window
	FloatingWindowSubScene window;
	window.create(
		scn,
		FloatingWindowSubScene::Data {
			.group_tag = TAG,
			.width = 500,
			.offset = {0, -50},
			.width_middle_offset = -2,
		}
	);

	// Titel
	const string TITEL_STRING = "GAME OVER";
	GameObject titel = scn.new_object("titel", TAG);
	crepe::vec2 size = {200, (200.0f / TITEL_STRING.size()) * 2};
	titel.add_component<Text>(
		size, FONT,
		Text::Data {
			.world_space = false,
			.text_color = Color::WHITE,
		},
		vec2 {0, -207} + FONTOFFSET, TITEL_STRING
	);

	const float Y_SPACING = 50;
	const float Y_OFFSET = -100;

	// Gold gathered
	const string GOLD_STRING = "gold:0";
	GameObject gold = scn.new_object("gold_endgame", TAG);
	crepe::vec2 size_gold = {200, (200.0f / GOLD_STRING.size()) * 2};
	gold.add_component<Text>(
		size_gold, FONT,
		Text::Data {
			.world_space = false,
			.text_color = Color::GOLD,
		},
		vec2 {0, Y_OFFSET} + FONTOFFSET, GOLD_STRING
	);

	// Distance
	const string DISTANCE_STRING = "0M";
	GameObject distance = scn.new_object("distance_endgame", TAG);
	crepe::vec2 size_distance = {200, (200.0f / DISTANCE_STRING.size()) * 2};
	distance.add_component<Text>(
		size_distance, FONT,
		Text::Data {
			.world_space = false,
			.text_color = Color::WHITE,
		},
		vec2 {0, Y_SPACING+Y_OFFSET} + FONTOFFSET, DISTANCE_STRING
	);

	// Highscore
	const string HIGHSCORE_STRING = "NEW HIGHSCORE";
	GameObject highscore = scn.new_object("highscore_endgame", "highscore_tag_end");
	crepe::vec2 size_highscore = {200, (200.0f / HIGHSCORE_STRING.size()) * 2};
	highscore.add_component<Text>(
		size_highscore, FONT,
		Text::Data {
			.world_space = false,
			.text_color = Color::WHITE,
		},
		vec2 {0, Y_SPACING*2+Y_OFFSET} + FONTOFFSET, HIGHSCORE_STRING
	).active = false;

	// Buttons
	vec2 button_position = {190, 190};
	ButtonSubScene button;
	button.create(
		scn,
		ButtonSubScene::Data {
			.text = "NEXT",
			.text_width = 100,
			.position = button_position,
			.script_type = ButtonSubScene::ScriptSelect::NEXT,
			.button_type = ButtonSubScene::ButtonSelect::NEXT,
			.scale = 0.6,
			.worldspace = false,
			.tag = TAG,
			.sorting_layer_offset = 20,
		}
	);

	button.create(
		scn,
		ButtonSubScene::Data {
			.text = "REPLAY",
			.text_width = 150,
			.position = {-button_position.x, button_position.y},
			.script_type = ButtonSubScene::ScriptSelect::REPLAY,
			.button_type = ButtonSubScene::ButtonSelect::BACK,
			.scale = 0.6,
			.worldspace = false,
			.tag = TAG,
			.sorting_layer_offset = 20,
		}
	);
}