81 lines
1.6 KiB
C++
81 lines
1.6 KiB
C++
#include <GL/gl.h>
|
|
#include <GL/glkos.h>
|
|
|
|
#include <algorithm>
|
|
#include <cstdio>
|
|
|
|
#include "engine.hh"
|
|
|
|
class Glcc : public Engine {
|
|
void process_input();
|
|
void displayStuff();
|
|
|
|
void gameLoop() override {
|
|
process_input();
|
|
displayStuff();
|
|
}
|
|
};
|
|
|
|
void Glcc::displayStuff() {
|
|
glClear(GL_COLOR_BUFFER_BIT);
|
|
|
|
// clang-format off
|
|
glPushMatrix();
|
|
glRotatef(angle, 0, 0, 1);
|
|
glColor3f(0.5f, 0.0f, 1.0f);
|
|
glBegin(GL_POLYGON);
|
|
glColor3f(1.0f, 0.0f, 0.0f);
|
|
glVertex3fNormalized(0.25f, 0.25f, 0.0f);
|
|
|
|
glColor3f(0.0f, 1.0f, 0.0f);
|
|
glVertex3fNormalized(0.75f, 0.25f, 0.0f);
|
|
|
|
glColor3f(0.0f, 0.0f, 1.0f);
|
|
glVertex3fNormalized(0.75f, 0.75f, 0.0f);
|
|
|
|
glColor3f(1.0f, 1.0f, 1.0f);
|
|
glVertex3fNormalized(0.25f, 0.75f, 0.0f);
|
|
glEnd();
|
|
glPopMatrix();
|
|
// clang-format on
|
|
|
|
if (thirtyfps) {
|
|
vid_waitvbl();
|
|
vid_waitvbl();
|
|
}
|
|
|
|
glKosSwapBuffers();
|
|
}
|
|
|
|
void Glcc::process_input() {
|
|
maple_device_t* controller;
|
|
cont_state_t* controller_state;
|
|
|
|
controller = maple_enum_type(0, MAPLE_FUNC_CONTROLLER);
|
|
|
|
if (controller) {
|
|
controller_state = (cont_state_t*)maple_dev_status(controller);
|
|
|
|
if (!controller_state) {
|
|
printf(
|
|
"An error has occured while trying to read the "
|
|
"controller.\n");
|
|
}
|
|
|
|
pressButton(controller_state, CONT_DPAD_LEFT, [&]() { speed -= 1.0f; });
|
|
pressButton(controller_state, CONT_DPAD_RIGHT,
|
|
[&]() { speed += 1.0f; });
|
|
pressButton(controller_state, CONT_A,
|
|
[&]() { thirtyfps = !thirtyfps; });
|
|
|
|
speed = std::clamp(speed, 1.0f, 10.0f);
|
|
|
|
angle += (controller_state->joyx / 127.0f) * deltaTime * speed;
|
|
}
|
|
}
|
|
|
|
int main() {
|
|
Glcc* engine = new Glcc;
|
|
engine->initializeEngine();
|
|
engine->initializeGameLoop();
|
|
}
|