From a472dc51a18ad16bd8c72337023a08251a5888a8 Mon Sep 17 00:00:00 2001 From: Jonas Gunz Date: Wed, 6 Mar 2019 21:30:57 +0100 Subject: Updated Object writing to framebuffer cObject now handles writing itself to the framebuffer with write() instead of passing the cScreen pointer to cObjectHandler --- src/cObject.cpp | 15 +++++++++++++++ src/cObject.h | 5 +++++ src/cObjectHandler.cpp | 15 ++------------- 3 files changed, 22 insertions(+), 13 deletions(-) diff --git a/src/cObject.cpp b/src/cObject.cpp index 7dc194c..217affc 100644 --- a/src/cObject.cpp +++ b/src/cObject.cpp @@ -32,6 +32,21 @@ sObject cObject::getObject() { return sObject{pos, wColor, cScreen, sizeX, sizeY}; } +void cObject::write(cRender *_render, sPos _cameraPosition) +{ + if(!bSizeSet) + return; + + for (int o = 0; o < sizeY; o++) { //y axis + for (int p = 0; p < sizeX; p++) { //x axis + if (cScreen[p][o]) { //Dont overwrite empty pixels + sPos npos{ pos.x + p - _cameraPosition.x, + pos.y + o - _cameraPosition.y }; + _render->drawPoint(cScreen[p][o], npos, true, wColor[p][o]); + } + } + } +} //protected cObject::cObject() : pos({0,0}) , bSizeSet(false){} diff --git a/src/cObject.h b/src/cObject.h index 48e41a4..08594b3 100644 --- a/src/cObject.h +++ b/src/cObject.h @@ -49,9 +49,14 @@ public: void setPosition(int _x, int _y); /** Returns sObject with framebuffer and current position + * DEPRECATED */ sObject getObject(); + /** Writes object to framebuffer with offset _cameraPosition + */ + void write(cRender *_render, sPos _cameraPosition); + /** Called by cObjecthandler if cObject is clicked */ virtual void onClick(sPos _pos, unsigned int _button){} diff --git a/src/cObjectHandler.cpp b/src/cObjectHandler.cpp index eca340b..1168b86 100644 --- a/src/cObjectHandler.cpp +++ b/src/cObjectHandler.cpp @@ -95,20 +95,9 @@ int cObjectHandler::write() for (unsigned long int i = 0; i < objects.size(); i++) { - if (objects[i]) // Check if objects[i] is existent + if (objects[i]) { - //Draw every Object - sObject obj = objects[i]->getObject(); //get Object #i - - for (int o = 0; o < obj.sizeY; o++) { //y axis - for (int p = 0; p < obj.sizeX; p++) { //x axis - if (obj.cScreen[p][o]) { //Dont overwrite empty pixels - sPos pos{ obj.pos.x + p - cameraPosition.x, - obj.pos.y + o - cameraPosition.y }; - render->drawPoint(obj.cScreen[p][o], pos, true, obj.wColor[p][o]); - } - } - } + objects[i]->write(render, cameraPosition); } } -- cgit v1.2.3