This repository has been archived on 2025-03-10. You can view files and clone it, but cannot push or open issues or pull requests.

67 lines
1.3 KiB
C++

#pragma once
#include "Assets.h"
#include "NFObject.h"
#include "Utility.h"
#ifdef NFENGINE
#include "glm/glm.hpp"
#endif
namespace nf {
class Shader;
class Model;
class Entity : public NFObject {
public:
enum class Type {
STATIC,
DYNAMIC,
DETAIL
};
Entity();
void create(Asset* modelAsset, Type type = Type::STATIC);
bool isConstructed();
Type getType();
void setPosition(float x, float y, float z);
void setPosition(const Vec3& position);
void setRotation(float x, float y, float z);
void setRotation(const Vec3& rotation);
void setScale(float x, float y, float z);
void setScale(const Vec3& scale);
void setScale(float x);
void setVelocity(float x, float y, float z);
void setVelocity(const Vec3& velocity);
void setMass(float mass);
const Vec3& getPosition();
const Vec4& getRotation();
const Vec3& getScale();
void setPositionPhysics(const Vec3& position);
void setRotationPhysics(const Vec4& rotation);
bool needsPhysicsUpdate();
void render(Shader* shader, bool onlyDepth);
Model* getModel() const;
#ifdef NFENGINE
const glm::mat4 getModelMatrix();
#endif
void destroy() override;
~Entity();
private:
bool m_constructed;
bool m_member;
Type m_type;
Model* m_model;
Vec3 m_position;
Vec4 m_rotation;
Vec3 m_scale;
bool m_update;
};
}