yupplemayham/YuppleMayham/gameplay/weapons/weapon.h
Ethan Adams 6164458aa7 Bullets no longer collide with wielder.
Added new Event "OnBulletCollide" use this event to handle bullet damage effects etc.
2024-06-21 22:16:05 -04:00

63 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;
class GameActor;
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(const std::shared_ptr<GameActor>& 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;
std::shared_ptr<GameActor> wielder;
int lastFireTime = 0;
Direction lastDir;
std::vector <std::shared_ptr<Component>> components;
};
#endif // _H_WEAPON_H