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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
|
#include "PlayerSubScene.h"
#include "PlayerAudioScript.h"
#include "PlayerEndScript.h"
#include "PlayerScript.h"
#include "../Config.h"
#include <crepe/api/Animator.h>
#include <crepe/api/AudioSource.h>
#include <crepe/api/BoxCollider.h>
#include <crepe/api/CircleCollider.h>
#include <crepe/api/GameObject.h>
#include <crepe/api/ParticleEmitter.h>
#include <crepe/api/Scene.h>
#include <crepe/api/Script.h>
#include <crepe/api/Sprite.h>
#include <crepe/types.h>
using namespace crepe;
using namespace std;
PlayerSubScene::PlayerSubScene(Scene & scn) {
GameObject player = scn.new_object("player", "player", vec2(-100, 200));
Asset player_bullet {"asset/other_effects/effect_smgbullet.png"};
Sprite & player_bullet_sprite = player.add_component<Sprite>(
player_bullet,
Sprite::Data {
.sorting_in_layer = SORT_IN_LAY_PLAYER,
.order_in_layer = 3,
.size = vec2(0, 6),
}
);
player.add_component<ParticleEmitter>(player_bullet_sprite, ParticleEmitter::Data{
.offset = vec2(-15, 15),
.emission_rate = 0,
.min_speed = 300,
.max_speed = 500,
.min_angle = 85,
.max_angle = 100,
.boundary = ParticleEmitter::Boundary {
.height = 400,
.reset_on_exit = true,
},
});
Asset player_bullet_x2 {"asset/other_effects/effect_smgbullet_x2.png"};
Sprite & player_bullet_x2_sprite = player.add_component<Sprite>(
player_bullet_x2,
Sprite::Data {
.sorting_in_layer = SORT_IN_LAY_PLAYER,
.order_in_layer = 3,
.size = vec2(0, 12),
}
);
player.add_component<ParticleEmitter>(player_bullet_x2_sprite, ParticleEmitter::Data{
.offset = vec2(-15, 15),
.emission_rate = 0,
.min_speed = 300,
.max_speed = 500,
.min_angle = 85,
.max_angle = 100,
.boundary = ParticleEmitter::Boundary {
.height = 400,
.reset_on_exit = true,
},
});
Asset player_shell {"asset/other_effects/effect_rocketmgshell_TVOS.png"};
Sprite & player_shell_sprite = player.add_component<Sprite>(
player_shell,
Sprite::Data {
.sorting_in_layer = SORT_IN_LAY_PLAYER,
.order_in_layer = 3,
.size = vec2(0, 12),
.angle_offset = 90,
}
);
player.add_component<ParticleEmitter>(player_shell_sprite, ParticleEmitter::Data{
.offset = vec2(-15, 15),
.emission_rate = 0,
.min_speed = 200,
.max_speed = 500,
.min_angle = 110,
.max_angle = 120,
.force_over_time = vec2(0, 1000),
.boundary = ParticleEmitter::Boundary {
.height = 400,
.reset_on_exit = true,
},
});
Asset player_body_asset {"asset/barry/defaultBody.png"};
Sprite & player_body_sprite = player.add_component<Sprite>(
player_body_asset,
Sprite::Data {
.sorting_in_layer = SORT_IN_LAY_PLAYER,
.order_in_layer = 0,
.size = vec2(0, 50),
}
);
player.add_component<Animator>(
player_body_sprite, ivec2(32, 32), uvec2(4, 8),
Animator::Data {
.fps = 5,
.looping = true,
}
);
player.add_component<BoxCollider>(vec2(50, 50));
Asset player_head_asset {"asset/barry/defaultHead.png"};
Sprite & player_head_sprite = player.add_component<Sprite>(
player_head_asset,
Sprite::Data {
.sorting_in_layer = SORT_IN_LAY_PLAYER,
.order_in_layer = 1,
.size = vec2(0, 50),
.position_offset = vec2(0, -20),
}
);
player.add_component<Animator>(
player_head_sprite, ivec2(32, 32), uvec2(4, 8),
Animator::Data {
.fps = 5,
.looping = true,
}
);
player.add_component<CircleCollider>(25, vec2(0, -20));
Asset player_jetpack_asset {"asset/barry/jetpackDefault.png"};
Sprite & player_jetpack_sprite = player.add_component<Sprite>(
player_jetpack_asset,
Sprite::Data {
.sorting_in_layer = SORT_IN_LAY_PLAYER,
.order_in_layer = 2,
.size = vec2(0, 60),
.position_offset = vec2(-20, 0),
}
);
player_jetpack_sprite.active = false;
player.add_component<Animator>(
player_jetpack_sprite, ivec2(32, 44), uvec2(4, 4),
Animator::Data {
.fps = 5,
.looping = true,
}
);
player.add_component<BoxCollider>(vec2(40, 60), vec2(-20, 0));
player.add_component<Rigidbody>(Rigidbody::Data {
.gravity_scale = PLAYER_GRAVITY_SCALE,
.body_type = Rigidbody::BodyType::DYNAMIC,
.linear_velocity = vec2(PLAYER_SPEED * 0.02, 0),
.collision_layers
= {COLL_LAY_BOT_TOP, COLL_LAY_ZAPPER, COLL_LAY_LASER, COLL_LAY_MISSILE},
.collision_layer = COLL_LAY_PLAYER,
});
player.add_component<BehaviorScript>().set_script<PlayerScript>().active = false;
player.add_component<BehaviorScript>().set_script<PlayerEndScript>().active = false;
GameObject player_audio = scn.new_object("player_audio", "player_audio", vec2(0, 0));
player_audio.add_component<AudioSource>(Asset("asset/sfx/barefoot_step_left_1.ogg"));
player_audio.add_component<AudioSource>(Asset("asset/sfx/barefoot_step_right_1.ogg"));
player_audio.add_component<AudioSource>(Asset("asset/sfx/barefoot_step_left_2.ogg"));
player_audio.add_component<AudioSource>(Asset("asset/sfx/barefoot_step_right_2.ogg"));
player_audio.add_component<AudioSource>(Asset("asset/sfx/barefoot_step_left_3.ogg"));
player_audio.add_component<AudioSource>(Asset("asset/sfx/barefoot_step_right_3.ogg"));
player_audio.add_component<AudioSource>(Asset("asset/sfx/barefoot_step_left_4.ogg"));
player_audio.add_component<AudioSource>(Asset("asset/sfx/barefoot_step_right_4.ogg"));
player_audio.add_component<BehaviorScript>().set_script<PlayerAudioScript>().active
= false;
}
|