diff --git a/projet-code/scenes_inf443/base/src/bat.cpp b/projet-code/scenes_inf443/base/src/bat.cpp index 1198b79527d5938306c901ecacf9bd0be1b84a74..e6dc8bc079d5462618a458e7d6e1eda487f1ca1e 100644 --- a/projet-code/scenes_inf443/base/src/bat.cpp +++ b/projet-code/scenes_inf443/base/src/bat.cpp @@ -20,6 +20,9 @@ void bat::initialize_mvt(vec3 p, numarray<vec3> key_positions, numarray<float> k timer_mvt.t_min = key_times[0]; timer_mvt.t_max = key_times[NT - 1]; timer_mvt.t = timer_mvt.t_min; + + //bat hitbox + bat_hitbox.initialize_hitbox(1, { {0,0,0} }, { size*6 }, pos); } void bat::update_mvt() diff --git a/projet-code/scenes_inf443/base/src/bat.hpp b/projet-code/scenes_inf443/base/src/bat.hpp index 2b83f21cdca07494b2bca59cb169457ff27254c8..eae5fb1c280b2dcab9ae0c76bb6f03c26a7b3c44 100644 --- a/projet-code/scenes_inf443/base/src/bat.hpp +++ b/projet-code/scenes_inf443/base/src/bat.hpp @@ -2,6 +2,7 @@ #include "cgp/cgp.hpp" #include "key_positions_structure.hpp" +#include "hitbox.hpp" using namespace cgp; @@ -12,6 +13,7 @@ struct bat{ bool isdead; vec3 pos; vec3 pos_futur; + hitbox bat_hitbox; // Timer used for the interpolation of the position cgp::timer_interval timer_mvt; diff --git a/projet-code/scenes_inf443/base/src/hitbox.cpp b/projet-code/scenes_inf443/base/src/hitbox.cpp index 71622fec0787aa1144f1a2047f915475e68009aa..477362662e9022e77622184e3da7b0cb0c4c24eb 100644 --- a/projet-code/scenes_inf443/base/src/hitbox.cpp +++ b/projet-code/scenes_inf443/base/src/hitbox.cpp @@ -1,28 +1,18 @@ #include "hitbox.hpp" -bool hitbox::is_in_hitbox(vec3 pos) { +void hitbox::initialize_hitbox(int _N, std::vector<vec3> _center, std::vector<double> _r, vec3 shift) { + N = _N; + center.resize(N); + r.resize(N); for (int i = 0; i < N; i++) { - if (norm(pos - pos[i]) < r[i]) return true; + center[i] = _center[i] + shift; + r[i] = _r[i]; } - return false; } -void hitbox::initialize_bat(double scale, vec3 posB, vec3 posWL, vec3 posWR) -{ - N = 3; - pos.resize(N); - r.resize(N); - - pos[0] = posB; - r[0] = 1 * scale; - pos[1] = posWL; - r[1] = 0.5 * scale; - pos[2] = posWR; - r[2] = 0.5 * scale; -} - -void hitbox::update_bat(vec3 posB, vec3 posWL, vec3 posWR) { - pos[0] = posB; - pos[1] = posWL; - pos[2] = posWR; +bool hitbox::is_in_hitbox(vec3 pos) { + for (int i = 0; i < N; i++) { + if (norm(pos - center[i]) < r[i]) return true; + } + return false; } \ No newline at end of file diff --git a/projet-code/scenes_inf443/base/src/hitbox.hpp b/projet-code/scenes_inf443/base/src/hitbox.hpp index 41dc9c55bfeae756dd168f8b1324a9a45e0d90dd..2e313853614afa206576179afeaa6e91c2dae68b 100644 --- a/projet-code/scenes_inf443/base/src/hitbox.hpp +++ b/projet-code/scenes_inf443/base/src/hitbox.hpp @@ -7,10 +7,9 @@ using namespace cgp; struct hitbox { int N; - std::vector<vec3> pos; + std::vector<vec3> center; std::vector<double> r; - void initialize_bat(double scale, vec3 posB, vec3 posWL, vec3 posWR); - void update_bat(vec3 posB, vec3 posWL, vec3 posWR); + void initialize_hitbox(int _N, std::vector<vec3> _center, std::vector<double> _r, vec3 shift); bool is_in_hitbox(vec3 pos); }; \ No newline at end of file diff --git a/projet-code/scenes_inf443/base/src/scene.cpp b/projet-code/scenes_inf443/base/src/scene.cpp index 42b330bacb66ac884acce5c14d5e42fff4c4eb48..4d1c51f873ffb27de3df76159cac1ad0a337e7ed 100644 --- a/projet-code/scenes_inf443/base/src/scene.cpp +++ b/projet-code/scenes_inf443/base/src/scene.cpp @@ -290,6 +290,10 @@ void scene_structure::display_projectiles() { projectiles.simulate(timer.scale * 0.03f); for (int i = 0; i < projectiles.N; i++) { + for (int j = 0; j < bats.N; j++) { + if (bats.bats_prop[j].bat_hitbox.is_in_hitbox(projectiles.projectiles_prop[i].pos)) bats.bats_prop[j].isdead = true; + } + projectiles.mesh.model.translation = projectiles.projectiles_prop[i].pos; projectiles.mesh.material.color = projectiles.projectiles_prop[i].color; draw(projectiles.mesh, environment); diff --git a/projet-code/scenes_inf443/base/src/settings.cpp b/projet-code/scenes_inf443/base/src/settings.cpp index 0ada24cf0677cd069a110a696ad0e5bf019edfd1..b05219722df3662646cd0a9125aedc6836e638f1 100644 --- a/projet-code/scenes_inf443/base/src/settings.cpp +++ b/projet-code/scenes_inf443/base/src/settings.cpp @@ -1,8 +1,9 @@ #include "settings.hpp" -int _num_trees = 200; -int _num_grass = 200; -float _terrain_length = 250; +float _terrain_length = 500; +int _num_trees = _terrain_length * 3 / 2; +int _num_grass = _terrain_length * 3 / 2; + int num_trees() { return _num_trees; } int num_grass() { return _num_grass; } diff --git a/projet-code/scenes_inf443/base/src/terrain.cpp b/projet-code/scenes_inf443/base/src/terrain.cpp index 739a9ab8af521eb7647c3898618627c814a3bafe..18c3b94252b73b1b34c705f748d11258668b5812 100644 --- a/projet-code/scenes_inf443/base/src/terrain.cpp +++ b/projet-code/scenes_inf443/base/src/terrain.cpp @@ -18,7 +18,7 @@ float evaluate_terrain_height(float x, float y) } perlin_noise_parameters parameters; - parameters.terrain_height = 25; + parameters.terrain_height = terrain_length()/10; parameters.octave = 9; parameters.frequency_gain = 2.4; parameters.persistency = 0.33; @@ -39,7 +39,7 @@ mesh create_terrain_mesh(int N) terrain.color.resize(N * N); perlin_noise_parameters parameters; - parameters.terrain_height = 6; + parameters.terrain_height = terrain_length()*6/250; parameters.octave = 6; parameters.frequency_gain = 17; parameters.persistency = 0.26; @@ -68,8 +68,10 @@ mesh create_terrain_mesh(int N) //blending parameter for color perlin_noise = parameters.terrain_height * noise_perlin(vec2(3 * x / terrain_length(), 3 * y / terrain_length()), parameters.octave, parameters.persistency, parameters.frequency_gain); - float b = std::min(1.0, exp((z + perlin_noise - 20) / 2) / exp(6)); + float b = std::min(1.0, exp((z + perlin_noise - terrain_length()/10 + 5) / 2) / exp(6)); terrain.color[kv + N * ku] = std::max(0.0f,(1-b))*vec3(0,0.3f,0) + b * 1.5 * vec3(1, 1, 1); + + } }