Files
Racer/Star.cpp
T
2026-06-17 16:06:16 +02:00

79 lines
1.4 KiB
C++

#include "Star.h"
#include "Model.h"
Star::Star(Vec3f position)
{
scale = 1;
model = Model::load("resources/models/star/I_star.obj");
specialstar = Model::load("resources/models/redstar/I_star.obj");
scale = 0.2;
this->position = position;
rotVal = 0;
int rand = std::rand() % 100;
special = false;
if (rand <= 25)
{
special = true;
}
}
Star::~Star()
{
if (model)
Model::unload(model);
if (specialstar)
Model::unload(specialstar);
}
void Star::draw()
{
if (model)
{
glPushMatrix();
glTranslatef(position.x, position.y, position.z);
glRotatef(rotation.x, 1, 0, 0);
glRotatef(rotation.y, 0, 1, 0);
glRotatef(rotation.z, 0, 0, 1);
glScalef(scale, scale, scale);
model->draw();
if (special)
{
glRotatef(rotVal, 0, 1, 0);
glTranslatef(4.0f, 12.0f, 4.0f);
glRotatef(rotVal, 0, 1, 0);
glScalef(0.3f, 0.3f, 0.3f);
specialstar->draw();
}
glPopMatrix();
}
}
void Star::update(float deltaTime)
{
rotation.y += deltaTime * 100.0f;
rotVal += deltaTime * 100.0f * 1.5f;
}
bool Star::inObject(const Vec3f & point)
{
if (!model)
return false;
Vec3f center = position + model->center;
float distance = ((point.x - center.x) * (point.x - center.x) + (point.z - center.z)*(point.z - center.z));
if (distance < model->radius*scale*model->radius*scale)
return true;
return false;
}