From a54f49d188fda3b4e4d8473c6b952aede15f92f6 Mon Sep 17 00:00:00 2001 From: Rendo Date: Tue, 10 Mar 2026 23:59:39 +0500 Subject: [PATCH] World implementation --- src/components.h | 5 ++++- src/world.cpp | 55 ++++++++++++++++++++++++++++++++++++++++++++++++ src/world.h | 6 ++++-- 3 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 src/world.cpp diff --git a/src/components.h b/src/components.h index 141e8f0..167b6ea 100644 --- a/src/components.h +++ b/src/components.h @@ -4,7 +4,10 @@ #include #include -class Entity{}; +class Entity{ + public: + virtual ~Entity(){} +}; class IProcessable { public: diff --git a/src/world.cpp b/src/world.cpp new file mode 100644 index 0000000..325ff9a --- /dev/null +++ b/src/world.cpp @@ -0,0 +1,55 @@ +#include "world.h" +#include "components.h" + +World::World(){ + this->entities = new Entity[World::GRID_SIZE]; +} + +World::~World(){ + delete [] this->entities; + delete [] this->processables; + delete [] this->drawables; + } + +void World::setup(){ + this->processables_count = 0; + this->drawables_count = 0; + + IProcessable* temp_processables[World::GRID_SIZE]; + IDrawable* temp_drawables[World::GRID_SIZE]; + + for(int i = 0; i < World::GRID_SIZE; i++) { + // Get all processables and drawables as pointers to store later. + IProcessable* processable = dynamic_cast(&this->entities[i]); + IDrawable* drawable = dynamic_cast(&this->entities[i]); + + if (processable != nullptr) { + temp_processables[this->processables_count] = processable; + this->processables_count++; + } + if (drawable != nullptr) { + temp_drawables[this->drawables_count] = drawable; + this->drawables_count++; + } + } + + // Store processables and drawables + this->processables = new IProcessable*[this->processables_count]; + this->drawables = new IDrawable*[this->drawables_count]; + + for(int i = 0; i < this->processables_count; i++) + this->processables[i] = temp_processables[i]; + for(int i = 0; i < this->drawables_count; i++) + this->drawables[i] = temp_drawables[i]; + + // Call ready on all readibles + for(int i = 0; i < World::GRID_SIZE; i++) + { + IReadible* readible = dynamic_cast(&this->entities[i]); + if (readible != nullptr) + readible->ready(); + } + +} + + diff --git a/src/world.h b/src/world.h index 056d890..dc0633d 100644 --- a/src/world.h +++ b/src/world.h @@ -21,8 +21,10 @@ class World { /// Calls draw() on every drawable private: - IProcessable* processables; - IDrawable* drawables; + int processables_count; + IProcessable** processables; + int drawables_count; + IDrawable** drawables; }; static World world; /// World singleton