158 lines
4.9 KiB
C++
158 lines
4.9 KiB
C++
#include "MainState.h"
|
|
|
|
void MainState::onEnter() {
|
|
NFLog("MainState onEnter!");
|
|
currCamType = nf::Camera::Type::FIRST_PERSON;
|
|
camera->setType(currCamType);
|
|
ap.load("example.nfpack");
|
|
|
|
test.create(ap.get("2mats.obj"), nf::Vec3(0.0, 1.5, -5.0), nf::Entity::Type::DYNAMIC);
|
|
plane.create(ap.get("env.obj"), nf::Vec3(0.0, -20.0, 0.0), nf::Entity::Type::MAP);
|
|
plane.setScale(20.0);
|
|
|
|
light.create(nf::Vec3(0.0, 20.0, 0.0), nf::Vec3(1.0, 1.0, 1.0));
|
|
light2.create(nf::Vec3(-10.0, 20.0, -10.0), nf::Vec3(1.0, 1.0, 1.0));
|
|
light3.create(nf::Vec3(10.0, 20.0, 10.0), nf::Vec3(1.0, 1.0, 1.0));
|
|
cm.create(nf::BaseAssets::cubemap);
|
|
|
|
text.create("", nf::Vec2(0.1, 0.025), nf::Vec3(0.8));
|
|
text.centered(true);
|
|
moveText.create("WASD - move", nf::Vec2(0.025, 0.8), nf::Vec3(0.8), 0.5f);
|
|
lookText.create("Mouse - look", nf::Vec2(0.025, 0.75), nf::Vec3(0.8), 0.5f);
|
|
leftClickText.create("Left Click - Shoot single sphere", nf::Vec2(0.025, 0.7), nf::Vec3(0.8), 0.5f);
|
|
rightClickText.create("Right Click - Shoot many spheres", nf::Vec2(0.025, 0.65), nf::Vec3(0.8), 0.5f);
|
|
upAndDownText.create("Up and Down - Change the gravity", nf::Vec2(0.025, 0.6), nf::Vec3(0.8), 0.5f);
|
|
leftAndRightText.create("Left and Right - Change the default ambient light", nf::Vec2(0.025, 0.55), nf::Vec3(0.8), 0.5f);
|
|
escText.create("ESC - Quit", nf::Vec2(0.025, 0.5), nf::Vec3(0.8), 0.5f);
|
|
currGravText.create("", nf::Vec2(0.025, 0.25), nf::Vec3(0.8), 0.5f);
|
|
currLightText.create("", nf::Vec2(0.025, 0.2), nf::Vec3(0.8), 0.5f);
|
|
uiTex.create(nf::BaseAssets::logo, nf::Vec2(0.025, 0.025), 0.5);
|
|
button.create(nf::Vec2(0.8, 0.025), "Reset");
|
|
button2.create(nf::Vec2(0.6, 0.025), "Play Sound");
|
|
|
|
sound.create(ap.get("sound.wav"));
|
|
sound.setEntity(test);
|
|
sound2.create(ap.get("test.ogg"));
|
|
sound2.setVolume(3.0);
|
|
sound2.setEntity(test);
|
|
|
|
for (int x = 0; x < 3; x++) {
|
|
for (int y = 0; y < 3; y++) {
|
|
for (int z = 0; z < 3; z++) {
|
|
entities.push_back(new nf::Entity);
|
|
entities.back()->create(nf::BaseAssets::cube, nf::Vec3(5.0 + x * 2.05, 1.0 + y * 2.05, -5.0 + z * 2.05), nf::Entity::Type::DYNAMIC);
|
|
}
|
|
}
|
|
}
|
|
|
|
grav = 2.0f;
|
|
setGravity(grav);
|
|
|
|
amb = 0.1f;
|
|
setAmbientLight(amb);
|
|
|
|
camera->setPosition(-20.0, 7.0, 0.0);
|
|
camera->setRotation(85.0, -30.0);
|
|
}
|
|
|
|
void MainState::update(float deltaTime) {
|
|
if (app->isKeyPressed(NFI_E)) {
|
|
currCamType = currCamType == nf::Camera::Type::FIRST_PERSON ? nf::Camera::Type::UI : nf::Camera::Type::FIRST_PERSON;
|
|
camera->setType(currCamType);
|
|
}
|
|
|
|
float speed;
|
|
if (camera->getType() == nf::Camera::Type::FIRST_PERSON) {
|
|
if (app->isKeyHeld(NFI_SHIFT))
|
|
speed = 20.0f;
|
|
else
|
|
speed = 5.0f;
|
|
speed *= deltaTime;
|
|
if (app->isKeyHeld(NFI_W))
|
|
camera->moveZ(speed);
|
|
if (app->isKeyHeld(NFI_S))
|
|
camera->moveZ(-speed);
|
|
if (app->isKeyHeld(NFI_D))
|
|
camera->moveX(speed);
|
|
if (app->isKeyHeld(NFI_A))
|
|
camera->moveX(-speed);
|
|
}
|
|
|
|
text.setText("FPS: " + std::to_string(app->getFPS()));
|
|
|
|
if (button.isClicked() || app->isKeyPressed(NFI_R))
|
|
app->changeState("Main State");
|
|
|
|
if (button2.isClicked() || app->isKeyPressed(NFI_SPACE))
|
|
sound.play();
|
|
if (app->isKeyPressed(NFI_M))
|
|
sound2.play();
|
|
|
|
if (app->isKeyPressed(NFI_O)) {
|
|
sound.stop();
|
|
sound2.stop();
|
|
}
|
|
|
|
if (camera->getType() == nf::Camera::Type::FIRST_PERSON && (app->isMouseClicked(NFI_LEFTMOUSE) || app->isMouseHeld(NFI_RIGHTMOUSE))) {
|
|
entities.push_back(new nf::Entity);
|
|
entities.back()->create(nf::BaseAssets::sphere, camera->getPosition() + camera->getRotation() * 5.0, nf::Entity::Type::DYNAMIC);
|
|
entities.back()->setVelocity(camera->getRotation() * 100.0f);
|
|
entities.back()->setMass(1000.0f);
|
|
}
|
|
|
|
if (app->isKeyHeld(NFI_UP)) {
|
|
grav += 0.05f;
|
|
setGravity(grav);
|
|
}
|
|
if (app->isKeyHeld(NFI_DOWN)) {
|
|
grav -= 0.05f;
|
|
setGravity(grav);
|
|
}
|
|
if (app->isKeyPressed(NFI_T)) {
|
|
grav = 2.0f;
|
|
setGravity(1.0f);
|
|
}
|
|
currGravText.setText("Gravity Scale: " + std::to_string(grav));
|
|
|
|
if (app->isKeyHeld(NFI_LEFT))
|
|
amb -= 0.01f;
|
|
if (app->isKeyHeld(NFI_RIGHT))
|
|
amb += 0.01f;
|
|
if (amb >= 0.0f)
|
|
setAmbientLight(amb);
|
|
currLightText.setText("Ambient Light Multiplier: " + std::to_string(amb));
|
|
|
|
if (app->isKeyPressed(NFI_ESCAPE))
|
|
app->quit();
|
|
}
|
|
|
|
void MainState::render(nf::Renderer& renderer) {
|
|
renderer.render(test);
|
|
renderer.render(plane);
|
|
renderer.render(light);
|
|
renderer.render(light2);
|
|
renderer.render(light3);
|
|
renderer.render(text);
|
|
renderer.render(moveText);
|
|
renderer.render(lookText);
|
|
renderer.render(leftClickText);
|
|
renderer.render(rightClickText);
|
|
renderer.render(upAndDownText);
|
|
renderer.render(currGravText);
|
|
renderer.render(leftAndRightText);
|
|
renderer.render(currLightText);
|
|
renderer.render(escText);
|
|
renderer.render(uiTex);
|
|
renderer.render(button);
|
|
renderer.render(button2);
|
|
renderer.render(cm);
|
|
|
|
for (nf::Entity* curr : entities)
|
|
renderer.render(*curr);
|
|
}
|
|
|
|
void MainState::onExit() {
|
|
NFLog("MainState onExit!");
|
|
|
|
entities.clear();
|
|
} |