#include "./GameObject.h" #include "glm.hpp" #include "ext.hpp" #include "src/Render_Utils.h" #pragma once class Planet : public GameObject { private: GameObject* center; float distanceFromCenter; float rotationSpeed; Core::RenderContext sphereContext; float scale; glm::vec3 position; glm::mat4 positionMatrix; GLuint textureID; GLuint normalMapID; float startEulerYRotation = 0.f; float startYMovement = 0.f; public: Planet(GameObject* center, float distanceFromCenter, float rotationSpeed, float scale, Core::RenderContext sphereContext, GLuint textureID, GLuint normalMapID) { this->center = center; this->distanceFromCenter = distanceFromCenter; this->rotationSpeed = rotationSpeed; this->sphereContext = sphereContext; this->scale = scale; this->position = glm::vec3(0); this->textureID = textureID; this->normalMapID = normalMapID; } 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 + startEulerYRotation) * glm::translate(glm::vec3(distanceFromCenter, startYMovement, 0)); glm::mat4 modelMatrix = positionMatrix * glm::scale(glm::vec3(scale)); Core::drawObjectPBRTexture(sphereContext, modelMatrix, textureID, normalMapID, 0.7, 0.0, program); } void setStarteulerYRotation(float radians) { startEulerYRotation = radians; } void setStartYMovement(float value) { startYMovement = value; } };