#pragma once #include #include #include "aslosignals.hpp" #include "helpers.hpp" namespace asloengine { class GameObject { public: sf::RenderWindow *render_window; sf::String name = "nonameobject"; bool alive = true; GameObject(sf::String _name); virtual ~GameObject(); virtual void start(sf::RenderWindow *window); virtual void update(float delta_time); virtual void destroy(); static sf::Vector2f calculate_child_position(sf::Vector2f& offset, sf::Vector2f& scale, float rotation); static sf::Vector2f calculate_child_position_centered( sf::FloatRect& parent_rect, sf::FloatRect& child_rect, sf::Vector2f& offset, sf::Vector2f& scale, float rotation ); virtual sf::View set_crop(sf::Vector2f _position, sf::Vector2f _size); virtual sf::View set_crop(float _left, float _top, float _width, float _height); // Main Property Getters and Setters virtual void set_position(sf::Vector2f& _position); virtual void set_scale(sf::Vector2f& _scale); virtual void set_origin(sf::Vector2f& _origin); virtual void set_rotation(float _rotation); virtual void set_position(float _position_x, float _position_y); virtual void set_scale(float _scale_x, float _scale_y); virtual void set_origin(float _origin_x, float _origin_y); virtual sf::Vector2f get_position() const; virtual sf::Vector2f get_scale() const; virtual sf::Vector2f get_origin() const; virtual float get_rotation() const; // Main Property Modifiers virtual void move(sf::Vector2f& _move); virtual void rescale(sf::Vector2f& _rescale); virtual void translate_origin(sf::Vector2f& _translate_origin); virtual void rotate(float _rotate); virtual void move(float _move_x, float _move_y); virtual void rescale(float _rescale_x, float _rescale_y); virtual void translate_origin(float _translate_origin_x, float _translate_origin_y); // Custom Derived Implementations virtual void draw(); virtual void on_main_property_update(); virtual void on_start(); virtual void on_update(float delta_time); virtual void on_post_update(float delta_time); virtual void on_destroy(); protected: bool main_property_changed = false; sf::Vector2f position; sf::Vector2f scale; sf::Vector2f origin; float rotation; }; }