diff --git a/simutrans/trunk/gui/factory_chart.cc b/simutrans/trunk/gui/factory_chart.cc index 7a5e0894a..334901af7 100644 --- a/simutrans/trunk/gui/factory_chart.cc +++ b/simutrans/trunk/gui/factory_chart.cc @@ -60,7 +60,8 @@ static const char *const prod_type[MAX_FAB_STAT] = "Produktion", "Usage/Output", "Electricity", "Passagiere", "Post", "Generated", "Departed", "Arrived", - "Generated", "Departed", "Arrived" + "Generated", "Departed", "Arrived", + "Power?" }; static const char *const ref_type[MAX_FAB_REF_LINE] = @@ -74,12 +75,12 @@ static const uint8 prod_color[MAX_FAB_STAT] = COL_LILAC, COL_LEMON_YELLOW, COL_LIGHT_GREEN, 23, COL_LIGHT_PURPLE, COL_LIGHT_TURQUOISE, 51, 49, - COL_LIGHT_ORANGE, COL_ORANGE, COL_DARK_ORANGE + COL_LIGHT_ORANGE, COL_ORANGE, COL_DARK_ORANGE, COL_LIGHT_YELLOW }; static const gui_chart_t::convert_proc prod_convert[MAX_FAB_STAT] = { - NULL, convert_power, convert_boost, convert_boost, convert_boost, NULL, NULL, NULL, NULL, NULL, NULL + NULL, convert_power, convert_boost, convert_boost, convert_boost, NULL, NULL, NULL, NULL, NULL, NULL, convert_power }; static const gui_chart_t::convert_proc ref_convert[MAX_FAB_REF_LINE] = @@ -101,7 +102,7 @@ static const char *const label_text[MAX_PROD_LABEL] = // Mappings from cell position to buttons, labels, charts static const uint8 prod_cell_button[] = { - FAB_PRODUCTION, MAX_FAB_STAT, MAX_FAB_STAT, FAB_POWER, + FAB_PRODUCTION, MAX_FAB_STAT, FAB_POWER_POTENTIAL, FAB_POWER, MAX_FAB_STAT, FAB_BOOST_ELECTRIC, FAB_BOOST_PAX, FAB_BOOST_MAIL, MAX_FAB_STAT, MAX_FAB_STAT, MAX_FAB_STAT, MAX_FAB_STAT, MAX_FAB_STAT, MAX_FAB_STAT, MAX_FAB_STAT, MAX_FAB_STAT, @@ -111,7 +112,7 @@ static const uint8 prod_cell_button[] = static const uint8 prod_cell_label[] = { - MAX_PROD_LABEL, MAX_PROD_LABEL, 5, MAX_PROD_LABEL, + MAX_PROD_LABEL, 5, MAX_PROD_LABEL, MAX_PROD_LABEL, 0, MAX_PROD_LABEL, MAX_PROD_LABEL, MAX_PROD_LABEL, 1, MAX_PROD_LABEL, MAX_PROD_LABEL, MAX_PROD_LABEL, 2, MAX_PROD_LABEL, MAX_PROD_LABEL, MAX_PROD_LABEL, diff --git a/simutrans/trunk/simfab.cc b/simutrans/trunk/simfab.cc index 71550dc02..912ba8eff 100644 --- a/simutrans/trunk/simfab.cc +++ b/simutrans/trunk/simfab.cc @@ -352,6 +352,8 @@ void fabrik_t::init_stats() weighted_sum_boost_pax = 0; weighted_sum_boost_mail = 0; weighted_sum_power = 0; + weighted_sum_power_potential = 0; + current_power_potential = 0; aggregate_weight = 0; } @@ -379,6 +381,11 @@ void fabrik_t::book_weighted_sums(sint64 delta_time) weighted_sum_boost_pax += prodfactor_pax * delta_time; weighted_sum_boost_mail += prodfactor_mail * delta_time; + // potential power consumption/production + weighted_sum_power_potential += current_power_potential * delta_time; + set_stat( weighted_sum_power_potential / aggregate_weight, FAB_POWER_POTENTIAL); + current_power_potential = 0; + // power produced or consumed sint64 power = get_power(); weighted_sum_power += power * delta_time; @@ -1478,10 +1485,13 @@ DBG_DEBUG("fabrik_t::rdwr()","loading factory '%s'",s); target_cities.clear(); } + init_stats(); if( file->is_version_atleast(110, 5) ) { file->rdwr_short(times_expanded); + + int max_fab_stat = file->is_version_atleast(121, 1) ? MAX_FAB_STAT : 11; // statistics - for( int s=0; srdwr_longlong( statistics[m][s] ); } @@ -1493,10 +1503,14 @@ DBG_DEBUG("fabrik_t::rdwr()","loading factory '%s'",s); file->rdwr_longlong( weighted_sum_power ); file->rdwr_longlong( aggregate_weight ); file->rdwr_long( delta_slot ); + + if (file->is_version_atleast(121, 1)) { + file->rdwr_longlong( weighted_sum_power_potential ); + file->rdwr_longlong( current_power_potential ); + } } else if( file->is_loading() ) { times_expanded = 0; - init_stats(); delta_slot = 0; } arrival_stats_pax.rdwr( file ); @@ -1574,6 +1588,7 @@ uint32 fabrik_t::scale_output_production(const uint32 product, uint32 menge) con void fabrik_t::set_power_supply(uint32 supply) { + current_power_potential = supply; pumpe_t *const trans = dynamic_cast(transformer); if( trans == NULL ) { return; @@ -1601,6 +1616,7 @@ sint32 fabrik_t::get_power_consumption() const void fabrik_t::set_power_demand(uint32 demand) { + current_power_potential = -(sint64)demand; senke_t *const trans = dynamic_cast(transformer); if( trans == NULL ) { return; @@ -2642,8 +2658,12 @@ void fabrik_t::new_month() set_stat( weighted_sum_boost_pax / aggregate_weight, FAB_BOOST_PAX ); set_stat( weighted_sum_boost_mail / aggregate_weight, FAB_BOOST_MAIL ); set_stat( weighted_sum_power / aggregate_weight, FAB_POWER ); + set_stat( weighted_sum_power_potential / aggregate_weight, FAB_POWER_POTENTIAL ); } + if (aggregate_weight) + printf("%s %lld / %lld \n", get_name(), weighted_sum_power / aggregate_weight, weighted_sum_power_potential / aggregate_weight); + // update statistics for input and output goods for( uint32 in = 0; in < input.get_count(); in++ ){ input[in].roll_stats( desc->get_supplier(in)->get_consumption(), aggregate_weight ); @@ -2666,6 +2686,8 @@ void fabrik_t::new_month() weighted_sum_boost_pax = 0; weighted_sum_boost_mail = 0; weighted_sum_power = 0; + weighted_sum_power_potential = 0; + current_power_potential = 0; aggregate_weight = 0; // restore the current values diff --git a/simutrans/trunk/simfab.h b/simutrans/trunk/simfab.h index 9f03b3d76..d946f80e2 100644 --- a/simutrans/trunk/simfab.h +++ b/simutrans/trunk/simfab.h @@ -30,7 +30,7 @@ class leitung_t; */ #define MAX_MONTH (12) #define FAB_PRODUCTION (0) -#define FAB_POWER (1) +#define FAB_POWER (1) // actual production/consumption #define FAB_BOOST_ELECTRIC (2) #define FAB_BOOST_PAX (3) #define FAB_BOOST_MAIL (4) @@ -40,7 +40,8 @@ class leitung_t; #define FAB_MAIL_GENERATED (8) #define FAB_MAIL_DEPARTED (9) #define FAB_MAIL_ARRIVED (10) -#define MAX_FAB_STAT (11) +#define FAB_POWER_POTENTIAL (11) // potential production/consumption +#define MAX_FAB_STAT (12) // reference lines #define FAB_REF_MAX_BOOST_ELECTRIC (0) @@ -206,6 +207,8 @@ private: sint64 weighted_sum_boost_pax; sint64 weighted_sum_boost_mail; sint64 weighted_sum_power; + sint64 weighted_sum_power_potential; + sint64 current_power_potential; sint64 aggregate_weight; // Control logic type determines how a factory behaves with regards to inputs and outputs.