changeset 7014:d03670858cef draft

(svn r10270) -Add: prefixed the loading indicator with an arrow, up meaning vehicle is loading, down meaning vehicle is unloading
author truelight <truelight@openttd.org>
date Fri, 22 Jun 2007 18:28:44 +0000
parents 4b344122f60d
children 462a3f72303b
files src/economy.cpp src/lang/english.txt src/misc_gui.cpp src/texteff.hpp src/vehicle.cpp src/vehicle.h
diffstat 6 files changed, 35 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/src/economy.cpp
+++ b/src/economy.cpp
@@ -1669,11 +1669,12 @@
 
 	/* Calculate the loading indicator fill percent and display */
 	if (_patches.loading_indicators && _game_mode != GM_MENU && v->owner == _local_player) {
-		int percent = CalcPercentVehicleFilled(v);
+		StringID percent_up_down = STR_NULL;
+		int percent = CalcPercentVehicleFilled(v, &percent_up_down);
 		if (v->fill_percent_te_id == INVALID_TE_ID) {
-			v->fill_percent_te_id = ShowFillingPercent(v->x_pos, v->y_pos, v->z_pos + 20, percent);
+			v->fill_percent_te_id = ShowFillingPercent(v->x_pos, v->y_pos, v->z_pos + 20, percent, percent_up_down);
 		} else {
-			UpdateFillingPercent(v->fill_percent_te_id, percent);
+			UpdateFillingPercent(v->fill_percent_te_id, percent, percent_up_down);
 		}
 	}
 
--- a/src/lang/english.txt
+++ b/src/lang/english.txt
@@ -3292,8 +3292,12 @@
 STR_TRANSPARENT_STRUCTURES_DESC                                 :{BLACK}Toggle transparency for structures like lighthouses and antennas, maybe in future for eyecandy
 STR_TRANSPARENT_LOADING_DESC                                    :{BLACK}Toggle transparency for loading indicators
 
-STR_PERCENT_FULL_SMALL                                          :{TINYFONT}{WHITE}{NUM}%
-STR_PERCENT_FULL                                                :{WHITE}{NUM}%
+STR_PERCENT_UP_SMALL                                            :{TINYFONT}{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_UP                                                  :{WHITE}{NUM}%{UPARROW}
+STR_PERCENT_DOWN_SMALL                                          :{TINYFONT}{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_DOWN                                                :{WHITE}{NUM}%{DOWNARROW}
+STR_PERCENT_UP_DOWN_SMALL                                       :{TINYFONT}{WHITE}{NUM}%{UPARROW}{DOWNARROW}
+STR_PERCENT_UP_DOWN                                             :{WHITE}{NUM}%{UPARROW}{DOWNARROW}
 
 ##### Mass Order
 STR_GROUP_NAME_FORMAT                                           :Group {COMMA}
--- a/src/misc_gui.cpp
+++ b/src/misc_gui.cpp
@@ -644,18 +644,22 @@
 	AddTextEffect(STR_FEEDER, pt.x, pt.y, 0x250, TE_RISING);
 }
 
-TextEffectID ShowFillingPercent(int x, int y, int z, uint8 percent)
+TextEffectID ShowFillingPercent(int x, int y, int z, uint8 percent, StringID string)
 {
 	Point pt = RemapCoords(x, y, z);
 
+	assert(string != STR_NULL);
+
 	SetDParam(0, percent);
-	return AddTextEffect(STR_PERCENT_FULL, pt.x, pt.y, 0xFFFF, TE_STATIC);
+	return AddTextEffect(string, pt.x, pt.y, 0xFFFF, TE_STATIC);
 }
 
-void UpdateFillingPercent(TextEffectID te_id, uint8 percent)
+void UpdateFillingPercent(TextEffectID te_id, uint8 percent, StringID string)
 {
+	assert(string != STR_NULL);
+
 	SetDParam(0, percent);
-	UpdateTextEffect(te_id, STR_PERCENT_FULL);
+	UpdateTextEffect(te_id, string);
 }
 
 void HideFillingPercent(TextEffectID te_id)
--- a/src/texteff.hpp
+++ b/src/texteff.hpp
@@ -28,8 +28,8 @@
 void UndrawTextMessage();
 
 /* misc_gui.cpp */
-TextEffectID ShowFillingPercent(int x, int y, int z, uint8 percent);
-void UpdateFillingPercent(TextEffectID te_id, uint8 percent);
+TextEffectID ShowFillingPercent(int x, int y, int z, uint8 percent, StringID color);
+void UpdateFillingPercent(TextEffectID te_id, uint8 percent, StringID color);
 void HideFillingPercent(TextEffectID te_id);
 
 #endif /* TEXTEFF_HPP */
--- a/src/vehicle.cpp
+++ b/src/vehicle.cpp
@@ -2271,19 +2271,32 @@
 /**
  * Calculates how full a vehicle is.
  * @param v The Vehicle to check. For trains, use the first engine.
+ * @param color The string to show depending on if we are unloading or loading
  * @return A percentage of how full the Vehicle is.
  */
-uint8 CalcPercentVehicleFilled(Vehicle *v)
+uint8 CalcPercentVehicleFilled(Vehicle *v, StringID *color)
 {
 	int count = 0;
 	int max = 0;
+	int cars = 0;
+	int unloading = 0;
+
+	assert(color != NULL);
 
 	/* Count up max and used */
 	for (; v != NULL; v = v->next) {
 		count += v->cargo.Count();
 		max += v->cargo_cap;
+		if (v->cargo_cap != 0) {
+			unloading += HASBIT(v->vehicle_flags, VF_CARGO_UNLOADING) ? 1 : 0;
+			cars++;
+		}
 	}
 
+	if (unloading == 0)         *color = STR_PERCENT_UP;
+	else if (cars == unloading) *color = STR_PERCENT_DOWN;
+	else                        *color = STR_PERCENT_UP_DOWN;
+
 	/* Train without capacity */
 	if (max == 0) return 100;
 
--- a/src/vehicle.h
+++ b/src/vehicle.h
@@ -505,7 +505,7 @@
 void *VehicleFromPosXY(int x, int y, void *data, VehicleFromPosProc *proc);
 void CallVehicleTicks();
 Vehicle *FindVehicleOnTileZ(TileIndex tile, byte z);
-uint8 CalcPercentVehicleFilled(Vehicle *v);
+uint8 CalcPercentVehicleFilled(Vehicle *v, StringID *color);
 
 void InitializeTrains();
 byte VehicleRandomBits();