aboutsummaryrefslogtreecommitdiff
path: root/src/example/Hallway.cpp
blob: 5d01a96c40cbb2510a8faa166fa22e5ddd700d3a (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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#include "Hallway.h"

#include <crepe/api/Animator.h>
#include <crepe/api/Asset.h>
#include <crepe/api/BehaviorScript.h>
#include <crepe/api/BoxCollider.h>
#include <crepe/api/Camera.h>
#include <crepe/api/CircleCollider.h>
#include <crepe/api/Color.h>
#include <crepe/api/Event.h>
#include <crepe/api/GameObject.h>
#include <crepe/api/LoopManager.h>
#include <crepe/api/Rigidbody.h>
#include <crepe/api/Scene.h>
#include <crepe/api/Script.h>
#include <crepe/api/Sprite.h>
#include <crepe/api/Transform.h>
#include <crepe/api/Vector2.h>
#include <iostream>

using namespace crepe;
using namespace std;

float Hallway::create(Scene & scn, float begin_x, unsigned int sector_num,
					  Color sector_color) {
	GameObject begin = scn.new_object("hallway_begin", "background", vec2(begin_x, 0));
	Asset begin_asset{"asset/jetpack_joyride/background/hallway/hallway1FG_1_TVOS.png"};
	begin.add_component<Sprite>(begin_asset, Sprite::Data{
												 .sorting_in_layer = 4,
												 .order_in_layer = 0,
												 .size = vec2(0, 800),
											 });
	begin_x += 600;

	this->add_sector_number(begin, vec2(-200, 0), sector_num, sector_color);
	this->add_lamp(begin, vec2(-70, -120), 11);
	this->add_lamp(begin, vec2(30, -120), 9);

	GameObject middle_1 = scn.new_object("hallway_middle", "background", vec2(begin_x, 0));
	Asset middle_asset{"asset/jetpack_joyride/background/hallway/hallway1FG_2_TVOS.png"};
	middle_1.add_component<Sprite>(middle_asset, Sprite::Data{
													 .sorting_in_layer = 4,
													 .order_in_layer = 2,
													 .size = vec2(0, 800),
												 });
	begin_x += 600;

	GameObject middle_2 = scn.new_object("hallway_middle", "background", vec2(begin_x, 0));
	Asset middle_asset_2{"asset/jetpack_joyride/background/hallway/hallway1FG_2_TVOS.png"};
	middle_2.add_component<Sprite>(middle_asset_2, Sprite::Data{
													   .sorting_in_layer = 4,
													   .order_in_layer = 3,
													   .size = vec2(0, 800),
												   });
	begin_x += 200;

	GameObject middle_3 = scn.new_object("hallway_middle", "background", vec2(begin_x, 0));
	Asset middle_asset_3{"asset/jetpack_joyride/background/hallway/hallway1FG_2_TVOS.png"};
	middle_3.add_component<Sprite>(middle_asset_3, Sprite::Data{
													   .sorting_in_layer = 4,
													   .order_in_layer = 4,
													   .size = vec2(0, 800),
												   });
	begin_x += 400;

	this->add_lamp(middle_3, vec2(0, -120));

	GameObject middle_4 = scn.new_object("hallway_middle", "background", vec2(begin_x, 0));
	Asset middle_asset_4{"asset/jetpack_joyride/background/hallway/hallway1FG_2_TVOS.png"};
	middle_4.add_component<Sprite>(middle_asset_4, Sprite::Data{
													   .sorting_in_layer = 4,
													   .order_in_layer = 5,
													   .size = vec2(0, 800),
												   });
	begin_x += 600;

	GameObject end = scn.new_object("hallway_end", "background", vec2(begin_x, 0));
	Asset end_asset{"asset/jetpack_joyride/background/hallway/hallway1FG_1_TVOS.png"};
	end.add_component<Sprite>(end_asset, Sprite::Data{
											 .sorting_in_layer = 4,
											 .order_in_layer = 1,
											 .size = vec2(0, 800),
										 });
	begin_x += 600;

	return begin_x;
}

void Hallway::add_lamp(GameObject & obj, vec2 offset, unsigned int fps) {
	Asset lamp_asset{"asset/jetpack_joyride/background/hallway/alarmLight_TVOS.png"};
	obj.add_component<Sprite>(lamp_asset, Sprite::Data{
											  .sorting_in_layer = 5,
											  .order_in_layer = 0,
											  .size = vec2(0, 100),
											  .position_offset = offset,
										  });
	Asset lamp_glow_asset{"asset/jetpack_joyride/background/hallway/alarmGlow_TVOS.png"};
	Sprite & lamp_glow_sprite = obj.add_component<Sprite>(
		lamp_glow_asset, Sprite::Data{
							 .sorting_in_layer = 5,
							 .order_in_layer = 1,
							 .size = vec2(0, 300),
							 .position_offset = offset - vec2(65, -30),
						 });
	obj.add_component<Animator>(lamp_glow_sprite, ivec2(422, 384), uvec2(6, 1),
								Animator::Data{
									.fps = fps,
									.looping = true,
								});
}

void Hallway::add_sector_number(GameObject & obj, vec2 offset, unsigned int sector_num,
								Color sector_color) {
	Asset sector_text_asset{"asset/jetpack_joyride/background/hallway/sectorText_TVOS.png"};
	obj.add_component<Sprite>(sector_text_asset, Sprite::Data{
													 .color = sector_color,
													 .sorting_in_layer = 5,
													 .order_in_layer = 0,
													 .size = vec2(0, 100),
													 .position_offset = offset,
												 });
	Asset sector_num_asset{"asset/jetpack_joyride/background/hallway/sectorNumbers_TVOS.png"};
	Sprite & sector_num_sprite = obj.add_component<Sprite>(
		sector_num_asset, Sprite::Data{
							  .color = sector_color,
							  .sorting_in_layer = 5,
							  .order_in_layer = 0,
							  .size = vec2(0, 100),
							  .position_offset = offset + vec2(200, 0),
						  });
	Animator & sector_num_anim = obj.add_component<Animator>(
		sector_num_sprite, ivec2(256, 128), uvec2(4, 4), Animator::Data{});
	int column = (sector_num - 1) / 4;
	int row = (sector_num - 1) % 4;
	sector_num_anim.set_anim(column);
	for (int i = 0; i < row; i++) {
		sector_num_anim.next_anim();
	}
	sector_num_anim.pause();
}