Track income by cargo type in company economy stats

This commit is contained in:
dP
2020-07-01 22:35:30 +03:00
parent b054653146
commit 46bd8ab608
12 changed files with 114 additions and 0 deletions

View File

@@ -1348,13 +1348,18 @@
<ClCompile Include="..\src\os\windows\string_uniscribe.cpp" />
<ClCompile Include="..\src\os\windows\win32.cpp" />
<ClInclude Include="..\src\thread.h" />
<ClInclude Include="..\src\citymania\cm_console_cmds.hpp" />
<ClCompile Include="..\src\citymania\cm_console_cmds.cpp" />
<ClInclude Include="..\src\citymania\cm_event.hpp" />
<ClInclude Include="..\src\citymania\cm_export.hpp" />
<ClCompile Include="..\src\citymania\cm_export.cpp" />
<ClInclude Include="..\src\citymania\cm_game.hpp" />
<ClCompile Include="..\src\citymania\cm_game.cpp" />
<ClInclude Include="..\src\citymania\cm_main.hpp" />
<ClCompile Include="..\src\citymania\cm_main.cpp" />
<ClInclude Include="..\src\citymania\cm_type.hpp" />
<ClInclude Include="..\src\citymania\extensions\cmext_town.hpp" />
<ClInclude Include="..\src\citymania\extensions\cmext_company.hpp" />
</ItemGroup>
<ItemGroup>
<None Include="..\media\openttd.ico" />

View File

@@ -3135,9 +3135,21 @@
<ClInclude Include="..\src\thread.h">
<Filter>Threading</Filter>
</ClInclude>
<ClInclude Include="..\src\citymania\cm_console_cmds.hpp">
<Filter>CityMania</Filter>
</ClInclude>
<ClCompile Include="..\src\citymania\cm_console_cmds.cpp">
<Filter>CityMania</Filter>
</ClCompile>
<ClInclude Include="..\src\citymania\cm_event.hpp">
<Filter>CityMania</Filter>
</ClInclude>
<ClInclude Include="..\src\citymania\cm_export.hpp">
<Filter>CityMania</Filter>
</ClInclude>
<ClCompile Include="..\src\citymania\cm_export.cpp">
<Filter>CityMania</Filter>
</ClCompile>
<ClInclude Include="..\src\citymania\cm_game.hpp">
<Filter>CityMania</Filter>
</ClInclude>
@@ -3156,6 +3168,9 @@
<ClInclude Include="..\src\citymania\extensions\cmext_town.hpp">
<Filter>CityMania</Filter>
</ClInclude>
<ClInclude Include="..\src\citymania\extensions\cmext_company.hpp">
<Filter>CityMania</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="..\media\openttd.ico" />

View File

@@ -1348,13 +1348,18 @@
<ClCompile Include="..\src\os\windows\string_uniscribe.cpp" />
<ClCompile Include="..\src\os\windows\win32.cpp" />
<ClInclude Include="..\src\thread.h" />
<ClInclude Include="..\src\citymania\cm_console_cmds.hpp" />
<ClCompile Include="..\src\citymania\cm_console_cmds.cpp" />
<ClInclude Include="..\src\citymania\cm_event.hpp" />
<ClInclude Include="..\src\citymania\cm_export.hpp" />
<ClCompile Include="..\src\citymania\cm_export.cpp" />
<ClInclude Include="..\src\citymania\cm_game.hpp" />
<ClCompile Include="..\src\citymania\cm_game.cpp" />
<ClInclude Include="..\src\citymania\cm_main.hpp" />
<ClCompile Include="..\src\citymania\cm_main.cpp" />
<ClInclude Include="..\src\citymania\cm_type.hpp" />
<ClInclude Include="..\src\citymania\extensions\cmext_town.hpp" />
<ClInclude Include="..\src\citymania\extensions\cmext_company.hpp" />
</ItemGroup>
<ItemGroup>
<None Include="..\media\openttd.ico" />

View File

@@ -3135,9 +3135,21 @@
<ClInclude Include="..\src\thread.h">
<Filter>Threading</Filter>
</ClInclude>
<ClInclude Include="..\src\citymania\cm_console_cmds.hpp">
<Filter>CityMania</Filter>
</ClInclude>
<ClCompile Include="..\src\citymania\cm_console_cmds.cpp">
<Filter>CityMania</Filter>
</ClCompile>
<ClInclude Include="..\src\citymania\cm_event.hpp">
<Filter>CityMania</Filter>
</ClInclude>
<ClInclude Include="..\src\citymania\cm_export.hpp">
<Filter>CityMania</Filter>
</ClInclude>
<ClCompile Include="..\src\citymania\cm_export.cpp">
<Filter>CityMania</Filter>
</ClCompile>
<ClInclude Include="..\src\citymania\cm_game.hpp">
<Filter>CityMania</Filter>
</ClInclude>
@@ -3156,6 +3168,9 @@
<ClInclude Include="..\src\citymania\extensions\cmext_town.hpp">
<Filter>CityMania</Filter>
</ClInclude>
<ClInclude Include="..\src\citymania\extensions\cmext_company.hpp">
<Filter>CityMania</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="..\media\openttd.ico" />

View File

