Empire.ResourceManager : components.ResourceManager::ResourceManager {
local:
	double get_EstTotalPopulation() const;
		@return Estimated amount of population in this empire, visible to everyone.

restricted local:
	double get_TotalPopulation() const;
		@return Total exact amount of population in this empire.


	double get_FTLIncome() const;
		@return FTL income per second.

	double get_FTLStored() const;
		@return Current stored FTL.

	double get_FTLCapacity() const;
		@return Total FTL storage capacity.

	double get_FTLUse() const;
		@return Current used ftl per second.

	bool get_FTLShortage() const;
		@return Whether there isn't currently enough ftl to run.

	bool isFTLShortage(double amt) const;
		@return Whether we would be in ftl shortage using this much energy.


	double get_EnergyIncome();
		@return Energy income per second.

	double get_EnergyStored();
		@return Current stored Energy.

	double get_EnergyUse();
		@return Current used energy per second.

	double get_EnergyEfficiency();
		@return Current efficiency of energy income based on storage.

	bool get_EnergyShortage();
		@return Whether there isn't currently enough energy to run.

	bool isEnergyShortage(double amt);
		@return Whether we would be in energy shortage using this much energy.


	int get_TotalBudget() const;
		@return Money generated before reduction by maintenance.

	int get_MaintenanceBudget() const;
		@return Maintenance being paid every budget cycle.

	int get_RemainingBudget() const;
		@return Money still available for spending in this budget cycle.

	int get_ForwardBudget() const;
		@return Money added to the next budget as a single-time modifier.

	int get_BonusBudget() const;
		@return Special funds bonus budget gotten from one-time incomes.

	int get_EstNextBudget() const;
		@return Estimated value of the next budget amount.

	int getMoneyFromType(uint type) const;
		@return The contribution to the budget from a particular type of income/expense.
	
	uint get_WelfareMode() const;
		@return The type of welfare exchange mode the empire is using.
	
	int getEstBudgetConsuming(int amount) const;
		@return The estimated budget after consuming the given amount.

	double get_BorrowRate() const;
		@return Factor of borrowed money the next budget is reduced by.

	double get_BudgetCycle() const;
		@return Total amount of time a single budget cycle lasts.

	double get_BudgetTimer() const;
		@return Time that has passed since the beginning of this budget cycle.

	bool canBorrow(int amount) const;
		@arg Total amount of money that would be borrowed.
		@return Whether it's possible to borrow that amount of money without getting a negative next budget.

	bool canPay(int amount) const;
		@arg Amount of money that would be spent.
		@return Whether it's possible to spend that amount of money, including borrowing, without getting a negative next budget.

	float get_DebtFactor() const;
		@return The factor of income the empire is currently in debt.

restricted remote:
	void set_WelfareMode(uint mode);
		@arg The type of welfare exchange mode the empire should use

server:
	void resourceTick(double time);
		@doc Internal processing function.


	void modFTLCapacity(double amount);
		@doc Modify the FTL storage capacity.

	void modFTLStored(double amount, bool obeyMaximum = false);
		@doc Modify how much FTL is currently stored.
		@arg Whether to limit the stored ftl to the maximum ftl cap.

	void modFTLIncome(double amount);
		@doc Modify the current FTL income.

	void modFTLUse(double amount);
		@doc Modify the current FTL use.

	double consumeFTL(double amount, bool partial = true, bool record = true);
		@doc Consume an amount of FTL resource.
		@arg FTL to consume.
		@arg Whether a partial amount can be consumed.
		@arg Whether to immediately record the amount as 'Spent FTL'.
		@return The amount of FTL that was consumed.

	bool consumeFTLUse(double amount);
		@doc Grab a chunk of ftl use for our purposes.
		@arg FTL use to add.
		@return Whether we can use this much ftl.


	void modEnergyStored(double amount);
		@doc Modify how much Energy is currently stored.

	void modEnergyAllocated(double amount);
		@doc Modify how much Energy is currently allocated. Allocated energy is considered stored for efficiency purposes, but does not appear as usable energy.

	void modEnergyIncome(double amount);
		@doc Modify the current Energy income.

	void modEnergyUse(double amount);
		@doc Modify the current Energy use.

	double consumeEnergy(double amount, bool consumePartial = true);
		@doc Consume an amount of global energy.
		@arg Energy to consume.
		@arg Whether a partial amount can be consumed.
		@return The amount of energy that was consumed.

	bool consumeEnergyUse(double amount);
		@doc Grab a chunk of energy use for our purposes.
		@arg Energy use to add.
		@return Whether we can use this much energy.

	void addFloatedEnergy(Empire@ other, double amount);
		@doc Add energy floated for another empire, until spent.


	int get_BudgetCycleId();
		@return ID for the currently active budget cycle.

	int consumeBudget(int amount, bool borrow = true);
		@doc Spend a chunk of money from the remaining budget.
		@arg Amount of money to spend.
		@arg Whether to allow borrowing some or all of the money.
		@return Budget cycle ID the money was spent in, -1 if unsuccesful.

	int lowerBudget(int amount);
		@doc Lower the available budget by an amount of money, always able to borrow.
		@arg Amount of money to spend.
		@return Budget cycle ID the money was spent in.

	void refundBudget(int amount, int cycleId);
		@doc Refunds money back to the budget, but only if the money was from this cycle.
		@arg Amount of money to refund.
		@arg Budget cycle ID the money was spent in.


	void modMaintenance(int amount, uint type = 0);
		@doc Modify current maintenance costs.

	void modTotalBudget(int amount, uint type = 0);
		@doc Modify total money income.

	void modForwardBudget(int amount);
		@doc Add money to the upcoming budget as a single-time modifier.

	void addBonusBudget(int amount);
		@doc Add money into the bonus budget. Will not go away until spent.

	void modRemainingBudget(int amount);
		@doc Add money to the current budget as a single-time modifier.

	void resetBudget();
		@doc Cycle the budget right now.

	void multBorrowPenalty(double multiply);
		@doc Multiply the penalty for borrowing money from the next cycle.
		@arg Factor to multiply by.


	void modTotalPopulation(double amount);
		@doc Modify the total empire population remembered.


	void writeResources(Message& msg);
		@doc Internal message passing.

shadow:
	void readResources(Message& msg);
		@doc Internal message passing.
};
