Mercurial > hg > openttd
changeset 12989:6beea589ef72 draft
(svn r17483) -Fix (r17405): when an aircraft starts flying in circles make it turn in the correct direction first before continuing
author | yexo <yexo@openttd.org> |
---|---|
date | Wed, 09 Sep 2009 00:03:35 +0000 |
parents | 6e086aa128a1 |
children | 7b3e808cc2f8 |
files | src/aircraft.h src/aircraft_cmd.cpp src/saveload/vehicle_sl.cpp |
diffstat | 3 files changed, 12 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/src/aircraft.h +++ b/src/aircraft.h @@ -92,6 +92,7 @@ StationID targetairport; byte state; DirectionByte last_direction; + byte number_consecutive_turns; /** 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 @@ -1071,9 +1071,14 @@ /* Turn. Do it slowly if in the air. */ Direction newdir = GetDirectionTowards(v, x + amd->x, y + amd->y); if (newdir != v->direction) { - if (amd->flag & AMED_SLOWTURN) { + if (amd->flag & AMED_SLOWTURN && v->number_consecutive_turns < 8) { if (v->load_unload_time_rem == 0 || newdir == v->last_direction) { - v->load_unload_time_rem = 1 << (_settings_game.vehicle.plane_speed - 1); + if (newdir == v->last_direction) { + v->number_consecutive_turns = 0; + } else { + v->number_consecutive_turns++; + } + v->load_unload_time_rem = 2 * _settings_game.vehicle.plane_speed; v->last_direction = v->direction; v->direction = newdir; } @@ -1094,6 +1099,7 @@ gp.new_tile = gp.old_tile = v->tile; } } else { + v->number_consecutive_turns = 0; /* Move vehicle. */ gp = GetNewVehiclePos(v); }
--- a/src/saveload/vehicle_sl.cpp +++ b/src/saveload/vehicle_sl.cpp @@ -592,9 +592,10 @@ SLE_CONDVAR(Aircraft, previous_pos, SLE_UINT8, 2, SL_MAX_VERSION), SLE_CONDVAR(Aircraft, last_direction, SLE_UINT8, 2, SL_MAX_VERSION), + SLE_CONDVAR(Aircraft, number_consecutive_turns, SLE_UINT8, 2, SL_MAX_VERSION), - /* reserve extra space in savegame here. (currently 14 bytes) */ - SLE_CONDNULL(14, 2, SL_MAX_VERSION), + /* reserve extra space in savegame here. (currently 13 bytes) */ + SLE_CONDNULL(13, 2, SL_MAX_VERSION), SLE_END() };