Mercurial > hg > openttd
changeset 12913:ad412abde7fc draft
(svn r17405) -Fix (r100): aircraft shouldn't be allowed to make turns bigger then 45 degrees while in flight
author | yexo <yexo@openttd.org> |
---|---|
date | Thu, 03 Sep 2009 12:11:31 +0000 |
parents | 6e3b759a3b58 |
children | 4c8c168e0b08 |
files | src/aircraft.h src/aircraft_cmd.cpp src/saveload/vehicle_sl.cpp |
diffstat | 3 files changed, 14 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/src/aircraft.h +++ b/src/aircraft.h @@ -91,6 +91,7 @@ byte previous_pos; StationID targetairport; byte state; + DirectionByte last_direction; /** We don't want GCC to zero our struct! It already is zeroed and has an index! */ Aircraft() : SpecializedVehicle<Aircraft, VEH_AIRCRAFT>() {}
--- a/src/aircraft_cmd.cpp +++ b/src/aircraft_cmd.cpp @@ -1048,6 +1048,8 @@ count = UpdateAircraftSpeed(v, speed_limit, hard_limit); if (count == 0) return false; + if (v->load_unload_time_rem != 0) v->load_unload_time_rem--; + do { GetNewVehiclePosResult gp; @@ -1069,9 +1071,15 @@ /* Turn. Do it slowly if in the air. */ Direction newdir = GetDirectionTowards(v, x + amd->x, y + amd->y); if (newdir != v->direction) { - v->direction = newdir; - if (!(amd->flag & AMED_SLOWTURN)) { + if (amd->flag & AMED_SLOWTURN) { + if (v->load_unload_time_rem == 0 || newdir == v->last_direction) { + v->load_unload_time_rem = 8; + v->last_direction = v->direction; + v->direction = newdir; + } + } else { v->cur_speed >>= 1; + v->direction = newdir; } }
--- a/src/saveload/vehicle_sl.cpp +++ b/src/saveload/vehicle_sl.cpp @@ -591,9 +591,10 @@ SLE_VAR(Aircraft, state, SLE_UINT8), SLE_CONDVAR(Aircraft, previous_pos, SLE_UINT8, 2, SL_MAX_VERSION), + SLE_CONDVAR(Aircraft, last_direction, SLE_UINT8, 2, SL_MAX_VERSION), - /* reserve extra space in savegame here. (currently 15 bytes) */ - SLE_CONDNULL(15, 2, SL_MAX_VERSION), + /* reserve extra space in savegame here. (currently 14 bytes) */ + SLE_CONDNULL(14, 2, SL_MAX_VERSION), SLE_END() };