@@ -1348,13 +1348,18 @@
<ClCompile Include="..\src\os\windows\string_uniscribe.cpp" />
<ClCompile Include="..\src\os\windows\win32.cpp" />
<ClInclude Include="..\src\thread.h" />
<ClInclude Include="..\src\citymania\cm_console_cmds.hpp" />
<ClCompile Include="..\src\citymania\cm_console_cmds.cpp" />
<ClInclude Include="..\src\citymania\cm_event.hpp" />
<ClInclude Include="..\src\citymania\cm_export.hpp" />
<ClCompile Include="..\src\citymania\cm_export.cpp" />
<ClInclude Include="..\src\citymania\cm_game.hpp" />
<ClCompile Include="..\src\citymania\cm_game.cpp" />
<ClInclude Include="..\src\citymania\cm_main.hpp" />
<ClCompile Include="..\src\citymania\cm_main.cpp" />
<ClInclude Include="..\src\citymania\cm_type.hpp" />
<ClInclude Include="..\src\citymania\extensions\cmext_town.hpp" />
<ClInclude Include="..\src\citymania\extensions\cmext_company.hpp" />
</ItemGroup>
<ItemGroup>
<None Include="..\media\openttd.ico" />

View File

@@ -3135,9 +3135,21 @@
<ClInclude Include="..\src\thread.h">
<Filter>Threading</Filter>
</ClInclude>
<ClInclude Include="..\src\citymania\cm_console_cmds.hpp">
<Filter>CityMania</Filter>
</ClInclude>
<ClCompile Include="..\src\citymania\cm_console_cmds.cpp">
<Filter>CityMania</Filter>
</ClCompile>
<ClInclude Include="..\src\citymania\cm_event.hpp">
<Filter>CityMania</Filter>
</ClInclude>
<ClInclude Include="..\src\citymania\cm_export.hpp">
<Filter>CityMania</Filter>
</ClInclude>
<ClCompile Include="..\src\citymania\cm_export.cpp">
<Filter>CityMania</Filter>
</ClCompile>
<ClInclude Include="..\src\citymania\cm_game.hpp">
<Filter>CityMania</Filter>
</ClInclude>
@@ -3156,6 +3168,9 @@
<ClInclude Include="..\src\citymania\extensions\cmext_town.hpp">
<Filter>CityMania</Filter>
</ClInclude>
<ClInclude Include="..\src\citymania\extensions\cmext_company.hpp">
<Filter>CityMania</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="..\media\openttd.ico" />

View File

@@ -1204,3 +1204,4 @@ citymania/cm_main.hpp
citymania/cm_main.cpp
citymania/cm_type.hpp
citymania/extensions/cmext_town.hpp
citymania/extensions/cmext_company.hpp

View File

@@ -5,6 +5,7 @@
#include "../cargo_type.h"
#include "../company_type.h"
#include "../economy_type.h"
#include "../industry_type.h"
#include "../station_type.h"
#include "../town_type.h"
@@ -61,6 +62,19 @@ struct CompanyEvent {
Company *company;
};
struct CargoDeliveredToIndustry {
Industry *industry;
CargoID cargo_type;
uint amount;
const Station *station;
};
struct CargoDeliveredToUnknown {
CargoID cargo_type;
uint amount;
const Station *station;
};
struct CargoAccepted {
Company *company;
CargoID cargo_type;

View File

@@ -2,6 +2,8 @@
#include "cm_game.hpp"
#include "../company_base.h"
#include "../safeguards.h"
namespace citymania {
@@ -78,6 +80,10 @@ Game::Game() {
town->cm.real_population += HouseSpec::Get(house_id)->population;
}
});
this->events.listen<event::CargoAccepted>([this] (const event::CargoAccepted &event) {
event.company->cur_economy.cm.cargo_income[event.cargo_type] += event.profit;
});
}
} // namespace citymania

View File

@@ -0,0 +1,18 @@
#ifndef CMEXT_COMPANY_HPP
#define CMEXT_COMPANY_HPP
#include "../../cargo_type.h"
namespace citymania {
namespace ext {
class CompanyEconomyEntry {
public:
Money cargo_income[NUM_CARGO]; ///< Cargo income from each cargo type
};
} // namespace citymania
} // namespace citymania
#endif

View File

@@ -17,6 +17,8 @@
#include "settings_type.h"
#include "group.h"
#include "citymania/extensions/cmext_company.hpp"
/** Statistics about the economy. */
struct CompanyEconomyEntry {
Money income; ///< The amount of income.
@@ -24,6 +26,7 @@ struct CompanyEconomyEntry {
CargoArray delivered_cargo; ///< The amount of delivered cargo.
int32 performance_history; ///< Company score (scale 0-1000)
Money company_value; ///< The value of the company.
citymania::ext::CompanyEconomyEntry cm; ///< CityMania extra economy data.
};
struct CompanyInfrastructure {

View File

@@ -52,6 +52,8 @@
#include "table/strings.h"
#include "table/pricebase.h"
#include "citymania/cm_main.hpp"
#include "safeguards.h"
@@ -1053,6 +1055,10 @@ static uint DeliverGoodsToIndustry(const Station *st, CargoID cargo_type, uint n
/* Update the cargo monitor. */
AddCargoDelivery(cargo_type, company, amount, ST_INDUSTRY, source, st, ind->index);
if (amount > 0)
citymania::Emit(citymania::event::CargoDeliveredToIndustry{ind, cargo_type, amount, st});
}
return accepted;
@@ -1113,6 +1119,12 @@ static Money DeliverGoods(int num_pieces, CargoID cargo_type, StationID dest, Ti
}
}
if (accepted_total > 0) {
if (accepted_ind != accepted_total)
citymania::Emit(citymania::event::CargoDeliveredToUnknown{cargo_type, accepted_total - accepted_ind, st});
citymania::Emit(citymania::event::CargoAccepted{company, cargo_type, accepted_total, st, profit, src_type, src});
}
return profit;
}