From 179ab139e1bbd908d731f074e4a9fa3309d97464 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?No=C3=A9?= <noe.artru@polytechnique.org>
Date: Tue, 23 May 2023 10:41:11 +0200
Subject: [PATCH] combination, scalability de terrain_length

---
 projet-code/scenes_inf443/base/src/bat.cpp    |  3 ++
 projet-code/scenes_inf443/base/src/bat.hpp    |  2 ++
 projet-code/scenes_inf443/base/src/hitbox.cpp | 32 +++++++------------
 projet-code/scenes_inf443/base/src/hitbox.hpp |  5 ++-
 projet-code/scenes_inf443/base/src/scene.cpp  |  4 +++
 .../scenes_inf443/base/src/settings.cpp       |  7 ++--
 .../scenes_inf443/base/src/terrain.cpp        |  8 +++--
 7 files changed, 31 insertions(+), 30 deletions(-)

diff --git a/projet-code/scenes_inf443/base/src/bat.cpp b/projet-code/scenes_inf443/base/src/bat.cpp
index 1198b79..e6dc8bc 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 2b83f21..eae5fb1 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 71622fe..4773626 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 41dc9c5..2e31385 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 42b330b..4d1c51f 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 0ada24c..b052197 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 739a9ab..18c3b94 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);
+
+
             
         }
     }
-- 
GitLab