From: <be...@us...> - 2017-01-23 20:58:46
|
Revision: 1014 http://sourceforge.net/p/freesynd/code/1014 Author: benblan Date: 2017-01-23 20:58:44 +0000 (Mon, 23 Jan 2017) Log Message: ----------- renamed methods around movableobject's movement Modified Paths: -------------- freesynd/trunk/NEWS freesynd/trunk/src/ia/actions.cpp freesynd/trunk/src/mapobject.h freesynd/trunk/src/menus/gameplaymenu.cpp freesynd/trunk/src/menus/maprenderer.cpp freesynd/trunk/src/model/train.cpp freesynd/trunk/src/model/train.h freesynd/trunk/src/model/vehicle.cpp freesynd/trunk/src/model/vehicle.h freesynd/trunk/src/ped.h freesynd/trunk/src/pedpathfinding.cpp Modified: freesynd/trunk/NEWS =================================================================== --- freesynd/trunk/NEWS 2017-01-23 11:03:18 UTC (rev 1013) +++ freesynd/trunk/NEWS 2017-01-23 20:58:44 UTC (rev 1014) @@ -7,11 +7,11 @@ Changes ------- - * + * German translation has been updated (thanks to Maik Wagner) Fixed Bugs ---------- - * + * In mission Siberia, train was wrongly displayed Features added ---------- Modified: freesynd/trunk/src/ia/actions.cpp =================================================================== --- freesynd/trunk/src/ia/actions.cpp 2017-01-23 11:03:18 UTC (rev 1013) +++ freesynd/trunk/src/ia/actions.cpp 2017-01-23 20:58:44 UTC (rev 1014) @@ -234,7 +234,7 @@ void WalkAction::doStart(Mission *pMission, PedInstance *pPed) { // Go to given location at given speed - if (!pPed->setDestination(pMission, destLocT_, newSpeed_)) { + if (!pPed->initMovementToDestination(pMission, destLocT_, newSpeed_)) { setFailed(); return; } @@ -250,7 +250,7 @@ * \param pPed The ped executing the action. */ bool WalkAction::doExecute(int elapsed, Mission *pMission, PedInstance *pPed) { - bool updated = pPed->movementP(pMission, elapsed); + bool updated = pPed->updatePosition(elapsed, pMission); if (!pPed->hasDestination()) { // Ped has arrived at destination setSucceeded(); @@ -408,7 +408,7 @@ updateLastTargetPos(); // If target is not too close, then initiate movement. if (!pPed->isCloseTo(pTarget_, kFollowDistance)) { - if (!pPed->setDestination(pMission, targetLastPos_)) { + if (!pPed->initMovementToDestination(pMission, targetLastPos_)) { setFailed(); } } else { @@ -434,7 +434,7 @@ pPed->clearDestination(); pPed->leaveState(targetState_); } else { - updated = pPed->movementP(pMission, elapsed); + updated = pPed->updatePosition(elapsed, pMission); } } @@ -443,7 +443,7 @@ if (!pTarget_->sameTile(targetLastPos_)) { // resetting target position updateLastTargetPos(); - if (pPed->setDestination(pMission, targetLastPos_)) { + if (pPed->initMovementToDestination(pMission, targetLastPos_)) { targetState_ = PedInstance::pa_smWalking; pPed->goToState(targetState_); } else { @@ -494,7 +494,7 @@ if (!pTarget_->isCloseTo(targetLastPosW_, 128)) { // resetting target position targetLastPosW_.convertFromTilePoint(pTarget_->position()); - if (!pPed->setDestination(pMission, pTarget_->position())) { + if (!pPed->initMovementToDestination(pMission, pTarget_->position())) { setFailed(); return true; } @@ -509,7 +509,7 @@ setSucceeded(); pPed->clearDestination(); } else { - updated = pPed->movementP(pMission, elapsed); + updated = pPed->updatePosition(elapsed, pMission); } } @@ -605,7 +605,7 @@ setFailed(); } - if (!pVehicle_->setDestination(pMission, dest_, 1024)) { + if (!pVehicle_->initMovementToDestination(pMission, dest_, 1024)) { setFailed(); } } Modified: freesynd/trunk/src/mapobject.h =================================================================== --- freesynd/trunk/src/mapobject.h 2017-01-23 11:03:18 UTC (rev 1013) +++ freesynd/trunk/src/mapobject.h 2017-01-23 20:58:44 UTC (rev 1014) @@ -522,9 +522,27 @@ speed_ = 0; } - //! Set the destination to reach at given speed - virtual bool setDestination(Mission *m, const TilePoint &locT, int newSpeed = -1) = 0; + /** + * Compute a path from the object current position to given destination using given speed. + * Subclasses must implement this method. + * \param m Mission* Mission data + * \param locT Destination for the movement + * \param newSpeed The speed at which the object will move. If speed is -1, use default speed. + * \return true if there is a path towards given destination + */ + virtual bool initMovementToDestination(Mission *m, const TilePoint &destinationPt, int newSpeed = -1) = 0; + + /** + * Update position of the object using the current path and speed. + * Subclasses must implement this method. + * \param elapsed int + * \param m Mission* Mission data + * \return True if the position has been updated. + * + */ + virtual bool updatePosition(int elapsed, Mission *m) = 0; + //! Return true if the ped is moving bool isMoving() { return speed_ != 0 || !dest_path_.empty();} //! Returns true if object currently has a destination point (ie it's arrived) Modified: freesynd/trunk/src/menus/gameplaymenu.cpp =================================================================== --- freesynd/trunk/src/menus/gameplaymenu.cpp 2017-01-23 11:03:18 UTC (rev 1013) +++ freesynd/trunk/src/menus/gameplaymenu.cpp 2017-01-23 20:58:44 UTC (rev 1014) @@ -465,7 +465,7 @@ last_time = current_time; } sprintf(tmp, "FPS : %.2f FRAMES PER SEC", fps); - gameFont()->drawText(10, g_Screen.gameScreenHeight() - 15, tmp, 14); + gameFont()->drawText(10, Screen::kScreenHeight - 15, tmp, 14); #endif } @@ -904,9 +904,9 @@ std::string str_paused = getMessage("GAME_PAUSED"); MenuFont *font_used = getMenuFont(FontManager::SIZE_1); int txt_width = font_used->textWidth(str_paused.c_str(), false); - int txt_posx = g_Screen.gameScreenWidth() / 2 - txt_width / 2; + int txt_posx = Screen::kScreenWidth / 2 - txt_width / 2; int txt_height = font_used->textHeight(false); - int txt_posy = g_Screen.gameScreenHeight() / 2 - txt_height / 2; + int txt_posy = Screen::kScreenHeight / 2 - txt_height / 2; g_Screen.drawRect(txt_posx - 10, txt_posy - 5, txt_width + 20, txt_height + 10); Modified: freesynd/trunk/src/menus/maprenderer.cpp =================================================================== --- freesynd/trunk/src/menus/maprenderer.cpp 2017-01-23 11:03:18 UTC (rev 1013) +++ freesynd/trunk/src/menus/maprenderer.cpp 2017-01-23 20:58:44 UTC (rev 1014) @@ -50,8 +50,8 @@ // - Some advert panels lack a corner TilePoint mtp = pMap_->screenToTilePoint(viewport.x, viewport.y); int sw = mtp.tx; - int chk = g_Screen.gameScreenWidth() / (TILE_WIDTH / 2) + 2 - + g_Screen.gameScreenHeight() / (TILE_HEIGHT / 3) + pMap_->maxZ() * 2; + int chk = Screen::kScreenWidth / (TILE_WIDTH / 2) + 2 + + Screen::kScreenHeight / (TILE_HEIGHT / 3) + pMap_->maxZ() * 2; int sh = mtp.ty - 8; int shm = sh + chk; @@ -60,10 +60,10 @@ listObjectsToDraw(viewport); - int cmw = viewport.x + g_Screen.gameScreenWidth() - - g_Screen.gameScreenLeftMargin() + 128; - int cmh = viewport.y + g_Screen.gameScreenHeight() + 128; - int cmx = viewport.x - g_Screen.gameScreenLeftMargin(); + int cmw = viewport.x + Screen::kScreenWidth - + Screen::kScreenPanelWidth + 128; + int cmh = viewport.y + Screen::kScreenHeight + 128; + int cmx = viewport.x - Screen::kScreenPanelWidth; // z = 0 - is minimap data and mapdata int chky = sh < 0 ? 0 : sh; int zr = shm + pMap_->maxZ() + 1; Modified: freesynd/trunk/src/model/train.cpp =================================================================== --- freesynd/trunk/src/model/train.cpp 2017-01-23 11:03:18 UTC (rev 1013) +++ freesynd/trunk/src/model/train.cpp 2017-01-23 20:58:44 UTC (rev 1014) @@ -22,7 +22,7 @@ * Moves a vehicle on the map. * \param elapsed Elapsed time sine last frame. */ -bool TrainBody::move_vehicle(int elapsed) +bool TrainBody::updatePosition(int elapsed, Mission *m) { return false; } Modified: freesynd/trunk/src/model/train.h =================================================================== --- freesynd/trunk/src/model/train.h 2017-01-23 11:03:18 UTC (rev 1013) +++ freesynd/trunk/src/model/train.h 2017-01-23 20:58:44 UTC (rev 1014) @@ -40,10 +40,10 @@ TrainBody(uint16 id, uint8 aType, VehicleAnimation *pAnimation); ~TrainBody(); - bool move_vehicle(int elapsed); + bool updatePosition(int elapsed, Mission *m); //! Set the destination to reach at given speed - bool setDestination(Mission *m, const TilePoint &locT, int newSpeed = -1) { + bool initMovementToDestination(Mission *m, const TilePoint &destinationPt, int newSpeed = -1) { return false; } }; Modified: freesynd/trunk/src/model/vehicle.cpp =================================================================== --- freesynd/trunk/src/model/vehicle.cpp 2017-01-23 11:03:18 UTC (rev 1013) +++ freesynd/trunk/src/model/vehicle.cpp 2017-01-23 20:58:44 UTC (rev 1014) @@ -30,6 +30,7 @@ #include <assert.h> #include "app.h" +#include "mission.h" #include "core/gamesession.h" #include "gfx/screen.h" #include "vehicle.h" @@ -87,7 +88,7 @@ bool updated = false; if (health_ > 0) { - updated = move_vehicle(elapsed); + updated = updatePosition(elapsed, NULL); } if (animation_->animation_type() == VehicleAnimation::kOnFireAnim) { @@ -370,21 +371,19 @@ * \param newSpeed Speed of movement * \return true if destination has been set correctly. */ -bool GenericCar::setDestination(Mission *m, const TilePoint &locT, int newSpeed) { - speed_ = newSpeed; - setDestinationV(locT.tx, locT.ty, locT.tz, locT.ox, locT.oy, newSpeed); - return !dest_path_.empty(); -} - -void GenericCar::setDestinationV(int x, int y, int z, int ox, int oy, int new_speed) -{ +bool GenericCar::initMovementToDestination(Mission *pMission, const TilePoint &destinationPt, int newSpeed) { std::map < TilePoint, uint16 > open; std::set < TilePoint > closed; std::map < TilePoint, TilePoint > parent; int basex = pos_.tx, basey = pos_.ty; std::vector < TilePoint > path2add; path2add.reserve(16); - Map *pMap = g_App.maps().map(map_); + Map *pMap = pMission->get_map(); + int x = destinationPt.tx; + int y = destinationPt.ty; + int z = destinationPt.tz; + int ox = destinationPt.ox; + int oy = destinationPt.oy; pMap->adjXYZ(x, y, z); // NOTE: we will be using lower tiles, later will restore Z coord @@ -404,7 +403,7 @@ } #endif #endif - return; + return false; } if (!pMap->isTileWalkableByCar(pos_.tx, pos_.ty, z)) { @@ -487,7 +486,7 @@ } } if(dBest == 100000) - return; + return false; } TilePoint closest; @@ -591,7 +590,7 @@ if(!dest_path_.empty()) { // Adjusting offsets for correct positioning - speed_ = new_speed; + speed_ = newSpeed; int curox = pos_.ox; int curoy = pos_.oy; for(std::list < TilePoint >::iterator it = dest_path_.begin(); @@ -659,13 +658,15 @@ dest_path_.push_front(*it); } } + + return !dest_path_.empty(); } /*! * Moves a vehicle on the map. * \param elapsed Elapsed time sine last frame. */ -bool GenericCar::move_vehicle(int elapsed) +bool GenericCar::updatePosition(int elapsed, Mission *m) { bool updated = false; int used_time = elapsed; Modified: freesynd/trunk/src/model/vehicle.h =================================================================== --- freesynd/trunk/src/model/vehicle.h 2017-01-23 11:03:18 UTC (rev 1013) +++ freesynd/trunk/src/model/vehicle.h 2017-01-23 20:58:44 UTC (rev 1014) @@ -107,8 +107,6 @@ //! Return true if vehicle is a car bool isCar() { return type_ != kVehicleTypeTrainHead && type_ != kVehicleTypeTrainBody; } - //void setType(uint8 type) { type_ = type; } - //! Adds the given ped to the list of passengers virtual void addPassenger(PedInstance *p); //! Removes the passenger from the vehicle @@ -124,8 +122,6 @@ bool containsHostilesForPed(PedInstance *p, unsigned int hostile_desc_alt); protected: - virtual bool move_vehicle(int elapsed) = 0; -protected: /*! The passengers of the vehicle.*/ std::set <PedInstance *> passengers_; /*! Animation for vehicle.*/ @@ -145,8 +141,8 @@ GenericCar(VehicleAnimation *pAnimation, uint16 id, uint8 aType, int m); virtual ~GenericCar() {} - //! Set the destination to reach at given speed (todo : replace setDestinationV()) - bool setDestination(Mission *m, const TilePoint &locT, int newSpeed = -1); + //! See ShootableMovableMapObject::initMovementToDestination() + bool initMovementToDestination(Mission *m, const TilePoint &destinationPt, int newSpeed = -1); void addDestinationV(int x, int y, int z, int ox = 128, int oy = 128, int new_speed = 160) { @@ -154,7 +150,8 @@ speed_ = new_speed; } - void setDestinationV(int x, int y, int z, int ox = 128, int oy = 128, int new_speed = 160); + //! See ShootableMovableMapObject::updatePosition() + bool updatePosition(int elapsed, Mission *m); //! Adds the given ped to the list of passengers void addPassenger(PedInstance *p); Modified: freesynd/trunk/src/ped.h =================================================================== --- freesynd/trunk/src/ped.h 2017-01-23 11:03:18 UTC (rev 1013) +++ freesynd/trunk/src/ped.h 2017-01-23 20:58:44 UTC (rev 1014) @@ -348,14 +348,12 @@ //************************************* // Movement management //************************************* - //! Set the destination to reach at given speed (todo : replace setDestinationP()) - bool setDestination(Mission *m, const TilePoint &locT, int newSpeed = -1); + //! See ShootableMovableMapObject::initMovementToDestination() + bool initMovementToDestination(Mission *m, const TilePoint &destinationPt, int newSpeed = -1); - void setDestinationP(Mission *m, int x, int y, int z, - int ox = 128, int oy = 128); + //! See ShootableMovableMapObject::updatePosition() + bool updatePosition(int elapsed, Mission *pMission); - bool movementP(Mission *m, int elapsed); - //************************************* // Weapon management //************************************* Modified: freesynd/trunk/src/pedpathfinding.cpp =================================================================== --- freesynd/trunk/src/pedpathfinding.cpp 2017-01-23 11:03:18 UTC (rev 1013) +++ freesynd/trunk/src/pedpathfinding.cpp 2017-01-23 20:58:44 UTC (rev 1014) @@ -41,22 +41,16 @@ * \param newSpeed Speed of movement * \return true if destination has been set correctly. */ -bool PedInstance::setDestination(Mission *m, const TilePoint &locT, int newSpeed) { +//bool PedInstance::setDestination(Mission *m, const TilePoint &locT, int newSpeed) { +bool PedInstance::initMovementToDestination(Mission *m, const TilePoint &destinationPt, int newSpeed) { // if no speed was set, use ped's default speed speed_ = newSpeed != -1 ? newSpeed : getDefaultSpeed(); - setDestinationP(m, locT.tx, locT.ty, locT.tz, locT.ox, locT.oy); - if (dest_path_.empty()) { - // destination was not set -> stop ped - speed_ = 0; - return false; - } else { - return true; - } -} + int x = destinationPt.tx; + int y = destinationPt.ty; + int z = destinationPt.tz; + int ox = destinationPt.ox; + int oy = destinationPt.oy; -void PedInstance::setDestinationP(Mission *m, int x, int y, int z, - int ox, int oy) -{ // NOTE: this is a "flood" algorithm, it expands until it reaches other's // flood point, then it removes unrelated points #ifdef EXECUTION_SPEED_TIME @@ -67,7 +61,7 @@ dest_path_.clear(); if (map_ == -1 || health_ <= 0) - return; + return false; floodPointDesc *targetd = &(m->mdpoints_[x + y * m->mmax_x_ + z * m->mmax_m_xy]); @@ -100,19 +94,19 @@ printf("==== unwalk target: x %i; y %i; z %i, ox %i, oy %i\n", x, y, z, ox, oy); printf("setDestinationP, Movement to nonwalkable postion\n"); - return; + return false; } if(based->t == m_fdNonWalkable) { printf("==== unwalk pos: x %i; y %i; z %i, ox %i, oy %i, oz %i\n", pos_.tx, pos_.ty, pos_.tz, pos_.ox, pos_.oy, pos_.oz); printf("setDestinationP, Movement from nonwalkable postion\n"); - return; + return false; } if (pos_.tx == x && pos_.ty == y && pos_.tz == z) { dest_path_.push_back(TilePoint(x, y, z, ox, oy)); - return; + return false; } #ifdef EXECUTION_SPEED_TIME printf("directions-map copy start %i.%i\n", SDL_GetTicks()/1000, SDL_GetTicks()%1000); @@ -900,7 +894,7 @@ printf("target reached in %i.%i\n", SDL_GetTicks()/1000, SDL_GetTicks()%1000); #endif if (!nodeset && lnknr) { - return; + return false; } if (blvl == bn.size()) blvl--; @@ -2271,6 +2265,14 @@ } } } + + if (dest_path_.empty()) { + // destination was not set -> stop ped + speed_ = 0; + return false; + } else { + return true; + } #ifdef EXECUTION_SPEED_TIME printf("smoothing time %i.%i\n", SDL_GetTicks()/1000, SDL_GetTicks()%1000); #endif @@ -2288,7 +2290,7 @@ #endif } -bool PedInstance::movementP(Mission *m, int elapsed) +bool PedInstance::updatePosition(int elapsed, Mission *pMission) { bool updated = false; int used_time = elapsed; @@ -2421,8 +2423,8 @@ } } - offzOnStairs(m->mtsurfaces_[pos_.tx + pos_.ty * m->mmax_x_ - + pos_.tz * m->mmax_m_xy].twd); + offzOnStairs(pMission->mtsurfaces_[pos_.tx + pos_.ty * pMission->mmax_x_ + + pos_.tz * pMission->mmax_m_xy].twd); } #ifdef _DEBUG if (dest_path_.empty() && speed_) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |