diff options
author | iamn1ck <iamn1ck@yahoo.com> | 2017-02-19 07:00:34 -0600 |
---|---|---|
committer | Tom Barrett <tombarrett@siu.edu> | 2017-03-07 13:22:46 -0600 |
commit | 74c6854fd8dcbaee736ac0421805ff1e03c4a1e2 (patch) | |
tree | 4a3ae40bea9b07a2111128e98d9272bdbac2af87 /src/list.cpp | |
parent | 03885192b9ff7d3c5e2dcfd98aefd21e9b62f603 (diff) |
-quadtree and opengl rendering are now in the master branch !
-using sdl_rect for location and size ended up being not so great due to it not having floats, so we reverted back to using location
-much, much refractoring is now needed
Diffstat (limited to 'src/list.cpp')
-rw-r--r-- | src/list.cpp | 78 |
1 files changed, 42 insertions, 36 deletions
diff --git a/src/list.cpp b/src/list.cpp index afe51a3..fab5813 100644 --- a/src/list.cpp +++ b/src/list.cpp @@ -1,30 +1,33 @@ #include "list.hpp" -List::List(Window m) +List::List() { - main = m; + int i; + Dna defaultDNA; + //SDL_Rect rect = {0,0,defaultDNA.sizeMax/5,defaultDNA.sizeMax/5}; + Location tmp; + tmp.x = tmp.y = 0; + for(i=0;i<CREATURES;i++){ + Creature X(tmp,defaultDNA); + C.push_back(X); + } - int i; - Dna defaultDNA; - SDL_Rect Rect = {0,0,defaultDNA.sizeMax/5,defaultDNA.sizeMax/5}; - for(i=0;i<CREATURES;i++){ - Creature X(main,Rect,defaultDNA); - C.push_back(X); - } + //rect = {0,0,RESOURCE_SIZE_START,RESOURCE_SIZE_START}; + for(i=0;i<RESOURCES;i++){ + Resource Y(tmp); + R.push_back(Y); + } - Rect = {0,0,RESOURCE_SIZE_START,RESOURCE_SIZE_START}; - for(i=0;i<RESOURCES;i++){ - Resource Y(main,Rect); - R.push_back(Y); - } + R1 = Rectangle(0,0,60,60); + tree = Quadtree(0,R1); } void List::Remove() { for(std::list<Creature>::iterator it = C.begin(); it!=C.end(); it++) if(it->getHealth()<=0){ - SDL_Rect Rect = it->getRect(); - Resource r = Resource(main,Rect); + Location tmp = it->getLocation(); + Resource r = Resource(tmp); R.push_back(r); C.erase(it--); } @@ -37,15 +40,14 @@ void List::Remove() void List::Behavior() { for(std::list<Creature>::iterator it = C.begin(); it!=C.end(); it++){ - std::vector<Entity*> N = getNear(*it); + std::list<Entity*> N = getNear(*it); it->giveN(N); it->Behavior(); if(it->getPregnancyReady()){ Dna D = it->getChildDNA(); - SDL_Rect rect = it->getRect(); - rect.h = rect.w = D.sizeMax / 5; - Creature X(main,rect,D); + Location tmp = it->getLocation(); + Creature X(tmp,D); C.push_back(X); it->hadPregnancy(); } @@ -57,34 +59,38 @@ void List::Behavior() void List::Place() { - SDL_Rect rect = {0,0,RESOURCE_SIZE_START,RESOURCE_SIZE_START}; + tree.clear(); + + Location tmp; + tmp.x = tmp.y = 0; while(R.size() < MINIMUM_RESOURCES){ - Resource Y(main,rect); + Resource Y(tmp); R.push_back(Y); } - for(std::list<Creature>::iterator it = C.begin(); it!=C.end(); it++) + for(std::list<Creature>::iterator it = C.begin(); it!=C.end(); it++){ it->Place(); + tree.insert(&(*it));; + } - for(std::list<Resource>::iterator it = R.begin(); it!=R.end(); it++) + for(std::list<Resource>::iterator it = R.begin(); it!=R.end(); it++){ it->Place(); + tree.insert(&(*it));; + } } -std::vector<Entity*> List::getNear(Creature nC) +std::list<Entity*> List::getNear(Creature nC) { - std::vector<Entity*> N; - - for(std::list<Resource>::iterator it = R.begin(); it!=R.end(); it++) - if(nC.getBestSense() > Distance(nC.getRect(),it->getRect())) - N.push_back(&(*it)); - - for(std::list<Creature>::iterator it = C.begin(); it!=C.end(); it++) - if(&nC == &(*it)) - continue; - else if(nC.getBestSense() > Distance(nC.getRect(),it->getRect())) - N.push_back(&(*it)); + std::list<Entity*> N; + N.clear(); + N = tree.retrieve(N, nC.getGFXD()); + //std::vector<Entity*> x{std::begin(N),std::begin(N)}; return N; } +std::vector<GraphicsData> List::drawQuadTree(){ + return tree.Draw(); +} + |