utility functions

This commit is contained in:
h4570
2022-08-17 00:19:16 +02:00
parent 4fb0ab3b6c
commit fea2398699
27 changed files with 419 additions and 247 deletions
-40
View File
@@ -1,40 +0,0 @@
/*
# _____ ____ ___
# | \/ ____| |___|
# | | | \ | |
#-----------------------------------------------------------------------
# Copyright 2022, tyra - https://github.com/h4570/tyra
# Licensed under Apache License 2.0
# Sandro Sobczyński <sandro.sobczynski@gmail.com>
*/
#pragma once
#include <tyra>
#include "states/game/renderer/renderer_static_pair.hpp"
using Tyra::Renderer;
using Tyra::StaPipOptions;
using Tyra::StaticMesh;
using Tyra::TextureRepository;
using Tyra::Vec4;
namespace Demo {
class DebugObject {
public:
DebugObject(TextureRepository* repo);
~DebugObject();
StaticMesh* mesh;
StaPipOptions* options;
RendererStaticPair* pair;
void setPosition(const Vec4& v);
private:
float rotator;
void allocateOptions();
};
} // namespace Demo
-2
View File
@@ -17,7 +17,6 @@
#include "./terrain/terrain.hpp"
#include "./skybox/skybox.hpp"
#include "./ship/ship.hpp"
#include "./debug_object.hpp"
#include "./enemy/enemy_manager.hpp"
namespace Demo {
@@ -50,7 +49,6 @@ class GameState : public State<GlobalStateType> {
Terrain* terrain;
Skybox* skybox;
Ship* ship;
DebugObject* dbgObj;
};
} // namespace Demo
+2
View File
@@ -20,6 +20,7 @@
using Tyra::Engine;
using Tyra::Pad;
using Tyra::Renderer3DUtility;
using Tyra::Vec4;
namespace Demo {
@@ -41,6 +42,7 @@ class Player {
private:
void handlePlayerPosition(const Heightmap& heightmap,
const float& terrainHeight);
Renderer3DUtility* utility;
float speed;
Pad* pad;
@@ -32,6 +32,7 @@ class GameRenderer {
void clear();
void renderSkybox(const RendererStaticPair& pair);
void render();
private:
-65
View File
@@ -1,65 +0,0 @@
/*
# _____ ____ ___
# | \/ ____| |___|
# | | | \ | |
#-----------------------------------------------------------------------
# Copyright 2022, tyra - https://github.com/h4570/tyra
# Licensed under Apache License 2.0
# Sandro Sobczyński <sandro.sobczynski@gmail.com>
*/
#include "states/game/debug_object.hpp"
using Tyra::Color;
using Tyra::FileUtils;
using Tyra::ObjLoader;
using Tyra::ObjLoaderOptions;
namespace Demo {
DebugObject::DebugObject(TextureRepository* repo) {
ObjLoader loader;
ObjLoaderOptions objOptions;
objOptions.flipUVs = true;
objOptions.scale = .5F;
auto* data =
loader.load(FileUtils::fromCwd("game/models/debug.obj"), objOptions);
data->normalsEnabled = false;
data->textureCoordsEnabled = false;
mesh = new StaticMesh(*data);
delete data;
rotator = 0.0F;
allocateOptions();
pair = new RendererStaticPair{mesh, options};
}
void DebugObject::setPosition(const Vec4& v) {
mesh->translation.identity();
mesh->rotation.identity();
mesh->translation.translate(v);
mesh->rotation.rotateX(rotator);
mesh->rotation.rotateY(rotator);
mesh->rotation.rotateZ(rotator);
rotator += 0.05F;
if (rotator >= 360.0F) rotator = 0.0F;
}
DebugObject::~DebugObject() {
delete mesh;
delete options;
delete pair;
}
void DebugObject::allocateOptions() {
options = new StaPipOptions();
options->shadingType = Tyra::TyraShadingGouraud;
options->blendingEnabled = false;
options->antiAliasingEnabled = false;
}
} // namespace Demo
+1 -4
View File
@@ -92,15 +92,12 @@ void Enemy::handlePlayerShoot(const PlayerShootAction& shootAction) {
}
const auto& ray = shootAction.ray.value();
auto bbox =
mesh->getCurrentBoundingBox().getTransformed(mesh->getModelMatrix());
auto isOnEnemy = ray.intersectBox(bbox.min(), bbox.max());
utility->drawBBox(bbox);
utility->drawLine(ray.origin, ray.direction);
utility->drawPoint(*mesh->getPosition());
if (isOnEnemy) {
mesh->setPosition(spawnPoint);
TYRA_LOG("Enemy hit!");
+1 -1
View File
@@ -43,7 +43,7 @@ EnemyManager::EnemyManager(Engine* engine, const Heightmap& heightmap) {
auto* sample = engine->audio.adpcm.load(
FileUtils::fromCwd("game/models/zombie/punch.adpcm"));
const int enemyCount = 2;
const int enemyCount = 10;
for (int i = 0; i < enemyCount; i++) {
EnemyInfo info;
info.adpcmChannel = 9 + i;
+19 -20
View File
@@ -39,7 +39,6 @@ void GameState::onStart() {
enemyManager = new EnemyManager(engine, terrain->heightmap);
ship = new Ship(repository);
skybox = new Skybox(repository);
dbgObj = new DebugObject(repository);
initialized = true;
}
@@ -52,41 +51,41 @@ GlobalStateType GameState::onFinish() {
delete terrain;
delete ship;
delete skybox;
delete dbgObj;
initialized = false;
return STATE_EXIT;
}
void GameState::update() {
// Begin frame
player->update(terrain->heightmap);
auto cameraInfo = player->getCameraInfo();
engine->renderer.beginFrame(cameraInfo);
// Clear screen and render skybox
renderer.clear();
skybox->update(player->getPosition());
renderer.renderSkybox(*skybox->pair); // First, because of ALLPASS
// Check fps
if (fpsChecker++ > 50) {
TYRA_LOG("FPS: ", engine->info.getFps(),
" RAM: ", engine->info.getAvailableRAM());
fpsChecker = 0;
}
player->update(terrain->heightmap);
skybox->update(player->getPosition());
// Game logic
auto shootAction = player->getShootAction();
enemyManager->update(terrain->heightmap, player->getPosition(), shootAction);
auto cameraInfo = player->getCameraInfo();
dbgObj->setPosition(*cameraInfo.looksAt);
// Render other stuff
renderer.add(ship->pair);
renderer.add(player->pair);
renderer.add(enemyManager->getPairs());
renderer.add(terrain->pair);
renderer.render();
engine->renderer.beginFrame(cameraInfo);
{
renderer.clear();
{
renderer.add(skybox->pair); // First, because of ALLPASS
renderer.add(ship->pair);
renderer.add(dbgObj->pair);
renderer.add(player->pair);
renderer.add(enemyManager->getPairs());
renderer.add(terrain->pair);
}
renderer.render();
}
// End frame
engine->renderer.endFrame();
}
+7
View File
@@ -19,6 +19,8 @@ Player::Player(Engine* engine)
position = Vec4(3.0F, 50.0F, 0.0F);
camera.lookAt = Vec4(0.0F, 0.0F, -30.0F);
speed = 5.0F;
utility = &engine->renderer.renderer3D.utility;
}
Player::~Player() { delete pair; }
@@ -39,6 +41,11 @@ PlayerShootAction Player::getShootAction() const {
action.ray = Ray(camera.position, camera.lookAt.getNormalized());
}
utility->drawBox(camera.lookAt, 1.0F);
// utility->drawLine(ray.origin, ray.direction);
utility->drawLine(camera.position + Vec4(0.0F, 1.0F, 0.0F), camera.lookAt);
return action;
}
@@ -46,6 +46,11 @@ void GameRenderer::clear() {
dynamicPairs.clear();
}
void GameRenderer::renderSkybox(const RendererStaticPair& pair) {
renderer->renderer3D.usePipeline(&stpip);
stpip.render(pair.mesh, pair.options);
}
void GameRenderer::render() {
if (staticPairs.size()) {
renderer->renderer3D.usePipeline(&stpip);