From 332ef1fc41617a8f6b30831fe46d75679cc5221d Mon Sep 17 00:00:00 2001 From: Kbz-8 Date: Fri, 9 May 2025 09:37:23 +0200 Subject: [PATCH] working on chunk generation --- Application/Block.h | 6 + Application/Chunk.cpp | 29 +++++ Application/Chunk.h | 27 ++++ Application/ScriptSubRoutines.cpp | 118 ------------------ Application/ScriptSubRoutines.h | 12 -- Application/Utils.h | 20 +++ Application/World.cpp | 18 +++ Application/World.h | 28 +++++ Application/main.cpp | 32 ++--- Resources/prototype.bmp | Bin 0 -> 786486 bytes .../Runtime/Includes/Core/NativeScript.h | 19 +++ ScopEngine/Runtime/Includes/Core/Script.h | 12 ++ ScopEngine/Runtime/Includes/Graphics/Actor.h | 10 +- .../Runtime/Includes/Graphics/Narrator.h | 38 ++++++ ScopEngine/Runtime/Includes/Graphics/Scene.h | 5 + ScopEngine/Runtime/Includes/Maths/Enums.h | 4 +- ScopEngine/Runtime/Includes/ScopGraphics.h | 1 + ScopEngine/Runtime/Sources/Graphics/Scene.cpp | 18 +++ 18 files changed, 242 insertions(+), 155 deletions(-) create mode 100644 Application/Block.h create mode 100644 Application/Chunk.cpp create mode 100644 Application/Chunk.h delete mode 100644 Application/ScriptSubRoutines.cpp delete mode 100644 Application/ScriptSubRoutines.h create mode 100644 Application/Utils.h create mode 100644 Application/World.cpp create mode 100644 Application/World.h create mode 100644 Resources/prototype.bmp create mode 100644 ScopEngine/Runtime/Includes/Graphics/Narrator.h diff --git a/Application/Block.h b/Application/Block.h new file mode 100644 index 0000000..6a2ead9 --- /dev/null +++ b/Application/Block.h @@ -0,0 +1,6 @@ +#ifndef BLOCK_H +#define BLOCK_H + +#include + +#endif diff --git a/Application/Chunk.cpp b/Application/Chunk.cpp new file mode 100644 index 0000000..4b690b1 --- /dev/null +++ b/Application/Chunk.cpp @@ -0,0 +1,29 @@ +#include +#include + +Chunk::Chunk(Scop::Scene& world, Scop::Vec2ui offset) : m_data(CHUNK_VOLUME), m_offset(offset), m_position(std::move(offset) * Scop::Vec2ui{ CHUNK_SIZE }) +{ +} + +void Chunk::GenerateChunk() +{ + std::fill(m_data.begin(), m_data.end(), 0); + + for(std::uint32_t x = 0; x < CHUNK_SIZE.x; x++) + { + for(std::uint32_t z = 0; z < CHUNK_SIZE.z; z++) + { + std::uint32_t pos_x = m_position.x + x; + std::uint32_t pos_z = m_position.y + z; + + for(std::uint32_t y = 0; y < CHUNK_SIZE.y; y++) + { + std::uint32_t index = (z * CHUNK_SIZE.x * CHUNK_SIZE.y) + (y * CHUNK_SIZE.x) + x; + + // Implement noise here + + m_data[index] = y < 10 ? 1 : 0; + } + } + } +} diff --git a/Application/Chunk.h b/Application/Chunk.h new file mode 100644 index 0000000..52a0a59 --- /dev/null +++ b/Application/Chunk.h @@ -0,0 +1,27 @@ +#ifndef CHUNK_H +#define CHUNK_H + +#include +#include +#include + +constexpr Scop::Vec3ui CHUNK_SIZE = Scop::Vec3ui{ 16, 256, 16 }; +constexpr std::uint32_t CHUNK_VOLUME = CHUNK_SIZE.x * CHUNK_SIZE.y * CHUNK_SIZE.z; + +class Chunk +{ + public: + Chunk(Scop::Scene& world, Scop::Vec2ui offset); + + void GenerateChunk(); + + ~Chunk() = default; + + private: + std::vector m_data; + Scop::Vec2ui m_offset; // In chunks + Scop::Vec2ui m_position; // In blocks + Scop::NonOwningPtr p_actor = nullptr; +}; + +#endif diff --git a/Application/ScriptSubRoutines.cpp b/Application/ScriptSubRoutines.cpp deleted file mode 100644 index 7e0793c..0000000 --- a/Application/ScriptSubRoutines.cpp +++ /dev/null @@ -1,118 +0,0 @@ -#include - -constexpr const float SPEED = 40.0f; - -void WireframeHandler(Scop::NonOwningPtr scene, Scop::Inputs& inputs) -{ - static bool key_pressed_last_frame = false; - if(inputs.IsKeyPressed(SDL_SCANCODE_F)) - key_pressed_last_frame = true; - else if(key_pressed_last_frame) - { - scene->GetForwardData().wireframe = !scene->GetForwardData().wireframe; - Scop::RenderCore::Get().WaitDeviceIdle(); - scene->GetPipeline().Destroy(); - key_pressed_last_frame = false; - } - static Scop::Vec3f rotations{ 0.0f, 0.0f, 0.0f }; -} - -void MovementHandler(Scop::NonOwningPtr actor, Scop::Inputs& inputs, float delta) -{ - static Scop::Vec3f position{ 0.0f, 0.0f, 0.0f }; - if(inputs.IsKeyPressed(SDL_SCANCODE_I)) - position.x += SPEED * delta; - if(inputs.IsKeyPressed(SDL_SCANCODE_K)) - position.x -= SPEED * delta; - if(inputs.IsKeyPressed(SDL_SCANCODE_L)) - position.z += SPEED * delta; - if(inputs.IsKeyPressed(SDL_SCANCODE_J)) - position.z -= SPEED * delta; - if(inputs.IsKeyPressed(SDL_SCANCODE_U)) - position.y += SPEED * delta; - if(inputs.IsKeyPressed(SDL_SCANCODE_O)) - position.y -= SPEED * delta; - actor->SetPosition(position); -} - -void ColorsTransitionHandler(Scop::NonOwningPtr actor, Scop::Inputs& inputs, float delta, Scop::MaterialData& data) -{ - static bool colors_transition = false; - static bool colors_key_pressed_last_frame = false; - static std::uint8_t colors_transition_way = 0; - if(inputs.IsKeyPressed(SDL_SCANCODE_C) && !colors_transition) - colors_key_pressed_last_frame = true; - else if(colors_key_pressed_last_frame) - { - colors_key_pressed_last_frame = false; - colors_transition = true; - colors_transition_way = (data.dissolve_black_white_colors_factor >= 0.5f); - } - if(colors_transition) - { - if(colors_transition_way == 1) - { - data.dissolve_black_white_colors_factor -= 1.0f * delta; - colors_transition = (data.dissolve_black_white_colors_factor > 0.0f); - } - else - { - data.dissolve_black_white_colors_factor += 1.0f * delta; - colors_transition = (data.dissolve_black_white_colors_factor < 1.0f); - } - } - - static bool normals_transition = false; - static bool normals_key_pressed_last_frame = false; - static std::uint8_t normals_transition_way = 0; - if(inputs.IsKeyPressed(SDL_SCANCODE_N) && !normals_transition) - normals_key_pressed_last_frame = true; - else if(normals_key_pressed_last_frame) - { - normals_key_pressed_last_frame = false; - normals_transition = true; - normals_transition_way = (data.dissolve_normals_colors_factor >= 0.5f); - } - if(normals_transition) - { - if(normals_transition_way == 1) - { - data.dissolve_normals_colors_factor -= 1.0f * delta; - normals_transition = (data.dissolve_normals_colors_factor > 0.0f); - } - else - { - data.dissolve_normals_colors_factor += 1.0f * delta; - normals_transition = (data.dissolve_normals_colors_factor < 1.0f); - } - } -} - -void TextureTransitionHandler(Scop::NonOwningPtr actor, Scop::Inputs& inputs, float delta, Scop::MaterialData& data) -{ - static bool texture_transition = false; - static bool key_pressed_last_frame = false; - static std::uint8_t transition_way = 0; - - if(inputs.IsKeyPressed(SDL_SCANCODE_T) && !texture_transition) - key_pressed_last_frame = true; - else if(key_pressed_last_frame) - { - texture_transition = true; - key_pressed_last_frame = false; - transition_way = (data.dissolve_texture_factor >= 0.5f); - } - if(texture_transition) - { - if(transition_way == 1) - { - data.dissolve_texture_factor -= 1.0f * delta; - texture_transition = (data.dissolve_texture_factor > 0.0f); - } - else - { - data.dissolve_texture_factor += 1.0f * delta; - texture_transition = (data.dissolve_texture_factor < 1.0f); - } - } -} diff --git a/Application/ScriptSubRoutines.h b/Application/ScriptSubRoutines.h deleted file mode 100644 index 465055c..0000000 --- a/Application/ScriptSubRoutines.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef __SCRIPT_SUB_ROUTINES__ -#define __SCRIPT_SUB_ROUTINES__ - -#include -#include - -void WireframeHandler(Scop::NonOwningPtr scene, Scop::Inputs& inputs); -void MovementHandler(Scop::NonOwningPtr actor, Scop::Inputs& inputs, float delta); -void ColorsTransitionHandler(Scop::NonOwningPtr actor, Scop::Inputs& inputs, float delta, Scop::MaterialData& data); -void TextureTransitionHandler(Scop::NonOwningPtr actor, Scop::Inputs& inputs, float delta, Scop::MaterialData& data); - -#endif diff --git a/Application/Utils.h b/Application/Utils.h new file mode 100644 index 0000000..229e214 --- /dev/null +++ b/Application/Utils.h @@ -0,0 +1,20 @@ +#ifndef UTILS_H +#define UTILS_H + +#include +#include +#include + +inline std::filesystem::path GetExecutablePath() +{ + char result[PATH_MAX]; + ssize_t count = readlink("/proc/self/exe", result, PATH_MAX); + return std::string(result, (count > 0) ? count : 0); +} + +inline std::filesystem::path GetResourcesPath() +{ + return GetExecutablePath().parent_path().parent_path() / "Resources"; +} + +#endif diff --git a/Application/World.cpp b/Application/World.cpp new file mode 100644 index 0000000..07225c4 --- /dev/null +++ b/Application/World.cpp @@ -0,0 +1,18 @@ +#include + +#include +#include + +World::World(Scop::Scene& scene) : m_scene(scene), m_narrator(scene.CreateNarrator()) +{ + Scop::Vec2ui32 map_size; + Scop::MaterialTextures material_params; + material_params.albedo = std::make_shared(Scop::LoadBMPFile(GetResourcesPath() / "prototype.bmp", map_size), map_size.x, map_size.y); + p_block_material = std::make_shared(material_params); + + auto narrator_update = [](Scop::NonOwningPtr scene, Scop::Inputs& input, float delta) + { + }; + + m_narrator.AttachScript(std::make_shared(std::function{}, narrator_update, std::function{})); +} diff --git a/Application/World.h b/Application/World.h new file mode 100644 index 0000000..d5efc8c --- /dev/null +++ b/Application/World.h @@ -0,0 +1,28 @@ +#ifndef WORLD_H +#define WORLD_H + +#include + +#include + +#include + +class World +{ + public: + World(Scop::Scene& scene); + + [[nodiscard]] inline Scop::Scene& GetScene() noexcept { return m_scene; } + + ~World() = default; + + private: + static inline constexpr std::size_t CHUNKS_SIZE = 16; + + std::vector> m_chunks; + std::shared_ptr p_block_material; + Scop::Narrator& m_narrator; + Scop::Scene& m_scene; +}; + +#endif diff --git a/Application/main.cpp b/Application/main.cpp index 410ce36..5f159ad 100644 --- a/Application/main.cpp +++ b/Application/main.cpp @@ -1,27 +1,9 @@ #include #include -#include #include - -#include -#include -#include -#include -#include -#include - -std::filesystem::path GetExecutablePath() -{ - char result[PATH_MAX]; - ssize_t count = readlink("/proc/self/exe", result, PATH_MAX); - return std::string(result, (count > 0) ? count : 0); -} - -std::filesystem::path GetResourcesPath() -{ - return GetExecutablePath().parent_path().parent_path() / "Resources"; -} +#include +#include int main(int ac, char** av) { @@ -37,6 +19,16 @@ int main(int ac, char** av) Scop::Vec2ui32 skybox_size; main_scene.AddSkybox(std::make_shared(Scop::LoadBMPFile(GetResourcesPath() / "skybox.bmp", skybox_size), skybox_size.x, skybox_size.y)); + World world(main_scene); + + Scop::Actor& object = main_scene.CreateActor(Scop::CreateCube()); + + Scop::Vec2ui32 map_size; + Scop::MaterialTextures material_params; + material_params.albedo = std::make_shared(Scop::LoadBMPFile(GetResourcesPath() / "prototype.bmp", map_size), map_size.x, map_size.y); + std::shared_ptr material = std::make_shared(material_params); + object.GetModelRef().SetMaterial(material, 0); + engine.RegisterMainScene(splash_scene.get()); engine.Run(); return 0; diff --git a/Resources/prototype.bmp b/Resources/prototype.bmp new file mode 100644 index 0000000000000000000000000000000000000000..160be7b9f5ecaf0e12f869610973272ff3bb1682 GIT binary patch literal 786486 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
tm_*eX2yH+c5*B1Nh&)3*KiJ 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, NonOwningPtr, class Inputs&, float)> f_on_update; std::function)> f_on_quit; }; + + class NativeNarratorScript : public NarratorScript + { + public: + NativeNarratorScript(std::function on_init, std::function, class Inputs&, float)> on_update, std::function on_quit) + : f_on_init(std::move(on_init)), f_on_update(std::move(on_update)), f_on_quit(std::move(on_quit)) + {} + + inline void OnInit() override { if(f_on_init) f_on_init(); } + inline void OnUpdate(NonOwningPtr scene, class Inputs& input, float delta) override { if(f_on_update) f_on_update(scene, input, delta); } + inline void OnQuit() override { if(f_on_quit) f_on_quit(); } + + ~NativeNarratorScript() = default; + + private: + std::function f_on_init; + std::function, class Inputs&, float)> f_on_update; + std::function f_on_quit; + }; } #endif diff --git a/ScopEngine/Runtime/Includes/Core/Script.h b/ScopEngine/Runtime/Includes/Core/Script.h index 6d15f08..18a8d7c 100644 --- a/ScopEngine/Runtime/Includes/Core/Script.h +++ b/ScopEngine/Runtime/Includes/Core/Script.h @@ -28,6 +28,18 @@ namespace Scop virtual ~SpriteScript() = default; }; + + class NarratorScript + { + public: + NarratorScript() = default; + + virtual void OnInit() = 0; + virtual void OnUpdate(NonOwningPtr scene, class Inputs& input, float delta) = 0; + virtual void OnQuit() = 0; + + virtual ~NarratorScript() = default; + }; } #endif diff --git a/ScopEngine/Runtime/Includes/Graphics/Actor.h b/ScopEngine/Runtime/Includes/Graphics/Actor.h index 4a5b484..f619042 100644 --- a/ScopEngine/Runtime/Includes/Graphics/Actor.h +++ b/ScopEngine/Runtime/Includes/Graphics/Actor.h @@ -1,5 +1,5 @@ -#ifndef __SCOP_RENDERER_ACTOR__ -#define __SCOP_RENDERER_ACTOR__ +#ifndef __SCOP_GRAPHICS_ACTOR__ +#define __SCOP_GRAPHICS_ACTOR__ #include #include @@ -11,12 +11,13 @@ namespace Scop { class Actor { + friend Scene; + public: Actor(); Actor(Model model); inline void AttachScript(std::shared_ptr script) { p_script = script; } - void Update(NonOwningPtr scene, class Inputs& input, float timestep); inline void SetColor(Vec4f color) noexcept { m_color = color; } inline void SetPosition(Vec3f position) noexcept { m_position = position; } @@ -32,6 +33,9 @@ namespace Scop ~Actor(); + public: + void Update(NonOwningPtr scene, class Inputs& input, float timestep); + private: Model m_model; Quatf m_orientation = Quatf::Identity(); diff --git a/ScopEngine/Runtime/Includes/Graphics/Narrator.h b/ScopEngine/Runtime/Includes/Graphics/Narrator.h new file mode 100644 index 0000000..9693d36 --- /dev/null +++ b/ScopEngine/Runtime/Includes/Graphics/Narrator.h @@ -0,0 +1,38 @@ +#ifndef __SCOP_GRAPHICS_NARRATOR__ +#define __SCOP_GRAPHICS_NARRATOR__ + +#include +#include +#include +#include +#include + +namespace Scop +{ + class Narrator + { + friend Scene; + + public: + Narrator() = default; + inline void AttachScript(std::shared_ptr script) { p_script = script; } + inline ~Narrator() + { + if(p_script) + p_script->OnQuit(); + } + + private: + inline void Update(NonOwningPtr scene, class Inputs& input, float timestep) + { + if(p_script) + p_script->OnUpdate(scene, input, timestep); + } + + private: + std::shared_ptr p_script; + }; +} + +#endif + diff --git a/ScopEngine/Runtime/Includes/Graphics/Scene.h b/ScopEngine/Runtime/Includes/Graphics/Scene.h index 36c3e6a..dd42d78 100644 --- a/ScopEngine/Runtime/Includes/Graphics/Scene.h +++ b/ScopEngine/Runtime/Includes/Graphics/Scene.h @@ -8,6 +8,7 @@ #include #include +#include #include #include #include @@ -47,6 +48,9 @@ namespace Scop Actor& CreateActor(Model model) noexcept; Actor& CreateActor(std::string_view name, Model model); + Narrator& CreateNarrator() noexcept; + Narrator& CreateNarrator(std::string_view name); + Sprite& CreateSprite(std::shared_ptr texture) noexcept; Sprite& CreateSprite(std::string_view name, std::shared_ptr texture); @@ -82,6 +86,7 @@ namespace Scop std::shared_ptr p_skybox; std::vector> m_actors; std::vector> m_sprites; + std::vector> m_narrators; std::vector m_scene_children; std::string m_name; NonOwningPtr p_parent; diff --git a/ScopEngine/Runtime/Includes/Maths/Enums.h b/ScopEngine/Runtime/Includes/Maths/Enums.h index df12fbd..f560453 100644 --- a/ScopEngine/Runtime/Includes/Maths/Enums.h +++ b/ScopEngine/Runtime/Includes/Maths/Enums.h @@ -1,5 +1,5 @@ -#ifndef __SCOPE_MATHS_ENUMS__ -#define __SCOPE_MATHS_ENUMS__ +#ifndef __SCOP_MATHS_ENUMS__ +#define __SCOP_MATHS_ENUMS__ #include diff --git a/ScopEngine/Runtime/Includes/ScopGraphics.h b/ScopEngine/Runtime/Includes/ScopGraphics.h index 105539e..42ea7a0 100644 --- a/ScopEngine/Runtime/Includes/ScopGraphics.h +++ b/ScopEngine/Runtime/Includes/ScopGraphics.h @@ -11,5 +11,6 @@ #include #include #include +#include #endif diff --git a/ScopEngine/Runtime/Sources/Graphics/Scene.cpp b/ScopEngine/Runtime/Sources/Graphics/Scene.cpp index c5fa6af..9b02cec 100644 --- a/ScopEngine/Runtime/Sources/Graphics/Scene.cpp +++ b/ScopEngine/Runtime/Sources/Graphics/Scene.cpp @@ -35,6 +35,20 @@ namespace Scop return *actor; } + Narrator& Scene::CreateNarrator() noexcept + { + std::shared_ptr narrator = std::make_shared(); + m_narrators.push_back(narrator); + return *narrator; + } + + Narrator& Scene::CreateNarrator(std::string_view name) + { + std::shared_ptr narrator = std::make_shared(); + m_narrators.push_back(narrator); + return *narrator; + } + Sprite& Scene::CreateSprite(std::shared_ptr texture) noexcept { std::shared_ptr sprite = std::make_shared(texture); @@ -92,6 +106,7 @@ namespace Scop m_forward.matrices_set->Update(i); } m_forward.albedo_set = std::make_shared(m_descriptor.fragment_shader->GetShaderLayout().set_layouts[0].second, m_descriptor.fragment_shader->GetPipelineLayout().set_layouts[0], ShaderType::Fragment); + for(auto& child : m_scene_children) child.Init(renderer); } @@ -100,6 +115,8 @@ namespace Scop { for(auto actor : m_actors) actor->Update(this, input, timestep); + for(auto narrator : m_narrators) + narrator->Update(this, input, timestep); for(auto sprite : m_sprites) sprite->Update(this, input, timestep); if(m_descriptor.camera) @@ -112,6 +129,7 @@ namespace Scop p_skybox.reset(); m_depth.Destroy(); m_actors.clear(); + m_narrators.clear(); m_sprites.clear(); m_pipeline.Destroy(); m_descriptor.fragment_shader.reset();