diff options
| author | Alexander Gavrilov | 2012-09-02 17:32:44 +0400 |
|---|---|---|
| committer | Alexander Gavrilov | 2012-09-02 17:32:44 +0400 |
| commit | 3b08ee44d1560f7610187fb1d428fefaa37ed9ab (patch) | |
| tree | 27ee12f68e286d2b890866530a650c9c59aadd4f /plugins/devel | |
| parent | 3b8e3d1459edb9fbf8df4b6055023b0d0905a15f (diff) | |
| download | dfhack-3b08ee44d1560f7610187fb1d428fefaa37ed9ab.tar.gz dfhack-3b08ee44d1560f7610187fb1d428fefaa37ed9ab.tar.bz2 dfhack-3b08ee44d1560f7610187fb1d428fefaa37ed9ab.tar.xz | |
Vary the internal power consumption of the engine depending on quality.
Diffstat (limited to 'plugins/devel')
| -rw-r--r-- | plugins/devel/steam-engine.cpp | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/plugins/devel/steam-engine.cpp b/plugins/devel/steam-engine.cpp index edaba0e8..7a67eadd 100644 --- a/plugins/devel/steam-engine.cpp +++ b/plugins/devel/steam-engine.cpp @@ -436,6 +436,23 @@ struct workshop_hook : df::building_workshopst { return false; } + float get_component_quality(int use_type) + { + float sum = 0, cnt = 0; + + for (size_t i = 0; i < contained_items.size(); i++) + { + int type = classify_component(contained_items[i]); + if (type != use_type) + continue; + + sum += contained_items[i]->item->getQuality(); + cnt += 1; + } + + return (cnt > 0 ? sum/cnt : 0); + } + int get_steam_use_rate(steam_engine_workshop *engine, int dimension, int power_level) { // total ticks to wear off completely @@ -452,8 +469,10 @@ struct workshop_hook : df::building_workshopst { else power_rate = 0.0f; } - // apply rate; 10% steam is wasted anyway - ticks *= (0.1f + 0.9f*power_rate)*power_level; + // waste rate: 1-10% depending on piston assembly quality + float waste = 0.1f - 0.015f * get_component_quality(1); + // apply rate and waste factor + ticks *= (waste + 0.9f*power_rate)*power_level; // end result return std::max(1, int(ticks)); } @@ -529,7 +548,7 @@ struct workshop_hook : df::building_workshopst { if (auto engine = get_steam_engine()) { info->produced = std::min(engine->max_power, get_steam_amount())*100; - info->consumed = 10; + info->consumed = 10 - int(get_component_quality(0)); return; } |
