From 1630d6a7ce3b5b8ed62e5e0ab4186e892b37ed46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=A9?= <noe.artru@polytechnique.org> Date: Wed, 3 May 2023 22:02:42 +0200 Subject: [PATCH] Added throwing projectiles (balls), just left click --- projet-code/scenes_inf443/base/src/ball.cpp | 17 +++++++++++++++-- projet-code/scenes_inf443/base/src/ball.hpp | 3 ++- projet-code/scenes_inf443/base/src/scene.cpp | 18 +++++++++++++++++- projet-code/scenes_inf443/base/src/scene.hpp | 2 ++ 4 files changed, 36 insertions(+), 4 deletions(-) diff --git a/projet-code/scenes_inf443/base/src/ball.cpp b/projet-code/scenes_inf443/base/src/ball.cpp index 5644ea4..b6fcb67 100644 --- a/projet-code/scenes_inf443/base/src/ball.cpp +++ b/projet-code/scenes_inf443/base/src/ball.cpp @@ -1,10 +1,10 @@ #include "ball.hpp" #include "terrain.hpp" -void ball::initialize() +void ball::initialize(int n) { - N = 10; + N = n; pos.resize(N); v.resize(N); color.resize(N); @@ -18,6 +18,19 @@ void ball::initialize() } } +void ball::add_ball(vec3 new_pos, vec3 new_dir) { + N++; + pos.resize(N); + v.resize(N); + color.resize(N); + + + color[N-1] = { rand_interval(0.0f, 1.0f), rand_interval(0.0f, 1.0f), rand_interval(0.0f, 1.0f) }; + pos[N-1] = new_pos; + v[N-1] = new_dir; + +} + void ball::simulate(float dt, float terrain_length) { for (int i = 0; i < N; i++) { if (pos[i][2] < -1 || cgp::abs(pos[i][0]) > terrain_length / 2 || cgp::abs(pos[i][1]) > terrain_length / 2) { diff --git a/projet-code/scenes_inf443/base/src/ball.hpp b/projet-code/scenes_inf443/base/src/ball.hpp index 03af3f6..c1fa967 100644 --- a/projet-code/scenes_inf443/base/src/ball.hpp +++ b/projet-code/scenes_inf443/base/src/ball.hpp @@ -13,8 +13,9 @@ struct ball { mesh_drawable mesh; - void initialize(); + void initialize(int n); void simulate(float dt, float terrain_length); + void add_ball(vec3 new_pos, vec3 new_dir); }; vec3 terrain_orientation(float x, float y, float terrain_length); diff --git a/projet-code/scenes_inf443/base/src/scene.cpp b/projet-code/scenes_inf443/base/src/scene.cpp index 382fee9..7278b0f 100644 --- a/projet-code/scenes_inf443/base/src/scene.cpp +++ b/projet-code/scenes_inf443/base/src/scene.cpp @@ -93,8 +93,9 @@ void scene_structure::initialize() bird1.initialize_bird(); initialize_mvt(); chain1.initialize(); - bouncing.initialize(); + bouncing.initialize(10); //10 balls bat1.initialize_bat(); + projectiles.initialize(0); } void scene_structure::initialize_mvt() @@ -163,6 +164,7 @@ void scene_structure::display_frame() display_chain(p); display_ball(); display_bat(p); + display_projectiles(); if (gui.display_wireframe) @@ -353,6 +355,16 @@ void scene_structure::display_ball() { } } +void scene_structure::display_projectiles() { + + projectiles.simulate(timer_chain.scale * 0.01f, terrain_length); + for (int i = 0; i < projectiles.N; i++) { + projectiles.mesh.model.translation = projectiles.pos[i]; + projectiles.mesh.material.color = projectiles.color[i]; + draw(projectiles.mesh, environment); + } +} + void scene_structure::mouse_move_event() { if (!inputs.keyboard.shift) @@ -360,6 +372,10 @@ void scene_structure::mouse_move_event() } void scene_structure::mouse_click_event() { + if (camera_control.inputs->mouse.click.left){ + //std::cout << "ball created"; + projectiles.add_ball(camera_control.camera_model.position_camera + 2*camera_control.camera_model.front(), 20*camera_control.camera_model.front()); + } camera_control.action_mouse_click(environment.camera_view); } void scene_structure::keyboard_event() diff --git a/projet-code/scenes_inf443/base/src/scene.hpp b/projet-code/scenes_inf443/base/src/scene.hpp index c92a6f7..08c7976 100644 --- a/projet-code/scenes_inf443/base/src/scene.hpp +++ b/projet-code/scenes_inf443/base/src/scene.hpp @@ -71,6 +71,7 @@ struct scene_structure : cgp::scene_inputs_generic { bird bird1; chain chain1; bat bat1; + ball projectiles; // ****************************** // // Functions @@ -95,6 +96,7 @@ struct scene_structure : cgp::scene_inputs_generic { void draw_segment(vec3 const& a, vec3 const& b); void display_ball(); + void display_projectiles(); }; -- GitLab