projectiles.cpp 2.97 KiB
#include "objects/projectiles.hpp"
#include "terrain.hpp"
void projectiles::initialize()
{
N = 0;
projectiles_prop.resize(N);
mesh.initialize_data_on_gpu(mesh_primitive_sphere(0.1f));
fire_animation = image_load_file("assets/fireframes.png");
fire_grid = image_split_grid(fire_animation, 4, 3);
cgp::mesh sphere_mesh = mesh_primitive_sphere(0.2);
fireball.initialize_data_on_gpu(sphere_mesh);
fireball.texture.initialize_texture_2d_on_gpu(fire_grid[2]);
fireball.texture.update_wrap(GL_REPEAT, GL_REPEAT);
water_animation = image_load_file("assets/water.png");
water_grid = image_split_grid(water_animation, 3, 2);
waterball.initialize_data_on_gpu(sphere_mesh);
waterball.texture.initialize_texture_2d_on_gpu(water_grid[2]);
waterball.texture.update_wrap(GL_REPEAT, GL_REPEAT);
ice_animation = image_load_file("assets/spriteice.png");
ice_grid = image_split_grid(ice_animation, 4, 4);
iceball.initialize_data_on_gpu(sphere_mesh);
iceball.texture.initialize_texture_2d_on_gpu(ice_grid[2]);
iceball.texture.update_wrap(GL_REPEAT, GL_REPEAT);
electro_animation = image_load_file("assets/electroball2.png");
electro_grid = image_split_grid(electro_animation, 1, 1);
electroball.initialize_data_on_gpu(sphere_mesh);
electroball.texture.initialize_texture_2d_on_gpu(electro_grid[0]);
electroball.texture.update_wrap(GL_REPEAT, GL_REPEAT);
rock_animation = image_load_file("assets/rock_debris.png");
rock_grid = image_split_grid(rock_animation, 1, 1);
rockball.initialize_data_on_gpu(sphere_mesh);
rockball.texture.initialize_texture_2d_on_gpu(rock_grid[0]);
rockball.texture.update_wrap(GL_REPEAT, GL_REPEAT);
}
void projectiles::reset() {
N = 0;
projectiles_prop.resize(N);
}
void projectiles::add_ball(vec3 new_pos, vec3 new_dir, int element) {
N++;
projectiles_prop.resize(N);
projectiles_prop[N - 1].is_active = true;
projectiles_prop[N - 1].pos = new_pos;
projectiles_prop[N - 1].v = new_dir;
projectiles_prop[N - 1].elemental_type = el_types[element];
if (projectiles_prop[N - 1].elemental_type == projectile::projectile_type::fire) {
projectiles_prop[N - 1].color = {0.886, 0.345, 0.133};
}else if (projectiles_prop[N - 1].elemental_type == projectile::projectile_type::ice) {
projectiles_prop[N - 1].color = {1,1,1};
}else if (projectiles_prop[N - 1].elemental_type == projectile::projectile_type::rock) {
projectiles_prop[N - 1].color = {0.3,0.22,0.2};
}else if (projectiles_prop[N - 1].elemental_type == projectile::projectile_type::electric) {
projectiles_prop[N - 1].color = {1, 1, 0.2 };
}else if (projectiles_prop[N - 1].elemental_type == projectile::projectile_type::water) {
projectiles_prop[N - 1].color = {0, 0, 1 };
}
}
void projectiles::simulate(float dt) {
for (int i = 0; i < N; i++) {