X-Git-Url: http://gitweb.pgornicz.com/gitweb.cgi?p=physics.git;a=blobdiff_plain;f=src%2FentityCreator.cpp;h=34b9a56be616a4c1db3039046f1535205d9a596f;hp=191d3960ab350bc7e60809179c18835a6aa75c23;hb=a41bba6fc95ac24bcfc802574839b0a965692079;hpb=30a93c3992f0e1fc44193dde6d53216d3ae4f4e9 diff --git a/src/entityCreator.cpp b/src/entityCreator.cpp index 191d396..34b9a56 100644 --- a/src/entityCreator.cpp +++ b/src/entityCreator.cpp @@ -17,7 +17,7 @@ #include "entityCreator.h" -#include +#include #include "entityManager.h" #include "input/inputManager.h" @@ -29,85 +29,108 @@ /// ***** Private Variables ***** -typedef std::queue queBall; +//static bear::Queue s_test; -queBall startBalls; -queBall mouseBalls; +typedef bear::Queue queBall; +typedef bear::Queue quePoly; + +static queBall s_startBalls; +static queBall s_mouseBalls; + +static quePoly s_startPolys; /// ***** Private Method Headers ***** -Ball* addBall(const Vector2& pos, - float radius, - const float* color, - queBall& que); +static Ball* addBall(const Vector2& vecPos, + float fRadius, + const float* color, + queBall& que); -void removeBall(queBall& que); -void removeAllBalls(queBall& que); +static Polygon* addPoly(const vector& vecPoints, + const float* color, + quePoly& que); + +static void removeBall(queBall& que); +static void removeAllBalls(queBall& que); + +static void removePoly(quePoly& que); +static void removeAllPolys(quePoly& que); /// ***** Initializers/Cleaners ***** void creator::init() { - Ball* ball; - float startMass = 5; + Ball* pBall; + float fStartMass = 5; + + s_startBalls.init(); + s_mouseBalls.init(); - ball = addBall(Vector2(50, 50), 20, cWhite, startBalls); - ball->mass = startMass; + s_startPolys.init(); - ball = addBall(Vector2(150, 50), 20, cGrey, startBalls); - ball->mass = startMass; + pBall = addBall(Vector2(50, 50), 20, cWhite, s_startBalls); + pBall->mass = fStartMass; - ball = addBall(Vector2(50, 100), 20, cRed, startBalls); - ball->mass = startMass; + pBall = addBall(Vector2(150, 50), 20, cGrey, s_startBalls); + pBall->mass = fStartMass; - ball = addBall(Vector2(100, 100), 20, cGreen, startBalls); - ball->mass = startMass; + pBall = addBall(Vector2(50, 100), 20, cRed, s_startBalls); + pBall->mass = fStartMass; - ball = addBall(Vector2(150, 100), 20, cBlue, startBalls); - ball->mass = startMass; + pBall = addBall(Vector2(100, 100), 20, cGreen, s_startBalls); + pBall->mass = fStartMass; - ball = addBall(Vector2(50, 150), 20, cYellow, startBalls); - ball->mass = startMass; + pBall = addBall(Vector2(150, 100), 20, cBlue, s_startBalls); + pBall->mass = fStartMass; - ball = addBall(Vector2(100, 150), 20, cMagenta, startBalls); - ball->mass = startMass; + pBall = addBall(Vector2(50, 150), 20, cYellow, s_startBalls); + pBall->mass = fStartMass; - ball = addBall(Vector2(150, 150), 20, cCyan, startBalls); - ball->mass = startMass; + pBall = addBall(Vector2(100, 150), 20, cMagenta, s_startBalls); + pBall->mass = fStartMass; - for( int i = 0; i<50; i++) + pBall = addBall(Vector2(150, 150), 20, cCyan, s_startBalls); + pBall->mass = fStartMass; + + + for( int i = 0; i < 50; i++) { - addBall(Vector2(200+i*2, 200+i*2), 10, cCyan); + addBall(Vector2(200 + i * 2, 200 + i * 2), 10, cCyan); } - // HACK - // add a polygon into the mix (currently not cleaned up) + vector points; points.push_back(Vector2(500,500)); points.push_back(Vector2(300,500)); points.push_back(Vector2(500,300)); - manager::add(new Polygon(points, cRed)); + addPoly(points, cRed, s_startPolys); } void creator::clean() { - removeAllBalls(startBalls); - removeAllBalls(mouseBalls); + removeAllPolys(s_startPolys); + s_startPolys.fini(); + + removeAllBalls(s_mouseBalls); + s_mouseBalls.fini(); + + removeAllBalls(s_startBalls); + s_startBalls.fini(); } /// ***** Public Methods ***** void creator::addBall(const Vector2& pos, float radius, const float* color) { - addBall(pos, radius, color, mouseBalls); + addBall(pos, radius, color, s_mouseBalls); } void creator::removeBall() { - removeBall(mouseBalls); + removeBall(s_mouseBalls); } void creator::removeAllBalls() { - removeAllBalls(mouseBalls); + removeAllBalls(s_mouseBalls); } void creator::handleInput() @@ -115,42 +138,66 @@ void creator::handleInput() if(input::mouseLeft()) addBall(input::mousePosition(), 10, cCyan); - if(input::mouseRight() && ! mouseBalls.empty()) + if(input::mouseRight() && ! s_mouseBalls.isEmpty()) removeBall(); } /// ***** Private Methods ***** -Ball* addBall(const Vector2& pos, - float radius, - const float* color, - queBall& que) +Ball* addBall(const Vector2& vecPos, + float fRadius, + const float* color, + queBall& que) +{ + Ball* pBall = new Ball(vecPos, fRadius, color); + + que.pushBack(pBall); + manager::add(pBall); + + return pBall; +} +Polygon* addPoly(const vector& vecPoints, + const float* color, + quePoly& que) { - Ball* ball = new Ball(pos, radius, color); + Polygon* pPoly = new Polygon(vecPoints, color); - que.push(ball); - manager::add(ball); + que.pushBack(pPoly); + manager::add(pPoly); - return ball; + return pPoly; } void removeBall(queBall& que) { - Ball* ball = que.front(); + Ball* pBall = que.getFront(); - manager::remove(ball); - que.pop(); + manager::remove(pBall); + que.popFront(); - delete ball; + delete pBall; } void removeAllBalls(queBall& que) { - while(! que.empty() ) + while(! que.isEmpty() ) { - Ball* ball = que.front(); - que.pop(); - manager::remove(ball); + removeBall(que); + } +} - delete ball; +static void removePoly(quePoly& que) +{ + Polygon* pPoly = que.getFront(); + + manager::remove(pPoly); + que.popFront(); + + delete pPoly; +} +static void removeAllPolys(quePoly& que) +{ + while(! que.isEmpty() ) + { + removePoly(que); } }