Unlock negative-sentinel company condition scopes

This commit is contained in:
Jan Petykiewicz 2026-04-15 14:21:12 -07:00
commit 087ebf1097
18 changed files with 1315 additions and 79 deletions

View file

@ -247,14 +247,12 @@ impl CompanyFinanceState {
self.current_dividend_per_share = new_rate.clamp(0.0, self.board_dividend_ceiling);
}
pub fn read_recent_metric(
&self,
metric: AnnualReportMetric,
years_ago: usize,
) -> Option<f64> {
pub fn read_recent_metric(&self, metric: AnnualReportMetric, years_ago: usize) -> Option<f64> {
match metric {
AnnualReportMetric::FuelCost if years_ago == 0 => Some(self.current_fuel_cost as f64),
AnnualReportMetric::BookValuePerShare if years_ago == 0 => Some(self.book_value_per_share),
AnnualReportMetric::BookValuePerShare if years_ago == 0 => {
Some(self.book_value_per_share)
}
AnnualReportMetric::NetProfits => self
.recent_net_profits
.get(years_ago)
@ -278,11 +276,7 @@ impl CompanyFinanceState {
}
}
pub fn read_recent_metric_window(
&self,
metric: AnnualReportMetric,
years: usize,
) -> Vec<f64> {
pub fn read_recent_metric_window(&self, metric: AnnualReportMetric, years: usize) -> Vec<f64> {
(0..years)
.filter_map(|years_ago| self.read_recent_metric(metric, years_ago))
.collect()
@ -457,7 +451,10 @@ fn should_bankrupt_deep_distress(
&& company.current_cash < -300_000
&& company.years_since_founding >= 3
&& company.years_since_last_bankruptcy >= 5
&& company.recent_net_profits.iter().all(|profit| *profit <= -20_000)
&& company
.recent_net_profits
.iter()
.all(|profit| *profit <= -20_000)
}
fn issue_bond_evaluation(
@ -552,9 +549,8 @@ fn issue_stock_evaluation(
return None;
}
let mut tranche =
((company.outstanding_share_count / 10) / CompanyFinanceState::SHARE_LOT)
* CompanyFinanceState::SHARE_LOT;
let mut tranche = ((company.outstanding_share_count / 10) / CompanyFinanceState::SHARE_LOT)
* CompanyFinanceState::SHARE_LOT;
tranche = tranche.max(2_000);
while tranche >= CompanyFinanceState::SHARE_LOT
&& company.support_adjusted_share_price * tranche as f64 > 55_000.0