From e428f2145ac3b05345d42e3518a22d429ad0970e Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Mon, 10 Apr 2023 14:33:54 +0100 Subject: Add the plant/foliage game item concepts --- game/scenary/foliage.cpp | 33 +++++++++++++++++++++++++++++++++ game/scenary/foliage.h | 21 +++++++++++++++++++++ game/scenary/plant.cpp | 13 +++++++++++++ game/scenary/plant.h | 16 ++++++++++++++++ 4 files changed, 83 insertions(+) create mode 100644 game/scenary/foliage.cpp create mode 100644 game/scenary/foliage.h create mode 100644 game/scenary/plant.cpp create mode 100644 game/scenary/plant.h (limited to 'game') diff --git a/game/scenary/foliage.cpp b/game/scenary/foliage.cpp new file mode 100644 index 0000000..d39d500 --- /dev/null +++ b/game/scenary/foliage.cpp @@ -0,0 +1,33 @@ +#include "foliage.h" +#include "gfx/gl/sceneShader.h" +#include "gfx/gl/shadowMapper.h" +#include "gfx/models/texture.h" + +bool +Foliage::persist(Persistence::PersistenceStore & store) +{ + return STORE_TYPE && STORE_HELPER(bodyMesh, Asset::MeshConstruct) && Asset::persist(store); +} + +void +Foliage::postLoad() +{ + texture = getTexture(); +} + +void +Foliage::render(const SceneShader & shader, const Location & loc) const +{ + shader.basic.use(loc); + if (texture) { + texture->bind(); + } + bodyMesh->Draw(); +} + +void +Foliage::shadows(const ShadowMapper & mapper, const Location & loc) const +{ + mapper.dynamicPoint.use(loc); + bodyMesh->Draw(); +} diff --git a/game/scenary/foliage.h b/game/scenary/foliage.h new file mode 100644 index 0000000..229bccb --- /dev/null +++ b/game/scenary/foliage.h @@ -0,0 +1,21 @@ +#pragma once + +#include "assetFactory/asset.h" + +class SceneShader; +class ShadowMapper; +class Location; + +class Foliage : public Asset, public StdTypeDefs { + Mesh::Ptr bodyMesh; + std::shared_ptr texture; + +public: + void render(const SceneShader &, const Location &) const; + void shadows(const ShadowMapper &, const Location &) const; + +protected: + friend Persistence::SelectionPtrBase>; + bool persist(Persistence::PersistenceStore & store) override; + void postLoad() override; +}; diff --git a/game/scenary/plant.cpp b/game/scenary/plant.cpp new file mode 100644 index 0000000..2b01bee --- /dev/null +++ b/game/scenary/plant.cpp @@ -0,0 +1,13 @@ +#include "plant.h" + +void +Plant::render(const SceneShader & shader) const +{ + type->render(shader, position); +} + +void +Plant::shadows(const ShadowMapper & mapper) const +{ + type->shadows(mapper, position); +} diff --git a/game/scenary/plant.h b/game/scenary/plant.h new file mode 100644 index 0000000..7f964eb --- /dev/null +++ b/game/scenary/plant.h @@ -0,0 +1,16 @@ +#pragma once + +#include "foliage.h" +#include "gfx/renderable.h" +#include "location.hpp" + +class Plant : public Renderable { + std::shared_ptr type; + Location position; + + void render(const SceneShader & shader) const override; + void shadows(const ShadowMapper & shadowMapper) const override; + +public: + Plant(std::shared_ptr type, Location position) : type(std::move(type)), position(position) { } +}; -- cgit v1.2.3 From 5215c297280e5440881bcc495ef75a86a5708b03 Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Mon, 10 Apr 2023 18:31:57 +0100 Subject: Plants are world objects --- game/scenary/plant.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'game') diff --git a/game/scenary/plant.h b/game/scenary/plant.h index 7f964eb..55acca1 100644 --- a/game/scenary/plant.h +++ b/game/scenary/plant.h @@ -1,16 +1,22 @@ #pragma once #include "foliage.h" +#include "game/worldobject.h" #include "gfx/renderable.h" #include "location.hpp" -class Plant : public Renderable { +class Plant : public Renderable, public WorldObject { std::shared_ptr type; Location position; void render(const SceneShader & shader) const override; void shadows(const ShadowMapper & shadowMapper) const override; + void + tick(TickDuration) override + { + } + public: Plant(std::shared_ptr type, Location position) : type(std::move(type)), position(position) { } }; -- cgit v1.2.3 From f709098cd7a5fb7e88b96de18e609a2aebd56644 Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Thu, 13 Apr 2023 02:16:39 +0100 Subject: Add missing forward declaration --- game/scenary/foliage.h | 1 + 1 file changed, 1 insertion(+) (limited to 'game') diff --git a/game/scenary/foliage.h b/game/scenary/foliage.h index 229bccb..b85aab2 100644 --- a/game/scenary/foliage.h +++ b/game/scenary/foliage.h @@ -5,6 +5,7 @@ class SceneShader; class ShadowMapper; class Location; +class Texture; class Foliage : public Asset, public StdTypeDefs { Mesh::Ptr bodyMesh; -- cgit v1.2.3 From 66da4f83c1b5bb6f3ceda880820e01c2f8e23e43 Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Fri, 14 Apr 2023 17:45:31 +0100 Subject: Remove the old .obj load, assets and supporting stuff --- game/vehicles/railVehicleClass.cpp | 53 -------------------------------------- game/vehicles/railVehicleClass.h | 9 ------- 2 files changed, 62 deletions(-) (limited to 'game') diff --git a/game/vehicles/railVehicleClass.cpp b/game/vehicles/railVehicleClass.cpp index 4e9263c..b7a3b1e 100644 --- a/game/vehicles/railVehicleClass.cpp +++ b/game/vehicles/railVehicleClass.cpp @@ -2,7 +2,6 @@ #include "gfx/gl/sceneShader.h" #include "gfx/gl/shadowMapper.h" #include "gfx/models/mesh.h" -#include "gfx/models/obj.h" #include "gfx/models/texture.h" #include #include @@ -22,25 +21,6 @@ #include #include -RailVehicleClass::RailVehicleClass(const std::string & name) : - RailVehicleClass {std::make_unique(Resource::mapPath(name + ".obj")), - Texture::cachedTexture.get(Resource::mapPath(name + ".png"))} -{ -} - -RailVehicleClass::RailVehicleClass(std::unique_ptr o, std::shared_ptr t) : - texture {std::move(t)}, maxSpeed(95._mph) -{ - wheelBase = bogieOffset(*o); - length = objectLength(*o); - const auto m = o->createMeshes(); - bodyMesh = m.at("Body"); - bogies[0] = m.at("Bogie1"); - bogies[1] = m.at("Bogie2"); -} - -RailVehicleClass::RailVehicleClass() { } - bool RailVehicleClass::persist(Persistence::PersistenceStore & store) { @@ -80,36 +60,3 @@ RailVehicleClass::shadows( bogies[b]->Draw(); } } - -float -RailVehicleClass::bogieOffset(ObjParser & o) -{ - float wheelBase {0}; - // offset bogie positions so they can be set directly - for (auto & object : o.objects) { // bogie object index - if (!object.first.starts_with("Bogie")) { - continue; - } - std::set> vertexIds; - for (const auto & face : object.second) { - for (const auto & faceElement : face) { - vertexIds.emplace(o.vertices[faceElement.x - 1].y, faceElement.x - 1); - } - } - const auto offset = (vertexIds.begin()->first + vertexIds.rbegin()->first) / 2; - for (const auto & v : vertexIds) { - o.vertices[v.second].y -= offset; - } - wheelBase += std::abs(offset); - } - return wheelBase; -} - -float -RailVehicleClass::objectLength(ObjParser & o) -{ - const auto mme = std::minmax_element(o.vertices.begin(), o.vertices.end(), [](const auto & v1, const auto & v2) { - return v1.y < v2.y; - }); - return mme.second->y - mme.first->y; -} diff --git a/game/vehicles/railVehicleClass.h b/game/vehicles/railVehicleClass.h index 61ec4ec..1a52e2b 100644 --- a/game/vehicles/railVehicleClass.h +++ b/game/vehicles/railVehicleClass.h @@ -9,14 +9,10 @@ class SceneShader; class ShadowMapper; class Texture; -class ObjParser; class Location; class RailVehicleClass : public Asset { public: - explicit RailVehicleClass(const std::string & name); - RailVehicleClass(); - void render(const SceneShader &, const Location &, const std::array &) const; void shadows(const ShadowMapper &, const Location &, const std::array &) const; @@ -31,10 +27,5 @@ protected: friend Persistence::SelectionPtrBase>; bool persist(Persistence::PersistenceStore & store) override; void postLoad() override; - -private: - RailVehicleClass(std::unique_ptr obj, std::shared_ptr); - static float bogieOffset(ObjParser & o); - static float objectLength(ObjParser & o); }; using RailVehicleClassPtr = std::shared_ptr; -- cgit v1.2.3