summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpeter1138 <peter1138@openttd.org>2017-03-24 07:33:31 +0000
committerpeter1138 <peter1138@openttd.org>2017-03-24 07:33:31 +0000
commit19d56a33e8842fb5e6b5f028c3d8050405af2c1a (patch)
treeac0c5fb47fd13f1a32c3f83db71da9850ba7fee8
parentbcc5c9f81d2c3fb3f31ba1dce647c7974d46cbd2 (diff)
downloadopenttd-19d56a33e8842fb5e6b5f028c3d8050405af2c1a.tar.xz
(svn r27822) -Feature: Vehicle Group Info: Add profits and occupancy display to group vehicle list (mtm, JGR)
-rw-r--r--src/group_gui.cpp47
-rw-r--r--src/lang/english.txt5
-rw-r--r--src/saveload/vehicle_sl.cpp2
-rw-r--r--src/vehicle.cpp1
-rw-r--r--src/vehicle_base.h1
-rw-r--r--src/widgets/group_widget.h1
6 files changed, 57 insertions, 0 deletions
diff --git a/src/group_gui.cpp b/src/group_gui.cpp
index 361ab53e5..d3e1eafbb 100644
--- a/src/group_gui.cpp
+++ b/src/group_gui.cpp
@@ -55,6 +55,7 @@ static const NWidgetPart _nested_group_widgets[] = {
SetFill(1, 0), SetResize(0, 1), SetScrollbar(WID_GL_LIST_GROUP_SCROLLBAR),
NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_GL_LIST_GROUP_SCROLLBAR),
EndContainer(),
+ NWidget(WWT_PANEL, COLOUR_GREY, WID_GL_INFO), SetFill(1, 0), EndContainer(),
NWidget(NWID_HORIZONTAL),
NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, WID_GL_CREATE_GROUP), SetFill(0, 1),
SetDataTip(SPR_GROUP_CREATE_TRAIN, STR_GROUP_CREATE_TOOLTIP),
@@ -371,6 +372,9 @@ public:
max_icon_height = max(max_icon_height, GetSpriteSize(this->GetWidget<NWidgetCore>(WID_GL_DELETE_GROUP)->widget_data).height);
max_icon_height = max(max_icon_height, GetSpriteSize(this->GetWidget<NWidgetCore>(WID_GL_REPLACE_PROTECTION)->widget_data).height);
+ /* ... minus the height of the group info ... */
+ max_icon_height += (FONT_HEIGHT_NORMAL * 3) + WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM;
+
/* Get a multiple of tiny_step_height of that amount */
size->height = Ceil(size->height - max_icon_height, tiny_step_height);
break;
@@ -403,6 +407,11 @@ public:
*size = maxdim(*size, d);
break;
}
+
+ case WID_GL_INFO: {
+ size->height = (FONT_HEIGHT_NORMAL * 3) + WD_FRAMERECT_TOP + WD_FRAMERECT_BOTTOM;
+ break;
+ }
}
}
@@ -527,6 +536,44 @@ public:
DrawGroupInfo(r.top + WD_FRAMERECT_TOP, r.left, r.right, DEFAULT_GROUP);
break;
+ case WID_GL_INFO: {
+ Money this_year = 0;
+ Money last_year = 0;
+ uint32 occupancy = 0;
+ uint32 vehicle_count = this->vehicles.Length();
+
+ for (uint i = 0; i < vehicle_count; i++) {
+ const Vehicle *v = this->vehicles[i];
+ assert(v->owner == this->owner);
+
+ this_year += v->GetDisplayProfitThisYear();
+ last_year += v->GetDisplayProfitLastYear();
+ occupancy += v->trip_occupancy;
+ }
+
+ const int left = r.left + WD_FRAMERECT_LEFT + 8;
+ const int right = r.right - WD_FRAMERECT_RIGHT - 8;
+
+ int y = r.top + WD_FRAMERECT_TOP;
+ DrawString(left, right, y, STR_GROUP_PROFIT_THIS_YEAR, TC_BLACK);
+ SetDParam(0, this_year);
+ DrawString(left, right, y, STR_JUST_CURRENCY_LONG, TC_BLACK, SA_RIGHT);
+
+ y += FONT_HEIGHT_NORMAL;
+ DrawString(left, right, y, STR_GROUP_PROFIT_LAST_YEAR, TC_BLACK);
+ SetDParam(0, last_year);
+ DrawString(left, right, y, STR_JUST_CURRENCY_LONG, TC_BLACK, SA_RIGHT);
+
+ y += FONT_HEIGHT_NORMAL;
+ DrawString(left, right, y, STR_GROUP_OCCUPANCY, TC_BLACK);
+ if (vehicle_count > 0) {
+ SetDParam(0, occupancy / vehicle_count);
+ DrawString(left, right, y, STR_GROUP_OCCUPANCY_VALUE, TC_BLACK, SA_RIGHT);
+ }
+
+ break;
+ }
+
case WID_GL_LIST_GROUP: {
int y1 = r.top + WD_FRAMERECT_TOP;
int max = min(this->group_sb->GetPosition() + this->group_sb->GetCapacity(), this->groups.Length());
diff --git a/src/lang/english.txt b/src/lang/english.txt
index 141346d4d..722459c35 100644
--- a/src/lang/english.txt
+++ b/src/lang/english.txt
@@ -3367,6 +3367,11 @@ STR_GROUP_REMOVE_ALL_VEHICLES :Remove all vehi
STR_GROUP_RENAME_CAPTION :{BLACK}Rename a group
+STR_GROUP_PROFIT_THIS_YEAR :Profit this year:
+STR_GROUP_PROFIT_LAST_YEAR :Profit last year:
+STR_GROUP_OCCUPANCY :Current usage:
+STR_GROUP_OCCUPANCY_VALUE :{NUM}%
+
# Build vehicle window
STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :New Rail Vehicles
STR_BUY_VEHICLE_TRAIN_ELRAIL_CAPTION :New Electric Rail Vehicles
diff --git a/src/saveload/vehicle_sl.cpp b/src/saveload/vehicle_sl.cpp
index 86ca590e4..d7c701189 100644
--- a/src/saveload/vehicle_sl.cpp
+++ b/src/saveload/vehicle_sl.cpp
@@ -375,6 +375,8 @@ void AfterLoadVehicles(bool part_of_load)
FOR_ALL_VEHICLES(v) {
assert(v->first != NULL);
+ v->trip_occupancy = CalcPercentVehicleFilled(v, NULL);
+
switch (v->type) {
case VEH_TRAIN: {
Train *t = Train::From(v);
diff --git a/src/vehicle.cpp b/src/vehicle.cpp
index b68646131..4dbdf24df 100644
--- a/src/vehicle.cpp
+++ b/src/vehicle.cpp
@@ -2160,6 +2160,7 @@ void Vehicle::LeaveStation()
st->loading_vehicles.remove(this);
HideFillingPercent(&this->fill_percent_te_id);
+ trip_occupancy = CalcPercentVehicleFilled(this, NULL);
if (this->type == VEH_TRAIN && !(this->vehstatus & VS_CRASHED)) {
/* Trigger station animation (trains only) */
diff --git a/src/vehicle_base.h b/src/vehicle_base.h
index f2a02072a..fc40f22a6 100644
--- a/src/vehicle_base.h
+++ b/src/vehicle_base.h
@@ -308,6 +308,7 @@ public:
uint16 refit_cap; ///< Capacity left over from before last refit.
VehicleCargoList cargo; ///< The cargo this vehicle is carrying
uint16 cargo_age_counter; ///< Ticks till cargo is aged next.
+ int8 trip_occupancy; ///< NOSAVE: Occupancy of vehicle of the current trip (updated after leaving a station).
byte day_counter; ///< Increased by one for each day
byte tick_counter; ///< Increased by one for each tick
diff --git a/src/widgets/group_widget.h b/src/widgets/group_widget.h
index bd0d90486..41e0bcd45 100644
--- a/src/widgets/group_widget.h
+++ b/src/widgets/group_widget.h
@@ -32,6 +32,7 @@ enum GroupListWidgets {
WID_GL_DELETE_GROUP, ///< Delete group button.
WID_GL_RENAME_GROUP, ///< Rename group button.
WID_GL_REPLACE_PROTECTION, ///< Replace protection button.
+ WID_GL_INFO, ///< Group info.
};
#endif /* WIDGETS_GROUP_WIDGET_H */