From a78f430a6e5824357bd395331a5297ea2463e10b Mon Sep 17 00:00:00 2001 From: h4570 Date: Sun, 14 Aug 2022 19:41:44 +0200 Subject: [PATCH] add ship --- ROADMAP.txt | 8 ++-- demo/inc/states/game/game_state.hpp | 2 + demo/inc/states/game/ship/ship.hpp | 39 +++++++++++++++++ demo/src/states/game/game_state.cpp | 11 +++-- demo/src/states/game/ship/ship.cpp | 53 ++++++++++++++++++++++++ demo/src/states/game/terrain/terrain.cpp | 24 +++++------ engine/inc/renderer/models/color.hpp | 2 + engine/src/renderer/models/color.cpp | 12 ++++++ 8 files changed, 132 insertions(+), 19 deletions(-) create mode 100644 demo/inc/states/game/ship/ship.hpp create mode 100644 demo/src/states/game/ship/ship.cpp diff --git a/ROADMAP.txt b/ROADMAP.txt index 3906fac..e50e978 100644 --- a/ROADMAP.txt +++ b/ROADMAP.txt @@ -1,11 +1,11 @@ ------------ Tyra's v2.0 roadmap to publish on GitHub ------------ -- [Demo] Animation table +- [Demo] Red screen on hit +- [Demo] Count of killed zombies - [Demo] Crosshair - [Demo] 2D Health bar -- [Demo] More monsters! -- [Demo] Add ship and other reality stuff -- [Demo] Game fadein +- [Demo] Game over screen +- [Demo] Game fadein with audio information about island - [General] USB test - [General] CI in Github via docker image diff --git a/demo/inc/states/game/game_state.hpp b/demo/inc/states/game/game_state.hpp index af73d3f..e6033d1 100644 --- a/demo/inc/states/game/game_state.hpp +++ b/demo/inc/states/game/game_state.hpp @@ -16,6 +16,7 @@ #include "./renderer/game_renderer.hpp" #include "./terrain/terrain.hpp" #include "./skybox/skybox.hpp" +#include "./ship/ship.hpp" #include "./debug_object.hpp" #include "./enemy/enemy_manager.hpp" @@ -48,6 +49,7 @@ class GameState : public State { EnemyManager* enemyManager; Terrain* terrain; Skybox* skybox; + Ship* ship; DebugObject* dbgObj; }; diff --git a/demo/inc/states/game/ship/ship.hpp b/demo/inc/states/game/ship/ship.hpp new file mode 100644 index 0000000..2d2db78 --- /dev/null +++ b/demo/inc/states/game/ship/ship.hpp @@ -0,0 +1,39 @@ +/* +# _____ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2022, tyra - https://github.com/h4570/tyra +# Licensed under Apache License 2.0 +# Sandro Sobczyński +*/ + +#pragma once + +#include +#include +#include "states/game/renderer/renderer_static_pair.hpp" +#include + +using Tyra::Renderer; +using Tyra::StaPipOptions; +using Tyra::StaticMesh; +using Tyra::TextureRepository; +using Tyra::Vec4; + +namespace Demo { + +class Ship { + public: + Ship(TextureRepository* repo); + ~Ship(); + + StaticMesh* mesh; + StaPipOptions* options; + RendererStaticPair* pair; + + private: + void allocateOptions(); +}; + +} // namespace Demo diff --git a/demo/src/states/game/game_state.cpp b/demo/src/states/game/game_state.cpp index ea1b0a9..96ddee6 100644 --- a/demo/src/states/game/game_state.cpp +++ b/demo/src/states/game/game_state.cpp @@ -39,6 +39,7 @@ void GameState::onStart() { player = new Player(engine); terrain = new Terrain(repository); enemyManager = new EnemyManager(engine, terrain->heightmap); + ship = new Ship(repository); skybox = new Skybox(repository); dbgObj = new DebugObject(repository); @@ -51,6 +52,7 @@ GlobalStateType GameState::onFinish() { delete player; delete enemyManager; delete terrain; + delete ship; delete skybox; delete dbgObj; initialized = false; @@ -60,7 +62,8 @@ GlobalStateType GameState::onFinish() { void GameState::update() { if (fpsChecker++ > 50) { - TYRA_LOG("FPS: ", engine->info.getFps()); + TYRA_LOG("FPS: ", engine->info.getFps(), + " RAM: ", engine->info.getAvailableRAM()); fpsChecker = 0; } @@ -75,11 +78,13 @@ void GameState::update() { renderer.clear(); { - renderer.add(skybox->pair); + 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.add(dbgObj->pair); } renderer.render(); diff --git a/demo/src/states/game/ship/ship.cpp b/demo/src/states/game/ship/ship.cpp new file mode 100644 index 0000000..efd5f96 --- /dev/null +++ b/demo/src/states/game/ship/ship.cpp @@ -0,0 +1,53 @@ +/* +# _____ ____ ___ +# | \/ ____| |___| +# | | | \ | | +#----------------------------------------------------------------------- +# Copyright 2022, tyra - https://github.com/h4570/tyra +# Licensed under Apache License 2.0 +# Sandro Sobczyński +*/ + +#include "states/game/ship/ship.hpp" +#include +#include + +using Tyra::FileUtils; +using Tyra::ObjLoader; +using Tyra::ObjLoaderOptions; + +namespace Demo { + +Ship::Ship(TextureRepository* repo) { + ObjLoader loader; + + ObjLoaderOptions objOptions; + objOptions.flipUVs = true; + objOptions.scale = 200.0F; + + auto* data = + loader.load(FileUtils::fromCwd("game/models/ship/ship.obj"), objOptions); + mesh = new StaticMesh(*data); + delete data; + + for (std::size_t i = 0; i < mesh->materials.size(); i++) { + mesh->materials[i]->ambient /= 2.0F; + mesh->materials[i]->ambient.a = 128.0F; + } + + mesh->setPosition(Vec4(-800.0F, 10.0F, -2500.0F)); + + allocateOptions(); + + pair = new RendererStaticPair{mesh, options}; +} + +Ship::~Ship() { + delete mesh; + delete options; + delete pair; +} + +void Ship::allocateOptions() { options = new StaPipOptions(); } + +} // namespace Demo diff --git a/demo/src/states/game/terrain/terrain.cpp b/demo/src/states/game/terrain/terrain.cpp index eea33e3..ebbb193 100644 --- a/demo/src/states/game/terrain/terrain.cpp +++ b/demo/src/states/game/terrain/terrain.cpp @@ -23,22 +23,22 @@ Terrain::Terrain(TextureRepository* repo) Vec4(-750.0F, 0.0F, -1400.0F, 1.0F), // Left up Vec4(920.0F, 0.0F, 1520.0F, 1.0F) // Right down ) { - // ObjLoader loader; + ObjLoader loader; - // ObjLoaderOptions objOptions; - // objOptions.flipUVs = true; - // objOptions.scale = 100.0F; + ObjLoaderOptions objOptions; + objOptions.flipUVs = true; + objOptions.scale = 100.0F; - // auto* data = loader.load( - // FileUtils::fromCwd("game/models/terrain/terrain.obj"), objOptions); - // data->normalsEnabled = false; - // mesh = new StaticMesh(*data); - // delete data; - // repo->addByMesh(mesh, FileUtils::fromCwd("game/models/terrain/"), "png"); + auto* data = loader.load( + FileUtils::fromCwd("game/models/terrain/terrain.obj"), objOptions); + data->normalsEnabled = false; + mesh = new StaticMesh(*data); + delete data; + repo->addByMesh(mesh, FileUtils::fromCwd("game/models/terrain/"), "png"); - // allocateOptions(); + allocateOptions(); - // pair = new RendererStaticPair{mesh, options}; + pair = new RendererStaticPair{mesh, options}; } float Terrain::getHeightOffset(const Vec4& playerPosition) { diff --git a/engine/inc/renderer/models/color.hpp b/engine/inc/renderer/models/color.hpp index 43c4d78..238a29a 100644 --- a/engine/inc/renderer/models/color.hpp +++ b/engine/inc/renderer/models/color.hpp @@ -49,6 +49,8 @@ class Color { explicit Color(const float* v) { copy(this, v); } void operator=(const Color& v); + void operator*=(const float& v); + void operator/=(const float& v); inline void set(const Color& v) { copy(this, v.rgba); } inline void set(const float* v) { copy(this, v); } diff --git a/engine/src/renderer/models/color.cpp b/engine/src/renderer/models/color.cpp index 098d7c3..a20bc58 100644 --- a/engine/src/renderer/models/color.cpp +++ b/engine/src/renderer/models/color.cpp @@ -19,6 +19,18 @@ void Color::copy(Color* out, const float* in) { } void Color::operator=(const Color& v) { copy(this, v); } +void Color::operator*=(const float& v) { + r *= v; + g *= v; + b *= v; + a *= v; +} +void Color::operator/=(const float& v) { + r /= v; + g /= v; + b /= v; + a /= v; +} void Color::set(const float& t_r, const float& t_g, const float& t_b, const float& t_a) {