---
src/weapon/grapple.cpp | 100 ++++++++++++++++++++++++++++++++++++++----------
src/weapon/grapple.h | 16 ++++++++
2 files changed, 96 insertions(+), 20 deletions(-)
diff --git a/src/weapon/grapple.cpp b/src/weapon/grapple.cpp
index 6d0c73e..e2e952b 100644
--- a/src/weapon/grapple.cpp
+++ b/src/weapon/grapple.cpp
@@ -158,6 +158,10 @@ Grapple::Grapple() : Weapon(WEAPON_GRAPPLE, "grapple", new
GrappleConfig())
go_left = false ;
go_right = false ;
delta_len = 0 ;
+ move_left_pressed = false;
+ move_right_pressed = false;
+ move_up_pressed = false;
+ move_down_pressed = false;
}
void Grapple::UpdateTranslationStrings()
@@ -410,6 +414,19 @@ void Grapple::Refresh()
if (!IsInUse())
return ;
+ if (move_left_pressed && !move_right_pressed) {
+ GoLeft();
+ } else if (move_right_pressed && !move_left_pressed) {
+ GoRight();
+ }
+
+ if (move_up_pressed && !move_down_pressed) {
+ GoUp();
+ } else if (move_down_pressed && !move_up_pressed) {
+ GoDown();
+ }
+
+
if (m_attaching)
TryAttachRope();
@@ -498,6 +515,10 @@ void Grapple::AttachRope(const Point2i& contact_point)
m_attaching = false;
m_is_active = true;
+ move_left_pressed = false;
+ move_right_pressed = false;
+ move_up_pressed = false;
+ move_down_pressed = false;
rope_nodes.clear();
@@ -679,55 +700,94 @@ void Grapple::StopLeft()
ActiveCharacter().SetExternForce(0,0);
}
+void Grapple::StartMovingLeft()
+{
+ move_left_pressed = true;
+}
+
+void Grapple::StopMovingLeft()
+{
+ move_left_pressed = false;
+ StopLeft();
+}
+
+void Grapple::StartMovingRight()
+{
+ move_right_pressed = true;
+}
+
+void Grapple::StopMovingRight()
+{
+ move_right_pressed = false;
+ StopRight();
+}
+
+void Grapple::StartMovingUp()
+{
+ move_up_pressed = true;
+}
+
+void Grapple::StopMovingUp()
+{
+ move_up_pressed = false;
+ StopUp();
+}
+
+void Grapple::StartMovingDown()
+{
+ move_down_pressed = true;
+ cable_sound.Play("default", "weapon/grapple_cable", -1);
+}
+
+void Grapple::StopMovingDown()
+{
+ move_down_pressed = false;
+ StopDown();
+}
+
+
// =========================== Keys management
void Grapple::HandleKeyPressed_Up(bool slowly)
{
- if (IsInUse()) {
- cable_sound.Play("default", "weapon/grapple_cable", -1);
- GoUp();
- }
+ if (IsInUse())
+ StartMovingUpForAllPlayers();
else
ActiveCharacter().HandleKeyPressed_Up(slowly);
}
void Grapple::HandleKeyRefreshed_Up(bool slowly)
{
- if (IsInUse())
- GoUp();
- else
+ if (!IsInUse())
ActiveCharacter().HandleKeyRefreshed_Up(slowly);
}
void Grapple::HandleKeyReleased_Up(bool slowly)
{
if (IsInUse())
- StopUp();
+ StopMovingUpForAllPlayers();
else
ActiveCharacter().HandleKeyReleased_Up(slowly);
}
void Grapple::HandleKeyPressed_Down(bool slowly)
{
- if (IsInUse()) {
- cable_sound.Play("default", "weapon/grapple_cable", -1);
- GoDown();
- } else
+ if (IsInUse())
+ StartMovingDownForAllPlayers();
+ else
ActiveCharacter().HandleKeyPressed_Down(slowly);
}
void Grapple::HandleKeyRefreshed_Down(bool slowly)
{
- if (IsInUse())
- GoDown();
- else
+ if (!IsInUse())
ActiveCharacter().HandleKeyRefreshed_Down(slowly);
}
void Grapple::HandleKeyReleased_Down(bool slowly)
{
if (IsInUse())
- StopDown();
+ StopMovingDownForAllPlayers();
else
ActiveCharacter().HandleKeyReleased_Down(slowly);
}
@@ -735,7 +795,7 @@ void Grapple::HandleKeyReleased_Down(bool slowly)
void Grapple::HandleKeyPressed_MoveLeft(bool slowly)
{
if (IsInUse())
- GoLeft();
+ StartMovingLeftForAllPlayers();
else
ActiveCharacter().HandleKeyPressed_MoveLeft(slowly);
}
@@ -749,7 +809,7 @@ void Grapple::HandleKeyRefreshed_MoveLeft(bool slowly)
void Grapple::HandleKeyReleased_MoveLeft(bool slowly)
{
if (IsInUse())
- StopLeft();
+ StopMovingLeftForAllPlayers();
else
ActiveCharacter().HandleKeyReleased_MoveLeft(slowly);
}
@@ -757,7 +817,7 @@ void Grapple::HandleKeyReleased_MoveLeft(bool slowly)
void Grapple::HandleKeyPressed_MoveRight(bool slowly)
{
if (IsInUse())
- GoRight();
+ StartMovingRightForAllPlayers();
else
ActiveCharacter().HandleKeyPressed_MoveRight(slowly);
}
@@ -771,7 +831,7 @@ void Grapple::HandleKeyRefreshed_MoveRight(bool slowly)
void Grapple::HandleKeyReleased_MoveRight(bool slowly)
{
if (IsInUse())
- StopRight();
+ StopMovingRightForAllPlayers();
else
ActiveCharacter().HandleKeyReleased_MoveRight(slowly);
}
diff --git a/src/weapon/grapple.h b/src/weapon/grapple.h
index 01bf699..2015447 100644
--- a/src/weapon/grapple.h
+++ b/src/weapon/grapple.h
@@ -52,6 +52,10 @@ class Grapple : public Weapon
Sprite* m_node_sprite;
SoundSample cable_sound;
+ bool move_left_pressed;
+ bool move_right_pressed;
+ bool move_up_pressed;
+ bool move_down_pressed;
protected:
void Refresh();
@@ -109,6 +113,18 @@ class Grapple : public Weapon
void UpdateTranslationStrings();
std::string GetWeaponWinString(const char *TeamName, uint items_count)
const;
+ void StartMovingLeft();
+ void StopMovingLeft();
+
+ void StartMovingRight();
+ void StopMovingRight();
+
+ void StartMovingUp();
+ void StopMovingUp();
+
+ void StartMovingDown();
+ void StopMovingDown();
+
// Keys management
void HandleKeyPressed_Up(bool slowly);
void HandleKeyRefreshed_Up(bool slowly);
--
1.6.0.4
_______________________________________________
Wormux-dev mailing list
[email protected]
https://mail.gna.org/listinfo/wormux-dev