---
lib/wormux/include/WORMUX_action.h | 9 +++++
src/include/action_handler.cpp | 48 ++++++++++++++++++++++++++
src/weapon/weapon.cpp | 65 ++++++++++++++++++++++++++++++++++++
src/weapon/weapon.h | 24 +++++++++++++
4 files changed, 146 insertions(+), 0 deletions(-)
diff --git a/lib/wormux/include/WORMUX_action.h
b/lib/wormux/include/WORMUX_action.h
index 78edd13..19d0e06 100644
--- a/lib/wormux/include/WORMUX_action.h
+++ b/lib/wormux/include/WORMUX_action.h
@@ -90,6 +90,15 @@ public:
// Quite standard weapon options
ACTION_WEAPON_SET_TIMEOUT,
ACTION_WEAPON_SET_TARGET,
+ ACTION_WEAPON_START_MOVING_LEFT,
+ ACTION_WEAPON_STOP_MOVING_LEFT,
+ ACTION_WEAPON_START_MOVING_RIGHT,
+ ACTION_WEAPON_STOP_MOVING_RIGHT,
+ ACTION_WEAPON_START_MOVING_UP,
+ ACTION_WEAPON_STOP_MOVING_UP,
+ ACTION_WEAPON_START_MOVING_DOWN,
+ ACTION_WEAPON_STOP_MOVING_DOWN,
+
// Special weapon options
ACTION_WEAPON_CONSTRUCTION,
diff --git a/src/include/action_handler.cpp b/src/include/action_handler.cpp
index 65ef7ab..24f5360 100644
--- a/src/include/action_handler.cpp
+++ b/src/include/action_handler.cpp
@@ -650,6 +650,46 @@ static void Action_Weapon_SetTimeout (Action *a)
launcher->GetProjectile()->m_timeout_modifier = a->PopInt();
}
+static void Action_Weapon_StartMovingLeft(Action */*a*/)
+{
+ ActiveTeam().AccessWeapon().StartMovingLeft();
+}
+
+static void Action_Weapon_StopMovingLeft(Action */*a*/)
+{
+ ActiveTeam().AccessWeapon().StopMovingLeft();
+}
+
+static void Action_Weapon_StartMovingRight(Action */*a*/)
+{
+ ActiveTeam().AccessWeapon().StartMovingRight();
+}
+
+static void Action_Weapon_StopMovingRight(Action */*a*/)
+{
+ ActiveTeam().AccessWeapon().StopMovingRight();
+}
+
+static void Action_Weapon_StartMovingUp(Action */*a*/)
+{
+ ActiveTeam().AccessWeapon().StartMovingUp();
+}
+
+static void Action_Weapon_StopMovingUp(Action */*a*/)
+{
+ ActiveTeam().AccessWeapon().StopMovingUp();
+}
+
+static void Action_Weapon_StartMovingDown(Action */*a*/)
+{
+ ActiveTeam().AccessWeapon().StartMovingDown();
+}
+
+static void Action_Weapon_StopMovingDown(Action */*a*/)
+{
+ ActiveTeam().AccessWeapon().StopMovingDown();
+}
+
static void Action_Weapon_Construction (Action *a)
{
Construct* construct_weapon =
dynamic_cast<Construct*>(&(ActiveTeam().AccessWeapon()));
@@ -980,6 +1020,14 @@ void Action_Handler_Init()
// Quite standard weapon options
ActionHandler::GetInstance()->Register (Action::ACTION_WEAPON_SET_TIMEOUT,
"WEAPON_set_timeout", &Action_Weapon_SetTimeout);
ActionHandler::GetInstance()->Register (Action::ACTION_WEAPON_SET_TARGET,
"WEAPON_set_target", &Action_Weapon_SetTarget);
+ ActionHandler::GetInstance()->Register
(Action::ACTION_WEAPON_START_MOVING_LEFT, "WEAPON_start_moving_left",
&Action_Weapon_StartMovingLeft);
+ ActionHandler::GetInstance()->Register
(Action::ACTION_WEAPON_STOP_MOVING_LEFT, "WEAPON_stop_moving_left",
&Action_Weapon_StopMovingLeft);
+ ActionHandler::GetInstance()->Register
(Action::ACTION_WEAPON_START_MOVING_RIGHT, "WEAPON_start_moving_right",
&Action_Weapon_StartMovingRight);
+ ActionHandler::GetInstance()->Register
(Action::ACTION_WEAPON_STOP_MOVING_RIGHT, "WEAPON_stop_moving_right",
&Action_Weapon_StopMovingRight);
+ ActionHandler::GetInstance()->Register
(Action::ACTION_WEAPON_START_MOVING_UP, "WEAPON_start_moving_up",
&Action_Weapon_StartMovingUp);
+ ActionHandler::GetInstance()->Register
(Action::ACTION_WEAPON_STOP_MOVING_UP, "WEAPON_stop_moving_up",
&Action_Weapon_StopMovingUp);
+ ActionHandler::GetInstance()->Register
(Action::ACTION_WEAPON_START_MOVING_DOWN, "WEAPON_start_moving_down",
&Action_Weapon_StartMovingDown);
+ ActionHandler::GetInstance()->Register
(Action::ACTION_WEAPON_STOP_MOVING_DOWN, "WEAPON_stop_moving_down",
&Action_Weapon_StopMovingDown);
// Special weapon options
ActionHandler::GetInstance()->Register (Action::ACTION_WEAPON_CONSTRUCTION,
"WEAPON_construction", &Action_Weapon_Construction);
diff --git a/src/weapon/weapon.cpp b/src/weapon/weapon.cpp
index 75d4e8f..fcf70c5 100644
--- a/src/weapon/weapon.cpp
+++ b/src/weapon/weapon.cpp
@@ -34,6 +34,7 @@
#include "include/app.h"
#include "include/action_handler.h"
#include "map/camera.h"
+#include "network/network.h"
#include "team/macro.h"
#include "team/team.h"
#include "tool/math_tools.h"
@@ -345,6 +346,70 @@ void Weapon::RepeatShoot()
}
}
+void Weapon::StartMovingLeftForAllPlayers()
+{
+ Action a(Action::ACTION_WEAPON_START_MOVING_LEFT);
+ Network::GetInstance()->SendActionToAll(a);
+
+ StartMovingLeft();
+}
+
+void Weapon::StopMovingLeftForAllPlayers()
+{
+ Action a(Action::ACTION_WEAPON_STOP_MOVING_LEFT);
+ Network::GetInstance()->SendActionToAll(a);
+
+ StopMovingLeft();
+}
+
+void Weapon::StartMovingRightForAllPlayers()
+{
+ Action a(Action::ACTION_WEAPON_START_MOVING_RIGHT);
+ Network::GetInstance()->SendActionToAll(a);
+
+ StartMovingRight();
+}
+
+void Weapon::StopMovingRightForAllPlayers()
+{
+ Action a(Action::ACTION_WEAPON_STOP_MOVING_RIGHT);
+ Network::GetInstance()->SendActionToAll(a);
+
+ StopMovingRight();
+}
+
+void Weapon::StartMovingUpForAllPlayers()
+{
+ Action a(Action::ACTION_WEAPON_START_MOVING_UP);
+ Network::GetInstance()->SendActionToAll(a);
+
+ StartMovingUp();
+}
+
+void Weapon::StopMovingUpForAllPlayers()
+{
+ Action a(Action::ACTION_WEAPON_STOP_MOVING_UP);
+ Network::GetInstance()->SendActionToAll(a);
+
+ StopMovingUp();
+}
+
+void Weapon::StartMovingDownForAllPlayers()
+{
+ Action a(Action::ACTION_WEAPON_START_MOVING_DOWN);
+ Network::GetInstance()->SendActionToAll(a);
+
+ StartMovingDown();
+}
+
+void Weapon::StopMovingDownForAllPlayers()
+{
+ Action a(Action::ACTION_WEAPON_STOP_MOVING_DOWN);
+ Network::GetInstance()->SendActionToAll(a);
+
+ StopMovingDown();
+}
+
// Compute position of weapon's image
void Weapon::PosXY (int &x, int &y) const
{
diff --git a/src/weapon/weapon.h b/src/weapon/weapon.h
index 42cdb8b..2b4f2a5 100644
--- a/src/weapon/weapon.h
+++ b/src/weapon/weapon.h
@@ -158,6 +158,18 @@ protected:
void DrawAmmoUnits() const;
void RepeatShoot();
+
+ void StartMovingLeftForAllPlayers();
+ void StopMovingLeftForAllPlayers();
+
+ void StartMovingRightForAllPlayers();
+ void StopMovingRightForAllPlayers();
+
+ void StartMovingUpForAllPlayers();
+ void StopMovingUpForAllPlayers();
+
+ void StartMovingDownForAllPlayers();
+ void StopMovingDownForAllPlayers();
public:
Weapon(Weapon_type type,
const std::string &id,
@@ -326,6 +338,18 @@ public:
inline const double &GetMinAngle() const {return min_angle;}
inline void SetMaxAngle(double max) {max_angle = max;}
inline const double &GetMaxAngle() const {return max_angle;}
+
+ virtual void StartMovingLeft() {};
+ virtual void StopMovingLeft() {};
+
+ virtual void StartMovingRight() {};
+ virtual void StopMovingRight() {};
+
+ virtual void StartMovingUp() {};
+ virtual void StopMovingUp() {};
+
+ virtual void StartMovingDown() {};
+ virtual void StopMovingDown() {};
private:
// Angle in radian between -PI to PI
double min_angle, max_angle;
--
1.6.0.4
_______________________________________________
Wormux-dev mailing list
[email protected]
https://mail.gna.org/listinfo/wormux-dev