From 41eff8f5b15c1df88a3ca25a8fc37abe4073cc9e Mon Sep 17 00:00:00 2001 From: MatusGuy <85036874+MatusGuy@users.noreply.github.com> Date: Tue, 5 Sep 2023 13:08:08 +0100 Subject: [PATCH 01/40] code style fix for bump functions Co-authored-by: Tobias Markus --- src/badguy/zeekling.cpp | 51 +++++++++++++++++++---------------------- 1 file changed, 23 insertions(+), 28 deletions(-) diff --git a/src/badguy/zeekling.cpp b/src/badguy/zeekling.cpp index 6b728f10f55..fafd2f71f17 100644 --- a/src/badguy/zeekling.cpp +++ b/src/badguy/zeekling.cpp @@ -56,24 +56,15 @@ Zeekling::collision_squished(GameObject& object) void Zeekling::onBumpHorizontal() { - if (state == FLYING) { - m_dir = (m_dir == Direction::LEFT ? Direction::RIGHT : Direction::LEFT); - set_action(m_dir); - m_physic.set_velocity_x(m_dir == Direction::LEFT ? -speed : speed); - } else - if (state == DIVING) { - m_dir = (m_dir == Direction::LEFT ? Direction::RIGHT : Direction::LEFT); - state = FLYING; - set_action(m_dir); - m_physic.set_velocity(m_dir == Direction::LEFT ? -speed : speed, 0); - } else - if (state == CLIMBING) { - m_dir = (m_dir == Direction::LEFT ? Direction::RIGHT : Direction::LEFT); - set_action(m_dir); - m_physic.set_velocity_x(m_dir == Direction::LEFT ? -speed : speed); - } else { - assert(false); - } + m_dir = (m_dir == Direction::LEFT ? Direction::RIGHT : Direction::LEFT); + set_action(m_dir); + m_physic.set_velocity_x(m_dir == Direction::LEFT ? -speed : speed); + + if (state == DIVING) + { + state = FLYING; + m_physic.set_velocity_y(0); + } } void @@ -84,18 +75,22 @@ Zeekling::onBumpVertical() m_physic.set_velocity(0, 0); return; } - if (state == FLYING) { - m_physic.set_velocity_y(0); - } else - if (state == DIVING) { + + switch (state) { + case DIVING: state = CLIMBING; - m_physic.set_velocity_y(-speed); set_action(m_dir); - } else - if (state == CLIMBING) { - state = FLYING; - m_physic.set_velocity_y(0); - } + break; + + case CLIMBING: + state = FLYING; + break; + + default: + break; + } + + m_physic.set_velocity_y(state == CLIMBING ? -speed : 0); } void From 1037d4e85fc38265572023f44169b94a91125155 Mon Sep 17 00:00:00 2001 From: MatusGuy <85036874+MatusGuy@users.noreply.github.com> Date: Tue, 5 Sep 2023 13:37:33 +0100 Subject: [PATCH 02/40] code style polish for zeekling Co-authored-by: Tobias Markus --- src/badguy/zeekling.cpp | 74 +++++++++++++++++++++-------------------- src/badguy/zeekling.hpp | 4 +-- 2 files changed, 40 insertions(+), 38 deletions(-) diff --git a/src/badguy/zeekling.cpp b/src/badguy/zeekling.cpp index fafd2f71f17..fcab7851226 100644 --- a/src/badguy/zeekling.cpp +++ b/src/badguy/zeekling.cpp @@ -54,7 +54,7 @@ Zeekling::collision_squished(GameObject& object) } void -Zeekling::onBumpHorizontal() +Zeekling::on_bump_horizontal() { m_dir = (m_dir == Direction::LEFT ? Direction::RIGHT : Direction::LEFT); set_action(m_dir); @@ -68,7 +68,7 @@ Zeekling::onBumpHorizontal() } void -Zeekling::onBumpVertical() +Zeekling::on_bump_vertical() { if (BadGuy::get_state() == STATE_BURNING) { @@ -97,21 +97,23 @@ void Zeekling::collision_solid(const CollisionHit& hit) { if (m_frozen) - BadGuy::collision_solid(hit); - else { - if (m_sprite->get_action() == "squished-left" || + BadGuy::collision_solid(hit); + return; + } + + if (m_sprite->get_action() == "squished-left" || m_sprite->get_action() == "squished-right") - { - return; - } - - if (hit.top || hit.bottom) { - onBumpVertical(); - } - else if (hit.left || hit.right) { - onBumpHorizontal(); - } + { + return; + } + + if (hit.top || hit.bottom) { + on_bump_vertical(); + } + else if (hit.left || hit.right) + { + on_bump_horizontal(); } } @@ -170,28 +172,28 @@ Zeekling::should_we_dive() void Zeekling::active_update(float dt_sec) { - if (state == FLYING) { - if (should_we_dive()) { - state = DIVING; - m_physic.set_velocity_y(2*fabsf(m_physic.get_velocity_x())); - set_action("dive", m_dir); - } - BadGuy::active_update(dt_sec); - return; - } else if (state == DIVING) { - BadGuy::active_update(dt_sec); - return; - } else if (state == CLIMBING) { - // Stop climbing when we're back at initial height. - if (get_pos().y <= m_start_position.y) { - state = FLYING; - m_physic.set_velocity_y(0); - } - BadGuy::active_update(dt_sec); - return; - } else { - assert(false); + switch (state) { + case FLYING: + if (should_we_dive()) { + state = DIVING; + m_physic.set_velocity_y(2 * fabsf(m_physic.get_velocity_x())); + set_action("dive", m_dir); + } + break; + + case CLIMBING: + // Stop climbing when we're back at initial height. + if (get_pos().y <= m_start_position.y) { + state = FLYING; + m_physic.set_velocity_y(0); + } + break; + + default: + break; } + + BadGuy::active_update(dt_sec); } void diff --git a/src/badguy/zeekling.hpp b/src/badguy/zeekling.hpp index 73577595821..92e5891e42d 100644 --- a/src/badguy/zeekling.hpp +++ b/src/badguy/zeekling.hpp @@ -44,8 +44,8 @@ class Zeekling final : public BadGuy virtual bool collision_squished(GameObject& object) override; bool should_we_dive(); - void onBumpHorizontal(); - void onBumpVertical(); + void on_bump_horizontal(); + void on_bump_vertical(); private: enum ZeeklingState { From 29fcf4e4bdeeff61c5276728d793af0767f9dede Mon Sep 17 00:00:00 2001 From: MatusGuy <85036874+MatusGuy@users.noreply.github.com> Date: Tue, 5 Sep 2023 21:27:23 +0100 Subject: [PATCH 03/40] swoop up then down (looks rough) --- src/badguy/zeekling.cpp | 25 ++++++++++++++++++------- src/badguy/zeekling.hpp | 3 ++- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/badguy/zeekling.cpp b/src/badguy/zeekling.cpp index fcab7851226..fcc19f7da80 100644 --- a/src/badguy/zeekling.cpp +++ b/src/badguy/zeekling.cpp @@ -19,6 +19,7 @@ #include +#include "math/easing.hpp" #include "math/random.hpp" #include "object/player.hpp" #include "sprite/sprite.hpp" @@ -26,7 +27,8 @@ Zeekling::Zeekling(const ReaderMapping& reader) : BadGuy(reader, "images/creatures/zeekling/zeekling.sprite"), speed(gameRandom.randf(130.0f, 171.0f)), - diveRecoverTimer(), + m_easing_progress(0.0), + m_swoop_up_timer(), state(FLYING), last_player(nullptr), last_player_pos(0.0f, 0.0f), @@ -174,11 +176,23 @@ void Zeekling::active_update(float dt_sec) { switch (state) { case FLYING: - if (should_we_dive()) { + if (state != DIVING && should_we_dive()) + { + // swoop a bit up state = DIVING; - m_physic.set_velocity_y(2 * fabsf(m_physic.get_velocity_x())); - set_action("dive", m_dir); + m_physic.set_velocity_y(2 * -(fabsf(m_physic.get_velocity_x()))); + m_swoop_up_timer.start(0.2f); + set_action("charge", m_dir); } + + break; + + case DIVING: + if (!m_swoop_up_timer.check()) break; + + // swoop down + set_action("dive", m_dir); + m_physic.set_velocity_y(2 * fabsf(m_physic.get_velocity_x())); break; case CLIMBING: @@ -188,9 +202,6 @@ Zeekling::active_update(float dt_sec) { m_physic.set_velocity_y(0); } break; - - default: - break; } BadGuy::active_update(dt_sec); diff --git a/src/badguy/zeekling.hpp b/src/badguy/zeekling.hpp index 92e5891e42d..0a324b347b7 100644 --- a/src/badguy/zeekling.hpp +++ b/src/badguy/zeekling.hpp @@ -56,7 +56,8 @@ class Zeekling final : public BadGuy private: float speed; - Timer diveRecoverTimer; + double m_easing_progress; + Timer m_swoop_up_timer; ZeeklingState state; const MovingObject* last_player; /**< Last player we tracked. */ Vector last_player_pos; /**< Position we last spotted the player at. */ From 8e0a31dd42fc2b05b7c66fa9567ec4ea9b162ca7 Mon Sep 17 00:00:00 2001 From: MatusGuy <85036874+MatusGuy@users.noreply.github.com> Date: Thu, 7 Sep 2023 10:34:46 +0100 Subject: [PATCH 04/40] zeekling raycast detection --- src/badguy/zeekling.cpp | 67 ++++++++++++++--------------------------- 1 file changed, 23 insertions(+), 44 deletions(-) diff --git a/src/badguy/zeekling.cpp b/src/badguy/zeekling.cpp index fcc19f7da80..f5bee79c032 100644 --- a/src/badguy/zeekling.cpp +++ b/src/badguy/zeekling.cpp @@ -21,8 +21,10 @@ #include "math/easing.hpp" #include "math/random.hpp" +#include "math/vector.hpp" #include "object/player.hpp" #include "sprite/sprite.hpp" +#include "supertux/sector.hpp" Zeekling::Zeekling(const ReaderMapping& reader) : BadGuy(reader, "images/creatures/zeekling/zeekling.sprite"), @@ -92,7 +94,7 @@ Zeekling::on_bump_vertical() break; } - m_physic.set_velocity_y(state == CLIMBING ? -speed : 0); + m_physic.set_velocity_y(state == CLIMBING ? -speed : 0); } void @@ -119,57 +121,34 @@ Zeekling::collision_solid(const CollisionHit& hit) } } -/** Linear prediction of player and badguy positions to decide if we should enter the DIVING state. */ bool Zeekling::should_we_dive() { - if (m_frozen) - return false; - - const auto player = get_nearest_player(); - if (player && last_player && (player == last_player)) { - - // Get positions and calculate movement. - const Vector& player_pos = player->get_pos(); - const Vector player_mov = (player_pos - last_player_pos); - const Vector self_pos = m_col.m_bbox.p1(); - const Vector self_mov = (self_pos - last_self_pos); - - // New vertical speed to test with. - float vy = 2*fabsf(self_mov.x); - - // Do not dive if we are not above the player. - float height = player_pos.y - self_pos.y; - if (height <= 0) return false; + if (m_frozen) return false; - // Do not dive if we are too far above the player. - if (height > 512) return false; + // Left/rightmost point of the hitbox. + Vector eye; + const Rectf& bbox = get_bbox().grown(1.f); + eye = bbox.get_middle(); + eye.x = m_dir == Direction::LEFT ? bbox.get_left() : bbox.get_right(); - // Do not dive if we would not descend faster than the player. - float relSpeed = vy - player_mov.y; - if (relSpeed <= 0) return false; + const Vector& plrmid = get_nearest_player()->get_bbox().get_middle(); - // Guess number of frames to descend to same height as player. - float estFrames = height / relSpeed; + // Do not dive if we are not above the player. + float height = plrmid.y - eye.y; + if (height <= 0) return false; - // Guess where the player would be at this time. - float estPx = (player_pos.x + (estFrames * player_mov.x)); + // Do not dive if we are too far above the player. + if (height > 512) return false; - // Guess where we would be at this time. - float estBx = (self_pos.x + (estFrames * self_mov.x)); - - // Allow for slight inaccuracies. - if (fabsf(estPx - estBx) < 8) return true; - } - - // Update the last player tracked, as well as our positions. - last_player = player; - if (player) { - last_player_pos = player->get_pos(); - last_self_pos = m_col.m_bbox.p1(); - } + const Vector& rangeend = {eye.x + ((plrmid.y - eye.y) * + (m_dir == Direction::LEFT ? -1 : 1)), + plrmid.y}; - return false; + // FIXME: Give the actual object that hit the raycast, or at least the hitbox + // to avoid having to raycast a bunch of times + return !Sector::get().free_line_of_sight(eye, rangeend, false, this) && + Sector::get().can_see_player(eye); } void @@ -204,7 +183,7 @@ Zeekling::active_update(float dt_sec) { break; } - BadGuy::active_update(dt_sec); + BadGuy::active_update(dt_sec); } void From ae544c8cd0102dd59da5b1a2908d1bc8ab857077 Mon Sep 17 00:00:00 2001 From: MatusGuy <85036874+MatusGuy@users.noreply.github.com> Date: Thu, 7 Sep 2023 21:12:21 +0100 Subject: [PATCH 05/40] easing up/down --- src/badguy/zeekling.cpp | 41 +++++++++++++++++++++++++++++++---------- src/badguy/zeekling.hpp | 3 ++- 2 files changed, 33 insertions(+), 11 deletions(-) diff --git a/src/badguy/zeekling.cpp b/src/badguy/zeekling.cpp index f5bee79c032..e752ffb99dc 100644 --- a/src/badguy/zeekling.cpp +++ b/src/badguy/zeekling.cpp @@ -30,7 +30,7 @@ Zeekling::Zeekling(const ReaderMapping& reader) : BadGuy(reader, "images/creatures/zeekling/zeekling.sprite"), speed(gameRandom.randf(130.0f, 171.0f)), m_easing_progress(0.0), - m_swoop_up_timer(), + m_charge_timer(), state(FLYING), last_player(nullptr), last_player_pos(0.0f, 0.0f), @@ -83,6 +83,7 @@ Zeekling::on_bump_vertical() switch (state) { case DIVING: state = CLIMBING; + m_easing_progress = 0.0; set_action(m_dir); break; @@ -155,23 +156,40 @@ void Zeekling::active_update(float dt_sec) { switch (state) { case FLYING: - if (state != DIVING && should_we_dive()) + if (!should_we_dive()) break; + + // swoop a bit up + state = CHARGING; + set_action("charge", m_dir); + m_charge_timer.start(0.4f); + + [[fallthrough]]; + + case CHARGING: + { + if (m_charge_timer.check()) { - // swoop a bit up state = DIVING; - m_physic.set_velocity_y(2 * -(fabsf(m_physic.get_velocity_x()))); - m_swoop_up_timer.start(0.2f); - set_action("charge", m_dir); + set_action("dive", m_dir); + break; } + double easing_progress = static_cast(m_charge_timer.get_timegone() / + m_charge_timer.get_period()); + + m_physic.set_velocity_y(-325 * QuarticEaseInOut(easing_progress)); break; + } case DIVING: - if (!m_swoop_up_timer.check()) break; + if (m_easing_progress >= 1.0) break; // swoop down - set_action("dive", m_dir); - m_physic.set_velocity_y(2 * fabsf(m_physic.get_velocity_x())); + m_easing_progress += 0.1; + m_physic.set_velocity_y(2 * + fabsf(m_physic.get_velocity_x()) * + std::min(5.0, QuarticEaseIn(m_easing_progress))); + break; case CLIMBING: @@ -181,9 +199,12 @@ Zeekling::active_update(float dt_sec) { m_physic.set_velocity_y(0); } break; + + default: + break; } - BadGuy::active_update(dt_sec); + BadGuy::active_update(dt_sec); } void diff --git a/src/badguy/zeekling.hpp b/src/badguy/zeekling.hpp index 0a324b347b7..4a981290d03 100644 --- a/src/badguy/zeekling.hpp +++ b/src/badguy/zeekling.hpp @@ -50,6 +50,7 @@ class Zeekling final : public BadGuy private: enum ZeeklingState { FLYING, + CHARGING, DIVING, CLIMBING }; @@ -57,7 +58,7 @@ class Zeekling final : public BadGuy private: float speed; double m_easing_progress; - Timer m_swoop_up_timer; + Timer m_charge_timer; ZeeklingState state; const MovingObject* last_player; /**< Last player we tracked. */ Vector last_player_pos; /**< Position we last spotted the player at. */ From 35e94770bf4f237f8f1f884faeaaad3d7159ec21 Mon Sep 17 00:00:00 2001 From: MatusGuy <85036874+MatusGuy@users.noreply.github.com> Date: Sat, 9 Sep 2023 11:21:20 +0100 Subject: [PATCH 06/40] remove unused fields --- src/badguy/zeekling.hpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/badguy/zeekling.hpp b/src/badguy/zeekling.hpp index 4a981290d03..1e8cabf68db 100644 --- a/src/badguy/zeekling.hpp +++ b/src/badguy/zeekling.hpp @@ -60,9 +60,6 @@ class Zeekling final : public BadGuy double m_easing_progress; Timer m_charge_timer; ZeeklingState state; - const MovingObject* last_player; /**< Last player we tracked. */ - Vector last_player_pos; /**< Position we last spotted the player at. */ - Vector last_self_pos; /**< Position we last were at. */ private: Zeekling(const Zeekling&) = delete; From 95020a854f2a6c10ff5633461ac982cb98252f57 Mon Sep 17 00:00:00 2001 From: Marty <85036874+MatusGuy@users.noreply.github.com> Date: Sat, 9 Sep 2023 11:33:05 +0100 Subject: [PATCH 07/40] forgot to remove them in initializer list oopsies --- src/badguy/zeekling.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/badguy/zeekling.cpp b/src/badguy/zeekling.cpp index e752ffb99dc..fba0e1f8c38 100644 --- a/src/badguy/zeekling.cpp +++ b/src/badguy/zeekling.cpp @@ -31,10 +31,7 @@ Zeekling::Zeekling(const ReaderMapping& reader) : speed(gameRandom.randf(130.0f, 171.0f)), m_easing_progress(0.0), m_charge_timer(), - state(FLYING), - last_player(nullptr), - last_player_pos(0.0f, 0.0f), - last_self_pos(0.0f, 0.0f) + state(FLYING) { m_physic.enable_gravity(false); } From 0b69aa78d4e2e7f647139ea253671ebb1b642df7 Mon Sep 17 00:00:00 2001 From: MatusGuy <85036874+MatusGuy@users.noreply.github.com> Date: Mon, 11 Sep 2023 10:03:55 +0100 Subject: [PATCH 08/40] swoop up depends on animation progress --- src/badguy/zeekling.cpp | 11 +++++------ src/badguy/zeekling.hpp | 1 - 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/badguy/zeekling.cpp b/src/badguy/zeekling.cpp index fba0e1f8c38..8e471de960b 100644 --- a/src/badguy/zeekling.cpp +++ b/src/badguy/zeekling.cpp @@ -30,7 +30,6 @@ Zeekling::Zeekling(const ReaderMapping& reader) : BadGuy(reader, "images/creatures/zeekling/zeekling.sprite"), speed(gameRandom.randf(130.0f, 171.0f)), m_easing_progress(0.0), - m_charge_timer(), state(FLYING) { m_physic.enable_gravity(false); @@ -158,23 +157,23 @@ Zeekling::active_update(float dt_sec) { // swoop a bit up state = CHARGING; set_action("charge", m_dir); - m_charge_timer.start(0.4f); + //m_charge_timer.start(0.1f); [[fallthrough]]; case CHARGING: { - if (m_charge_timer.check()) + if (m_sprite->animation_done()) { state = DIVING; set_action("dive", m_dir); break; } - double easing_progress = static_cast(m_charge_timer.get_timegone() / - m_charge_timer.get_period()); + //double easing_progress = static_cast(m_charge_timer.get_timegone() / + // m_charge_timer.get_period()); - m_physic.set_velocity_y(-325 * QuarticEaseInOut(easing_progress)); + m_physic.set_velocity_y(-325 * QuarticEaseOut(m_sprite->get_current_frame_progress())); break; } diff --git a/src/badguy/zeekling.hpp b/src/badguy/zeekling.hpp index 1e8cabf68db..6bc7f63bfb7 100644 --- a/src/badguy/zeekling.hpp +++ b/src/badguy/zeekling.hpp @@ -58,7 +58,6 @@ class Zeekling final : public BadGuy private: float speed; double m_easing_progress; - Timer m_charge_timer; ZeeklingState state; private: From 4f0d52751d1306b7277631ea8c4025792dc2d1e4 Mon Sep 17 00:00:00 2001 From: MatusGuy <85036874+MatusGuy@users.noreply.github.com> Date: Wed, 20 Sep 2023 14:34:21 +0100 Subject: [PATCH 09/40] Zeek detect player properly --- src/badguy/zeekling.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/badguy/zeekling.cpp b/src/badguy/zeekling.cpp index 8e471de960b..af78eab5266 100644 --- a/src/badguy/zeekling.cpp +++ b/src/badguy/zeekling.cpp @@ -121,6 +121,8 @@ Zeekling::collision_solid(const CollisionHit& hit) bool Zeekling::should_we_dive() { + using RaycastResult = CollisionSystem::RaycastResult; + if (m_frozen) return false; // Left/rightmost point of the hitbox. @@ -142,10 +144,10 @@ Zeekling::should_we_dive() (m_dir == Direction::LEFT ? -1 : 1)), plrmid.y}; - // FIXME: Give the actual object that hit the raycast, or at least the hitbox - // to avoid having to raycast a bunch of times - return !Sector::get().free_line_of_sight(eye, rangeend, false, this) && - Sector::get().can_see_player(eye); + const RaycastResult& result = Sector::get().get_first_line_intersection(eye, rangeend, false, get_collision_object()); + + return result.is_valid && + result.hit.object == get_nearest_player()->get_collision_object(); } void From 1713e75b6b0da26e268a039db67216d7feeaa400 Mon Sep 17 00:00:00 2001 From: MatusGuy <85036874+MatusGuy@users.noreply.github.com> Date: Wed, 20 Sep 2023 20:22:35 +0100 Subject: [PATCH 10/40] rebounce wip --- src/badguy/zeekling.cpp | 47 +++++++++++++++++++++++++++++++++++------ src/badguy/zeekling.hpp | 5 ++++- 2 files changed, 45 insertions(+), 7 deletions(-) diff --git a/src/badguy/zeekling.cpp b/src/badguy/zeekling.cpp index af78eab5266..1907fcd2f76 100644 --- a/src/badguy/zeekling.cpp +++ b/src/badguy/zeekling.cpp @@ -78,12 +78,12 @@ Zeekling::on_bump_vertical() switch (state) { case DIVING: - state = CLIMBING; + state = RECOVERING; m_easing_progress = 0.0; set_action(m_dir); break; - case CLIMBING: + case RECOVERING: state = FLYING; break; @@ -91,7 +91,7 @@ Zeekling::on_bump_vertical() break; } - m_physic.set_velocity_y(state == CLIMBING ? -speed : 0); + m_physic.set_velocity_y(state == RECOVERING ? -speed : 0); } void @@ -140,16 +140,35 @@ Zeekling::should_we_dive() // Do not dive if we are too far above the player. if (height > 512) return false; - const Vector& rangeend = {eye.x + ((plrmid.y - eye.y) * + const Vector rangeend = {eye.x + ((plrmid.y - eye.y) * (m_dir == Direction::LEFT ? -1 : 1)), plrmid.y}; - const RaycastResult& result = Sector::get().get_first_line_intersection(eye, rangeend, false, get_collision_object()); + const RaycastResult& result = Sector::get().get_first_line_intersection(eye, rangeend, false, nullptr); return result.is_valid && result.hit.object == get_nearest_player()->get_collision_object(); } +bool +Zeekling::should_we_rebound() +{ + using RaycastResult = CollisionSystem::RaycastResult; + + Vector eye; + const Rectf& bbox = get_bbox().grown(1.f); + eye = bbox.get_middle(); + eye.y = bbox.get_bottom(); + + const Vector rangeend = {eye.x, eye.y + 32*4}; + + const RaycastResult& result = Sector::get().get_first_line_intersection(eye, rangeend, false, nullptr); + + return result.is_valid && + result.hit.tile != nullptr && + result.hit.tile->is_solid(); +} + void Zeekling::active_update(float dt_sec) { switch (state) { @@ -180,6 +199,13 @@ Zeekling::active_update(float dt_sec) { } case DIVING: + if (should_we_rebound()) + { + state = REBOUND; + m_easing_progress = 0.0; + break; + } + if (m_easing_progress >= 1.0) break; // swoop down @@ -190,7 +216,16 @@ Zeekling::active_update(float dt_sec) { break; - case CLIMBING: + case REBOUND: + if (m_easing_progress < 1.0) m_easing_progress += 0.1; + else break; + + m_physic.set_velocity_y(2 * + fabsf(m_physic.get_velocity_x()) * + QuarticEaseOut(m_easing_progress) + + (5 * m_easing_progress)); + + case RECOVERING: // Stop climbing when we're back at initial height. if (get_pos().y <= m_start_position.y) { state = FLYING; diff --git a/src/badguy/zeekling.hpp b/src/badguy/zeekling.hpp index 6bc7f63bfb7..d070f82e6ea 100644 --- a/src/badguy/zeekling.hpp +++ b/src/badguy/zeekling.hpp @@ -44,6 +44,8 @@ class Zeekling final : public BadGuy virtual bool collision_squished(GameObject& object) override; bool should_we_dive(); + bool should_we_rebound(); + void on_bump_horizontal(); void on_bump_vertical(); @@ -52,7 +54,8 @@ class Zeekling final : public BadGuy FLYING, CHARGING, DIVING, - CLIMBING + REBOUND, + RECOVERING }; private: From a2a11232afae76c28c6efdb1a402e62b71b1f8c3 Mon Sep 17 00:00:00 2001 From: MatusGuy <85036874+MatusGuy@users.noreply.github.com> Date: Thu, 9 Nov 2023 23:02:17 +0000 Subject: [PATCH 11/40] Zeekling proper rebound --- src/badguy/zeekling.cpp | 46 ++++++++++++++++++++++++++++++++++------- src/badguy/zeekling.hpp | 1 + 2 files changed, 40 insertions(+), 7 deletions(-) diff --git a/src/badguy/zeekling.cpp b/src/badguy/zeekling.cpp index 1907fcd2f76..c192a478790 100644 --- a/src/badguy/zeekling.cpp +++ b/src/badguy/zeekling.cpp @@ -30,6 +30,7 @@ Zeekling::Zeekling(const ReaderMapping& reader) : BadGuy(reader, "images/creatures/zeekling/zeekling.sprite"), speed(gameRandom.randf(130.0f, 171.0f)), m_easing_progress(0.0), + m_charge_timer(), state(FLYING) { m_physic.enable_gravity(false); @@ -216,14 +217,45 @@ Zeekling::active_update(float dt_sec) { break; - case REBOUND: - if (m_easing_progress < 1.0) m_easing_progress += 0.1; - else break; + case REBOUND: { + static float yvel; + static bool done; - m_physic.set_velocity_y(2 * - fabsf(m_physic.get_velocity_x()) * - QuarticEaseOut(m_easing_progress) + - (5 * m_easing_progress)); + /* + if (m_easing_progress == 0.0) + yvel = fabsf(m_physic.get_velocity_y()); + + if (m_easing_progress < 1.0) + m_easing_progress += 0.05; + else + break; + */ + + if (done) break; + done = false; + + if (!m_charge_timer.started()) + { + m_charge_timer.start(1.f); + yvel = fabsf(m_physic.get_velocity_y()); + } + + if (m_charge_timer.check()) + { + done = true; + break; + } + + double easing_progress = static_cast(m_charge_timer.get_timegone() / + m_charge_timer.get_period()); + + float ease = QuarticEaseOut(easing_progress); + m_physic.set_velocity_y(yvel - (ease * yvel)); + + std::cout << "yv: " << m_physic.get_velocity_y() << " ease: " << ease << " ep: " << easing_progress << " oyv: " << yvel << std::endl; + + break; + } case RECOVERING: // Stop climbing when we're back at initial height. diff --git a/src/badguy/zeekling.hpp b/src/badguy/zeekling.hpp index d070f82e6ea..23f585d6666 100644 --- a/src/badguy/zeekling.hpp +++ b/src/badguy/zeekling.hpp @@ -61,6 +61,7 @@ class Zeekling final : public BadGuy private: float speed; double m_easing_progress; + Timer m_charge_timer; ZeeklingState state; private: From 434998d2efa35725d64d411e62d1b65e27ed1c4e Mon Sep 17 00:00:00 2001 From: MatusGuy <85036874+MatusGuy@users.noreply.github.com> Date: Fri, 10 Nov 2023 17:56:54 +0000 Subject: [PATCH 12/40] Zeek recover --- src/badguy/zeekling.cpp | 66 +++++++++++++++++++++++++---------------- src/badguy/zeekling.hpp | 4 +++ 2 files changed, 45 insertions(+), 25 deletions(-) diff --git a/src/badguy/zeekling.cpp b/src/badguy/zeekling.cpp index c192a478790..c3117c9cf07 100644 --- a/src/badguy/zeekling.cpp +++ b/src/badguy/zeekling.cpp @@ -28,7 +28,8 @@ Zeekling::Zeekling(const ReaderMapping& reader) : BadGuy(reader, "images/creatures/zeekling/zeekling.sprite"), - speed(gameRandom.randf(130.0f, 171.0f)), + speed(150.f), + m_original_yvel(0.f), m_easing_progress(0.0), m_charge_timer(), state(FLYING) @@ -202,7 +203,7 @@ Zeekling::active_update(float dt_sec) { case DIVING: if (should_we_rebound()) { - state = REBOUND; + state = CATCH; m_easing_progress = 0.0; break; } @@ -217,53 +218,68 @@ Zeekling::active_update(float dt_sec) { break; - case REBOUND: { - static float yvel; - static bool done; - - /* - if (m_easing_progress == 0.0) - yvel = fabsf(m_physic.get_velocity_y()); - - if (m_easing_progress < 1.0) - m_easing_progress += 0.05; - else + case CATCH: { + if (m_charge_timer.check()) + { + state = REBOUND; break; - */ - - if (done) break; - done = false; + } if (!m_charge_timer.started()) { + set_action("recover", m_dir, 1); m_charge_timer.start(1.f); - yvel = fabsf(m_physic.get_velocity_y()); + m_original_yvel = fabsf(m_physic.get_velocity_y()); } - if (m_charge_timer.check()) + // wait for recover action + if (m_sprite->animation_done()) { - done = true; - break; + set_action(m_dir); } double easing_progress = static_cast(m_charge_timer.get_timegone() / m_charge_timer.get_period()); float ease = QuarticEaseOut(easing_progress); - m_physic.set_velocity_y(yvel - (ease * yvel)); + m_physic.set_velocity_y(m_original_yvel - (ease * m_original_yvel)); - std::cout << "yv: " << m_physic.get_velocity_y() << " ease: " << ease << " ep: " << easing_progress << " oyv: " << yvel << std::endl; + break; + } + + case REBOUND: { + if (m_charge_timer.check()) + { + state = RECOVERING; + break; + } + + if (!m_charge_timer.started()) + { + m_charge_timer.start(1.f); + } + + double easing_progress = static_cast(m_charge_timer.get_timegone() / + m_charge_timer.get_period()); + + float ease = QuarticEaseIn(easing_progress); + m_physic.set_velocity_y(-fabsf(ease * m_original_yvel)); break; } - case RECOVERING: - // Stop climbing when we're back at initial height. + case RECOVERING: { + // Stop recovering when we're back at initial height. if (get_pos().y <= m_start_position.y) { state = FLYING; m_physic.set_velocity_y(0); + break; } + + + break; + } default: break; diff --git a/src/badguy/zeekling.hpp b/src/badguy/zeekling.hpp index 23f585d6666..85e9de2d4c3 100644 --- a/src/badguy/zeekling.hpp +++ b/src/badguy/zeekling.hpp @@ -54,12 +54,16 @@ class Zeekling final : public BadGuy FLYING, CHARGING, DIVING, + CATCH, REBOUND, RECOVERING }; private: float speed; + + float m_original_yvel; + double m_easing_progress; Timer m_charge_timer; ZeeklingState state; From e59ec8bace64236f6850ad66210ebf698150d142 Mon Sep 17 00:00:00 2001 From: MatusGuy <85036874+MatusGuy@users.noreply.github.com> Date: Sat, 11 Nov 2023 22:58:40 +0000 Subject: [PATCH 13/40] fix bugs and tweak --- src/badguy/zeekling.cpp | 58 +++++++++++++++++++++++++++++------------ src/badguy/zeekling.hpp | 4 ++- 2 files changed, 45 insertions(+), 17 deletions(-) diff --git a/src/badguy/zeekling.cpp b/src/badguy/zeekling.cpp index c3117c9cf07..0a4a76fd771 100644 --- a/src/badguy/zeekling.cpp +++ b/src/badguy/zeekling.cpp @@ -26,9 +26,18 @@ #include "sprite/sprite.hpp" #include "supertux/sector.hpp" +#include + +const float CATCH_DURATION = 0.49f; +const float CATCH_DISTANCE = 32.f*3.2f; // distance from the ground + +const float DIVE_DETECT_DIR = 2.1f; +const float DIVE_DIR = 2.5f; + Zeekling::Zeekling(const ReaderMapping& reader) : BadGuy(reader, "images/creatures/zeekling/zeekling.sprite"), - speed(150.f), + speed(160.f), + m_original_xvel(0.f), m_original_yvel(0.f), m_easing_progress(0.0), m_charge_timer(), @@ -37,6 +46,20 @@ Zeekling::Zeekling(const ReaderMapping& reader) : m_physic.enable_gravity(false); } +void Zeekling::draw(DrawingContext &context) +{ + BadGuy::draw(context); + + Vector eye; + const Rectf& bbox = get_bbox().grown(1.f); + eye = bbox.get_middle(); + eye.y = bbox.get_bottom(); + + const Vector rangeend = {eye.x, eye.y + CATCH_DISTANCE}; + + context.color().draw_line(eye, rangeend, Color::from_rgba8888(0xff, 0,0,0xff), 100); +} + void Zeekling::initialize() { @@ -142,14 +165,14 @@ Zeekling::should_we_dive() // Do not dive if we are too far above the player. if (height > 512) return false; - const Vector rangeend = {eye.x + ((plrmid.y - eye.y) * + const Vector rangeend = {eye.x + ((plrmid.y - eye.y) * DIVE_DETECT_DIR * (m_dir == Direction::LEFT ? -1 : 1)), plrmid.y}; - const RaycastResult& result = Sector::get().get_first_line_intersection(eye, rangeend, false, nullptr); + RaycastResult result = Sector::get().get_first_line_intersection(eye, rangeend, false, nullptr); - return result.is_valid && - result.hit.object == get_nearest_player()->get_collision_object(); + CollisionObject** resultobj = std::get_if(&result.hit); + return result.is_valid && resultobj && *resultobj == get_nearest_player()->get_collision_object(); } bool @@ -162,13 +185,12 @@ Zeekling::should_we_rebound() eye = bbox.get_middle(); eye.y = bbox.get_bottom(); - const Vector rangeend = {eye.x, eye.y + 32*4}; + const Vector rangeend = {eye.x, eye.y + CATCH_DISTANCE}; - const RaycastResult& result = Sector::get().get_first_line_intersection(eye, rangeend, false, nullptr); + RaycastResult result = Sector::get().get_first_line_intersection(eye, rangeend, false, nullptr); - return result.is_valid && - result.hit.tile != nullptr && - result.hit.tile->is_solid(); + const Tile** resulttile = std::get_if(&result.hit); + return result.is_valid && resulttile && !(*resulttile)->is_slope(); } void @@ -204,16 +226,22 @@ Zeekling::active_update(float dt_sec) { if (should_we_rebound()) { state = CATCH; + m_physic.set_velocity_x(m_original_xvel); m_easing_progress = 0.0; break; } + if (m_easing_progress <= 0.0) + { + m_original_xvel = m_physic.get_velocity_x(); + m_physic.set_velocity_x(m_original_xvel + (50 * (m_dir == Direction::LEFT ? 1 : -1))); + } + if (m_easing_progress >= 1.0) break; // swoop down m_easing_progress += 0.1; - m_physic.set_velocity_y(2 * - fabsf(m_physic.get_velocity_x()) * + m_physic.set_velocity_y(2 * fabsf(m_original_xvel) * std::min(5.0, QuarticEaseIn(m_easing_progress))); break; @@ -228,7 +256,7 @@ Zeekling::active_update(float dt_sec) { if (!m_charge_timer.started()) { set_action("recover", m_dir, 1); - m_charge_timer.start(1.f); + m_charge_timer.start(CATCH_DURATION); m_original_yvel = fabsf(m_physic.get_velocity_y()); } @@ -256,7 +284,7 @@ Zeekling::active_update(float dt_sec) { if (!m_charge_timer.started()) { - m_charge_timer.start(1.f); + m_charge_timer.start(CATCH_DURATION); } double easing_progress = static_cast(m_charge_timer.get_timegone() / @@ -276,8 +304,6 @@ Zeekling::active_update(float dt_sec) { break; } - - break; } diff --git a/src/badguy/zeekling.hpp b/src/badguy/zeekling.hpp index 85e9de2d4c3..4e3299f9b9d 100644 --- a/src/badguy/zeekling.hpp +++ b/src/badguy/zeekling.hpp @@ -25,6 +25,8 @@ class Zeekling final : public BadGuy public: Zeekling(const ReaderMapping& reader); + virtual void draw(DrawingContext& context) override; + virtual void initialize() override; virtual void collision_solid(const CollisionHit& hit) override; virtual void active_update(float dt_sec) override; @@ -62,7 +64,7 @@ class Zeekling final : public BadGuy private: float speed; - float m_original_yvel; + float m_original_xvel, m_original_yvel; double m_easing_progress; Timer m_charge_timer; From 5e2386331914cd4ee38c1a5f6219ee427b2a5b6f Mon Sep 17 00:00:00 2001 From: MatusGuy <85036874+MatusGuy@users.noreply.github.com> Date: Tue, 14 Nov 2023 20:48:01 +0000 Subject: [PATCH 14/40] Handle bumping on wall while charging wip --- src/badguy/zeekling.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/badguy/zeekling.cpp b/src/badguy/zeekling.cpp index 0a4a76fd771..61b6b5016b5 100644 --- a/src/badguy/zeekling.cpp +++ b/src/badguy/zeekling.cpp @@ -102,6 +102,13 @@ Zeekling::on_bump_vertical() } switch (state) { + case CHARGING: + state = FLYING; + m_physic.set_velocity_y(0.f); + m_easing_progress = 0.0; + set_action(m_dir); + break; + case DIVING: state = RECOVERING; m_easing_progress = 0.0; @@ -116,7 +123,7 @@ Zeekling::on_bump_vertical() break; } - m_physic.set_velocity_y(state == RECOVERING ? -speed : 0); + m_physic.set_velocity_y(state == RECOVERING ? -speed : 0); } void From 11312a611e39e4e6dd974c1c031ad8b3fd8695e2 Mon Sep 17 00:00:00 2001 From: MatusGuy <85036874+MatusGuy@users.noreply.github.com> Date: Sat, 2 Dec 2023 15:30:59 +0000 Subject: [PATCH 15/40] State handling upon bump --- src/badguy/zeekling.cpp | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/badguy/zeekling.cpp b/src/badguy/zeekling.cpp index 61b6b5016b5..e5be3bcc47e 100644 --- a/src/badguy/zeekling.cpp +++ b/src/badguy/zeekling.cpp @@ -85,9 +85,16 @@ Zeekling::on_bump_horizontal() set_action(m_dir); m_physic.set_velocity_x(m_dir == Direction::LEFT ? -speed : speed); - if (state == DIVING) + if (state == CATCH || state == R) + { + state = RECOVERING; + m_easing_progress = 0.0; + m_physic.set_velocity_y(-speed); + } + else if (state == DIVING || state == CHARGING) { state = FLYING; + m_easing_progress = 0.0; m_physic.set_velocity_y(0); } } @@ -103,10 +110,9 @@ Zeekling::on_bump_vertical() switch (state) { case CHARGING: - state = FLYING; - m_physic.set_velocity_y(0.f); + state = DIVING; m_easing_progress = 0.0; - set_action(m_dir); + set_action("dive", m_dir); break; case DIVING: @@ -115,6 +121,12 @@ Zeekling::on_bump_vertical() set_action(m_dir); break; + case CATCH: + case REBOUND: + state = RECOVERING; + m_easing_progress = 0.0; + set_action(m_dir); + case RECOVERING: state = FLYING; break; @@ -178,7 +190,7 @@ Zeekling::should_we_dive() RaycastResult result = Sector::get().get_first_line_intersection(eye, rangeend, false, nullptr); - CollisionObject** resultobj = std::get_if(&result.hit); + auto* resultobj = std::get_if(&result.hit); return result.is_valid && resultobj && *resultobj == get_nearest_player()->get_collision_object(); } @@ -196,7 +208,7 @@ Zeekling::should_we_rebound() RaycastResult result = Sector::get().get_first_line_intersection(eye, rangeend, false, nullptr); - const Tile** resulttile = std::get_if(&result.hit); + auto* resulttile = std::get_if(&result.hit); return result.is_valid && resulttile && !(*resulttile)->is_slope(); } From 97bb9415c5a0fb274fe1ccd235c9ee52f7e4f19d Mon Sep 17 00:00:00 2001 From: MatusGuy <85036874+MatusGuy@users.noreply.github.com> Date: Sat, 2 Dec 2023 15:45:21 +0000 Subject: [PATCH 16/40] You have gyatt to be kidding me --- src/badguy/zeekling.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/badguy/zeekling.cpp b/src/badguy/zeekling.cpp index e5be3bcc47e..2ef6f2dc85a 100644 --- a/src/badguy/zeekling.cpp +++ b/src/badguy/zeekling.cpp @@ -85,7 +85,7 @@ Zeekling::on_bump_horizontal() set_action(m_dir); m_physic.set_velocity_x(m_dir == Direction::LEFT ? -speed : speed); - if (state == CATCH || state == R) + if (state == CATCH || state == REBOUND) { state = RECOVERING; m_easing_progress = 0.0; From 9c8274678c9658a738986b8eb59b2e9b2f69c56d Mon Sep 17 00:00:00 2001 From: MatusGuy <85036874+MatusGuy@users.noreply.github.com> Date: Sun, 3 Dec 2023 17:33:17 +0000 Subject: [PATCH 17/40] Zeekling detection line --- src/badguy/zeekling.cpp | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/badguy/zeekling.cpp b/src/badguy/zeekling.cpp index 2ef6f2dc85a..9c088fddfe9 100644 --- a/src/badguy/zeekling.cpp +++ b/src/badguy/zeekling.cpp @@ -50,13 +50,25 @@ void Zeekling::draw(DrawingContext &context) { BadGuy::draw(context); - Vector eye; + Vector reye; const Rectf& bbox = get_bbox().grown(1.f); + reye = bbox.get_middle(); + reye.y = bbox.get_bottom(); + + const Vector rrangeend = {reye.x, reye.y + CATCH_DISTANCE}; + + // Left/rightmost point of the hitbox. + Vector eye; eye = bbox.get_middle(); - eye.y = bbox.get_bottom(); + eye.x = m_dir == Direction::LEFT ? bbox.get_left() : bbox.get_right(); - const Vector rangeend = {eye.x, eye.y + CATCH_DISTANCE}; + const Vector& plrmid = get_nearest_player()->get_bbox().get_middle(); + + const Vector rangeend = {eye.x + ((plrmid.y - eye.y) * DIVE_DETECT_DIR * + (m_dir == Direction::LEFT ? -1 : 1)), + plrmid.y}; + context.color().draw_line(reye, rrangeend, Color::from_rgba8888(0xff, 0,0,0xff), 100); context.color().draw_line(eye, rangeend, Color::from_rgba8888(0xff, 0,0,0xff), 100); } From 62035d07c546f999f955841c95e19b557bde4ba1 Mon Sep 17 00:00:00 2001 From: MatusGuy <85036874+MatusGuy@users.noreply.github.com> Date: Sun, 3 Dec 2023 17:58:56 +0000 Subject: [PATCH 18/40] Rebound detection at edge of hitbox --- src/badguy/zeekling.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/badguy/zeekling.cpp b/src/badguy/zeekling.cpp index 9c088fddfe9..bd92408319a 100644 --- a/src/badguy/zeekling.cpp +++ b/src/badguy/zeekling.cpp @@ -52,7 +52,7 @@ void Zeekling::draw(DrawingContext &context) Vector reye; const Rectf& bbox = get_bbox().grown(1.f); - reye = bbox.get_middle(); + reye.x = (m_dir == Direction::LEFT ? bbox.get_left() : bbox.get_right()); reye.y = bbox.get_bottom(); const Vector rrangeend = {reye.x, reye.y + CATCH_DISTANCE}; @@ -213,7 +213,7 @@ Zeekling::should_we_rebound() Vector eye; const Rectf& bbox = get_bbox().grown(1.f); - eye = bbox.get_middle(); + eye.x = (m_dir == Direction::LEFT ? bbox.get_left() : bbox.get_right()); eye.y = bbox.get_bottom(); const Vector rangeend = {eye.x, eye.y + CATCH_DISTANCE}; From 0fd1cee4f7edc53e22a36bad6b21776d60bd4f1b Mon Sep 17 00:00:00 2001 From: MatusGuy <85036874+MatusGuy@users.noreply.github.com> Date: Sun, 3 Dec 2023 18:01:34 +0000 Subject: [PATCH 19/40] Prevent charging when right next to player --- src/badguy/zeekling.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/badguy/zeekling.cpp b/src/badguy/zeekling.cpp index bd92408319a..b10e507692e 100644 --- a/src/badguy/zeekling.cpp +++ b/src/badguy/zeekling.cpp @@ -181,21 +181,23 @@ Zeekling::should_we_dive() if (m_frozen) return false; + Player* plr = get_nearest_player(); + if (!plr) return false; + // Left/rightmost point of the hitbox. Vector eye; const Rectf& bbox = get_bbox().grown(1.f); eye = bbox.get_middle(); eye.x = m_dir == Direction::LEFT ? bbox.get_left() : bbox.get_right(); - const Vector& plrmid = get_nearest_player()->get_bbox().get_middle(); - // Do not dive if we are not above the player. - float height = plrmid.y - eye.y; + float height = plr->get_bbox().get_top() - bbox.get_bottom(); if (height <= 0) return false; // Do not dive if we are too far above the player. if (height > 512) return false; + const Vector& plrmid = plr->get_bbox().get_middle(); const Vector rangeend = {eye.x + ((plrmid.y - eye.y) * DIVE_DETECT_DIR * (m_dir == Direction::LEFT ? -1 : 1)), plrmid.y}; From 56a3d9b168bbfec5b796cae68e34d6b4ffe29b0e Mon Sep 17 00:00:00 2001 From: Marty <85036874+MatusGuy@users.noreply.github.com> Date: Sun, 3 Dec 2023 23:09:50 +0000 Subject: [PATCH 20/40] You have gyatt to be kidding me... again! --- src/badguy/zeekling.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/badguy/zeekling.cpp b/src/badguy/zeekling.cpp index b10e507692e..9c850f1e2db 100644 --- a/src/badguy/zeekling.cpp +++ b/src/badguy/zeekling.cpp @@ -50,6 +50,9 @@ void Zeekling::draw(DrawingContext &context) { BadGuy::draw(context); + Player* plr = get_nearest_player(); + if (!plr) return; + Vector reye; const Rectf& bbox = get_bbox().grown(1.f); reye.x = (m_dir == Direction::LEFT ? bbox.get_left() : bbox.get_right()); @@ -62,7 +65,7 @@ void Zeekling::draw(DrawingContext &context) eye = bbox.get_middle(); eye.x = m_dir == Direction::LEFT ? bbox.get_left() : bbox.get_right(); - const Vector& plrmid = get_nearest_player()->get_bbox().get_middle(); + const Vector& plrmid = plr->get_bbox().get_middle(); const Vector rangeend = {eye.x + ((plrmid.y - eye.y) * DIVE_DETECT_DIR * (m_dir == Direction::LEFT ? -1 : 1)), From e88dd1b88631b4c99a27be9d01b863933b317194 Mon Sep 17 00:00:00 2001 From: MatusGuy <85036874+MatusGuy@users.noreply.github.com> Date: Wed, 13 Dec 2023 19:45:26 +0000 Subject: [PATCH 21/40] OMFG GIT --- src/badguy/zeekling.cpp | 38 +++++++++++++++++++++++++++++--------- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/src/badguy/zeekling.cpp b/src/badguy/zeekling.cpp index 9c850f1e2db..0ec07dd966f 100644 --- a/src/badguy/zeekling.cpp +++ b/src/badguy/zeekling.cpp @@ -31,8 +31,9 @@ const float CATCH_DURATION = 0.49f; const float CATCH_DISTANCE = 32.f*3.2f; // distance from the ground -const float DIVE_DETECT_DIR = 2.1f; -const float DIVE_DIR = 2.5f; +const float DIVE_DETECT_STAND = 1.f; +const float DIVE_DETECT_WALK = 1.5f; +const float DIVE_DETECT_RUNNING = 2.5f; Zeekling::Zeekling(const ReaderMapping& reader) : BadGuy(reader, "images/creatures/zeekling/zeekling.sprite"), @@ -62,13 +63,22 @@ void Zeekling::draw(DrawingContext &context) // Left/rightmost point of the hitbox. Vector eye; - eye = bbox.get_middle(); eye.x = m_dir == Direction::LEFT ? bbox.get_left() : bbox.get_right(); + eye.y = bbox.get_middle().y; const Vector& plrmid = plr->get_bbox().get_middle(); - const Vector rangeend = {eye.x + ((plrmid.y - eye.y) * DIVE_DETECT_DIR * - (m_dir == Direction::LEFT ? -1 : 1)), + float vel = std::fabs(plr->get_physic().get_velocity_x()); + float detect_range; + if (vel <= 10) + detect_range = DIVE_DETECT_STAND; + else if (vel <= 230) + detect_range = DIVE_DETECT_WALK; + else + detect_range = DIVE_DETECT_RUNNING; + + const Vector rangeend = {eye.x + ((plrmid.y - eye.y) * detect_range * + (m_dir == Direction::LEFT ? -1 : 1)), plrmid.y}; context.color().draw_line(reye, rrangeend, Color::from_rgba8888(0xff, 0,0,0xff), 100); @@ -193,17 +203,27 @@ Zeekling::should_we_dive() eye = bbox.get_middle(); eye.x = m_dir == Direction::LEFT ? bbox.get_left() : bbox.get_right(); + const Vector& plrmid = plr->get_bbox().get_middle(); + // Do not dive if we are not above the player. - float height = plr->get_bbox().get_top() - bbox.get_bottom(); + float height = plrmid.y - eye.y; if (height <= 0) return false; // Do not dive if we are too far above the player. if (height > 512) return false; - const Vector& plrmid = plr->get_bbox().get_middle(); - const Vector rangeend = {eye.x + ((plrmid.y - eye.y) * DIVE_DETECT_DIR * + float vel = std::fabs(plr->get_physic().get_velocity_x()); + float detect_range; + if (vel <= 10) + detect_range = DIVE_DETECT_STAND; + else if (vel <= 230) + detect_range = DIVE_DETECT_WALK; + else + detect_range = DIVE_DETECT_RUNNING; + + const Vector rangeend = {eye.x + ((plrmid.y - eye.y) * detect_range * (m_dir == Direction::LEFT ? -1 : 1)), - plrmid.y}; + plrmid.y}; RaycastResult result = Sector::get().get_first_line_intersection(eye, rangeend, false, nullptr); From b90c9dfbdcb05a4d01baaac4c38a9f532d7b6008 Mon Sep 17 00:00:00 2001 From: MatusGuy <85036874+MatusGuy@users.noreply.github.com> Date: Wed, 13 Dec 2023 22:56:39 +0000 Subject: [PATCH 22/40] tweak --- src/badguy/zeekling.cpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/badguy/zeekling.cpp b/src/badguy/zeekling.cpp index 0ec07dd966f..f314c66f27a 100644 --- a/src/badguy/zeekling.cpp +++ b/src/badguy/zeekling.cpp @@ -29,11 +29,12 @@ #include const float CATCH_DURATION = 0.49f; -const float CATCH_DISTANCE = 32.f*3.2f; // distance from the ground +const float CATCH_BIG_DISTANCE = 32.f*3.2f; // distance from the ground +const float CATCH_SMALL_DISTANCE = 32.f*2.6f; // same here -const float DIVE_DETECT_STAND = 1.f; -const float DIVE_DETECT_WALK = 1.5f; -const float DIVE_DETECT_RUNNING = 2.5f; +const float DIVE_DETECT_STAND = .8f; +const float DIVE_DETECT_WALK = 1.3f; +const float DIVE_DETECT_RUNNING = 2.55f; Zeekling::Zeekling(const ReaderMapping& reader) : BadGuy(reader, "images/creatures/zeekling/zeekling.sprite"), @@ -59,7 +60,8 @@ void Zeekling::draw(DrawingContext &context) reye.x = (m_dir == Direction::LEFT ? bbox.get_left() : bbox.get_right()); reye.y = bbox.get_bottom(); - const Vector rrangeend = {reye.x, reye.y + CATCH_DISTANCE}; + float catch_distance = CATCH_SMALL_DISTANCE; + const Vector rrangeend = {reye.x, reye.y + catch_distance}; // Left/rightmost point of the hitbox. Vector eye; @@ -236,12 +238,16 @@ Zeekling::should_we_rebound() { using RaycastResult = CollisionSystem::RaycastResult; + Player* plr = get_nearest_player(); + if (!plr) return false; + Vector eye; const Rectf& bbox = get_bbox().grown(1.f); eye.x = (m_dir == Direction::LEFT ? bbox.get_left() : bbox.get_right()); eye.y = bbox.get_bottom(); - const Vector rangeend = {eye.x, eye.y + CATCH_DISTANCE}; + float catch_distance = plr->is_big() ? CATCH_BIG_DISTANCE : CATCH_SMALL_DISTANCE; + const Vector rangeend = {eye.x, eye.y + catch_distance}; RaycastResult result = Sector::get().get_first_line_intersection(eye, rangeend, false, nullptr); From f54a040ad1d92c73d90372ffd9f99e3a739c96b3 Mon Sep 17 00:00:00 2001 From: MatusGuy <85036874+MatusGuy@users.noreply.github.com> Date: Sat, 27 Jan 2024 13:08:55 +0000 Subject: [PATCH 23/40] divide player velocity or something like that idk --- src/badguy/zeekling.cpp | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/src/badguy/zeekling.cpp b/src/badguy/zeekling.cpp index f314c66f27a..f37e1ad19c7 100644 --- a/src/badguy/zeekling.cpp +++ b/src/badguy/zeekling.cpp @@ -32,9 +32,8 @@ const float CATCH_DURATION = 0.49f; const float CATCH_BIG_DISTANCE = 32.f*3.2f; // distance from the ground const float CATCH_SMALL_DISTANCE = 32.f*2.6f; // same here -const float DIVE_DETECT_STAND = .8f; -const float DIVE_DETECT_WALK = 1.3f; -const float DIVE_DETECT_RUNNING = 2.55f; +const float DIVE_DETECT_STAND = 0.9f; +const float DIVE_DETECT_DIVIDER = 128.f; // some weird magic number i thought of Zeekling::Zeekling(const ReaderMapping& reader) : BadGuy(reader, "images/creatures/zeekling/zeekling.sprite"), @@ -71,13 +70,7 @@ void Zeekling::draw(DrawingContext &context) const Vector& plrmid = plr->get_bbox().get_middle(); float vel = std::fabs(plr->get_physic().get_velocity_x()); - float detect_range; - if (vel <= 10) - detect_range = DIVE_DETECT_STAND; - else if (vel <= 230) - detect_range = DIVE_DETECT_WALK; - else - detect_range = DIVE_DETECT_RUNNING; + float detect_range = std::max((vel / 128), DIVE_DETECT_STAND); const Vector rangeend = {eye.x + ((plrmid.y - eye.y) * detect_range * (m_dir == Direction::LEFT ? -1 : 1)), @@ -215,13 +208,8 @@ Zeekling::should_we_dive() if (height > 512) return false; float vel = std::fabs(plr->get_physic().get_velocity_x()); - float detect_range; - if (vel <= 10) - detect_range = DIVE_DETECT_STAND; - else if (vel <= 230) - detect_range = DIVE_DETECT_WALK; - else - detect_range = DIVE_DETECT_RUNNING; + std::cout << vel << std::endl; + float detect_range = std::max((vel / 128), DIVE_DETECT_STAND); const Vector rangeend = {eye.x + ((plrmid.y - eye.y) * detect_range * (m_dir == Direction::LEFT ? -1 : 1)), From 1fafb2632b1bd634fb43b8aa2333df9bd1f3f708 Mon Sep 17 00:00:00 2001 From: MatusGuy <85036874+MatusGuy@users.noreply.github.com> Date: Sat, 27 Jan 2024 13:12:03 +0000 Subject: [PATCH 24/40] casting --- src/badguy/zeekling.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/badguy/zeekling.cpp b/src/badguy/zeekling.cpp index f37e1ad19c7..a66183dd032 100644 --- a/src/badguy/zeekling.cpp +++ b/src/badguy/zeekling.cpp @@ -268,7 +268,7 @@ Zeekling::active_update(float dt_sec) { //double easing_progress = static_cast(m_charge_timer.get_timegone() / // m_charge_timer.get_period()); - m_physic.set_velocity_y(-325 * QuarticEaseOut(m_sprite->get_current_frame_progress())); + m_physic.set_velocity_y(-325.f * static_cast(QuarticEaseOut(m_sprite->get_current_frame_progress()))); break; } @@ -319,7 +319,7 @@ Zeekling::active_update(float dt_sec) { double easing_progress = static_cast(m_charge_timer.get_timegone() / m_charge_timer.get_period()); - float ease = QuarticEaseOut(easing_progress); + float ease = static_cast(QuarticEaseOut(easing_progress)); m_physic.set_velocity_y(m_original_yvel - (ease * m_original_yvel)); break; @@ -340,7 +340,7 @@ Zeekling::active_update(float dt_sec) { double easing_progress = static_cast(m_charge_timer.get_timegone() / m_charge_timer.get_period()); - float ease = QuarticEaseIn(easing_progress); + float ease = static_cast(QuarticEaseIn(easing_progress)); m_physic.set_velocity_y(-fabsf(ease * m_original_yvel)); break; From 94023dda39a33285c05fc6bda097036eea3766c9 Mon Sep 17 00:00:00 2001 From: MatusGuy <85036874+MatusGuy@users.noreply.github.com> Date: Thu, 9 May 2024 18:51:06 +0100 Subject: [PATCH 25/40] math is so hawwd :3 :3 :3 :3 :3 :3 :3 --- src/badguy/zeekling.cpp | 226 ++++++++++------------------------------ src/badguy/zeekling.hpp | 12 +-- src/supertux/sector.cpp | 21 ++-- src/supertux/sector.hpp | 7 +- 4 files changed, 75 insertions(+), 191 deletions(-) diff --git a/src/badguy/zeekling.cpp b/src/badguy/zeekling.cpp index a66183dd032..c267d0aaf9b 100644 --- a/src/badguy/zeekling.cpp +++ b/src/badguy/zeekling.cpp @@ -28,20 +28,20 @@ #include +/* const float CATCH_DURATION = 0.49f; const float CATCH_BIG_DISTANCE = 32.f*3.2f; // distance from the ground const float CATCH_SMALL_DISTANCE = 32.f*2.6f; // same here const float DIVE_DETECT_STAND = 0.9f; -const float DIVE_DETECT_DIVIDER = 128.f; // some weird magic number i thought of +//const float DIVE_DETECT_DIVIDER = 128.f; // some weird magic number i thought of +*/ Zeekling::Zeekling(const ReaderMapping& reader) : BadGuy(reader, "images/creatures/zeekling/zeekling.sprite"), - speed(160.f), - m_original_xvel(0.f), - m_original_yvel(0.f), + m_speed(160.f), m_easing_progress(0.0), - m_charge_timer(), + m_timer(), state(FLYING) { m_physic.enable_gravity(false); @@ -50,40 +50,12 @@ Zeekling::Zeekling(const ReaderMapping& reader) : void Zeekling::draw(DrawingContext &context) { BadGuy::draw(context); - - Player* plr = get_nearest_player(); - if (!plr) return; - - Vector reye; - const Rectf& bbox = get_bbox().grown(1.f); - reye.x = (m_dir == Direction::LEFT ? bbox.get_left() : bbox.get_right()); - reye.y = bbox.get_bottom(); - - float catch_distance = CATCH_SMALL_DISTANCE; - const Vector rrangeend = {reye.x, reye.y + catch_distance}; - - // Left/rightmost point of the hitbox. - Vector eye; - eye.x = m_dir == Direction::LEFT ? bbox.get_left() : bbox.get_right(); - eye.y = bbox.get_middle().y; - - const Vector& plrmid = plr->get_bbox().get_middle(); - - float vel = std::fabs(plr->get_physic().get_velocity_x()); - float detect_range = std::max((vel / 128), DIVE_DETECT_STAND); - - const Vector rangeend = {eye.x + ((plrmid.y - eye.y) * detect_range * - (m_dir == Direction::LEFT ? -1 : 1)), - plrmid.y}; - - context.color().draw_line(reye, rrangeend, Color::from_rgba8888(0xff, 0,0,0xff), 100); - context.color().draw_line(eye, rangeend, Color::from_rgba8888(0xff, 0,0,0xff), 100); } void Zeekling::initialize() { - m_physic.set_velocity_x(m_dir == Direction::LEFT ? -speed : speed); + m_physic.set_velocity_x(m_dir == Direction::LEFT ? -m_speed : m_speed); set_action(m_dir); } @@ -103,19 +75,19 @@ Zeekling::on_bump_horizontal() { m_dir = (m_dir == Direction::LEFT ? Direction::RIGHT : Direction::LEFT); set_action(m_dir); - m_physic.set_velocity_x(m_dir == Direction::LEFT ? -speed : speed); + m_physic.set_velocity_x(m_dir == Direction::LEFT ? -m_speed : m_speed); - if (state == CATCH || state == REBOUND) + if (state == DIVING) { - state = RECOVERING; + state = FLYING; m_easing_progress = 0.0; - m_physic.set_velocity_y(-speed); + m_physic.set_velocity_y(0); } - else if (state == DIVING || state == CHARGING) + else { - state = FLYING; + state = RECOVERING; m_easing_progress = 0.0; - m_physic.set_velocity_y(0); + m_physic.set_velocity_y(-m_speed); } } @@ -129,11 +101,6 @@ Zeekling::on_bump_vertical() } switch (state) { - case CHARGING: - state = DIVING; - m_easing_progress = 0.0; - set_action("dive", m_dir); - break; case DIVING: state = RECOVERING; @@ -141,12 +108,6 @@ Zeekling::on_bump_vertical() set_action(m_dir); break; - case CATCH: - case REBOUND: - state = RECOVERING; - m_easing_progress = 0.0; - set_action(m_dir); - case RECOVERING: state = FLYING; break; @@ -155,7 +116,7 @@ Zeekling::on_bump_vertical() break; } - m_physic.set_velocity_y(state == RECOVERING ? -speed : 0); + m_physic.set_velocity_y(state == RECOVERING ? -m_speed : 0); } void @@ -201,157 +162,78 @@ Zeekling::should_we_dive() const Vector& plrmid = plr->get_bbox().get_middle(); // Do not dive if we are not above the player. - float height = plrmid.y - eye.y; + float height = plr->get_bbox().get_top() - get_bbox().get_bottom(); if (height <= 0) return false; // Do not dive if we are too far above the player. if (height > 512) return false; - float vel = std::fabs(plr->get_physic().get_velocity_x()); - std::cout << vel << std::endl; - float detect_range = std::max((vel / 128), DIVE_DETECT_STAND); - - const Vector rangeend = {eye.x + ((plrmid.y - eye.y) * detect_range * - (m_dir == Direction::LEFT ? -1 : 1)), - plrmid.y}; - - RaycastResult result = Sector::get().get_first_line_intersection(eye, rangeend, false, nullptr); + RaycastResult result = Sector::get().get_first_line_intersection(eye, plrmid, false, nullptr); auto* resultobj = std::get_if(&result.hit); - return result.is_valid && resultobj && *resultobj == get_nearest_player()->get_collision_object(); -} - -bool -Zeekling::should_we_rebound() -{ - using RaycastResult = CollisionSystem::RaycastResult; - - Player* plr = get_nearest_player(); - if (!plr) return false; - - Vector eye; - const Rectf& bbox = get_bbox().grown(1.f); - eye.x = (m_dir == Direction::LEFT ? bbox.get_left() : bbox.get_right()); - eye.y = bbox.get_bottom(); - - float catch_distance = plr->is_big() ? CATCH_BIG_DISTANCE : CATCH_SMALL_DISTANCE; - const Vector rangeend = {eye.x, eye.y + catch_distance}; - - RaycastResult result = Sector::get().get_first_line_intersection(eye, rangeend, false, nullptr); - - auto* resulttile = std::get_if(&result.hit); - return result.is_valid && resulttile && !(*resulttile)->is_slope(); + + if (result.is_valid && resultobj && + *resultobj == plr->get_collision_object()) + { + m_target_y = plrmid.y; + return true; + } + else + { + return false; + } } void Zeekling::active_update(float dt_sec) { switch (state) { case FLYING: - if (!should_we_dive()) break; - - // swoop a bit up - state = CHARGING; - set_action("charge", m_dir); - //m_charge_timer.start(0.1f); - - [[fallthrough]]; - - case CHARGING: - { - if (m_sprite->animation_done()) - { - state = DIVING; - set_action("dive", m_dir); + if (!should_we_dive()) break; - } - //double easing_progress = static_cast(m_charge_timer.get_timegone() / - // m_charge_timer.get_period()); + state = DIVING; + set_action("dive", m_dir); - m_physic.set_velocity_y(-325.f * static_cast(QuarticEaseOut(m_sprite->get_current_frame_progress()))); - break; - } + [[fallthrough]]; case DIVING: - if (should_we_rebound()) + if (get_bbox().get_bottom() == m_target_y) { - state = CATCH; - m_physic.set_velocity_x(m_original_xvel); - m_easing_progress = 0.0; + state = FLYING; + //m_timer.start(1.f); + set_action(m_dir); break; } - - if (m_easing_progress <= 0.0) + else { - m_original_xvel = m_physic.get_velocity_x(); - m_physic.set_velocity_x(m_original_xvel + (50 * (m_dir == Direction::LEFT ? 1 : -1))); - } - - if (m_easing_progress >= 1.0) break; + float startdist = std::abs(m_target_y - m_start_position.y); + float dist = std::abs(m_target_y - get_bbox().get_top()); + double progress = static_cast(dist / startdist); + float value = std::max(1.f, 0.15f * dist * static_cast(QuadraticEaseOut(progress))); + std::cout << dist << " / " + << startdist << " " + << progress << " " + << value << std::endl; - // swoop down - m_easing_progress += 0.1; - m_physic.set_velocity_y(2 * fabsf(m_original_xvel) * - std::min(5.0, QuarticEaseIn(m_easing_progress))); + set_pos({get_pos().x, get_pos().y + value}); - break; - - case CATCH: { - if (m_charge_timer.check()) - { - state = REBOUND; break; } - if (!m_charge_timer.started()) - { - set_action("recover", m_dir, 1); - m_charge_timer.start(CATCH_DURATION); - m_original_yvel = fabsf(m_physic.get_velocity_y()); - } - - // wait for recover action - if (m_sprite->animation_done()) + case RECOVERING: { + if (m_timer.check()) { + state = FLYING; + m_physic.set_velocity_y(0); set_action(m_dir); } - - double easing_progress = static_cast(m_charge_timer.get_timegone() / - m_charge_timer.get_period()); - - float ease = static_cast(QuarticEaseOut(easing_progress)); - m_physic.set_velocity_y(m_original_yvel - (ease * m_original_yvel)); - - break; - } - - case REBOUND: { - if (m_charge_timer.check()) + else { - state = RECOVERING; - break; - } + double progress = static_cast(m_timer.get_progress() / 2); + float dist = -std::abs(m_start_position.y - get_bbox().get_top()); + float value = dist * static_cast(QuadraticEaseInOut(progress)); - if (!m_charge_timer.started()) - { - m_charge_timer.start(CATCH_DURATION); - } - - double easing_progress = static_cast(m_charge_timer.get_timegone() / - m_charge_timer.get_period()); - - float ease = static_cast(QuarticEaseIn(easing_progress)); - m_physic.set_velocity_y(-fabsf(ease * m_original_yvel)); - - break; - } - - case RECOVERING: { - // Stop recovering when we're back at initial height. - if (get_pos().y <= m_start_position.y) { - state = FLYING; - m_physic.set_velocity_y(0); - break; + m_physic.set_velocity_y(value); } break; diff --git a/src/badguy/zeekling.hpp b/src/badguy/zeekling.hpp index 4e3299f9b9d..93251c4cbb0 100644 --- a/src/badguy/zeekling.hpp +++ b/src/badguy/zeekling.hpp @@ -46,7 +46,6 @@ class Zeekling final : public BadGuy virtual bool collision_squished(GameObject& object) override; bool should_we_dive(); - bool should_we_rebound(); void on_bump_horizontal(); void on_bump_vertical(); @@ -54,20 +53,15 @@ class Zeekling final : public BadGuy private: enum ZeeklingState { FLYING, - CHARGING, DIVING, - CATCH, - REBOUND, RECOVERING }; private: - float speed; - - float m_original_xvel, m_original_yvel; - + float m_speed; double m_easing_progress; - Timer m_charge_timer; + float m_target_y; + Timer m_timer; ZeeklingState state; private: diff --git a/src/supertux/sector.cpp b/src/supertux/sector.cpp index 85ff162f7b5..f7d8d4aabf2 100644 --- a/src/supertux/sector.cpp +++ b/src/supertux/sector.cpp @@ -663,21 +663,28 @@ Sector::set_gravity(float gravity) } Player* -Sector::get_nearest_player (const Vector& pos) const +Sector::get_nearest_player(const Vector& pos) const { - Player *nearest_player = nullptr; + auto players = get_objects_by_type_index(typeid(Player)); + if (players.size() == 1) + { + Player* player = static_cast(players[0]); + return (player->is_dying() || player->is_dead() ? nullptr : player); + } + + Player* nearest_player = nullptr; float nearest_dist = std::numeric_limits::max(); - for (auto player_ptr : get_objects_by_type_index(typeid(Player))) + for (auto player_ptr : players) { - Player& player = *static_cast(player_ptr); - if (player.is_dying() || player.is_dead()) + Player* player = static_cast(player_ptr); + if (player->is_dying() || player->is_dead()) continue; - float dist = player.get_bbox ().distance(pos); + float dist = player->get_bbox().distance(pos); if (dist < nearest_dist) { - nearest_player = &player; + nearest_player = player; nearest_dist = dist; } } diff --git a/src/supertux/sector.hpp b/src/supertux/sector.hpp index 4269a5de8fe..e4ebe060018 100644 --- a/src/supertux/sector.hpp +++ b/src/supertux/sector.hpp @@ -122,9 +122,10 @@ class Sector final : public Base::Sector bool free_line_of_sight(const Vector& line_start, const Vector& line_end, bool ignore_objects = false, const MovingObject* ignore_object = nullptr) const; bool can_see_player(const Vector& eye) const; - Player* get_nearest_player (const Vector& pos) const; - Player* get_nearest_player (const Rectf& pos) const { - return (get_nearest_player (get_anchor_pos (pos, ANCHOR_MIDDLE))); + Player* get_nearest_player(const Vector& pos) const; + Player* get_nearest_player(const Rectf& pos) const + { + return get_nearest_player(get_anchor_pos(pos, ANCHOR_MIDDLE)); } std::vector get_nearby_objects (const Vector& center, float max_distance) const; From 6b55ea525730932bab530964757579fffa990f9f Mon Sep 17 00:00:00 2001 From: MatusGuy <85036874+MatusGuy@users.noreply.github.com> Date: Sun, 2 Jun 2024 17:12:20 +0100 Subject: [PATCH 26/40] behaviour mostly finished --- src/badguy/zeekling.cpp | 141 ++++++++++++++++++++++++---------------- src/badguy/zeekling.hpp | 7 +- src/math/util.hpp | 6 ++ 3 files changed, 95 insertions(+), 59 deletions(-) diff --git a/src/badguy/zeekling.cpp b/src/badguy/zeekling.cpp index c267d0aaf9b..e9c85042847 100644 --- a/src/badguy/zeekling.cpp +++ b/src/badguy/zeekling.cpp @@ -22,6 +22,7 @@ #include "math/easing.hpp" #include "math/random.hpp" #include "math/vector.hpp" +#include "math/util.hpp" #include "object/player.hpp" #include "sprite/sprite.hpp" #include "supertux/sector.hpp" @@ -39,10 +40,10 @@ const float DIVE_DETECT_STAND = 0.9f; Zeekling::Zeekling(const ReaderMapping& reader) : BadGuy(reader, "images/creatures/zeekling/zeekling.sprite"), - m_speed(160.f), - m_easing_progress(0.0), + m_speed(260.f), + m_catch_pos(0.f), m_timer(), - state(FLYING) + m_state(FLYING) { m_physic.enable_gravity(false); } @@ -77,46 +78,42 @@ Zeekling::on_bump_horizontal() set_action(m_dir); m_physic.set_velocity_x(m_dir == Direction::LEFT ? -m_speed : m_speed); - if (state == DIVING) + switch (m_state) { - state = FLYING; - m_easing_progress = 0.0; - m_physic.set_velocity_y(0); - } - else - { - state = RECOVERING; - m_easing_progress = 0.0; - m_physic.set_velocity_y(-m_speed); + case DIVING: + // Diving attempt failed. So sad. Return to base. + m_state = RECOVERING; + m_catch_pos = get_pos().y; + m_physic.set_velocity_y(0); + break; + + default: + break; } } void Zeekling::on_bump_vertical() { - if (BadGuy::get_state() == STATE_BURNING) - { - m_physic.set_velocity(0, 0); - return; - } - - switch (state) { - + switch (m_state) { case DIVING: - state = RECOVERING; - m_easing_progress = 0.0; + // Diving attempt failed. So sad. Return to base. + m_state = RECOVERING; + m_catch_pos = get_pos().y; set_action(m_dir); break; case RECOVERING: - state = FLYING; + // I guess this is my new home now. + m_state = FLYING; + m_start_position.y = get_pos().y; + m_physic.set_velocity_y(0); + set_action(m_dir); break; default: break; } - - m_physic.set_velocity_y(state == RECOVERING ? -m_speed : 0); } void @@ -128,8 +125,8 @@ Zeekling::collision_solid(const CollisionHit& hit) return; } - if (m_sprite->get_action() == "squished-left" || - m_sprite->get_action() == "squished-right") + if (BadGuy::get_state() == STATE_SQUISHED || + BadGuy::get_state() == STATE_BURNING) { return; } @@ -148,10 +145,12 @@ Zeekling::should_we_dive() { using RaycastResult = CollisionSystem::RaycastResult; - if (m_frozen) return false; + if (m_frozen) + return false; - Player* plr = get_nearest_player(); - if (!plr) return false; + Player* player = get_nearest_player(); + if (!player) + return false; // Left/rightmost point of the hitbox. Vector eye; @@ -159,21 +158,27 @@ Zeekling::should_we_dive() eye = bbox.get_middle(); eye.x = m_dir == Direction::LEFT ? bbox.get_left() : bbox.get_right(); - const Vector& plrmid = plr->get_bbox().get_middle(); + const Vector& plrmid = player->get_bbox().get_middle(); // Do not dive if we are not above the player. - float height = plr->get_bbox().get_top() - get_bbox().get_bottom(); - if (height <= 0) return false; + float height = player->get_bbox().get_top() - get_bbox().get_bottom(); + if (height <= 0) + return false; // Do not dive if we are too far above the player. - if (height > 512) return false; + if (height > 512) + return false; + + float dist = std::abs(eye.x - plrmid.x); + if (!math::in_bounds(dist, 10.f, 32.f * 15)) + return false; RaycastResult result = Sector::get().get_first_line_intersection(eye, plrmid, false, nullptr); auto* resultobj = std::get_if(&result.hit); if (result.is_valid && resultobj && - *resultobj == plr->get_collision_object()) + *resultobj == player->get_collision_object()) { m_target_y = plrmid.y; return true; @@ -186,58 +191,82 @@ Zeekling::should_we_dive() void Zeekling::active_update(float dt_sec) { - switch (state) { + switch (m_state) { case FLYING: + std::cout << m_start_position.y << " " + << get_pos().y << std::endl; + if (!should_we_dive()) break; - state = DIVING; + m_state = DIVING; set_action("dive", m_dir); - [[fallthrough]]; + //[[fallthrough]]; + break; case DIVING: - if (get_bbox().get_bottom() == m_target_y) + if (math::in_bounds(get_bbox().get_bottom(), m_target_y - 5.f, m_target_y + 5.f)) { - state = FLYING; - //m_timer.start(1.f); + m_state = CATCHING; + m_timer.start(1.5f); + m_physic.set_velocity_y(0.f); set_action(m_dir); break; } else { - float startdist = std::abs(m_target_y - m_start_position.y); - float dist = std::abs(m_target_y - get_bbox().get_top()); - double progress = static_cast(dist / startdist); - float value = std::max(1.f, 0.15f * dist * static_cast(QuadraticEaseOut(progress))); - std::cout << dist << " / " + float startdist = m_target_y - m_start_position.y; + float dist = m_target_y - get_bbox().get_top(); + float progress = (1.f - (dist / startdist)) * 550.f; + float value = 550.f - progress; + /* + std::cout << m_target_y << " " + << dist << " / " << startdist << " " << progress << " " << value << std::endl; + */ - set_pos({get_pos().x, get_pos().y + value}); + m_physic.set_velocity_y(value); break; } - case RECOVERING: { + case CATCHING: if (m_timer.check()) { - state = FLYING; + m_state = RECOVERING; + m_catch_pos = get_pos().y; + } + + break; + + case RECOVERING: + if (math::in_bounds(get_bbox().get_bottom(), m_start_position.y - 5.f, m_start_position.y + 5.f)) + { + m_state = FLYING; + m_start_position.y = get_pos().y; m_physic.set_velocity_y(0); set_action(m_dir); } else { - double progress = static_cast(m_timer.get_progress() / 2); - float dist = -std::abs(m_start_position.y - get_bbox().get_top()); - float value = dist * static_cast(QuadraticEaseInOut(progress)); + float startdist = m_catch_pos - m_start_position.y; + float dist = get_bbox().get_top() - m_start_position.y - 25.f; + float progress = (dist / startdist) * 550.f; + float value = progress < 550.f / 2 ? progress : 550.f - progress; + std::cout << m_catch_pos << " " + << m_start_position.y << " " + << dist << " / " + << startdist << " " + << progress << " " + << value << std::endl; - m_physic.set_velocity_y(value); + m_physic.set_velocity_y(-value); } break; - } default: break; @@ -258,7 +287,7 @@ Zeekling::unfreeze(bool melt) { BadGuy::unfreeze(melt); m_physic.enable_gravity(false); - state = FLYING; + m_state = FLYING; initialize(); } diff --git a/src/badguy/zeekling.hpp b/src/badguy/zeekling.hpp index 93251c4cbb0..21ea5093665 100644 --- a/src/badguy/zeekling.hpp +++ b/src/badguy/zeekling.hpp @@ -54,15 +54,16 @@ class Zeekling final : public BadGuy enum ZeeklingState { FLYING, DIVING, - RECOVERING + RECOVERING, + CATCHING }; private: float m_speed; - double m_easing_progress; + float m_catch_pos; float m_target_y; Timer m_timer; - ZeeklingState state; + ZeeklingState m_state; private: Zeekling(const Zeekling&) = delete; diff --git a/src/math/util.hpp b/src/math/util.hpp index 41591049010..931efb444ee 100644 --- a/src/math/util.hpp +++ b/src/math/util.hpp @@ -38,6 +38,12 @@ const T& clamp(const T& val, const T& min, const T& max) } } +template +bool in_bounds(const T& val, const T& min, const T& max) +{ + return !(val < min) && (val < max); +} + template int sgn(T val) { return (T(0) < val) - (val < T(0)); } From b28e5ae1749ca20f67775dacc1e8fecee624d4b9 Mon Sep 17 00:00:00 2001 From: MatusGuy <85036874+MatusGuy@users.noreply.github.com> Date: Thu, 20 Jun 2024 19:42:13 +0100 Subject: [PATCH 27/40] rusty seal of approval --- src/badguy/zeekling.cpp | 127 +++++++++++++++++++--------------------- src/badguy/zeekling.hpp | 7 ++- 2 files changed, 65 insertions(+), 69 deletions(-) diff --git a/src/badguy/zeekling.cpp b/src/badguy/zeekling.cpp index e9c85042847..2c3a443e8d8 100644 --- a/src/badguy/zeekling.cpp +++ b/src/badguy/zeekling.cpp @@ -17,8 +17,6 @@ #include "badguy/zeekling.hpp" -#include - #include "math/easing.hpp" #include "math/random.hpp" #include "math/vector.hpp" @@ -27,36 +25,32 @@ #include "sprite/sprite.hpp" #include "supertux/sector.hpp" -#include - -/* -const float CATCH_DURATION = 0.49f; -const float CATCH_BIG_DISTANCE = 32.f*3.2f; // distance from the ground -const float CATCH_SMALL_DISTANCE = 32.f*2.6f; // same here +const float FLYING_SPEED = 220.f; +const float DIVING_SPEED = 300.f; -const float DIVE_DETECT_STAND = 0.9f; -//const float DIVE_DETECT_DIVIDER = 128.f; // some weird magic number i thought of -*/ +const float DIVING_DURATION = 1.5f; +const float RECOVER_DURATION = 2.8f; Zeekling::Zeekling(const ReaderMapping& reader) : BadGuy(reader, "images/creatures/zeekling/zeekling.sprite"), - m_speed(260.f), m_catch_pos(0.f), m_timer(), m_state(FLYING) { m_physic.enable_gravity(false); + m_physic.set_velocity_x(220.f); } void Zeekling::draw(DrawingContext &context) { + context.color().draw_line({get_pos().x-5, m_target_y}, {get_pos().x+5, m_target_y}, Color::GREEN, 1000); BadGuy::draw(context); } void Zeekling::initialize() { - m_physic.set_velocity_x(m_dir == Direction::LEFT ? -m_speed : m_speed); + m_physic.set_velocity_x(m_physic.get_velocity_x() * (m_dir == Direction::LEFT ? -1 : 1)); set_action(m_dir); } @@ -76,15 +70,13 @@ Zeekling::on_bump_horizontal() { m_dir = (m_dir == Direction::LEFT ? Direction::RIGHT : Direction::LEFT); set_action(m_dir); - m_physic.set_velocity_x(m_dir == Direction::LEFT ? -m_speed : m_speed); + m_physic.set_velocity_x(m_physic.get_velocity_x() * (m_dir == Direction::LEFT ? 1 : -1)); switch (m_state) { case DIVING: // Diving attempt failed. So sad. Return to base. - m_state = RECOVERING; - m_catch_pos = get_pos().y; - m_physic.set_velocity_y(0); + recover(); break; default: @@ -98,17 +90,12 @@ Zeekling::on_bump_vertical() switch (m_state) { case DIVING: // Diving attempt failed. So sad. Return to base. - m_state = RECOVERING; - m_catch_pos = get_pos().y; - set_action(m_dir); + recover(); break; case RECOVERING: // I guess this is my new home now. - m_state = FLYING; - m_start_position.y = get_pos().y; - m_physic.set_velocity_y(0); - set_action(m_dir); + fly(); break; default: @@ -180,7 +167,7 @@ Zeekling::should_we_dive() if (result.is_valid && resultobj && *resultobj == player->get_collision_object()) { - m_target_y = plrmid.y; + m_target_y = player->get_bbox().get_top() - 10; return true; } else @@ -189,49 +176,62 @@ Zeekling::should_we_dive() } } +void Zeekling::set_speed(float speed) +{ + m_physic.set_velocity_x(speed * (m_dir == Direction::LEFT ? -1 : 1)); +} + +void Zeekling::fly() +{ + m_state = FLYING; + set_speed(FLYING_SPEED); + m_start_position.y = get_pos().y; + set_action(m_dir); +} + +void Zeekling::dive() +{ + m_state = DIVING; + set_speed(DIVING_SPEED); + m_timer.start(DIVING_DURATION); + set_action("dive", m_dir); +} + +void Zeekling::recover() +{ + m_state = RECOVERING; + m_catch_pos = get_pos().y; + m_timer.start(RECOVER_DURATION); + set_action(m_dir); +} + void Zeekling::active_update(float dt_sec) { switch (m_state) { case FLYING: - std::cout << m_start_position.y << " " - << get_pos().y << std::endl; - if (!should_we_dive()) break; - m_state = DIVING; - set_action("dive", m_dir); + dive(); - //[[fallthrough]]; break; case DIVING: - if (math::in_bounds(get_bbox().get_bottom(), m_target_y - 5.f, m_target_y + 5.f)) + if (m_timer.check()) { - m_state = CATCHING; - m_timer.start(1.5f); - m_physic.set_velocity_y(0.f); - set_action(m_dir); - break; + recover(); } else { - float startdist = m_target_y - m_start_position.y; - float dist = m_target_y - get_bbox().get_top(); - float progress = (1.f - (dist / startdist)) * 550.f; - float value = 550.f - progress; - /* - std::cout << m_target_y << " " - << dist << " / " - << startdist << " " - << progress << " " - << value << std::endl; - */ - - m_physic.set_velocity_y(value); + float dist = m_target_y - m_start_position.y; + double progress = CubicEaseIn(static_cast(1.f - m_timer.get_progress())); + float value = m_target_y - (static_cast(progress) * dist); + Vector pos(get_pos().x, value); + + set_pos(pos); - break; } + break; case CATCHING: if (m_timer.check()) @@ -243,27 +243,18 @@ Zeekling::active_update(float dt_sec) { break; case RECOVERING: - if (math::in_bounds(get_bbox().get_bottom(), m_start_position.y - 5.f, m_start_position.y + 5.f)) + if (m_timer.check()) { - m_state = FLYING; - m_start_position.y = get_pos().y; - m_physic.set_velocity_y(0); - set_action(m_dir); + fly(); } else { - float startdist = m_catch_pos - m_start_position.y; - float dist = get_bbox().get_top() - m_start_position.y - 25.f; - float progress = (dist / startdist) * 550.f; - float value = progress < 550.f / 2 ? progress : 550.f - progress; - std::cout << m_catch_pos << " " - << m_start_position.y << " " - << dist << " / " - << startdist << " " - << progress << " " - << value << std::endl; - - m_physic.set_velocity_y(-value); + float dist = m_catch_pos - m_start_position.y; + double progress = QuadraticEaseInOut(static_cast(m_timer.get_progress())); + float value = m_catch_pos - (static_cast(progress) * dist); + Vector pos(get_pos().x, value); + + set_pos(pos); } break; diff --git a/src/badguy/zeekling.hpp b/src/badguy/zeekling.hpp index 21ea5093665..ec7e0edc2f9 100644 --- a/src/badguy/zeekling.hpp +++ b/src/badguy/zeekling.hpp @@ -47,6 +47,12 @@ class Zeekling final : public BadGuy bool should_we_dive(); + void set_speed(float speed); + + void fly(); + void dive(); + void recover(); + void on_bump_horizontal(); void on_bump_vertical(); @@ -59,7 +65,6 @@ class Zeekling final : public BadGuy }; private: - float m_speed; float m_catch_pos; float m_target_y; Timer m_timer; From 158d0ac8d8d6da74d7e5ec10978c63e0cb919f6b Mon Sep 17 00:00:00 2001 From: MatusGuy <85036874+MatusGuy@users.noreply.github.com> Date: Sat, 22 Jun 2024 19:33:54 +0100 Subject: [PATCH 28/40] zeekling charge --- src/badguy/zeekling.cpp | 34 +++++++++++++++++++++------------- src/badguy/zeekling.hpp | 3 ++- 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/src/badguy/zeekling.cpp b/src/badguy/zeekling.cpp index 2c3a443e8d8..21c8835a1c0 100644 --- a/src/badguy/zeekling.cpp +++ b/src/badguy/zeekling.cpp @@ -25,9 +25,11 @@ #include "sprite/sprite.hpp" #include "supertux/sector.hpp" -const float FLYING_SPEED = 220.f; -const float DIVING_SPEED = 300.f; +const float FLYING_SPEED = 180.f; +const float CHARGING_SPEED = 120.f; +const float DIVING_SPEED = 280.f; +const float CHARGING_DURATION = 0.3f; const float DIVING_DURATION = 1.5f; const float RECOVER_DURATION = 2.8f; @@ -38,7 +40,7 @@ Zeekling::Zeekling(const ReaderMapping& reader) : m_state(FLYING) { m_physic.enable_gravity(false); - m_physic.set_velocity_x(220.f); + m_physic.set_velocity_x(FLYING_SPEED); } void Zeekling::draw(DrawingContext &context) @@ -189,6 +191,14 @@ void Zeekling::fly() set_action(m_dir); } +void Zeekling::charge() +{ + m_state = CHARGING; + m_timer.start(CHARGING_DURATION); + set_speed(CHARGING_SPEED); + set_action("charge", m_dir); +} + void Zeekling::dive() { m_state = DIVING; @@ -212,10 +222,17 @@ Zeekling::active_update(float dt_sec) { if (!should_we_dive()) break; - dive(); + charge(); break; + case CHARGING: + if (m_timer.check()) + { + dive(); + } + break; + case DIVING: if (m_timer.check()) { @@ -233,15 +250,6 @@ Zeekling::active_update(float dt_sec) { } break; - case CATCHING: - if (m_timer.check()) - { - m_state = RECOVERING; - m_catch_pos = get_pos().y; - } - - break; - case RECOVERING: if (m_timer.check()) { diff --git a/src/badguy/zeekling.hpp b/src/badguy/zeekling.hpp index ec7e0edc2f9..60b836ccc26 100644 --- a/src/badguy/zeekling.hpp +++ b/src/badguy/zeekling.hpp @@ -50,6 +50,7 @@ class Zeekling final : public BadGuy void set_speed(float speed); void fly(); + void charge(); void dive(); void recover(); @@ -59,9 +60,9 @@ class Zeekling final : public BadGuy private: enum ZeeklingState { FLYING, + CHARGING, DIVING, RECOVERING, - CATCHING }; private: From 38263093cb3953fe5218be476929f9b01cd6753b Mon Sep 17 00:00:00 2001 From: MatusGuy <85036874+MatusGuy@users.noreply.github.com> Date: Sat, 22 Jun 2024 20:09:58 +0100 Subject: [PATCH 29/40] fix zeekling moonwalking --- src/badguy/zeekling.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/badguy/zeekling.cpp b/src/badguy/zeekling.cpp index 21c8835a1c0..642de2b78ec 100644 --- a/src/badguy/zeekling.cpp +++ b/src/badguy/zeekling.cpp @@ -26,7 +26,7 @@ #include "supertux/sector.hpp" const float FLYING_SPEED = 180.f; -const float CHARGING_SPEED = 120.f; +const float CHARGING_SPEED = 150.f; const float DIVING_SPEED = 280.f; const float CHARGING_DURATION = 0.3f; @@ -72,7 +72,8 @@ Zeekling::on_bump_horizontal() { m_dir = (m_dir == Direction::LEFT ? Direction::RIGHT : Direction::LEFT); set_action(m_dir); - m_physic.set_velocity_x(m_physic.get_velocity_x() * (m_dir == Direction::LEFT ? 1 : -1)); + m_physic.set_velocity_x(std::abs(m_physic.get_velocity_x()) * (m_dir == Direction::LEFT ? -1 : 1)); + std::cout << m_state << " " << m_dir << std::endl; switch (m_state) { @@ -202,8 +203,8 @@ void Zeekling::charge() void Zeekling::dive() { m_state = DIVING; - set_speed(DIVING_SPEED); m_timer.start(DIVING_DURATION); + set_speed(DIVING_SPEED); set_action("dive", m_dir); } From 3f2d596c245e60287f947e25c04273851c36e3cb Mon Sep 17 00:00:00 2001 From: MatusGuy <85036874+MatusGuy@users.noreply.github.com> Date: Sat, 22 Jun 2024 20:42:05 +0100 Subject: [PATCH 30/40] zeekling min dive height --- src/badguy/zeekling.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/badguy/zeekling.cpp b/src/badguy/zeekling.cpp index 642de2b78ec..7a263940ad5 100644 --- a/src/badguy/zeekling.cpp +++ b/src/badguy/zeekling.cpp @@ -150,17 +150,17 @@ Zeekling::should_we_dive() const Vector& plrmid = player->get_bbox().get_middle(); - // Do not dive if we are not above the player. - float height = player->get_bbox().get_top() - get_bbox().get_bottom(); - if (height <= 0) + // Do not dive if we are too close to the player. + float height = player->get_bbox().get_top() - get_bbox().get_top(); + if (height <= 32.f * 4.5f) return false; // Do not dive if we are too far above the player. if (height > 512) return false; - float dist = std::abs(eye.x - plrmid.x); - if (!math::in_bounds(dist, 10.f, 32.f * 15)) + float xdist = std::abs(eye.x - plrmid.x); + if (!math::in_bounds(xdist, 10.f, 32.f * 15)) return false; RaycastResult result = Sector::get().get_first_line_intersection(eye, plrmid, false, nullptr); From 1b559ed6eeaf2f612d76d65e4a756af5b20f6cf4 Mon Sep 17 00:00:00 2001 From: MatusGuy Date: Thu, 11 Jul 2024 14:02:53 +0100 Subject: [PATCH 31/40] Fix zeekling flip clip bug and remove debug draw --- src/badguy/zeekling.cpp | 12 ++++++------ src/badguy/zeekling.hpp | 5 +++-- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/badguy/zeekling.cpp b/src/badguy/zeekling.cpp index 2c3a443e8d8..7c9392e6b42 100644 --- a/src/badguy/zeekling.cpp +++ b/src/badguy/zeekling.cpp @@ -41,12 +41,6 @@ Zeekling::Zeekling(const ReaderMapping& reader) : m_physic.set_velocity_x(220.f); } -void Zeekling::draw(DrawingContext &context) -{ - context.color().draw_line({get_pos().x-5, m_target_y}, {get_pos().x+5, m_target_y}, Color::GREEN, 1000); - BadGuy::draw(context); -} - void Zeekling::initialize() { @@ -288,4 +282,10 @@ Zeekling::is_freezable() const return true; } +void Zeekling::on_flip(float height) +{ + BadGuy::on_flip(height); + m_start_position.y = get_pos().y; +} + /* EOF */ diff --git a/src/badguy/zeekling.hpp b/src/badguy/zeekling.hpp index ec7e0edc2f9..62db7f960e2 100644 --- a/src/badguy/zeekling.hpp +++ b/src/badguy/zeekling.hpp @@ -25,8 +25,6 @@ class Zeekling final : public BadGuy public: Zeekling(const ReaderMapping& reader); - virtual void draw(DrawingContext& context) override; - virtual void initialize() override; virtual void collision_solid(const CollisionHit& hit) override; virtual void active_update(float dt_sec) override; @@ -42,6 +40,8 @@ class Zeekling final : public BadGuy virtual std::string get_display_name() const override { return display_name(); } virtual bool is_snipable() const override { return true; } + virtual void on_flip(float height) override; + private: virtual bool collision_squished(GameObject& object) override; @@ -73,6 +73,7 @@ class Zeekling final : public BadGuy private: Zeekling(const Zeekling&) = delete; Zeekling& operator=(const Zeekling&) = delete; + }; #endif From aa12984a02b4dd46bfb48683fd5c5979724da017 Mon Sep 17 00:00:00 2001 From: Carsten Wirtz Date: Thu, 11 Jul 2024 21:59:34 +0200 Subject: [PATCH 32/40] Minor adjustment to Zeekling "charge" animation [ci skip] --- data/images/creatures/zeekling/charge-0.png | Bin 24413 -> 21408 bytes data/images/creatures/zeekling/charge-1.png | Bin 25587 -> 22495 bytes data/images/creatures/zeekling/charge-2.png | Bin 24281 -> 21250 bytes data/images/creatures/zeekling/charge-3.png | Bin 21574 -> 19441 bytes data/images/creatures/zeekling/charge-4.png | Bin 21544 -> 19328 bytes data/images/creatures/zeekling/dive-0.png | Bin 21007 -> 19113 bytes 6 files changed, 0 insertions(+), 0 deletions(-) diff --git a/data/images/creatures/zeekling/charge-0.png b/data/images/creatures/zeekling/charge-0.png index a4590bfb1f0e98e23e34a0084976bcacabd2c88b..5942c6573d48e7423351b0d843a05b9d9f7a9f57 100644 GIT binary patch delta 17229 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

!4T;1G7w>BzXnMfhLf*`~-3S-Inv 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
NsPNU^(s@Hc^ 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

~vMjrk(?o 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∾R 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 M07*qoM6N<$f?p8n2mk;8 delta 21805 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

1F*0R0I5lHqEn+caVJ$Q= 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 diff --git a/data/images/creatures/zeekling/charge-2.png b/data/images/creatures/zeekling/charge-2.png index ddf8b995ae4dc517f3823b9cd6279ab3a849be90..7ec64a9e688a578aa04b8faaf806faf0e78e464b 100644 GIT binary patch delta 17314 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 delta 17504 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 G0$_r=HCe|1 From 3aa39b9f02796191c342551aab537e734ba68029 Mon Sep 17 00:00:00 2001 From: MatusGuy Date: Sat, 20 Jul 2024 16:52:07 +0100 Subject: [PATCH 33/40] change switch statement --- src/badguy/zeekling.cpp | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/src/badguy/zeekling.cpp b/src/badguy/zeekling.cpp index 17080bd0745..d068da83bb3 100644 --- a/src/badguy/zeekling.cpp +++ b/src/badguy/zeekling.cpp @@ -67,17 +67,11 @@ Zeekling::on_bump_horizontal() m_dir = (m_dir == Direction::LEFT ? Direction::RIGHT : Direction::LEFT); set_action(m_dir); m_physic.set_velocity_x(std::abs(m_physic.get_velocity_x()) * (m_dir == Direction::LEFT ? -1 : 1)); - std::cout << m_state << " " << m_dir << std::endl; - switch (m_state) + if (m_state == DIVING) { - case DIVING: - // Diving attempt failed. So sad. Return to base. - recover(); - break; - - default: - break; + // Diving attempt failed. So sad. Return to base. + recover(); } } From 98124caa275af954c11ed0886809cf57cf63f086 Mon Sep 17 00:00:00 2001 From: MatusGuy Date: Sat, 20 Jul 2024 21:05:21 +0100 Subject: [PATCH 34/40] fixes --- src/badguy/zeekling.cpp | 15 +++++++++++---- src/math/util.hpp | 2 +- src/supertux/sector.cpp | 3 ++- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/badguy/zeekling.cpp b/src/badguy/zeekling.cpp index d068da83bb3..2669d0d1997 100644 --- a/src/badguy/zeekling.cpp +++ b/src/badguy/zeekling.cpp @@ -33,6 +33,13 @@ const float CHARGING_DURATION = 0.3f; const float DIVING_DURATION = 1.5f; const float RECOVER_DURATION = 2.8f; +const float MIN_DETECT_RANGE_Y = 32.f * 4.5f; +const float MAX_DETECT_RANGE_Y = 512.f; +const float MIN_DETECT_RANGE_X = 10.f; +const float MAX_DETECT_RANGE_X = 32.f * 15.f; + +const float CATCH_OFFSET = -10.f; + Zeekling::Zeekling(const ReaderMapping& reader) : BadGuy(reader, "images/creatures/zeekling/zeekling.sprite"), m_catch_pos(0.f), @@ -140,15 +147,15 @@ Zeekling::should_we_dive() // Do not dive if we are too close to the player. float height = player->get_bbox().get_top() - get_bbox().get_top(); - if (height <= 32.f * 4.5f) + if (height <= MIN_DETECT_RANGE_Y) return false; // Do not dive if we are too far above the player. - if (height > 512) + if (height > MAX_DETECT_RANGE_Y) return false; float xdist = std::abs(eye.x - plrmid.x); - if (!math::in_bounds(xdist, 10.f, 32.f * 15)) + if (!math::in_bounds(xdist, MIN_DETECT_RANGE_X, MAX_DETECT_RANGE_X)) return false; RaycastResult result = Sector::get().get_first_line_intersection(eye, plrmid, false, nullptr); @@ -158,7 +165,7 @@ Zeekling::should_we_dive() if (result.is_valid && resultobj && *resultobj == player->get_collision_object()) { - m_target_y = player->get_bbox().get_top() - 10; + m_target_y = player->get_bbox().get_top() + CATCH_OFFSET; return true; } else diff --git a/src/math/util.hpp b/src/math/util.hpp index 931efb444ee..6804ab378eb 100644 --- a/src/math/util.hpp +++ b/src/math/util.hpp @@ -41,7 +41,7 @@ const T& clamp(const T& val, const T& min, const T& max) template bool in_bounds(const T& val, const T& min, const T& max) { - return !(val < min) && (val < max); + return val >= min && val <= max; } template int sgn(T val) { diff --git a/src/supertux/sector.cpp b/src/supertux/sector.cpp index 9bc9fe1f874..7a71100a6c7 100644 --- a/src/supertux/sector.cpp +++ b/src/supertux/sector.cpp @@ -740,7 +740,8 @@ Sector::get_nearest_player(const Vector& pos) const float dist = player->get_bbox().distance(pos); - if (dist < nearest_dist) { + if (dist < nearest_dist) + { nearest_player = player; nearest_dist = dist; } From a388580c0055bb5669af448439dfc9ad96ddd0f3 Mon Sep 17 00:00:00 2001 From: Marty <85036874+MatusGuy@users.noreply.github.com> Date: Sun, 21 Jul 2024 20:33:38 +0100 Subject: [PATCH 35/40] code style [ci skip] Co-authored-by: Vankata453 <78196474+Vankata453@users.noreply.github.com> --- src/badguy/zeekling.cpp | 10 ++++------ src/badguy/zeekling.hpp | 1 - 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/badguy/zeekling.cpp b/src/badguy/zeekling.cpp index 2669d0d1997..acae50c45f0 100644 --- a/src/badguy/zeekling.cpp +++ b/src/badguy/zeekling.cpp @@ -19,8 +19,8 @@ #include "math/easing.hpp" #include "math/random.hpp" -#include "math/vector.hpp" #include "math/util.hpp" +#include "math/vector.hpp" #include "object/player.hpp" #include "sprite/sprite.hpp" #include "supertux/sector.hpp" @@ -116,13 +116,10 @@ Zeekling::collision_solid(const CollisionHit& hit) return; } - if (hit.top || hit.bottom) { + if (hit.top || hit.bottom) on_bump_vertical(); - } else if (hit.left || hit.right) - { on_bump_horizontal(); - } } bool @@ -174,7 +171,8 @@ Zeekling::should_we_dive() } } -void Zeekling::set_speed(float speed) +void +Zeekling::set_speed(float speed) { m_physic.set_velocity_x(speed * (m_dir == Direction::LEFT ? -1 : 1)); } diff --git a/src/badguy/zeekling.hpp b/src/badguy/zeekling.hpp index 8e39d5d2026..1d95d2eca76 100644 --- a/src/badguy/zeekling.hpp +++ b/src/badguy/zeekling.hpp @@ -74,7 +74,6 @@ class Zeekling final : public BadGuy private: Zeekling(const Zeekling&) = delete; Zeekling& operator=(const Zeekling&) = delete; - }; #endif From 78c15889deafb7737c8862db0cdcb3d72f6dd394 Mon Sep 17 00:00:00 2001 From: MatusGuy Date: Tue, 23 Jul 2024 09:21:43 +0000 Subject: [PATCH 36/40] code style [ci skip] --- src/badguy/zeekling.cpp | 45 +++++++++++++++++++++-------------------- src/supertux/sector.cpp | 2 +- 2 files changed, 24 insertions(+), 23 deletions(-) diff --git a/src/badguy/zeekling.cpp b/src/badguy/zeekling.cpp index acae50c45f0..ca71403300f 100644 --- a/src/badguy/zeekling.cpp +++ b/src/badguy/zeekling.cpp @@ -25,20 +25,20 @@ #include "sprite/sprite.hpp" #include "supertux/sector.hpp" -const float FLYING_SPEED = 180.f; -const float CHARGING_SPEED = 150.f; -const float DIVING_SPEED = 280.f; +static const float FLYING_SPEED = 180.f; +static const float CHARGING_SPEED = 150.f; +static const float DIVING_SPEED = 280.f; -const float CHARGING_DURATION = 0.3f; -const float DIVING_DURATION = 1.5f; -const float RECOVER_DURATION = 2.8f; +static const float CHARGING_DURATION = 0.3f; +static const float DIVING_DURATION = 1.5f; +static const float RECOVER_DURATION = 2.8f; -const float MIN_DETECT_RANGE_Y = 32.f * 4.5f; -const float MAX_DETECT_RANGE_Y = 512.f; -const float MIN_DETECT_RANGE_X = 10.f; -const float MAX_DETECT_RANGE_X = 32.f * 15.f; +static const float MIN_DETECT_RANGE_Y = 32.f * 4.5f; +static const float MAX_DETECT_RANGE_Y = 512.f; +static const float MIN_DETECT_RANGE_X = 10.f; +static const float MAX_DETECT_RANGE_X = 32.f * 15.f; -const float CATCH_OFFSET = -10.f; +static const float CATCH_OFFSET = -10.f; Zeekling::Zeekling(const ReaderMapping& reader) : BadGuy(reader, "images/creatures/zeekling/zeekling.sprite"), @@ -93,6 +93,7 @@ Zeekling::on_bump_vertical() case RECOVERING: // I guess this is my new home now. + // Set start position to the current position. fly(); break; @@ -140,7 +141,7 @@ Zeekling::should_we_dive() eye = bbox.get_middle(); eye.x = m_dir == Direction::LEFT ? bbox.get_left() : bbox.get_right(); - const Vector& plrmid = player->get_bbox().get_middle(); + const Vector& playermiddle = player->get_bbox().get_middle(); // Do not dive if we are too close to the player. float height = player->get_bbox().get_top() - get_bbox().get_top(); @@ -151,11 +152,11 @@ Zeekling::should_we_dive() if (height > MAX_DETECT_RANGE_Y) return false; - float xdist = std::abs(eye.x - plrmid.x); + float xdist = std::abs(eye.x - playermiddle.x); if (!math::in_bounds(xdist, MIN_DETECT_RANGE_X, MAX_DETECT_RANGE_X)) return false; - RaycastResult result = Sector::get().get_first_line_intersection(eye, plrmid, false, nullptr); + RaycastResult result = Sector::get().get_first_line_intersection(eye, playermiddle, false, nullptr); auto* resultobj = std::get_if(&result.hit); @@ -234,10 +235,10 @@ Zeekling::active_update(float dt_sec) { } else { - float dist = m_target_y - m_start_position.y; - double progress = CubicEaseIn(static_cast(1.f - m_timer.get_progress())); - float value = m_target_y - (static_cast(progress) * dist); - Vector pos(get_pos().x, value); + const float dist = m_target_y - m_start_position.y; + const double progress = CubicEaseIn(static_cast(1.f - m_timer.get_progress())); + const float value = m_target_y - (static_cast(progress) * dist); + const Vector pos(get_pos().x, value); set_pos(pos); @@ -251,10 +252,10 @@ Zeekling::active_update(float dt_sec) { } else { - float dist = m_catch_pos - m_start_position.y; - double progress = QuadraticEaseInOut(static_cast(m_timer.get_progress())); - float value = m_catch_pos - (static_cast(progress) * dist); - Vector pos(get_pos().x, value); + const float dist = m_catch_pos - m_start_position.y; + const double progress = QuadraticEaseInOut(static_cast(m_timer.get_progress())); + const float value = m_catch_pos - (static_cast(progress) * dist); + const Vector pos(get_pos().x, value); set_pos(pos); } diff --git a/src/supertux/sector.cpp b/src/supertux/sector.cpp index 7a71100a6c7..19abb7edca6 100644 --- a/src/supertux/sector.cpp +++ b/src/supertux/sector.cpp @@ -726,7 +726,7 @@ Sector::get_nearest_player(const Vector& pos) const if (players.size() == 1) { Player* player = static_cast(players[0]); - return (player->is_dying() || player->is_dead() ? nullptr : player); + return ((player->is_dying() || player->is_dead()) ? nullptr : player); } Player* nearest_player = nullptr; From 584219292c9dd8bf796ec8ddffe39351c6f3c5d5 Mon Sep 17 00:00:00 2001 From: MatusGuy Date: Fri, 26 Jul 2024 22:03:39 +0100 Subject: [PATCH 37/40] code style 3455436 [ci skip] --- src/badguy/zeekling.cpp | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/badguy/zeekling.cpp b/src/badguy/zeekling.cpp index ca71403300f..1fe88e64ed5 100644 --- a/src/badguy/zeekling.cpp +++ b/src/badguy/zeekling.cpp @@ -166,10 +166,8 @@ Zeekling::should_we_dive() m_target_y = player->get_bbox().get_top() + CATCH_OFFSET; return true; } - else - { - return false; - } + + return false; } void @@ -239,9 +237,7 @@ Zeekling::active_update(float dt_sec) { const double progress = CubicEaseIn(static_cast(1.f - m_timer.get_progress())); const float value = m_target_y - (static_cast(progress) * dist); const Vector pos(get_pos().x, value); - set_pos(pos); - } break; @@ -256,7 +252,6 @@ Zeekling::active_update(float dt_sec) { const double progress = QuadraticEaseInOut(static_cast(m_timer.get_progress())); const float value = m_catch_pos - (static_cast(progress) * dist); const Vector pos(get_pos().x, value); - set_pos(pos); } From f508da0fde5b592d53488856109bd347f129eeb4 Mon Sep 17 00:00:00 2001 From: Marty <85036874+MatusGuy@users.noreply.github.com> Date: Wed, 7 Aug 2024 20:02:01 +0100 Subject: [PATCH 38/40] g --- src/badguy/zeekling.cpp | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/badguy/zeekling.cpp b/src/badguy/zeekling.cpp index 1fe88e64ed5..5d02178dbd1 100644 --- a/src/badguy/zeekling.cpp +++ b/src/badguy/zeekling.cpp @@ -245,15 +245,13 @@ Zeekling::active_update(float dt_sec) { if (m_timer.check()) { fly(); + break; } - else - { - const float dist = m_catch_pos - m_start_position.y; - const double progress = QuadraticEaseInOut(static_cast(m_timer.get_progress())); - const float value = m_catch_pos - (static_cast(progress) * dist); - const Vector pos(get_pos().x, value); - set_pos(pos); - } + const float dist = m_catch_pos - m_start_position.y; + const double progress = QuadraticEaseInOut(static_cast(m_timer.get_progress())); + const float value = m_catch_pos - (static_cast(progress) * dist); + const Vector pos(get_pos().x, value); + set_pos(pos); break; From 15f42942d677704dc8fb8706e1339aaddc5a61b5 Mon Sep 17 00:00:00 2001 From: MatusGuy Date: Wed, 14 Aug 2024 14:18:37 +0100 Subject: [PATCH 39/40] gg --- src/badguy/zeekling.cpp | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/badguy/zeekling.cpp b/src/badguy/zeekling.cpp index 5d02178dbd1..c7895bd33cb 100644 --- a/src/badguy/zeekling.cpp +++ b/src/badguy/zeekling.cpp @@ -227,26 +227,30 @@ Zeekling::active_update(float dt_sec) { break; case DIVING: + { if (m_timer.check()) { recover(); + break; } - else - { - const float dist = m_target_y - m_start_position.y; - const double progress = CubicEaseIn(static_cast(1.f - m_timer.get_progress())); - const float value = m_target_y - (static_cast(progress) * dist); - const Vector pos(get_pos().x, value); - set_pos(pos); - } + + const float dist = m_target_y - m_start_position.y; + const double progress = CubicEaseIn(static_cast(1.f - m_timer.get_progress())); + const float value = m_target_y - (static_cast(progress) * dist); + const Vector pos(get_pos().x, value); + set_pos(pos); + break; + } case RECOVERING: + { if (m_timer.check()) { fly(); break; } + const float dist = m_catch_pos - m_start_position.y; const double progress = QuadraticEaseInOut(static_cast(m_timer.get_progress())); const float value = m_catch_pos - (static_cast(progress) * dist); @@ -254,6 +258,7 @@ Zeekling::active_update(float dt_sec) { set_pos(pos); break; + } default: break; From caef364d30349f5413a4bdca66d1a2e837501700 Mon Sep 17 00:00:00 2001 From: MatusGuy Date: Fri, 16 Aug 2024 12:54:53 +0100 Subject: [PATCH 40/40] bruh --- src/supertux/sector.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/supertux/sector.cpp b/src/supertux/sector.cpp index f9bd12ba0ab..01ea7fe8d53 100644 --- a/src/supertux/sector.cpp +++ b/src/supertux/sector.cpp @@ -726,7 +726,7 @@ Sector::get_nearest_player(const Vector& pos) const if (players.size() == 1) { Player* player = static_cast(players[0]); - return (!player->is_alive()) ? nullptr : player); + return (!player->is_alive() ? nullptr : player); } Player* nearest_player = nullptr;