diff options
-rw-r--r-- | game/scenary/foliage.cpp | 33 | ||||
-rw-r--r-- | game/scenary/foliage.h | 21 | ||||
-rw-r--r-- | game/scenary/plant.cpp | 13 | ||||
-rw-r--r-- | game/scenary/plant.h | 16 |
4 files changed, 83 insertions, 0 deletions
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<Foliage> { + Mesh::Ptr bodyMesh; + std::shared_ptr<Texture> texture; + +public: + void render(const SceneShader &, const Location &) const; + void shadows(const ShadowMapper &, const Location &) const; + +protected: + friend Persistence::SelectionPtrBase<std::shared_ptr<Foliage>>; + 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<const Foliage> type; + Location position; + + void render(const SceneShader & shader) const override; + void shadows(const ShadowMapper & shadowMapper) const override; + +public: + Plant(std::shared_ptr<const Foliage> type, Location position) : type(std::move(type)), position(position) { } +}; |