Changeset - r9211:ed60710b275b
[Not reviewed]
master
0 3 0
smatz - 16 years ago 2008-05-13 21:36:09
smatz@openttd.org
(svn r13077) -Codechange: move function that updates cached num_engines to engine.cpp, make it run only 1 loop
3 files changed with 46 insertions and 33 deletions:
0 comments (0 inline, 0 general)
src/engine.cpp
Show inline comments
 
@@ -24,12 +24,13 @@
 
#include "autoreplace_base.h"
 
#include "autoreplace_gui.h"
 
#include "string_func.h"
 
#include "settings_type.h"
 
#include "oldpool_func.h"
 
#include "core/alloc_func.hpp"
 
#include "vehicle_func.h"
 
#include "map"
 

	
 
#include "table/strings.h"
 
#include "table/engines.h"
 

	
 
DEFINE_OLD_POOL_GENERIC(Engine, Engine)
 
@@ -137,12 +138,48 @@ void EngList_SortPartial(EngineList *el,
 
{
 
	assert(begin <= (uint)el->size());
 
	assert(begin + num_items <= (uint)el->size());
 
	qsort(&((*el)[begin]), num_items, sizeof(EngineID), compare);
 
}
 

	
 
void SetCachedEngineCounts()
 
{
 
	uint engines = GetEnginePoolSize();
 

	
 
	/* Set up the engine count for all players */
 
	Player *p;
 
	FOR_ALL_PLAYERS(p) {
 
		free(p->num_engines);
 
		p->num_engines = CallocT<EngineID>(engines);
 
	}
 

	
 
	/* Recalculate */
 
	Group *g;
 
	FOR_ALL_GROUPS(g) {
 
		free(g->num_engines);
 
		g->num_engines = CallocT<EngineID>(engines);
 
	}
 

	
 
	const Vehicle *v;
 
	FOR_ALL_VEHICLES(v) {
 
		if (!IsEngineCountable(v)) continue;
 

	
 
		assert(v->engine_type < engines);
 

	
 
		GetPlayer(v->owner)->num_engines[v->engine_type]++;
 

	
 
		if (v->group_id == DEFAULT_GROUP) continue;
 

	
 
		g = GetGroup(v->group_id);
 
		assert(v->type == g->vehicle_type);
 
		assert(v->owner == g->owner);
 

	
 
		g->num_engines[v->engine_type]++;
 
	}
 
}
 

	
 
void SetupEngines()
 
{
 
	_Engine_pool.CleanPool();
 
	_Engine_pool.AddBlockToPool();
 

	
 
	for (uint i = 0; i < lengthof(_orig_rail_vehicle_info); i++) new Engine(VEH_TRAIN, i);
src/engine_func.h
Show inline comments
 
@@ -24,12 +24,13 @@ void DrawAircraftEngine(int x, int y, En
 

	
 
void LoadCustomEngineNames();
 
void DeleteCustomEngineNames();
 

	
 
bool IsEngineBuildable(EngineID engine, VehicleType type, PlayerID player);
 
CargoID GetEngineCargoType(EngineID engine);
 
void SetCachedEngineCounts();
 

	
 
typedef int CDECL EngList_SortTypeFunction(const void*, const void*); ///< argument type for EngList_Sort()
 
void EngList_Sort(EngineList *el, EngList_SortTypeFunction compare);  ///< qsort of the engine list
 
void EngList_SortPartial(EngineList *el, EngList_SortTypeFunction compare, uint begin, uint num_items); ///< qsort of specified portion of the engine list
 

	
 
#endif /* ENGINE_H */
src/openttd.cpp
Show inline comments
 
@@ -1332,48 +1332,23 @@ static bool InitializeWindowsAndCaches()
 
	/* Update coordinates of the signs. */
 
	UpdateAllStationVirtCoord();
 
	UpdateAllSignVirtCoords();
 
	UpdateAllTownVirtCoords();
 
	UpdateAllWaypointSigns();
 

	
 
	/* Recalculate */
 
	Group *g;
 
	FOR_ALL_GROUPS(g) {
 
		g->num_engines = CallocT<uint16>(GetEnginePoolSize());
 

	
 
		const Vehicle *v;
 
		FOR_ALL_VEHICLES(v) {
 
			if (!IsEngineCountable(v)) continue;
 

	
 
			if (v->group_id != g->index || v->type != g->vehicle_type || v->owner != g->owner) continue;
 

	
 
			g->num_engines[v->engine_type]++;
 
	Player *p;
 
	FOR_ALL_PLAYERS(p) {
 
		/* For each player, verify (while loading a scenario) that the inauguration date is the current year and set it
 
		 * accordingly if it is not the case.  No need to set it on players that are not been used already,
 
		 * thus the MIN_YEAR (which is really nothing more than Zero, initialized value) test */
 
		if (_file_to_saveload.filetype == FT_SCENARIO && p->inaugurated_year != MIN_YEAR) {
 
			p->inaugurated_year = _cur_year;
 
		}
 
	}
 

	
 
	/* Set up the engine count for all players */
 
	Player *players[MAX_PLAYERS];
 
	const Vehicle *v;
 

	
 
	for (PlayerID i = PLAYER_FIRST; i < MAX_PLAYERS; i++) {
 
		players[i] = GetPlayer(i);
 

	
 
		/* For each player, verify (while loading a scenario) that the inauguration date is the current year and set it
 
		 * accordingly if it is not the case.  No need to set it on players that are not been used already,
 
		 * thus the MIN_YEAR (which is really nothing more than Zero, initialized value) test */
 
		if (_file_to_saveload.filetype == FT_SCENARIO && players[i]->inaugurated_year != MIN_YEAR)
 
			players[i]->inaugurated_year = _cur_year;
 

	
 
		free(players[i]->num_engines);
 
		players[i]->num_engines = CallocT<uint16>(GetEnginePoolSize());
 
	}
 

	
 
	FOR_ALL_VEHICLES(v) {
 
		if (!IsEngineCountable(v)) continue;
 
		players[v->owner]->num_engines[v->engine_type]++;
 
	}
 
	SetCachedEngineCounts();
 

	
 
	return true;
 
}
 

	
 
bool AfterLoadGame()
 
{
0 comments (0 inline, 0 general)