X-Git-Url: http://gitweb.pgornicz.com/gitweb.cgi?p=physics.git;a=blobdiff_plain;f=src%2FentityCreator.cpp;h=34b9a56be616a4c1db3039046f1535205d9a596f;hp=d24083fdf50c67afeb92dceafe432f5bace4bd55;hb=a41bba6fc95ac24bcfc802574839b0a965692079;hpb=e68f847b245153427266841ae724d602ca434c29 diff --git a/src/entityCreator.cpp b/src/entityCreator.cpp index d24083f..34b9a56 100644 --- a/src/entityCreator.cpp +++ b/src/entityCreator.cpp @@ -17,100 +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; -/// ***** Initializers/Cleaners ***** +typedef bear::Queue queBall; +typedef bear::Queue quePoly; -void creator::init() -{ - Ball* ball; +static queBall s_startBalls; +static queBall s_mouseBalls; + +static quePoly s_startPolys; - ball = new Ball(Vector2(50, 50), 20, cWhite); +/// ***** Private Method Headers ***** - ball->applyImpulse(Vector2(0.25,0.05)), - Balls.push(ball); - manager::add(ball); +static Ball* addBall(const Vector2& vecPos, + float fRadius, + const float* color, + queBall& que); - ball = new Ball(Vector2(100, 50), 20, cBlack); +static Polygon* addPoly(const vector& vecPoints, + const float* color, + quePoly& que); - ball->applyImpulse(Vector2(-0.15,-0.05)), - Balls.push(ball); - manager::add(ball); +static void removeBall(queBall& que); +static void removeAllBalls(queBall& que); - ball = new Ball(Vector2(150, 50), 20, cGrey); +static void removePoly(quePoly& que); +static void removeAllPolys(quePoly& que); - ball->applyImpulse(Vector2(0.25,0.15)), - Balls.push(ball); - manager::add(ball); +/// ***** Initializers/Cleaners ***** + +void creator::init() +{ + Ball* pBall; + float fStartMass = 5; - ball = new Ball(Vector2(50, 100), 20, cRed); + s_startBalls.init(); + s_mouseBalls.init(); - ball->applyImpulse(Vector2(0.35,-0.15)), - Balls.push(ball); - manager::add(ball); + s_startPolys.init(); - ball = new Ball(Vector2(100, 100), 20, cGreen); + pBall = addBall(Vector2(50, 50), 20, cWhite, s_startBalls); + pBall->mass = fStartMass; - ball->applyImpulse(Vector2(-0.15,0.55)), - Balls.push(ball); - manager::add(ball); + pBall = addBall(Vector2(150, 50), 20, cGrey, s_startBalls); + pBall->mass = fStartMass; - ball = new Ball(Vector2(150, 100), 20, cBlue); + pBall = addBall(Vector2(50, 100), 20, cRed, s_startBalls); + pBall->mass = fStartMass; - ball->applyImpulse(Vector2(0.25,0.15)), - Balls.push(ball); - manager::add(ball); + pBall = addBall(Vector2(100, 100), 20, cGreen, s_startBalls); + pBall->mass = fStartMass; - ball = new Ball(Vector2(50, 150), 20, cYellow); + pBall = addBall(Vector2(150, 100), 20, cBlue, s_startBalls); + pBall->mass = fStartMass; - ball->applyImpulse(Vector2(0.25,-0.05)), - Balls.push(ball); - manager::add(ball); + pBall = addBall(Vector2(50, 150), 20, cYellow, s_startBalls); + pBall->mass = fStartMass; - ball = new Ball(Vector2(100, 150), 20, cMagenta); + pBall = addBall(Vector2(100, 150), 20, cMagenta, s_startBalls); + pBall->mass = fStartMass; - ball->applyImpulse(Vector2(-0.15,-0.05)), - Balls.push(ball); - manager::add(ball); + pBall = addBall(Vector2(150, 150), 20, cCyan, s_startBalls); + pBall->mass = fStartMass; - ball = new Ball(Vector2(150, 150), 20, cCyan); - ball->applyImpulse(Vector2(-0.15,0.05)), - Balls.push(ball); - manager::add(ball); + 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() +void creator::addBall(const Vector2& pos, float radius, const float* color) { - //TODO + addBall(pos, radius, color, s_mouseBalls); } void creator::removeBall() { - //TODO + removeBall(s_mouseBalls); } void creator::removeAllBalls() { - while(! Balls.empty() ) + removeAllBalls(s_mouseBalls); +} + +void creator::handleInput() +{ + if(input::mouseLeft()) + addBall(input::mousePosition(), 10, cCyan); + + if(input::mouseRight() && ! s_mouseBalls.isEmpty()) + removeBall(); +} + +/// ***** Private Methods ***** + +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) +{ + 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); + } +} - 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); } }