2020-07-03 03:48:58 +00:00
|
|
|
//
|
|
|
|
// Created by SeanOMik on 7/2/2020.
|
|
|
|
// Github: https://github.com/SeanOMik
|
|
|
|
// Email: seanomik@gmail.com
|
|
|
|
//
|
|
|
|
|
|
|
|
#ifndef SIMPLEENGINE_ENTITY_H
|
|
|
|
#define SIMPLEENGINE_ENTITY_H
|
|
|
|
|
|
|
|
#include <SFML/Graphics.hpp>
|
|
|
|
|
2020-07-03 20:26:44 +00:00
|
|
|
#include <vector>
|
|
|
|
#include <memory>
|
2020-07-03 18:31:17 +00:00
|
|
|
|
2020-07-03 03:48:58 +00:00
|
|
|
namespace simpleengine {
|
2020-07-03 18:31:17 +00:00
|
|
|
class Component;
|
|
|
|
class Game;
|
|
|
|
class Event;
|
2020-07-03 20:26:44 +00:00
|
|
|
|
2020-07-05 05:33:29 +00:00
|
|
|
// @TODO Create a Destructible class that replaces Entity::Destroying, Entity::DestroyLater, and Entity::IsGettingDestroyed.
|
|
|
|
class Entity {
|
2020-07-03 18:31:17 +00:00
|
|
|
friend class Game;
|
|
|
|
friend class Event;
|
2020-07-03 03:48:58 +00:00
|
|
|
public:
|
2020-07-13 03:35:11 +00:00
|
|
|
explicit Entity(sf::Sprite& sprite);
|
2020-07-03 03:48:58 +00:00
|
|
|
virtual ~Entity() = default;
|
2020-07-03 20:26:44 +00:00
|
|
|
Entity(const Entity& entity) = delete;
|
2020-07-03 03:48:58 +00:00
|
|
|
|
2020-07-13 03:35:11 +00:00
|
|
|
virtual void Move(const float& delta_time, const float& dir_x, const float& dir_y);
|
|
|
|
virtual void Move(const float& delta_time, const sf::Vector2f& offset);
|
|
|
|
virtual void Move(const sf::Vector2f& offset);
|
2020-07-04 21:42:11 +00:00
|
|
|
|
2020-07-07 05:50:39 +00:00
|
|
|
virtual void Render(sf::RenderTarget* target);
|
|
|
|
virtual void Update(const float& delta_time);
|
2020-07-03 18:31:17 +00:00
|
|
|
|
2020-07-03 20:26:44 +00:00
|
|
|
// Called when the entity is about to be destroyed.
|
|
|
|
// Make sure to call this in your extending Entity.
|
|
|
|
virtual void Destroying();
|
|
|
|
void DestroyLater(); // In most cases, this will be ran next EntityEvent::Update()
|
|
|
|
const bool& IsGettingDestroyed() const;
|
2020-07-03 18:31:17 +00:00
|
|
|
|
2020-07-07 05:50:39 +00:00
|
|
|
template<typename T>
|
|
|
|
bool HasComponent() {
|
|
|
|
for (std::unique_ptr<Component>& comp : components) {
|
|
|
|
if (dynamic_cast<T*>(comp.get())) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2020-07-03 18:31:17 +00:00
|
|
|
void UpdateComponents(const float& delta_time);
|
2020-07-07 05:50:39 +00:00
|
|
|
void RenderComponents(sf::RenderTarget* target);
|
2020-07-03 20:26:44 +00:00
|
|
|
void AddComponent(std::unique_ptr<Component> component);
|
2020-07-13 03:41:10 +00:00
|
|
|
|
|
|
|
sf::Sprite& GetSprite();
|
2020-07-04 18:55:40 +00:00
|
|
|
protected:
|
2020-07-13 03:35:11 +00:00
|
|
|
sf::Sprite& sprite;
|
2020-07-03 20:26:44 +00:00
|
|
|
std::vector<std::unique_ptr<Component>> components;
|
2020-07-03 18:31:17 +00:00
|
|
|
bool destroying = false;
|
2020-07-03 03:48:58 +00:00
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif //GAMEENGINE_ENTITY_H
|