X-Git-Url: http://gitweb.pgornicz.com/gitweb.cgi?a=blobdiff_plain;f=src%2FentityCreator.cpp;h=28d6979f182830b692a2b449d6a8e4ef616b5144;hb=598fa0d50dedfcb47a8d88144ce9e37583aec23d;hp=aa5db0ef5dbe3e7cb44b7b5ea6900fc106c1cdb1;hpb=f72f4a59026b8daa160908170f366c843aca5bb9;p=physics.git diff --git a/src/entityCreator.cpp b/src/entityCreator.cpp index aa5db0e..28d6979 100644 --- a/src/entityCreator.cpp +++ b/src/entityCreator.cpp @@ -1,87 +1,144 @@ +/* + * Copyright (C) 2008 Patrik Gornicz, Gornicz_P (at) hotmail (dot) com. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + #include "entityCreator.h" #include #include "entityManager.h" +#include "input/inputManager.h" + #include "Entities/Ball.h" #include "graphics/colors.h" -/// ***** Private Method Headers ***** -typedef std::queue queBall; -queBall Balls; /// ***** Private Variables ***** -/// ***** Public Methods ***** -void creator::init() -{ - Ball* ball; - - // needs to be first for the overlap - ball = new Ball(Vector2(50, 50), 20, cWhite); +typedef std::queue queBall; - Balls.push(ball); - manager::add(ball); +queBall startBalls; +queBall mouseBalls; - ball = new Ball(Vector2(100, 50), 20, cBlack); +/// ***** Private Method Headers ***** - Balls.push(ball); - manager::add(ball); +Ball* addBall(const Vector2& pos, + float radius, + const float* color, + queBall& que); - ball = new Ball(Vector2(150, 50), 20, cGrey); +void removeBall(queBall& que); +void removeAllBalls(queBall& que); - Balls.push(ball); - manager::add(ball); +/// ***** Initializers/Cleaners ***** - ball = new Ball(Vector2(50, 100), 20, cRed); +void creator::init() +{ + Ball* ball; + float startMass = 5; - Balls.push(ball); - manager::add(ball); + ball = addBall(Vector2(50, 50), 20, cWhite, startBalls); + ball->mass = startMass; - ball = new Ball(Vector2(100, 100), 20, cGreen); + ball = addBall(Vector2(150, 50), 20, cGrey, startBalls); + ball->mass = startMass; - Balls.push(ball); - manager::add(ball); + ball = addBall(Vector2(50, 100), 20, cRed, startBalls); + ball->mass = startMass; - ball = new Ball(Vector2(150, 100), 20, cBlue); + ball = addBall(Vector2(100, 100), 20, cGreen, startBalls); + ball->mass = startMass; - Balls.push(ball); - manager::add(ball); + ball = addBall(Vector2(150, 100), 20, cBlue, startBalls); + ball->mass = startMass; - ball = new Ball(Vector2(50, 150), 20, cYellow); + ball = addBall(Vector2(50, 150), 20, cYellow, startBalls); + ball->mass = startMass; - Balls.push(ball); - manager::add(ball); + ball = addBall(Vector2(100, 150), 20, cMagenta, startBalls); + ball->mass = startMass; - ball = new Ball(Vector2(100, 150), 20, cMagenta); + ball = addBall(Vector2(150, 150), 20, cCyan, startBalls); + ball->mass = startMass; - Balls.push(ball); - manager::add(ball); + for( int i = 0; i<100; i++) + { + addBall(Vector2(200+i*2, 200+i*2), 10, cCyan); + } +} +void creator::clean() +{ + removeAllBalls(startBalls); + removeAllBalls(mouseBalls); +} - ball = new Ball(Vector2(150, 150), 20, cCyan); +/// ***** Public Methods ***** - Balls.push(ball); - manager::add(ball); +void creator::addBall(const Vector2& pos, float radius, const float* color) +{ + addBall(pos, radius, color, mouseBalls); } -void creator::clean() +void creator::removeBall() +{ + removeBall(mouseBalls); +} +void creator::removeAllBalls() { - removeAllBalls(); + removeAllBalls(mouseBalls); } -void creator::addBall() +void creator::handleInput() { + if(input::mouseLeft()) + addBall(input::mousePosition(), 10, cCyan); + if(input::mouseRight() && ! mouseBalls.empty()) + removeBall(); } -void creator::removeBall() + +/// ***** Private Methods ***** + +Ball* addBall(const Vector2& pos, + float radius, + const float* color, + queBall& que) { + Ball* ball = new Ball(pos, radius, color); + que.push(ball); + manager::add(ball); + + return ball; } -void creator::removeAllBalls() + +void removeBall(queBall& que) +{ + Ball* ball = que.front(); + + manager::remove(ball); + que.pop(); + + delete ball; +} +void removeAllBalls(queBall& que) { - while(! Balls.empty() ) + while(! que.empty() ) { - Ball* ball = Balls.front(); - Balls.pop(); + Ball* ball = que.front(); + que.pop(); manager::remove(ball); delete ball;