2024-01-08 16:17:25 +01:00
|
|
|
#include "./GameObject.h"
|
|
|
|
#include "glm.hpp"
|
|
|
|
#include "ext.hpp"
|
|
|
|
#include "src/Render_Utils.h"
|
2024-01-24 22:49:59 +01:00
|
|
|
#include <tuple>
|
2024-01-08 16:17:25 +01:00
|
|
|
|
|
|
|
#pragma once
|
|
|
|
class Planet : public GameObject
|
|
|
|
{
|
|
|
|
private:
|
|
|
|
GameObject* center;
|
|
|
|
float distanceFromCenter;
|
|
|
|
float rotationSpeed;
|
|
|
|
Core::RenderContext sphereContext;
|
|
|
|
float scale;
|
|
|
|
glm::vec3 position;
|
|
|
|
glm::mat4 positionMatrix;
|
2024-01-24 22:49:59 +01:00
|
|
|
std::tuple<GLuint, GLuint> texture;
|
2024-01-08 16:17:25 +01:00
|
|
|
|
|
|
|
public:
|
2024-01-24 22:49:59 +01:00
|
|
|
Planet(GameObject* center, float distanceFromCenter, float rotationSpeed, float scale, Core::RenderContext sphereContext, std::tuple<GLuint, GLuint> texture) {
|
2024-01-08 16:17:25 +01:00
|
|
|
this->center = center;
|
|
|
|
this->distanceFromCenter = distanceFromCenter;
|
|
|
|
this->rotationSpeed = rotationSpeed;
|
|
|
|
this->sphereContext = sphereContext;
|
|
|
|
this->scale = scale;
|
|
|
|
this->position = glm::vec3(0);
|
2024-01-24 22:49:59 +01:00
|
|
|
this->texture = texture;
|
2024-01-08 16:17:25 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
glm::mat4 getPositionMatrix() override {
|
|
|
|
return positionMatrix;
|
|
|
|
}
|
|
|
|
|
|
|
|
void draw(float time, GLuint program) {
|
|
|
|
if (center == nullptr) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
float rotationAngle = glm::radians(time * rotationSpeed);
|
|
|
|
positionMatrix = center->getPositionMatrix() * glm::eulerAngleY(time * rotationSpeed) * glm::translate(glm::vec3(distanceFromCenter, 0, 0));
|
|
|
|
glm::mat4 modelMatrix = positionMatrix * glm::scale(glm::vec3(scale));
|
2024-01-24 22:49:59 +01:00
|
|
|
Core::drawObjectPBRTexture(sphereContext, modelMatrix, std::get<0>(texture), std::get<1>(texture), 0.3, 0.0, program);
|
2024-01-08 16:17:25 +01:00
|
|
|
}
|
|
|
|
};
|