R-Type
Distributed multiplayer game engine in C++
Loading...
Searching...
No Matches
Weapon.hpp
Go to the documentation of this file.
1/*
2** EPITECH PROJECT, 2025
3** RTYPE
4** File description:
5** Weapon
6*/
7
8#pragma once
9
10#include "IComponent.hpp"
11
12namespace ecs {
28 class Weapon : public IComponent {
29 public:
37 Weapon(float fireRate, float cooldown, int projectileType, int damage)
38 : _fireRate(fireRate),
39 _cooldown(cooldown),
40 _projectileType(projectileType),
41 _damage(damage),
42 _baseFireRate(fireRate),
43 _baseDamage(damage) {}
44 ~Weapon() override = default;
45
50 [[nodiscard]] float getFireRate() const { return _fireRate; }
51
56 [[nodiscard]] float getCooldown() const { return _cooldown; }
57
62 [[nodiscard]] int getProjectileType() const { return _projectileType; }
63
68 [[nodiscard]] float getDamage() const { return _damage; }
69
74 [[nodiscard]] bool shouldShoot() const { return _shouldShoot; }
75
80 float getBaseFireRate() const { return _baseFireRate; }
81
86 int getBaseDamage() const { return _baseDamage; }
87
92 void setFireRate(float fireRate) { _fireRate = fireRate; }
93
98 void setCooldown(float cooldown) { _cooldown = cooldown; }
99
104 void setProjectileType(int projectileType) { _projectileType = projectileType; }
105
110 void setDamage(float damage) { _damage = damage; }
111
117
122 [[nodiscard]] bool isCharging() const { return _isCharging; }
123
128 void setCharging(bool charging) { _isCharging = charging; }
129
134 [[nodiscard]] float getChargeLevel() const { return _chargeLevel; }
135
140 void setChargeLevel(float level) {
141 _chargeLevel = (level < 0.0F) ? 0.0F : (level > 1.0F) ? 1.0F : level;
142 }
143
148 [[nodiscard]] float getChargeRate() const { return _chargeRate; }
149
154 void setChargeRate(float rate) { _chargeRate = rate; }
155
160 ComponentType getType() const override { return getComponentType<Weapon>(); }
161
162 private:
163 float _fireRate;
164 float _cooldown;
166 float _damage;
167 bool _shouldShoot = false;
170
171 // Charge shot fields
172 bool _isCharging = false;
173 float _chargeLevel = 0.0F;
174 float _chargeRate = 1.0F;
175 };
176} // namespace ecs
Base interface for all ECS components.
Component for entities capable of shooting projectiles.
Definition Weapon.hpp:28
float getBaseFireRate() const
Get base fire rate (before buffs).
Definition Weapon.hpp:80
bool isCharging() const
Check if weapon is currently charging.
Definition Weapon.hpp:122
void setFireRate(float fireRate)
Set fire rate.
Definition Weapon.hpp:92
float getChargeRate() const
Get charge rate (how fast the weapon charges).
Definition Weapon.hpp:148
void setCharging(bool charging)
Set charging state.
Definition Weapon.hpp:128
float _chargeRate
How fast the weapon charges per second.
Definition Weapon.hpp:174
float getCooldown() const
Get current cooldown.
Definition Weapon.hpp:56
float getChargeLevel() const
Get current charge level.
Definition Weapon.hpp:134
void setProjectileType(int projectileType)
Set projectile type.
Definition Weapon.hpp:104
int getProjectileType() const
Get projectile type.
Definition Weapon.hpp:62
float _chargeLevel
Current charge level (0.0 to 1.0)
Definition Weapon.hpp:173
bool _isCharging
Whether the weapon is currently charging.
Definition Weapon.hpp:172
float getDamage() const
Get damage value.
Definition Weapon.hpp:68
int _projectileType
Type of projectile spawned.
Definition Weapon.hpp:165
void setShouldShoot(bool shouldShoot)
Set whether the weapon should shoot.
Definition Weapon.hpp:116
void setDamage(float damage)
Set damage value.
Definition Weapon.hpp:110
~Weapon() override=default
int getBaseDamage() const
Get base damage (before buffs).
Definition Weapon.hpp:86
float _fireRate
Shots per second.
Definition Weapon.hpp:163
Weapon(float fireRate, float cooldown, int projectileType, int damage)
Constructor with weapon parameters.
Definition Weapon.hpp:37
int _baseDamage
Base damage (before buffs)
Definition Weapon.hpp:169
float _baseFireRate
Base fire rate (before buffs)
Definition Weapon.hpp:168
float getFireRate() const
Get fire rate.
Definition Weapon.hpp:50
bool _shouldShoot
Whether the weapon is currently set to shoot.
Definition Weapon.hpp:167
void setChargeRate(float rate)
Set charge rate.
Definition Weapon.hpp:154
bool shouldShoot() const
Check if the weapon should shoot.
Definition Weapon.hpp:74
float _cooldown
Current cooldown timer in seconds.
Definition Weapon.hpp:164
void setChargeLevel(float level)
Set charge level.
Definition Weapon.hpp:140
void setCooldown(float cooldown)
Set cooldown timer.
Definition Weapon.hpp:98
float _damage
Base damage dealt.
Definition Weapon.hpp:166
ComponentType getType() const override
Get the component type ID.
Definition Weapon.hpp:160
Maximum number of distinct component types supported by the Registry.
Definition GameLogic.hpp:26
std::size_t ComponentType
Type alias for component identification.