utility functions
This commit is contained in:
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
@@ -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!");
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user