61 lines
No EOL
1.5 KiB
C++
61 lines
No EOL
1.5 KiB
C++
#ifndef _H_WEAPON_H
|
|
#define _H_WEAPON_H
|
|
|
|
#include <memory>
|
|
#include <glm/glm.hpp>
|
|
#include <functional>
|
|
|
|
#include "../../util.h"
|
|
|
|
#include "../../gameplay/entity.h"
|
|
#include "../../utility/direction.h"
|
|
|
|
// TODO: Put all weapons inside of this base, we don't need a class for every weapon, we only need one class!
|
|
|
|
class Shader;
|
|
class Component;
|
|
class Camera;
|
|
class BulletManager;
|
|
class EventManager;
|
|
class ResourceManager;
|
|
struct WeaponData;
|
|
|
|
class Weapon : public Entity
|
|
{
|
|
public:
|
|
Weapon(const WeaponData* data, const std::shared_ptr<Shader>& weaponShader, const std::shared_ptr<Shader>& bulletShader, ResourceManager* resourceManager);
|
|
|
|
void setWielder(Entity* wielder) { this->wielder = wielder; }
|
|
|
|
void addComponent(const std::shared_ptr<Component>& component);
|
|
void hookEventManager(const std::shared_ptr<EventManager>& eventManager);
|
|
void shoot();
|
|
void update(float deltaTime);
|
|
void render(const std::shared_ptr<Camera>& camera);
|
|
|
|
private:
|
|
glm::vec2 weaponSize;
|
|
glm::vec2 weaponOffset;
|
|
|
|
float bulletSpeed;
|
|
float bulletDrop;
|
|
// in ms
|
|
float fireSpeed;
|
|
glm::vec2 bulletSize;
|
|
std::shared_ptr<Shader> bulletShader;
|
|
std::shared_ptr<Component> bulletSprite;
|
|
std::shared_ptr<BulletManager> bulletManager;
|
|
std::shared_ptr<EventManager> eventManager;
|
|
|
|
std::shared_ptr<UTIL::RandomGenerator> bulletSpread;
|
|
std::shared_ptr<UTIL::RandomGenerator> bulletModifer;
|
|
Entity* wielder = nullptr;
|
|
int lastFireTime = 0;
|
|
|
|
Direction lastDir;
|
|
|
|
std::vector <std::shared_ptr<Component>> components;
|
|
|
|
};
|
|
|
|
#endif // _H_WEAPON_H
|