Skip to content

Commit 94b03c1

Browse files
committed
Refactor and hook up maintenance
1 parent 9944e74 commit 94b03c1

File tree

5 files changed

+24
-6
lines changed

5 files changed

+24
-6
lines changed

src/rails_lib/backend/backend_low.ml

+9
Original file line numberDiff line numberDiff line change
@@ -682,6 +682,15 @@ let handle_cycle v =
682682
let trains, stations, player, tr_msgs = Train_update._update_all_trains v main_player in
683683

684684
(* TODO: ai_routines *)
685+
let player =
686+
if v.cycle mod C.Cycles.periodic_maintenance = 0 then
687+
if ((v.cycle / C.Cycles.periodic_maintenance) mod 2) = 0 then
688+
Player.pay_station_maintenance v.stations player
689+
else
690+
Player.pay_train_maintenance player
691+
else
692+
player
693+
in
685694

686695
let stations, player, dev_state, active_station, pr_msgs =
687696
if v.cycle mod C.Cycles.rare_bgnd_events = 0 then

src/rails_lib/backend/player.ml

+3-1
Original file line numberDiff line numberDiff line change
@@ -505,5 +505,7 @@ let pay_station_maintenance station_map v =
505505
in
506506
pay `StationMaintenance expense v
507507

508-
508+
let pay_train_maintenance v =
509+
let expense = Trainmap.total_maintenance v.trains in
510+
pay `TrainMaintenance expense v
509511

src/rails_lib/backend/train.ml

+1-1
Original file line numberDiff line numberDiff line change
@@ -560,7 +560,7 @@ let get_car_dir (v:'a t) i = (History.get v.history (i+1)).dir
560560

561561
let get_engine_cost v = v.engine.price
562562

563-
let get_num_of_cars v = List.length v.cars
563+
let num_of_cars v = List.length v.cars
564564

565565
let holds_priority_shipment v = v.holds_priority_shipment
566566

src/rails_lib/backend/trainmap.ml

+9-4
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,8 @@ let iteri (f: int -> ro Train.t -> unit) (v:t) = Vector.iteri f @@ _freeze_all v
108108

109109
let fold (f: 'a -> ro Train.t -> 'a) (v:t) ~init = Vector.fold f init @@ _freeze_all v.trains
110110

111+
let sum f v = fold (fun acc train -> acc + f train) ~init:0 v
112+
111113
let foldi (f: int -> 'a -> ro Train.t -> 'a) (v:t) ~init = Vector.foldi f init @@ _freeze_all v.trains
112114

113115
(* R/W *)
@@ -137,11 +139,14 @@ let find_ret_index (f:ro Train.t -> bool) (v:t) =
137139
let get_at_loc loc (v:t) =
138140
Hashtbl.find_opt v.tile_idx loc |> Option.get_or ~default:[]
139141

140-
let total_engine_value (v:t) =
141-
fold (fun acc train -> acc + Train.get_engine_cost train) v ~init:0
142+
let total_engine_value (v:t) = sum Train.get_engine_cost v
143+
144+
let total_car_value (v:t) = C.car_cost * sum Train.num_of_cars v
142145

143-
let total_car_value (v:t) =
144-
C.car_cost * fold (fun acc train -> acc + Train.get_num_of_cars train) v ~init:0
146+
let total_maintenance (v:t) = sum (fun train ->
147+
let num_cars = Train.num_of_cars train in
148+
((train.maintenance_cost / 2 + num_cars) / 2) + 1)
149+
v
145150

146151
let clear_priority_shipment v =
147152
(* Clear priority shipment holding for the given players *)

src/rails_lib/backend/trainmap.mli

+2
Original file line numberDiff line numberDiff line change
@@ -40,5 +40,7 @@ val total_engine_value: t -> int
4040

4141
val total_car_value: t -> int
4242

43+
val total_maintenance: t -> int
44+
4345
val clear_priority_shipment: t -> t
4446

0 commit comments

Comments
 (0)