engine_gui.c
changeset 1998 849933cfa8de
parent 1926 68d60188a22f
child 2084 d67790a49f78
equal deleted inserted replaced
1997:91085465f12b 1998:849933cfa8de
    47 typedef struct DrawEngineInfo {
    47 typedef struct DrawEngineInfo {
    48 	DrawEngineProc *engine_proc;
    48 	DrawEngineProc *engine_proc;
    49 	DrawEngineInfoProc *info_proc;
    49 	DrawEngineInfoProc *info_proc;
    50 } DrawEngineInfo;
    50 } DrawEngineInfo;
    51 
    51 
       
    52 static void DrawTrainEngineInfo(int engine, int x, int y, int maxw);
       
    53 static void DrawRoadVehEngineInfo(int engine, int x, int y, int maxw);
       
    54 static void DrawShipEngineInfo(int engine, int x, int y, int maxw);
       
    55 static void DrawAircraftEngineInfo(int engine, int x, int y, int maxw);
       
    56 
    52 static const DrawEngineInfo _draw_engine_list[4] = {
    57 static const DrawEngineInfo _draw_engine_list[4] = {
    53 	{DrawTrainEngine,DrawTrainEngineInfo},
    58 	{DrawTrainEngine,DrawTrainEngineInfo},
    54 	{DrawRoadVehEngine,DrawRoadVehEngineInfo},
    59 	{DrawRoadVehEngine,DrawRoadVehEngineInfo},
    55 	{DrawShipEngine,DrawShipEngineInfo},
    60 	{DrawShipEngine,DrawShipEngineInfo},
    56 	{DrawAircraftEngine,DrawAircraftEngineInfo},
    61 	{DrawAircraftEngine,DrawAircraftEngineInfo},
   111 
   116 
   112 	w = AllocateWindowDesc(&_engine_preview_desc);
   117 	w = AllocateWindowDesc(&_engine_preview_desc);
   113 	w->window_number = engine;
   118 	w->window_number = engine;
   114 }
   119 }
   115 
   120 
       
   121 static void DrawTrainEngineInfo(int engine, int x, int y, int maxw)
       
   122 {
       
   123 	const RailVehicleInfo *rvi = RailVehInfo(engine);
       
   124 	int cap;
       
   125 	uint multihead = (rvi->flags & RVI_MULTIHEAD) ? 1 : 0;
       
   126 
       
   127 	SetDParam(0, (_price.build_railvehicle >> 3) * rvi->base_cost >> 5);
       
   128 	SetDParam(2, rvi->max_speed * 10 >> 4);
       
   129 	SetDParam(3, rvi->power << multihead);
       
   130 	SetDParam(1, rvi->weight << multihead);
       
   131 
       
   132 	SetDParam(4, rvi->running_cost_base * _price.running_rail[rvi->engclass] >> 8 << multihead);
       
   133 
       
   134 	cap = rvi->capacity;
       
   135 	SetDParam(5, STR_8838_N_A);
       
   136 	if (cap != 0) {
       
   137 		SetDParam(6, cap << multihead);
       
   138 		SetDParam(5, _cargoc.names_long_p[rvi->cargo_type]);
       
   139 	}
       
   140 	DrawStringMultiCenter(x, y, STR_885B_COST_WEIGHT_T_SPEED_POWER, maxw);
       
   141 }
       
   142 
   116 void DrawNewsNewTrainAvail(Window *w)
   143 void DrawNewsNewTrainAvail(Window *w)
   117 {
   144 {
   118 	int engine;
   145 	int engine;
   119 
   146 
   120 	DrawNewsBorder(w);
   147 	DrawNewsBorder(w);
   140 	SetDParam(1, GetEngineCategoryName(engine));
   167 	SetDParam(1, GetEngineCategoryName(engine));
   141 	SetDParam(2, GetCustomEngineName(engine));
   168 	SetDParam(2, GetCustomEngineName(engine));
   142 	return STR_02B6;
   169 	return STR_02B6;
   143 }
   170 }
   144 
   171 
       
   172 static void DrawAircraftEngineInfo(int engine, int x, int y, int maxw)
       
   173 {
       
   174 	const AircraftVehicleInfo *avi = AircraftVehInfo(engine);
       
   175 	SetDParam(0, (_price.aircraft_base >> 3) * avi->base_cost >> 5);
       
   176 	SetDParam(1, avi->max_speed << 3);
       
   177 	SetDParam(2, avi->passenger_capacity);
       
   178 	SetDParam(3, avi->mail_capacity);
       
   179 	SetDParam(4, avi->running_cost * _price.aircraft_running >> 8);
       
   180 
       
   181 	DrawStringMultiCenter(x, y, STR_A02E_COST_MAX_SPEED_CAPACITY, maxw);
       
   182 }
       
   183 
   145 void DrawNewsNewAircraftAvail(Window *w)
   184 void DrawNewsNewAircraftAvail(Window *w)
   146 {
   185 {
   147 	int engine;
   186 	int engine;
   148 
   187 
   149 	DrawNewsBorder(w);
   188 	DrawNewsBorder(w);
   167 	SetDParam(0, STR_A02C_NEW_AIRCRAFT_NOW_AVAILABLE);
   206 	SetDParam(0, STR_A02C_NEW_AIRCRAFT_NOW_AVAILABLE);
   168 	SetDParam(1, GetCustomEngineName(engine));
   207 	SetDParam(1, GetCustomEngineName(engine));
   169 	return STR_02B6;
   208 	return STR_02B6;
   170 }
   209 }
   171 
   210 
       
   211 static void DrawRoadVehEngineInfo(int engine, int x, int y, int maxw)
       
   212 {
       
   213 	const RoadVehicleInfo *rvi = RoadVehInfo(engine);
       
   214 
       
   215 	SetDParam(0, (_price.roadveh_base >> 3) * rvi->base_cost >> 5);
       
   216 	SetDParam(1, rvi->max_speed * 10 >> 5);
       
   217 	SetDParam(2, rvi->running_cost * _price.roadveh_running >> 8);
       
   218 
       
   219 	SetDParam(4, rvi->capacity);
       
   220 	SetDParam(3, _cargoc.names_long_p[rvi->cargo_type]);
       
   221 
       
   222 	DrawStringMultiCenter(x, y, STR_902A_COST_SPEED_RUNNING_COST, maxw);
       
   223 }
       
   224 
   172 void DrawNewsNewRoadVehAvail(Window *w)
   225 void DrawNewsNewRoadVehAvail(Window *w)
   173 {
   226 {
   174 	int engine;
   227 	int engine;
   175 
   228 
   176 	DrawNewsBorder(w);
   229 	DrawNewsBorder(w);
   193 	SetDParam(0, STR_9028_NEW_ROAD_VEHICLE_NOW_AVAILABLE);
   246 	SetDParam(0, STR_9028_NEW_ROAD_VEHICLE_NOW_AVAILABLE);
   194 	SetDParam(1, GetCustomEngineName(engine));
   247 	SetDParam(1, GetCustomEngineName(engine));
   195 	return STR_02B6;
   248 	return STR_02B6;
   196 }
   249 }
   197 
   250 
       
   251 static void DrawShipEngineInfo(int engine, int x, int y, int maxw)
       
   252 {
       
   253 	const ShipVehicleInfo *svi = ShipVehInfo(engine);
       
   254 	SetDParam(0, svi->base_cost * (_price.ship_base >> 3) >> 5);
       
   255 	SetDParam(1, svi->max_speed * 10 >> 5);
       
   256 	SetDParam(2, _cargoc.names_long_p[svi->cargo_type]);
       
   257 	SetDParam(3, svi->capacity);
       
   258 	SetDParam(4, svi->running_cost * _price.ship_running >> 8);
       
   259 	DrawStringMultiCenter(x, y, STR_982E_COST_MAX_SPEED_CAPACITY, maxw);
       
   260 }
       
   261 
   198 void DrawNewsNewShipAvail(Window *w)
   262 void DrawNewsNewShipAvail(Window *w)
   199 {
   263 {
   200 	int engine;
   264 	int engine;
   201 
   265 
   202 	DrawNewsBorder(w);
   266 	DrawNewsBorder(w);