renderer cleanup, demo changes
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
# ______ ____ ___
|
||||
# | \/ ____| |___|
|
||||
# | | | \ | |
|
||||
#-----------------------------------------------------------------------
|
||||
# Copyright 2022, tyra - https://github.com/h4570/tyra
|
||||
# Licenced under Apache License 2.0
|
||||
# Sandro Sobczyński <sandro.sobczynski@gmail.com>
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <renderer/3d/mesh/dynamic/dynamic_mesh.hpp>
|
||||
#include <renderer/3d/pipeline/dynamic/dynpip_options.hpp>
|
||||
#include "states/game/renderer/renderer_dynamic_pair.hpp"
|
||||
#include <renderer/renderer.hpp>
|
||||
|
||||
using Tyra::DynamicMesh;
|
||||
using Tyra::DynPipOptions;
|
||||
using Tyra::Renderer;
|
||||
using Tyra::TextureRepository;
|
||||
using Tyra::Vec4;
|
||||
|
||||
namespace Demo {
|
||||
|
||||
class Enemy {
|
||||
public:
|
||||
Enemy(TextureRepository* repo);
|
||||
~Enemy();
|
||||
|
||||
DynamicMesh* bodyMesh;
|
||||
DynamicMesh* gunMesh;
|
||||
DynPipOptions* options;
|
||||
std::vector<RendererDynamicPair*> pairs;
|
||||
|
||||
void update(const Vec4& playerPosition);
|
||||
|
||||
private:
|
||||
void allocateOptions();
|
||||
};
|
||||
|
||||
} // namespace Demo
|
||||
@@ -17,6 +17,7 @@
|
||||
#include "./terrain/terrain.hpp"
|
||||
#include "./skybox/skybox.hpp"
|
||||
#include "./debug_object.hpp"
|
||||
#include "./enemy/enemy.hpp"
|
||||
|
||||
namespace Demo {
|
||||
|
||||
@@ -44,6 +45,7 @@ class GameState : public State<GlobalStateType> {
|
||||
|
||||
GameRenderer renderer;
|
||||
Player* player;
|
||||
Enemy* enemy;
|
||||
Terrain* terrain;
|
||||
Skybox* skybox;
|
||||
DebugObject* dbgObj;
|
||||
|
||||
@@ -30,8 +30,7 @@ class Player {
|
||||
const Vec4& getPosition() const { return position; }
|
||||
CameraInfo3D getCameraInfo() { return camera.getCameraInfo(); }
|
||||
|
||||
std::vector<RendererStaticPair*> staticPairs;
|
||||
std::vector<RendererDynamicPair*> dynamicPairs;
|
||||
RendererStaticPair* pair;
|
||||
|
||||
void update(const float& terrainHeight);
|
||||
|
||||
|
||||
@@ -0,0 +1,82 @@
|
||||
/*
|
||||
# ______ ____ ___
|
||||
# | \/ ____| |___|
|
||||
# | | | \ | |
|
||||
#-----------------------------------------------------------------------
|
||||
# Copyright 2022, tyra - https://github.com/h4570/tyra
|
||||
# Licenced under Apache License 2.0
|
||||
# Sandro Sobczyński <sandro.sobczynski@gmail.com>
|
||||
*/
|
||||
|
||||
#include "states/game/enemy/enemy.hpp"
|
||||
#include <loaders/3d/tyrobj/tyrobj_loader.hpp>
|
||||
#include <file/file_utils.hpp>
|
||||
|
||||
using Tyra::FileUtils;
|
||||
using Tyra::TyrobjLoader;
|
||||
|
||||
namespace Demo {
|
||||
|
||||
Enemy::Enemy(TextureRepository* repo) {
|
||||
TyrobjLoader loader;
|
||||
|
||||
auto* bodyData = loader.load(
|
||||
FileUtils::fromCwd("game/models/soldier/soldier.obj"), 4, 30.0F, true);
|
||||
bodyData->normalsEnabled = false;
|
||||
bodyMesh = new DynamicMesh(*bodyData);
|
||||
|
||||
TYRA_LOG("First vertex: ", bodyData->frames[0]->vertices[0].getPrint());
|
||||
TYRA_LOG("Last vertex: ",
|
||||
bodyData->frames[0]
|
||||
->vertices[bodyData->frames[0]->verticesCount - 1]
|
||||
.getPrint());
|
||||
|
||||
TYRA_LOG("First index: ", bodyData->materials[0]->vertexFaces[0]);
|
||||
TYRA_LOG(
|
||||
"Last index: ",
|
||||
bodyData->materials[0]->vertexFaces[bodyData->materials[0]->count - 1]);
|
||||
|
||||
delete bodyData;
|
||||
|
||||
bodyMesh->getMaterial(0)->color.r = 16.0F;
|
||||
bodyMesh->getMaterial(0)->color.g = 16.0F;
|
||||
bodyMesh->getMaterial(0)->color.b = 16.0F;
|
||||
|
||||
bodyMesh->playAnimation(0, bodyMesh->getFramesCount() - 1);
|
||||
bodyMesh->setAnimSpeed(0.15F);
|
||||
|
||||
repo->addByMesh(bodyMesh, FileUtils::fromCwd("game/models/soldier/"), "png");
|
||||
|
||||
// auto* headData = loader.load(
|
||||
// FileUtils::fromCwd("game/models/soldier/head.md2"), scale, true);
|
||||
// headData->normalsEnabled = false;
|
||||
// headMesh = new DynamicMesh(*headData);
|
||||
// delete headData;
|
||||
|
||||
// headMesh->getMaterial(0)->color.r = 16.0F;
|
||||
// headMesh->getMaterial(0)->color.g = 16.0F;
|
||||
// headMesh->getMaterial(0)->color.b = 16.0F;
|
||||
|
||||
// repo->addByMesh(headMesh, FileUtils::fromCwd("game/models/soldier/"),
|
||||
// "png");
|
||||
|
||||
allocateOptions();
|
||||
|
||||
pairs.push_back(new RendererDynamicPair{bodyMesh, options});
|
||||
// pairs.push_back(new RendererDynamicPair{gunMesh, options});
|
||||
}
|
||||
|
||||
Enemy::~Enemy() {
|
||||
delete bodyMesh;
|
||||
// delete gunMesh;
|
||||
delete options;
|
||||
for (auto* pair : pairs) {
|
||||
delete pair;
|
||||
}
|
||||
}
|
||||
|
||||
void Enemy::update(const Vec4& playerPosition) { bodyMesh->animate(); }
|
||||
|
||||
void Enemy::allocateOptions() { options = new DynPipOptions(); }
|
||||
|
||||
} // namespace Demo
|
||||
@@ -28,10 +28,12 @@ void GameState::onStart() {
|
||||
|
||||
engine->audio.stopSong();
|
||||
|
||||
auto* repository = &engine->renderer.core.texture.repository;
|
||||
player = new Player(engine);
|
||||
terrain = new Terrain(&engine->renderer.core.texture.repository);
|
||||
skybox = new Skybox(&engine->renderer.core.texture.repository);
|
||||
dbgObj = new DebugObject(&engine->renderer.core.texture.repository);
|
||||
enemy = new Enemy(repository);
|
||||
terrain = new Terrain(repository);
|
||||
skybox = new Skybox(repository);
|
||||
dbgObj = new DebugObject(repository);
|
||||
|
||||
initialized = true;
|
||||
}
|
||||
@@ -40,6 +42,7 @@ GlobalStateType GameState::onFinish() {
|
||||
if (!initialized) return STATE_EXIT;
|
||||
|
||||
delete player;
|
||||
delete enemy;
|
||||
delete terrain;
|
||||
delete skybox;
|
||||
delete dbgObj;
|
||||
@@ -54,23 +57,20 @@ void GameState::update() {
|
||||
fpsChecker = 0;
|
||||
}
|
||||
|
||||
// TODO: Get next player position and calculate all stuf for NEXT position
|
||||
// (not current!)
|
||||
// TODO: Implement collision
|
||||
skybox->update(player->getPosition());
|
||||
auto cameraInfo = player->getCameraInfo();
|
||||
engine->renderer.beginFrame(cameraInfo);
|
||||
|
||||
dbgObj->setPosition(*cameraInfo.looksAt);
|
||||
float terrainHeight = terrain->getHeightOffset(player->getPosition());
|
||||
player->update(terrainHeight);
|
||||
|
||||
dbgObj->setPosition(*cameraInfo.looksAt);
|
||||
enemy->update(player->getPosition());
|
||||
|
||||
renderer.clear();
|
||||
{
|
||||
renderer.add(skybox->pair);
|
||||
renderer.add(player->staticPairs);
|
||||
renderer.add(player->dynamicPairs);
|
||||
renderer.add(player->pair);
|
||||
renderer.add(enemy->pairs);
|
||||
renderer.add(terrain->pair);
|
||||
renderer.add(dbgObj->pair);
|
||||
}
|
||||
|
||||
@@ -16,21 +16,14 @@ Player::Player(Engine* engine)
|
||||
: position(0.0F),
|
||||
weapon(&engine->renderer.core.texture.repository),
|
||||
camera(&engine->pad) {
|
||||
staticPairs.push_back(new RendererStaticPair{weapon.mesh, weapon.options});
|
||||
pair = new RendererStaticPair{weapon.mesh, weapon.options};
|
||||
pad = &engine->pad;
|
||||
position = Vec4(3.0F, 50.0F, 0.0F);
|
||||
camera.lookAt = Vec4(0.0F, 0.0F, -30.0F);
|
||||
speed = 2.0F;
|
||||
}
|
||||
|
||||
Player::~Player() {
|
||||
for (auto pair : staticPairs) {
|
||||
delete pair;
|
||||
}
|
||||
for (auto pair : dynamicPairs) {
|
||||
delete pair;
|
||||
}
|
||||
}
|
||||
Player::~Player() { delete pair; }
|
||||
|
||||
void Player::update(const float& terrainHeight) {
|
||||
handlePlayerPosition(terrainHeight);
|
||||
|
||||
@@ -25,6 +25,10 @@ Weapon::Weapon(TextureRepository* repo) {
|
||||
mesh = new StaticMesh(*data);
|
||||
delete data;
|
||||
|
||||
mesh->getMaterial(0)->color.r = 64.0F;
|
||||
mesh->getMaterial(0)->color.g = 64.0F;
|
||||
mesh->getMaterial(0)->color.b = 64.0F;
|
||||
|
||||
mesh->translation.translateX(2.85F);
|
||||
mesh->translation.translateY(-3.40F);
|
||||
mesh->translation.translateZ(-10.50F);
|
||||
|
||||
@@ -27,7 +27,6 @@ Skybox::Skybox(TextureRepository* repo) {
|
||||
|
||||
for (u32 i = 0; i < mesh->getMaterialsCount(); i++) {
|
||||
auto* material = mesh->getMaterial(i);
|
||||
material->print();
|
||||
material->color.r = 16.0F;
|
||||
material->color.g = 16.0F;
|
||||
material->color.b = 16.0F;
|
||||
|
||||
@@ -27,9 +27,9 @@ Terrain::Terrain(TextureRepository* repo)
|
||||
FileUtils::fromCwd("game/models/terrain/terrain.obj"), 1, 25.0F, true);
|
||||
data->normalsEnabled = false;
|
||||
mesh = new StaticMesh(*data);
|
||||
mesh->getMaterial(0)->color.r = 96.0F;
|
||||
mesh->getMaterial(0)->color.g = 96.0F;
|
||||
mesh->getMaterial(0)->color.b = 96.0F;
|
||||
mesh->getMaterial(0)->color.r = 32.0F;
|
||||
mesh->getMaterial(0)->color.g = 32.0F;
|
||||
mesh->getMaterial(0)->color.b = 32.0F;
|
||||
delete data;
|
||||
|
||||
repo->addByMesh(mesh, FileUtils::fromCwd("game/models/terrain/"), "png");
|
||||
|
||||
Reference in New Issue
Block a user