Final before release
This commit is contained in:
103
src/main.cpp
103
src/main.cpp
@@ -30,11 +30,12 @@ class PSXSplash final : public psyqo::Application {
|
||||
void createScene() override;
|
||||
|
||||
public:
|
||||
psyqo::Font<> m_font;
|
||||
psyqo::AdvancedPad m_input;
|
||||
psxsplash::SplashPackLoader m_loader;
|
||||
static constexpr uint8_t m_stickDeadzone = 0x30;
|
||||
|
||||
psyqo::Font<> m_font;
|
||||
|
||||
psyqo::AdvancedPad m_input;
|
||||
static constexpr uint8_t m_stickDeadzone = 0x30;
|
||||
};
|
||||
|
||||
class MainScene final : public psyqo::Scene {
|
||||
@@ -49,12 +50,17 @@ class MainScene final : public psyqo::Scene {
|
||||
|
||||
static constexpr psyqo::FixedPoint<12> moveSpeed = 0.002_fp;
|
||||
static constexpr psyqo::Angle rotSpeed = 0.01_pi;
|
||||
bool m_sprinting = 0;
|
||||
static constexpr psyqo::FixedPoint<12> sprintSpeed = 0.003_fp;
|
||||
|
||||
bool m_sprinting = false;
|
||||
static constexpr psyqo::FixedPoint<12> sprintSpeed = 0.01_fp;
|
||||
|
||||
bool m_freecam = false;
|
||||
psyqo::FixedPoint<12> pheight = 0.0_fp;
|
||||
|
||||
bool m_renderSelect = false;
|
||||
};
|
||||
|
||||
PSXSplash psxSplash;
|
||||
PSXSplash app;
|
||||
MainScene mainScene;
|
||||
|
||||
} // namespace
|
||||
@@ -78,11 +84,32 @@ void PSXSplash::createScene() {
|
||||
}
|
||||
|
||||
void MainScene::start(StartReason reason) {
|
||||
psxSplash.m_loader.LoadSplashpack(_binary_output_bin_start);
|
||||
app.m_loader.LoadSplashpack(_binary_output_bin_start);
|
||||
psxsplash::Renderer::GetInstance().SetCamera(m_mainCamera);
|
||||
}
|
||||
|
||||
psyqo::FixedPoint<12> pheight = 0.0_fp;
|
||||
m_mainCamera.SetPosition(static_cast<psyqo::FixedPoint<12>>(app.m_loader.playerStartPos.x),
|
||||
static_cast<psyqo::FixedPoint<12>>(app.m_loader.playerStartPos.y),
|
||||
static_cast<psyqo::FixedPoint<12>>(app.m_loader.playerStartPos.z));
|
||||
|
||||
pheight = psyqo::FixedPoint<12>(app.m_loader.playerHeight);
|
||||
|
||||
app.m_input.setOnEvent(
|
||||
eastl::function<void(psyqo::AdvancedPad::Event)>{[this](const psyqo::AdvancedPad::Event& event) {
|
||||
if (event.pad != psyqo::AdvancedPad::Pad::Pad1a) return;
|
||||
if (app.m_loader.navmeshes.empty()) return;
|
||||
if (event.type == psyqo::AdvancedPad::Event::ButtonPressed) {
|
||||
if (event.button == psyqo::AdvancedPad::Button::Triangle) {
|
||||
m_freecam = !m_freecam;
|
||||
} else if (event.button == psyqo::AdvancedPad::Button::Square) {
|
||||
m_renderSelect = !m_renderSelect;
|
||||
}
|
||||
}
|
||||
}});
|
||||
|
||||
if (app.m_loader.navmeshes.empty()) {
|
||||
m_freecam = true;
|
||||
}
|
||||
}
|
||||
|
||||
void MainScene::frame() {
|
||||
uint32_t beginFrame = gpu().now();
|
||||
@@ -95,63 +122,69 @@ void MainScene::frame() {
|
||||
}
|
||||
|
||||
mainScene.m_lastFrameCounter = currentFrameCounter;
|
||||
|
||||
uint8_t rightX = psxSplash.m_input.getAdc(psyqo::AdvancedPad::Pad::Pad1a, 0);
|
||||
uint8_t rightY = psxSplash.m_input.getAdc(psyqo::AdvancedPad::Pad::Pad1a, 1);
|
||||
|
||||
uint8_t leftX = psxSplash.m_input.getAdc(psyqo::AdvancedPad::Pad::Pad1a, 2);
|
||||
uint8_t leftY = psxSplash.m_input.getAdc(psyqo::AdvancedPad::Pad::Pad1a, 3);
|
||||
uint8_t rightX = app.m_input.getAdc(psyqo::AdvancedPad::Pad::Pad1a, 0);
|
||||
uint8_t rightY = app.m_input.getAdc(psyqo::AdvancedPad::Pad::Pad1a, 1);
|
||||
|
||||
uint8_t leftX = app.m_input.getAdc(psyqo::AdvancedPad::Pad::Pad1a, 2);
|
||||
uint8_t leftY = app.m_input.getAdc(psyqo::AdvancedPad::Pad::Pad1a, 3);
|
||||
|
||||
int16_t rightXOffset = (int16_t)rightX - 0x80;
|
||||
int16_t rightYOffset = (int16_t)rightY - 0x80;
|
||||
int16_t leftXOffset = (int16_t)leftX - 0x80;
|
||||
int16_t leftYOffset = (int16_t)leftY - 0x80;
|
||||
|
||||
if(__builtin_abs(leftXOffset) < psxSplash.m_stickDeadzone &&
|
||||
__builtin_abs(leftYOffset) < psxSplash.m_stickDeadzone) {
|
||||
|
||||
if (__builtin_abs(leftXOffset) < app.m_stickDeadzone &&
|
||||
__builtin_abs(leftYOffset) < app.m_stickDeadzone) {
|
||||
m_sprinting = false;
|
||||
}
|
||||
|
||||
if(psxSplash.m_input.isButtonPressed(psyqo::AdvancedPad::Pad::Pad1a, psyqo::AdvancedPad::Button::L3)) {
|
||||
if (app.m_input.isButtonPressed(psyqo::AdvancedPad::Pad::Pad1a, psyqo::AdvancedPad::Button::L3)) {
|
||||
m_sprinting = true;
|
||||
}
|
||||
|
||||
psyqo::FixedPoint<12> speed = m_sprinting ? sprintSpeed : moveSpeed;
|
||||
|
||||
if (__builtin_abs(rightXOffset) > psxSplash.m_stickDeadzone) {
|
||||
camRotY += (rightXOffset * rotSpeed * deltaTime) >> 7;
|
||||
if (__builtin_abs(rightXOffset) > app.m_stickDeadzone) {
|
||||
camRotY += (rightXOffset * rotSpeed * deltaTime) >> 7;
|
||||
}
|
||||
if (__builtin_abs(rightYOffset) > psxSplash.m_stickDeadzone) {
|
||||
if (__builtin_abs(rightYOffset) > app.m_stickDeadzone) {
|
||||
camRotX -= (rightYOffset * rotSpeed * deltaTime) >> 7;
|
||||
camRotX = eastl::clamp(camRotX, -0.5_pi, 0.5_pi);
|
||||
}
|
||||
m_mainCamera.SetRotation(camRotX, camRotY, camRotZ);
|
||||
|
||||
if (__builtin_abs(leftYOffset) > psxSplash.m_stickDeadzone) {
|
||||
if (__builtin_abs(leftYOffset) > app.m_stickDeadzone) {
|
||||
psyqo::FixedPoint<12> forward = -(leftYOffset * speed * deltaTime) >> 7;
|
||||
m_mainCamera.MoveX((m_trig.sin(camRotY) * forward));
|
||||
m_mainCamera.MoveZ((m_trig.cos(camRotY) * forward));
|
||||
}
|
||||
if (__builtin_abs(leftXOffset) > psxSplash.m_stickDeadzone) {
|
||||
psyqo::FixedPoint<12> strafe = -(leftXOffset * speed * deltaTime) >> 7;
|
||||
if (__builtin_abs(leftXOffset) > app.m_stickDeadzone) {
|
||||
psyqo::FixedPoint<12> strafe = -(leftXOffset * speed * deltaTime) >> 7;
|
||||
m_mainCamera.MoveX(-(m_trig.cos(camRotY) * strafe));
|
||||
m_mainCamera.MoveZ((m_trig.sin(camRotY) * strafe));
|
||||
}
|
||||
|
||||
if(psxSplash.m_input.isButtonPressed(psyqo::AdvancedPad::Pad::Pad1a, psyqo::AdvancedPad::Button::L1)) {
|
||||
pheight += 0.01_fp;
|
||||
if (app.m_input.isButtonPressed(psyqo::AdvancedPad::Pad::Pad1a, psyqo::AdvancedPad::Button::L1)) {
|
||||
m_mainCamera.MoveY(speed * deltaTime);
|
||||
}
|
||||
if(psxSplash.m_input.isButtonPressed(psyqo::AdvancedPad::Pad::Pad1a, psyqo::AdvancedPad::Button::R1)) {
|
||||
pheight -= 0.01_fp;
|
||||
if (app.m_input.isButtonPressed(psyqo::AdvancedPad::Pad::Pad1a, psyqo::AdvancedPad::Button::R1)) {
|
||||
m_mainCamera.MoveY(-speed * deltaTime);
|
||||
}
|
||||
|
||||
psyqo::Vec3 adjustedPosition =
|
||||
psxsplash::ComputeNavmeshPosition(m_mainCamera.GetPosition(), *psxSplash.m_loader.navmeshes[0], -0.05_fp);
|
||||
m_mainCamera.SetPosition(adjustedPosition.x, adjustedPosition.y, adjustedPosition.z);
|
||||
if (!m_freecam) {
|
||||
psyqo::Vec3 adjustedPosition =
|
||||
psxsplash::ComputeNavmeshPosition(m_mainCamera.GetPosition(), *app.m_loader.navmeshes[0], -pheight);
|
||||
m_mainCamera.SetPosition(adjustedPosition.x, adjustedPosition.y, adjustedPosition.z);
|
||||
}
|
||||
|
||||
psxsplash::Renderer::GetInstance().Render(psxSplash.m_loader.gameObjects);
|
||||
// psxsplash::Renderer::getInstance().renderNavmeshPreview(*psxSplash.m_loader.navmeshes[0], true);
|
||||
psxSplash.m_font.chainprintf(gpu(), {{.x = 2, .y = 2}}, {{.r = 0xff, .g = 0xff, .b = 0xff}}, "FPS: %i",
|
||||
if (!m_renderSelect) {
|
||||
psxsplash::Renderer::GetInstance().Render(app.m_loader.gameObjects);
|
||||
} else {
|
||||
psxsplash::Renderer::GetInstance().RenderNavmeshPreview(*app.m_loader.navmeshes[0], true);
|
||||
}
|
||||
|
||||
app.m_font.chainprintf(gpu(), {{.x = 2, .y = 2}}, {{.r = 0xff, .g = 0xff, .b = 0xff}}, "FPS: %i",
|
||||
gpu().getRefreshRate() / deltaTime);
|
||||
|
||||
gpu().pumpCallbacks();
|
||||
@@ -159,4 +192,4 @@ void MainScene::frame() {
|
||||
uint32_t spent = endFrame - beginFrame;
|
||||
}
|
||||
|
||||
int main() { return psxSplash.run(); }
|
||||
int main() { return app.run(); }
|
||||
Reference in New Issue
Block a user