X-Git-Url: http://gitweb.pgornicz.com/gitweb.cgi?p=physics.git;a=blobdiff_plain;f=src%2FentityCreator.cpp;h=34b9a56be616a4c1db3039046f1535205d9a596f;hp=eddfb3d56338f526182fdc15445e6cc4e3a4998c;hb=a41bba6fc95ac24bcfc802574839b0a965692079;hpb=88e62c4ff5f422b930c38ab643121e5f8607d889 diff --git a/src/entityCreator.cpp b/src/entityCreator.cpp index eddfb3d..34b9a56 100644 --- a/src/entityCreator.cpp +++ b/src/entityCreator.cpp @@ -17,60 +17,187 @@ #include "entityCreator.h" -#include +#include #include "entityManager.h" +#include "input/inputManager.h" + #include "Entities/Ball.h" +#include "Entities/Polygon.h" #include "graphics/colors.h" + /// ***** Private Variables ***** -typedef std::queue queBall; -queBall Balls; +//static bear::Queue s_test; + +typedef bear::Queue queBall; +typedef bear::Queue quePoly; + +static queBall s_startBalls; +static queBall s_mouseBalls; + +static quePoly s_startPolys; + +/// ***** Private Method Headers ***** + +static Ball* addBall(const Vector2& vecPos, + float fRadius, + const float* color, + 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() { - addBall(Vector2(50, 50), 20, cWhite); - addBall(Vector2(150, 50), 20, cGrey); - addBall(Vector2(50, 100), 20, cRed); - addBall(Vector2(100, 100), 20, cGreen); - addBall(Vector2(150, 100), 20, cBlue); - addBall(Vector2(50, 150), 20, cYellow); - addBall(Vector2(100, 150), 20, cMagenta); - addBall(Vector2(150, 150), 20, cCyan); + Ball* pBall; + float fStartMass = 5; + + s_startBalls.init(); + s_mouseBalls.init(); + + s_startPolys.init(); + + pBall = addBall(Vector2(50, 50), 20, cWhite, s_startBalls); + pBall->mass = fStartMass; + + pBall = addBall(Vector2(150, 50), 20, cGrey, s_startBalls); + pBall->mass = fStartMass; + + pBall = addBall(Vector2(50, 100), 20, cRed, s_startBalls); + pBall->mass = fStartMass; + + pBall = addBall(Vector2(100, 100), 20, cGreen, s_startBalls); + pBall->mass = fStartMass; + + pBall = addBall(Vector2(150, 100), 20, cBlue, s_startBalls); + pBall->mass = fStartMass; + + pBall = addBall(Vector2(50, 150), 20, cYellow, s_startBalls); + pBall->mass = fStartMass; + + pBall = addBall(Vector2(100, 150), 20, cMagenta, s_startBalls); + pBall->mass = fStartMass; + + 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); + } + + + vector points; + points.push_back(Vector2(500,500)); + points.push_back(Vector2(300,500)); + points.push_back(Vector2(500,300)); + + addPoly(points, cRed, s_startPolys); } void creator::clean() { - removeAllBalls(); + 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) { - Ball* ball = new Ball(pos, radius, color); - - Balls.push(ball); - manager::add(ball); + addBall(pos, radius, color, s_mouseBalls); } void creator::removeBall() { - Ball* ball = Balls.front(); + removeBall(s_mouseBalls); +} +void creator::removeAllBalls() +{ + removeAllBalls(s_mouseBalls); +} - Balls.pop(); +void creator::handleInput() +{ + if(input::mouseLeft()) + addBall(input::mousePosition(), 10, cCyan); - delete ball; + if(input::mouseRight() && ! s_mouseBalls.isEmpty()) + removeBall(); } -void creator::removeAllBalls() + +/// ***** Private Methods ***** + +Ball* addBall(const Vector2& vecPos, + float fRadius, + const float* color, + queBall& que) { - while(! Balls.empty() ) + 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) +{ + Polygon* pPoly = new Polygon(vecPoints, color); + + que.pushBack(pPoly); + manager::add(pPoly); + + return pPoly; +} + +void removeBall(queBall& que) +{ + Ball* pBall = que.getFront(); + + manager::remove(pBall); + que.popFront(); + + delete pBall; +} +void removeAllBalls(queBall& que) +{ + while(! que.isEmpty() ) { - Ball* ball = Balls.front(); - Balls.pop(); - manager::remove(ball); + removeBall(que); + } +} + +static void removePoly(quePoly& que) +{ + Polygon* pPoly = que.getFront(); + + manager::remove(pPoly); + que.popFront(); - delete ball; + delete pPoly; +} +static void removeAllPolys(quePoly& que) +{ + while(! que.isEmpty() ) + { + removePoly(que); } }