| 1 | /* copyright (c) 2007 magnus auvinen, see licence.txt for more info */ |
| 2 | |
| 3 | #ifndef GAME_SERVER_ENTITIES_GUN_H |
| 4 | #define GAME_SERVER_ENTITIES_GUN_H |
| 5 | |
| 6 | #include <game/server/entity.h> |
| 7 | |
| 8 | /** |
| 9 | * Turrets (also referred to as Gun) fire plasma bullets at the nearest player |
| 10 | * |
| 11 | * A turret fires plasma bullets with a certain firing rate (sv_plasma_per_sec) at the closest player of a team for whom |
| 12 | * the following criteria are met: |
| 13 | * - The player is within the turret range (sv_plasma_range) |
| 14 | * - The player is not a super player |
| 15 | * - The turret is activated |
| 16 | * - The initial trajectory of the plasma bullet to be generated would not be stopped by any solid block |
| 17 | * With the exception of solo players, for whom plasma bullets will always be fired, regardless of the rest of the team, |
| 18 | * if the above criteria are met. Solo players do not affect the generation of plasma bullets for the rest of the team. |
| 19 | * The shooting rate of sv_plasma_per_sec is independent for each team and solo player and starts with the first tick |
| 20 | * when a target player is selected. |
| 21 | */ |
| 22 | class CGun : public CEntity |
| 23 | { |
| 24 | vec2 m_Core; |
| 25 | bool m_Freeze; |
| 26 | bool m_Explosive; |
| 27 | int m_EvalTick; |
| 28 | int m_aLastFireTeam[MAX_CLIENTS]; |
| 29 | int m_aLastFireSolo[MAX_CLIENTS]; |
| 30 | |
| 31 | void Fire(); |
| 32 | |
| 33 | public: |
| 34 | CGun(CGameWorld *pGameWorld, vec2 Pos, bool Freeze, bool Explosive, int Layer = 0, int Number = 0); |
| 35 | |
| 36 | void Reset() override; |
| 37 | void Tick() override; |
| 38 | void Snap(int SnappingClient) override; |
| 39 | }; |
| 40 | |
| 41 | #endif // GAME_SERVER_ENTITIES_GUN_H |
| 42 | |