From: Trent W. <qua...@us...> - 2006-09-26 07:53:43
|
Update of /cvsroot/freesynd/freesynd In directory sc8-pr-cvs5.sourceforge.net:/tmp/cvs-serv9986 Modified Files: gameplaymenu.cpp mission.cpp mission.h ped.cpp ped.h Log Message: Performance increase. Index: mission.cpp =================================================================== RCS file: /cvsroot/freesynd/freesynd/mission.cpp,v retrieving revision 1.10 retrieving revision 1.11 diff -u -d -r1.10 -r1.11 --- mission.cpp 26 Sep 2006 06:43:18 -0000 1.10 +++ mission.cpp 26 Sep 2006 07:53:41 -0000 1.11 @@ -179,6 +179,16 @@ void Mission::drawMap(int scrollx, int scrolly) { + fast_vehicle_cache_.clear(); + for (unsigned int i = 0; i < vehicles_.size(); i++) + for (int j = 0; j < vehicles_[i]->numParts(); j++) + fast_vehicle_cache_.insert(vehicles_[i]->tileX(j) | (vehicles_[i]->tileY(j) << 8) | (vehicles_[i]->tileZ(j) << 16)); + fast_ped_cache_.clear(); + for (unsigned int i = 0; i < 4; i++) + if (g_App.teamMember(i)->isActive()) + fast_ped_cache_.insert(peds_[i]->tileX() | (peds_[i]->tileY() << 8) | (peds_[i]->tileZ() << 16)); + for (unsigned int i = 8; i < peds_.size(); i++) + fast_ped_cache_.insert(peds_[i]->tileX() | (peds_[i]->tileY() << 8) | (peds_[i]->tileZ() << 16)); g_App.maps().drawMap(map_, scrollx, scrolly, this); } @@ -186,21 +196,26 @@ { // TODO: lots of other level data needs to be drawn - // draw cars - for (unsigned int i = 0; i < vehicles_.size(); i++) - for (int j = 0; j < vehicles_[i]->numParts(); j++) - if (vehicles_[i]->tileX(j) == tilex && vehicles_[i]->tileY(j) == tiley && vehicles_[i]->tileZ(j) == tilez) - vehicles_[i]->draw(x, y, j); + int key = tilex | (tiley << 8) | (tilez << 16); + if (fast_vehicle_cache_.find(key) != fast_vehicle_cache_.end()) { + // draw vehicles + for (unsigned int i = 0; i < vehicles_.size(); i++) + for (int j = 0; j < vehicles_[i]->numParts(); j++) + if (vehicles_[i]->tileX(j) == tilex && vehicles_[i]->tileY(j) == tiley && vehicles_[i]->tileZ(j) == tilez) + vehicles_[i]->draw(x, y, j); + } - // draw agents - for (unsigned int i = 0; i < 4; i++) - if (g_App.teamMember(i)->isActive()) - if (peds_[i]->tileX() == tilex && peds_[i]->tileY() == tiley && peds_[i]->tileZ() == tilez) - peds_[i]->draw(x, y); + if (fast_ped_cache_.find(key) != fast_ped_cache_.end()) { + // draw agents + for (unsigned int i = 0; i < 4; i++) + if (g_App.teamMember(i)->isActive()) + if (peds_[i]->tileX() == tilex && peds_[i]->tileY() == tiley && peds_[i]->tileZ() == tilez) + peds_[i]->draw(x, y); - // draw peds - for (unsigned int i = 8; i < peds_.size(); i++) - if (peds_[i]->tileX() == tilex && peds_[i]->tileY() == tiley && peds_[i]->tileZ() == tilez) - peds_[i]->draw(x, y); + // draw peds + for (unsigned int i = 8; i < peds_.size(); i++) + if (peds_[i]->tileX() == tilex && peds_[i]->tileY() == tiley && peds_[i]->tileZ() == tilez) + peds_[i]->draw(x, y); + } } Index: gameplaymenu.cpp =================================================================== RCS file: /cvsroot/freesynd/freesynd/gameplaymenu.cpp,v retrieving revision 1.17 retrieving revision 1.18 diff -u -d -r1.17 -r1.18 --- gameplaymenu.cpp 26 Sep 2006 05:21:06 -0000 1.17 +++ gameplaymenu.cpp 26 Sep 2006 07:53:41 -0000 1.18 @@ -29,12 +29,16 @@ #include "file.h" #include "loadingmenu.h" #include "gameplaymenu.h" +#ifdef _WIN32 +#include <windows.h> +#endif GameplayMenu::GameplayMenu(MenuManager *m, LoadingMenu *loading) : Menu(m, "Gameplay", "", "mscrenup.dat"), loading_(loading), tick_count_(0), last_animate_tick_(0), last_motion_tick_(0), last_motion_x_(320), last_motion_y_(240), mission_(0), scroll_x_(0), scroll_y_(0), selected_agent_(1) { setParentMenu("debrief"); } int inc = 16; +bool stuck_on = false; void GameplayMenu::handleTick() { @@ -59,7 +63,7 @@ change = true; } } - if (last_motion_x_ > 620) { + if (last_motion_x_ > 620 || stuck_on) { int newScrollX = scroll_x_ + inc; if (newScrollX > mission_->mapWidth() - 640) newScrollX = mission_->mapWidth() - 640; @@ -82,12 +86,12 @@ if (tick_count_ - last_animate_tick_ > 50) { last_animate_tick_ = tick_count_; for (int i = 0; i < mission_->numPeds(); i++) - mission_->ped(i)->animate(); - change = true; + change |= mission_->ped(i)->animate(); } - if (change) + if (change) { show(false); + } } bool GameplayMenu::isScrollLegal(int newScrollX, int newScrollY) @@ -277,6 +281,9 @@ if (key == KEY_SPACE) printf("dir %i speed %i\n", mission_->ped(0)->direction(), mission_->ped(0)->speed()); + if (key == KEY_s) + stuck_on = true; + show(false); } Index: ped.cpp =================================================================== RCS file: /cvsroot/freesynd/freesynd/ped.cpp,v retrieving revision 1.14 retrieving revision 1.15 diff -u -d -r1.14 -r1.15 --- ped.cpp 26 Sep 2006 06:43:18 -0000 1.14 +++ ped.cpp 26 Sep 2006 07:53:41 -0000 1.15 @@ -84,7 +84,7 @@ g_App.gameSprites().drawSpriteXYZ(head_ + dir, x + 2 + bX + chX, y + bY + cbY, bZ, flipped); } -void PedInstance::animate() +bool PedInstance::animate() { if (speed_) { if (++frame_ >= NUM_FRAMES) @@ -123,7 +123,9 @@ while (off_x_ >= 256) { off_x_ -= 256; tile_x_++; } while (off_y_ < 0) { off_y_ += 256; tile_y_--; } while (off_y_ >= 256) { off_y_ -= 256; tile_y_++; } + return true; } + return false; } void PedInstance::setDirection(int dir) Index: ped.h =================================================================== RCS file: /cvsroot/freesynd/freesynd/ped.h,v retrieving revision 1.11 retrieving revision 1.12 diff -u -d -r1.11 -r1.12 --- ped.h 26 Sep 2006 05:21:06 -0000 1.11 +++ ped.h 26 Sep 2006 07:53:41 -0000 1.12 @@ -135,7 +135,7 @@ void kill(); void turnClockwise(); void turnAnticlockwise(); - void animate(); + bool animate(); protected: Ped *ped_; Index: mission.h =================================================================== RCS file: /cvsroot/freesynd/freesynd/mission.h,v retrieving revision 1.9 retrieving revision 1.10 diff -u -d -r1.9 -r1.10 --- mission.h 26 Sep 2006 05:21:06 -0000 1.9 +++ mission.h 26 Sep 2006 07:53:41 -0000 1.10 @@ -30,6 +30,7 @@ #include "common.h" #include <string> #include <vector> +#include <set> class VehicleInstance; class PedInstance; @@ -183,6 +184,8 @@ std::string briefing_; int map_, min_x_, min_y_, max_x_, max_y_; int objective_; + + std::set<int> fast_vehicle_cache_, fast_ped_cache_; }; |