Files
@ r24498:e9114d9ab04a
Branch filter:
Location: cpp/openttd-patchpack/source/src/ship.h - annotation
r24498:e9114d9ab04a
2.5 KiB
text/x-c
Fix #6468: don't store version of AIs-started-via-console in name
You can do: "startai myai.3", which starts version 3 of "myai".
This is very useful for testing save/load code between different
versions of your AI.
However, when using this syntax, the AI got saved as "myai.3" as
name of the AI, instead of "myai". This caused several problems,
like indicating to the user the AI could not be found, but still
load the AI. But in all cases, the AI never got the chance to
load the saved data, making the whole reason this exists pointless.
By splitting the name and version already in the console command,
the code becomes simpler and AIs started this way now follow the
normal flow after initialization.
You can do: "startai myai.3", which starts version 3 of "myai".
This is very useful for testing save/load code between different
versions of your AI.
However, when using this syntax, the AI got saved as "myai.3" as
name of the AI, instead of "myai". This caused several problems,
like indicating to the user the AI could not be found, but still
load the AI. But in all cases, the AI never got the chance to
load the saved data, making the whole reason this exists pointless.
By splitting the name and version already in the console command,
the code becomes simpler and AIs started this way now follow the
normal flow after initialization.
r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r9111:983de9c5a848 r6420:01087f989fd1 r5475:3f5cd13d1b63 r5475:3f5cd13d1b63 r5475:3f5cd13d1b63 r23178:e613ba71d020 r23178:e613ba71d020 r8144:1432edd15267 r17982:320ae85f0acc r5475:3f5cd13d1b63 r19884:a1593074c6b8 r17982:320ae85f0acc r5475:3f5cd13d1b63 r23670:17ce345f83e6 r23178:e613ba71d020 r6552:7cade7798fcb r12033:6a560c929ec8 r6552:7cade7798fcb r18730:83ef302fe140 r23671:42c0a9f112e1 r23671:42c0a9f112e1 r23671:42c0a9f112e1 r23671:42c0a9f112e1 r23671:42c0a9f112e1 r11971:ac7eb21a00e4 r12090:c20f83257241 r17128:d4dca9b2b250 r6552:7cade7798fcb r7412:e5f07529a093 r6552:7cade7798fcb r6553:04028e73a0f7 r22868:6eb08946de7f r6563:67c636a8e3d4 r6593:469af92ae569 r6773:93083dcf60ec r22459:c1921e75ce89 r10969:8b8a9653d684 r16372:76fe3abb2725 r21440:ea95dda89940 r10875:1cfbd5e0cc73 r11971:ac7eb21a00e4 r11965:2b94ac4aa35a r8467:0ea88f22d4aa r11971:ac7eb21a00e4 r8827:6ee5217ef94b r8890:02179c54681e r16372:76fe3abb2725 r23178:e613ba71d020 r6552:7cade7798fcb r6552:7cade7798fcb r23760:58e1a032cdaf r23760:58e1a032cdaf r5475:3f5cd13d1b63 | /*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file ship.h Base for ships. */
#ifndef SHIP_H
#define SHIP_H
#include <deque>
#include "vehicle_base.h"
#include "water_map.h"
void GetShipSpriteSize(EngineID engine, uint &width, uint &height, int &xoffs, int &yoffs, EngineImageType image_type);
WaterClass GetEffectiveWaterClass(TileIndex tile);
typedef std::deque<Trackdir> ShipPathCache;
/**
* All ships have this type.
*/
struct Ship FINAL : public SpecializedVehicle<Ship, VEH_SHIP> {
TrackBits state; ///< The "track" the ship is following.
ShipPathCache path; ///< Cached path.
Direction rotation; ///< Visible direction.
int16 rotation_x_pos; ///< NOSAVE: X Position before rotation.
int16 rotation_y_pos; ///< NOSAVE: Y Position before rotation.
/** We don't want GCC to zero our struct! It already is zeroed and has an index! */
Ship() : SpecializedVehicleBase() {}
/** We want to 'destruct' the right class. */
virtual ~Ship() { this->PreDestructor(); }
void MarkDirty();
void UpdateDeltaXY();
ExpensesType GetExpenseType(bool income) const { return income ? EXPENSES_SHIP_INC : EXPENSES_SHIP_RUN; }
void PlayLeaveStationSound() const;
bool IsPrimaryVehicle() const { return true; }
void GetImage(Direction direction, EngineImageType image_type, VehicleSpriteSeq *result) const;
int GetDisplaySpeed() const { return this->cur_speed / 2; }
int GetDisplayMaxSpeed() const { return this->vcache.cached_max_speed / 2; }
int GetCurrentMaxSpeed() const { return min(this->vcache.cached_max_speed, this->current_order.GetMaxSpeed() * 2); }
Money GetRunningCost() const;
bool IsInDepot() const { return this->state == TRACK_BIT_DEPOT; }
bool Tick();
void OnNewDay();
Trackdir GetVehicleTrackdir() const;
TileIndex GetOrderStationLocation(StationID station);
bool FindClosestDepot(TileIndex *location, DestinationID *destination, bool *reverse);
void UpdateCache();
void SetDestTile(TileIndex tile);
};
bool IsShipDestinationTile(TileIndex tile, StationID station);
#endif /* SHIP_H */
|