---
src/weapon/supertux.cpp | 43 +++++++++++++++++++++++++------------------
src/weapon/supertux.h | 8 ++++++++
2 files changed, 33 insertions(+), 18 deletions(-)
diff --git a/src/weapon/supertux.cpp b/src/weapon/supertux.cpp
index a811c08..948f681 100644
--- a/src/weapon/supertux.cpp
+++ b/src/weapon/supertux.cpp
@@ -238,6 +238,12 @@ bool TuxLauncher::p_Shoot ()
current_tux = static_cast<SuperTux *>(projectile);
tux_death_time = 0;
+ move_left_pressed = false;
+ move_right_pressed = false;
+ ActiveCharacter().StopMovingLeft(true);
+ ActiveCharacter().StopMovingLeft(false);
+ ActiveCharacter().StopMovingRight(true);
+ ActiveCharacter().StopMovingRight(false);
bool r = WeaponLauncher::p_Shoot();
return r;
@@ -245,12 +251,17 @@ bool TuxLauncher::p_Shoot ()
void TuxLauncher::Refresh()
{
- if (current_tux)
- return;
-
- if (tux_death_time && tux_death_time + 2000 < Time::GetInstance()->Read()) {
- UseAmmoUnit();
- tux_death_time = 0;
+ if (current_tux) {
+ if (move_left_pressed && !move_right_pressed) {
+ current_tux->turn_left();
+ } else if (move_right_pressed && !move_left_pressed) {
+ current_tux->turn_right();
+ }
+ } else {
+ if (tux_death_time && tux_death_time + 2000 < Time::GetInstance()->Read())
{
+ UseAmmoUnit();
+ tux_death_time = 0;
+ }
}
}
@@ -289,22 +300,20 @@ void TuxLauncher::StopShooting()
// Move right
void TuxLauncher::HandleKeyPressed_MoveRight(bool slowly)
{
- if (current_tux)
- current_tux->turn_right();
- else if (!tux_death_time)
+ StartMovingRightForAllPlayers();
+ if (!current_tux && !tux_death_time)
ActiveCharacter().HandleKeyPressed_MoveRight(slowly);
}
void TuxLauncher::HandleKeyRefreshed_MoveRight(bool slowly)
{
- if (current_tux)
- current_tux->turn_right();
- else if (!tux_death_time)
+ if (!current_tux && !tux_death_time)
ActiveCharacter().HandleKeyRefreshed_MoveRight(slowly);
}
void TuxLauncher::HandleKeyReleased_MoveRight(bool slowly)
{
+ StopMovingRightForAllPlayers();
if (!current_tux && !tux_death_time)
ActiveCharacter().HandleKeyReleased_MoveRight(slowly);
}
@@ -312,22 +321,20 @@ void TuxLauncher::HandleKeyReleased_MoveRight(bool slowly)
// Move left
void TuxLauncher::HandleKeyPressed_MoveLeft(bool slowly)
{
- if (current_tux)
- current_tux->turn_left();
- else if (!tux_death_time)
+ StartMovingLeftForAllPlayers();
+ if (!current_tux && !tux_death_time)
ActiveCharacter().HandleKeyPressed_MoveLeft(slowly);
}
void TuxLauncher::HandleKeyRefreshed_MoveLeft(bool slowly)
{
- if (current_tux)
- current_tux->turn_left();
- else if (!tux_death_time)
+ if (!current_tux && !tux_death_time)
ActiveCharacter().HandleKeyRefreshed_MoveLeft(slowly);
}
void TuxLauncher::HandleKeyReleased_MoveLeft(bool slowly)
{
+ StopMovingLeftForAllPlayers();
if (!current_tux && !tux_death_time)
ActiveCharacter().HandleKeyReleased_MoveLeft(slowly);
}
diff --git a/src/weapon/supertux.h b/src/weapon/supertux.h
index b90e504..a1da831 100644
--- a/src/weapon/supertux.h
+++ b/src/weapon/supertux.h
@@ -34,6 +34,8 @@ class TuxLauncher : public WeaponLauncher
private:
SuperTux * current_tux;
uint tux_death_time;
+ bool move_left_pressed;
+ bool move_right_pressed;
public:
TuxLauncher();
@@ -44,6 +46,12 @@ public:
virtual void SignalEndOfProjectile();
+ virtual void StartMovingLeft() {move_left_pressed = true;};
+ virtual void StopMovingLeft() {move_left_pressed = false;};
+
+ virtual void StartMovingRight() {move_right_pressed = true;};
+ virtual void StopMovingRight() {move_right_pressed = false;};
+
void StartShooting();
void StopShooting();
--
1.6.0.4
_______________________________________________
Wormux-dev mailing list
[email protected]
https://mail.gna.org/listinfo/wormux-dev