Program Listing for File E_Default.hpp

Return to documentation for file (gui/Entities/E_Default.hpp)

#pragma once

#include <glm/gtc/matrix_transform.hpp>

#include "Demeter/Demeter.hpp"
#include "Demeter/Entity.hpp"
#include "Demeter/Renderer/Object3D.hpp"
#include "Demeter/Renderer/Texture.hpp"
#include "logging/Logger.hpp"

class E_Default : public Dem::IEntity {
private:
  glm::mat4 modelMatrix;
  std::shared_ptr<Object3D> obj = nullptr;
  std::shared_ptr<Texture> texture = nullptr;

public:
  bool Init(Dem::Demeter &d) override
  {
    auto tmp = d.AddObject3D("assets/cube.obj3D");
    if (!tmp) {
      Log::failed << "Failed to load object: assets/cube.obj3D";
      return false;
    }
    obj = *tmp;
    texture = d.AddTexture("assets/texture.png");
    return true;
  }

  bool Update(Dem::Demeter &d) override
  {
    float t = d.GetTime().GetCurrent() / 1000.0;
    modelMatrix = glm::rotate(glm::mat4(1.0), t, glm::vec3(0.0, 1.0, 0.0));
    return true;
  }

  bool Draw(Dem::Demeter &d) override
  {
    obj->modelMatrix = modelMatrix;
    obj->SetTexture(0, texture);
    obj->Draw(*d.GetShader(), d.camera);
    return true;
  }
};