mirror of
https://github.com/Xevion/project-cybersyn.git
synced 2025-12-09 04:08:13 -06:00
added type annotations
This commit is contained in:
@@ -1,6 +1,8 @@
|
|||||||
--By Mami
|
--By Mami
|
||||||
|
|
||||||
local send_missing_train_alert_for_stop_icon = {name = MISSING_TRAIN_NAME, type = "fluid"}
|
local send_missing_train_alert_for_stop_icon = {name = MISSING_TRAIN_NAME, type = "fluid"}
|
||||||
|
---@param r_stop LuaEntity
|
||||||
|
---@param p_stop LuaEntity
|
||||||
function send_missing_train_alert_for_stops(r_stop, p_stop)
|
function send_missing_train_alert_for_stops(r_stop, p_stop)
|
||||||
for _, player in pairs(r_stop.force.players) do
|
for _, player in pairs(r_stop.force.players) do
|
||||||
player.add_custom_alert(
|
player.add_custom_alert(
|
||||||
@@ -13,26 +15,34 @@ function send_missing_train_alert_for_stops(r_stop, p_stop)
|
|||||||
end
|
end
|
||||||
|
|
||||||
local send_lost_train_alert_icon = {name = LOST_TRAIN_NAME, type = "fluid"}
|
local send_lost_train_alert_icon = {name = LOST_TRAIN_NAME, type = "fluid"}
|
||||||
|
---@param train LuaTrain
|
||||||
function send_lost_train_alert(train)
|
function send_lost_train_alert(train)
|
||||||
for _, player in pairs(train.force.players) do
|
local loco = train.front_stock or train.back_stock
|
||||||
player.add_custom_alert(
|
if loco then
|
||||||
train,
|
for _, player in pairs(loco.force.players) do
|
||||||
send_lost_train_alert_icon,
|
player.add_custom_alert(
|
||||||
{"cybersyn-messages.lost-train"},
|
loco,
|
||||||
true
|
send_lost_train_alert_icon,
|
||||||
)
|
{"cybersyn-messages.lost-train"},
|
||||||
|
true
|
||||||
|
)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
local send_nonempty_train_in_depot_alert_icon = {name = NONEMPTY_TRAIN_NAME, type = "fluid"}
|
local send_nonempty_train_in_depot_alert_icon = {name = NONEMPTY_TRAIN_NAME, type = "fluid"}
|
||||||
|
---@param train LuaTrain
|
||||||
function send_nonempty_train_in_depot_alert(train)
|
function send_nonempty_train_in_depot_alert(train)
|
||||||
for _, player in pairs(train.force.players) do
|
local loco = train.front_stock or train.back_stock
|
||||||
player.add_custom_alert(
|
if loco then
|
||||||
train,
|
for _, player in pairs(loco.force.players) do
|
||||||
send_nonempty_train_in_depot_alert_icon,
|
player.add_custom_alert(
|
||||||
{"cybersyn-messages.nonempty-train"},
|
loco,
|
||||||
true
|
send_nonempty_train_in_depot_alert_icon,
|
||||||
)
|
{"cybersyn-messages.nonempty-train"},
|
||||||
|
true
|
||||||
|
)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ local math = math
|
|||||||
local INF = math.huge
|
local INF = math.huge
|
||||||
|
|
||||||
local create_loading_order_condition = {type = "inactivity", compare_type = "and", ticks = 120}
|
local create_loading_order_condition = {type = "inactivity", compare_type = "and", ticks = 120}
|
||||||
|
---@param stop LuaEntity
|
||||||
|
---@param manifest Manifest
|
||||||
function create_loading_order(stop, manifest)
|
function create_loading_order(stop, manifest)
|
||||||
local condition = {}
|
local condition = {}
|
||||||
for _, item in ipairs(manifest) do
|
for _, item in ipairs(manifest) do
|
||||||
@@ -25,24 +27,32 @@ function create_loading_order(stop, manifest)
|
|||||||
end
|
end
|
||||||
|
|
||||||
local create_unloading_order_condition = {{type = "empty", compare_type = "and"}}
|
local create_unloading_order_condition = {{type = "empty", compare_type = "and"}}
|
||||||
|
---@param stop LuaEntity
|
||||||
function create_unloading_order(stop)
|
function create_unloading_order(stop)
|
||||||
return {station = stop.backer_name, wait_conditions = create_unloading_order_condition}
|
return {station = stop.backer_name, wait_conditions = create_unloading_order_condition}
|
||||||
end
|
end
|
||||||
|
|
||||||
local create_inactivity_order_condition = {{type = "inactivity", compare_type = "and", ticks = 120}}
|
local create_inactivity_order_condition = {{type = "inactivity", compare_type = "and", ticks = 120}}
|
||||||
|
---@param depot_name string
|
||||||
function create_inactivity_order(depot_name)
|
function create_inactivity_order(depot_name)
|
||||||
return {station = depot_name, wait_conditions = create_inactivity_order_condition}
|
return {station = depot_name, wait_conditions = create_inactivity_order_condition}
|
||||||
end
|
end
|
||||||
|
|
||||||
local create_direct_to_station_order_condition = {{type = "time", compare_type = "and", ticks = 0}}
|
local create_direct_to_station_order_condition = {{type = "time", compare_type = "and", ticks = 0}}
|
||||||
|
---@param stop LuaEntity
|
||||||
local function create_direct_to_station_order(stop)
|
local function create_direct_to_station_order(stop)
|
||||||
return {rail = stop.connected_rail, rail_direction = stop.connected_rail_direction}
|
return {rail = stop.connected_rail, rail_direction = stop.connected_rail_direction}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---@param depot_name string
|
||||||
function create_depot_schedule(depot_name)
|
function create_depot_schedule(depot_name)
|
||||||
return {current = 1, records = {create_inactivity_order(depot_name)}}
|
return {current = 1, records = {create_inactivity_order(depot_name)}}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---@param depot_name string
|
||||||
|
---@param p_stop LuaEntity
|
||||||
|
---@param r_stop LuaEntity
|
||||||
|
---@param manifest Manifest
|
||||||
function create_manifest_schedule(depot_name, p_stop, r_stop, manifest)
|
function create_manifest_schedule(depot_name, p_stop, r_stop, manifest)
|
||||||
return {current = 1, records = {
|
return {current = 1, records = {
|
||||||
create_inactivity_order(depot_name),
|
create_inactivity_order(depot_name),
|
||||||
@@ -53,16 +63,19 @@ function create_manifest_schedule(depot_name, p_stop, r_stop, manifest)
|
|||||||
}}
|
}}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---@param station Station
|
||||||
local function get_signals(station)
|
local function get_signals(station)
|
||||||
if station.comb1.valid then
|
if station.entity_comb1.valid then
|
||||||
local signals = station.comb1.get_merged_signals(defines.circuit_connector_id.combinator_input)
|
local signals = station.entity_comb1.get_merged_signals(defines.circuit_connector_id.combinator_input)
|
||||||
return signals
|
return signals
|
||||||
else
|
else
|
||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---@param map_data MapData
|
||||||
|
---@param comb LuaEntity
|
||||||
|
---@param signals ConstantCombinatorParameters[]?
|
||||||
function set_combinator_output(map_data, comb, signals)
|
function set_combinator_output(map_data, comb, signals)
|
||||||
if comb.valid then
|
if comb.valid then
|
||||||
local out = map_data.to_output[comb.unit_number]
|
local out = map_data.to_output[comb.unit_number]
|
||||||
@@ -76,8 +89,10 @@ function set_combinator_output(map_data, comb, signals)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---@param map_data MapData
|
||||||
|
---@param station Station
|
||||||
local function set_comb2(map_data, station)
|
local function set_comb2(map_data, station)
|
||||||
if station.comb2 then
|
if station.entity_comb2 then
|
||||||
local deliveries = station.deliveries
|
local deliveries = station.deliveries
|
||||||
local signals = {}
|
local signals = {}
|
||||||
for item_name, count in pairs(deliveries) do
|
for item_name, count in pairs(deliveries) do
|
||||||
@@ -85,10 +100,13 @@ local function set_comb2(map_data, station)
|
|||||||
local item_type = game.item_prototypes[item_name].type
|
local item_type = game.item_prototypes[item_name].type
|
||||||
signals[i] = {index = i, signal = {type = item_type, name = item_name}, count = count}
|
signals[i] = {index = i, signal = {type = item_type, name = item_name}, count = count}
|
||||||
end
|
end
|
||||||
set_combinator_output(map_data, station.comb2, signals)
|
set_combinator_output(map_data, station.entity_comb2, signals)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---@param map_data MapData
|
||||||
|
---@param station Station
|
||||||
|
---@param manifest Manifest
|
||||||
function remove_manifest(map_data, station, manifest, sign)
|
function remove_manifest(map_data, station, manifest, sign)
|
||||||
local deliveries = station.deliveries
|
local deliveries = station.deliveries
|
||||||
for i, item in ipairs(manifest) do
|
for i, item in ipairs(manifest) do
|
||||||
@@ -101,8 +119,11 @@ function remove_manifest(map_data, station, manifest, sign)
|
|||||||
station.deliveries_total = station.deliveries_total - 1
|
station.deliveries_total = station.deliveries_total - 1
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---@param map_data MapData
|
||||||
|
---@param station Station
|
||||||
|
---@param signal SignalID
|
||||||
local function get_thresholds(map_data, station, signal)
|
local function get_thresholds(map_data, station, signal)
|
||||||
local comb2 = station.comb2
|
local comb2 = station.entity_comb2
|
||||||
if comb2 and comb2.valid then
|
if comb2 and comb2.valid then
|
||||||
local count = comb2.get_merged_signal(signal, defines.circuit_connector_id.combinator_input)
|
local count = comb2.get_merged_signal(signal, defines.circuit_connector_id.combinator_input)
|
||||||
if count > 0 then
|
if count > 0 then
|
||||||
@@ -114,16 +135,25 @@ local function get_thresholds(map_data, station, signal)
|
|||||||
return station.r_threshold, station.p_threshold
|
return station.r_threshold, station.p_threshold
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---@param stop0 LuaEntity
|
||||||
|
---@param stop1 LuaEntity
|
||||||
local function get_stop_dist(stop0, stop1)
|
local function get_stop_dist(stop0, stop1)
|
||||||
return get_distance(stop0.position, stop1.position)
|
return get_distance(stop0.position, stop1.position)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
---@param station Station
|
||||||
|
---@param layout_id uint
|
||||||
local function station_accepts_layout(station, layout_id)
|
local function station_accepts_layout(station, layout_id)
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
---@param map_data MapData
|
||||||
|
---@param r_station_id uint
|
||||||
|
---@param p_station_id uint
|
||||||
|
---@param item_type string
|
||||||
local function get_valid_train(map_data, r_station_id, p_station_id, item_type)
|
local function get_valid_train(map_data, r_station_id, p_station_id, item_type)
|
||||||
--NOTE: this code is the critical section for run-time optimization
|
--NOTE: this code is the critical section for run-time optimization
|
||||||
local r_station = map_data.stations[r_station_id]
|
local r_station = map_data.stations[r_station_id]
|
||||||
@@ -147,7 +177,7 @@ local function get_valid_train(map_data, r_station_id, p_station_id, item_type)
|
|||||||
((is_fluid and train.fluid_capacity > 0) or (not is_fluid and train.item_slot_capacity > 0))
|
((is_fluid and train.fluid_capacity > 0) or (not is_fluid and train.item_slot_capacity > 0))
|
||||||
and station_accepts_layout(r_station, train.layout_id)
|
and station_accepts_layout(r_station, train.layout_id)
|
||||||
and station_accepts_layout(p_station, train.layout_id)
|
and station_accepts_layout(p_station, train.layout_id)
|
||||||
and train.entity_stop.station
|
and train.entity.station
|
||||||
then
|
then
|
||||||
valid_train_exists = true
|
valid_train_exists = true
|
||||||
--check if exists valid path
|
--check if exists valid path
|
||||||
@@ -170,6 +200,12 @@ local function get_valid_train(map_data, r_station_id, p_station_id, item_type)
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
---@param map_data MapData
|
||||||
|
---@param r_station_id uint
|
||||||
|
---@param p_station_id uint
|
||||||
|
---@param train Train
|
||||||
|
---@param primary_item_name string
|
||||||
|
---@param economy Economy
|
||||||
local function send_train_between(map_data, r_station_id, p_station_id, train, primary_item_name, economy)
|
local function send_train_between(map_data, r_station_id, p_station_id, train, primary_item_name, economy)
|
||||||
local r_station = map_data.stations[r_station_id]
|
local r_station = map_data.stations[r_station_id]
|
||||||
local p_station = map_data.stations[p_station_id]
|
local p_station = map_data.stations[p_station_id]
|
||||||
@@ -185,7 +221,7 @@ local function send_train_between(map_data, r_station_id, p_station_id, train, p
|
|||||||
local item_type = v.signal.type
|
local item_type = v.signal.type
|
||||||
if item_name and item_type and item_type ~= "virtual" then
|
if item_name and item_type and item_type ~= "virtual" then
|
||||||
local effective_item_count = item_count + (r_station.deliveries[item_name] or 0)
|
local effective_item_count = item_count + (r_station.deliveries[item_name] or 0)
|
||||||
local r_threshold, p_threshold = get_thresholds(map_data, r_station, v)
|
local r_threshold, p_threshold = get_thresholds(map_data, r_station, v.signal)
|
||||||
if -effective_item_count >= r_threshold then
|
if -effective_item_count >= r_threshold then
|
||||||
requests[item_name] = -effective_item_count
|
requests[item_name] = -effective_item_count
|
||||||
end
|
end
|
||||||
@@ -201,7 +237,7 @@ local function send_train_between(map_data, r_station_id, p_station_id, train, p
|
|||||||
local item_type = v.signal.type
|
local item_type = v.signal.type
|
||||||
if item_name and item_type and item_type ~= "virtual" then
|
if item_name and item_type and item_type ~= "virtual" then
|
||||||
local effective_item_count = item_count + (p_station.deliveries[item_name] or 0)
|
local effective_item_count = item_count + (p_station.deliveries[item_name] or 0)
|
||||||
local r_threshold, p_threshold = get_thresholds(map_data, r_station, v)
|
local r_threshold, p_threshold = get_thresholds(map_data, r_station, v.signal)
|
||||||
if effective_item_count >= p_threshold then
|
if effective_item_count >= p_threshold then
|
||||||
local r = requests[item_name]
|
local r = requests[item_name]
|
||||||
if r then
|
if r then
|
||||||
@@ -293,7 +329,7 @@ local function send_train_between(map_data, r_station_id, p_station_id, train, p
|
|||||||
set_comb2(map_data, r_station)
|
set_comb2(map_data, r_station)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---@param map_data MapData
|
||||||
function tick(map_data, mod_settings)
|
function tick(map_data, mod_settings)
|
||||||
local total_ticks = map_data.total_ticks
|
local total_ticks = map_data.total_ticks
|
||||||
local stations = map_data.stations
|
local stations = map_data.stations
|
||||||
@@ -340,24 +376,26 @@ function tick(map_data, mod_settings)
|
|||||||
local item_name = v.signal.name
|
local item_name = v.signal.name
|
||||||
local item_count = v.count
|
local item_count = v.count
|
||||||
local effective_item_count = item_count + (station.deliveries[item_name] or 0)
|
local effective_item_count = item_count + (station.deliveries[item_name] or 0)
|
||||||
local r_threshold, p_threshold = get_thresholds(map_data, station, v)
|
local r_threshold, p_threshold = get_thresholds(map_data, station, v.signal)
|
||||||
|
|
||||||
if -effective_item_count >= r_threshold then
|
if item_name then
|
||||||
if r_stations_all[item_name] == nil then
|
if -effective_item_count >= r_threshold then
|
||||||
r_stations_all[item_name] = {}
|
if r_stations_all[item_name] == nil then
|
||||||
p_stations_all[item_name] = {}
|
r_stations_all[item_name] = {}
|
||||||
all_items[#all_items + 1] = item_name
|
p_stations_all[item_name] = {}
|
||||||
all_items[#all_items + 1] = v.signal.type
|
all_items[#all_items + 1] = item_name
|
||||||
|
all_items[#all_items + 1] = v.signal.type
|
||||||
|
end
|
||||||
|
table.insert(r_stations_all[item_name], station_id)
|
||||||
|
elseif effective_item_count >= p_threshold then
|
||||||
|
if r_stations_all[item_name] == nil then
|
||||||
|
r_stations_all[item_name] = {}
|
||||||
|
p_stations_all[item_name] = {}
|
||||||
|
all_items[#all_items + 1] = item_name
|
||||||
|
all_items[#all_items + 1] = v.signal.type
|
||||||
|
end
|
||||||
|
table.insert(p_stations_all[item_name], station_id)
|
||||||
end
|
end
|
||||||
table.insert(r_stations_all[item_name], station_id)
|
|
||||||
elseif effective_item_count >= p_threshold then
|
|
||||||
if r_stations_all[item_name] == nil then
|
|
||||||
r_stations_all[item_name] = {}
|
|
||||||
p_stations_all[item_name] = {}
|
|
||||||
all_items[#all_items + 1] = item_name
|
|
||||||
all_items[#all_items + 1] = v.signal.type
|
|
||||||
end
|
|
||||||
table.insert(p_stations_all[item_name], station_id)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,60 +1,54 @@
|
|||||||
--By Mami
|
--By Mami
|
||||||
|
---@class MapData
|
||||||
|
---@field public total_ticks uint
|
||||||
|
---@field public layout_top_id uint
|
||||||
|
---@field public to_output {[uint]: LuaEntity}
|
||||||
|
---@field public to_stop {[uint]: LuaEntity}
|
||||||
|
---@field public stations {[uint]: Station}
|
||||||
|
---@field public depots {[uint]: LuaEntity}
|
||||||
|
---@field public trains {[uint]: Train}
|
||||||
|
---@field public trains_available {[uint]: boolean}
|
||||||
|
---@field public layouts {[uint]: string}
|
||||||
|
---@field public layout_train_count {[uint]: int}
|
||||||
|
---@field public train_classes {[string]: TrainClass}
|
||||||
|
|
||||||
|
---@class Station
|
||||||
|
---@field public deliveries_total int
|
||||||
|
---@field public priority int
|
||||||
|
---@field public last_delivery_tick int
|
||||||
|
---@field public r_threshold int >= 0
|
||||||
|
---@field public p_threshold int >= 0
|
||||||
|
---@field public locked_slots int >= 0
|
||||||
|
---@field public entity_stop LuaEntity
|
||||||
|
---@field public entity_comb1 LuaEntity
|
||||||
|
---@field public entity_comb2 LuaEntity?
|
||||||
|
---@field public wagon_combs {[int]: LuaEntity}?--allowed to be invalid entities
|
||||||
|
---@field public deliveries {[string]: int}
|
||||||
|
---@field public train_class string
|
||||||
|
---@field public accepted_layouts TrainClass
|
||||||
|
---@field public layout_pattern string?
|
||||||
|
|
||||||
|
---@class Train
|
||||||
|
---@field public entity LuaTrain
|
||||||
|
---@field public layout_id uint
|
||||||
|
---@field public item_slot_capacity int
|
||||||
|
---@field public fluid_capacity int
|
||||||
|
---@field public depot_name string
|
||||||
|
---@field public status int
|
||||||
|
---@field public p_station_id uint
|
||||||
|
---@field public r_station_id uint
|
||||||
|
---@field public manifest Manifest
|
||||||
|
|
||||||
|
---@alias Manifest {}[]
|
||||||
|
---@alias TrainClass {[uint]: boolean}
|
||||||
|
---@alias cybersyn.global MapData
|
||||||
|
|
||||||
|
---@class Economy
|
||||||
|
---@field public r_stations_all {[string]: uint[]}
|
||||||
|
---@field public p_stations_all {[string]: uint[]}
|
||||||
|
---@field public all_items string[]
|
||||||
|
---@field public total_ticks uint
|
||||||
|
|
||||||
--[[
|
|
||||||
global: {
|
|
||||||
total_ticks: int
|
|
||||||
layout_top_id: int
|
|
||||||
to_output: {[comb_unit_number]: LuaEntity}
|
|
||||||
to_stop: {[comb_unit_number]: LuaEntity}
|
|
||||||
stations: {[stop_id]: Station}
|
|
||||||
depots: {[stop_id]: LuaEntity}
|
|
||||||
trains: {[train_id]: Train}
|
|
||||||
trains_available: {[train_id]: bool}
|
|
||||||
layouts: {[layout_id]: Layout}
|
|
||||||
layout_train_count: {[layout_id]: int}
|
|
||||||
train_classes: {[string]: TrainClass}
|
|
||||||
}
|
|
||||||
Station: {
|
|
||||||
deliveries_total: int
|
|
||||||
priority: int
|
|
||||||
last_delivery_tick: int
|
|
||||||
r_threshold: int >= 0
|
|
||||||
p_threshold: int >= 0
|
|
||||||
locked_slots: int >= 0
|
|
||||||
entity_stop: LuaEntity
|
|
||||||
entity_comb1: LuaEntity
|
|
||||||
entity_comb2: LuaEntity?
|
|
||||||
wagon_combs: {[int]: LuaEntity}--allowed to be invalid entities
|
|
||||||
deliveries: {
|
|
||||||
[item_name]: int
|
|
||||||
}
|
|
||||||
deliveries: {
|
|
||||||
[item_name]: item-type
|
|
||||||
}
|
|
||||||
train_class: string
|
|
||||||
accepted_layouts: TrainClass
|
|
||||||
layout_pattern: string|nil
|
|
||||||
}
|
|
||||||
Train: {
|
|
||||||
entity: LuaEntity
|
|
||||||
layout_id: int
|
|
||||||
item_slot_capacity: int
|
|
||||||
fluid_capacity: int
|
|
||||||
depot_name: string
|
|
||||||
status: int
|
|
||||||
p_station_id: stop_id
|
|
||||||
r_station_id: stop_id
|
|
||||||
manifest: [{
|
|
||||||
name: string
|
|
||||||
type: string
|
|
||||||
count: int
|
|
||||||
}]
|
|
||||||
}
|
|
||||||
TrainClass: {
|
|
||||||
[layout_id]: bool
|
|
||||||
}
|
|
||||||
Layout: string
|
|
||||||
]]
|
|
||||||
--TODO: only init once
|
--TODO: only init once
|
||||||
mod_settings = {}
|
mod_settings = {}
|
||||||
mod_settings.tps = settings.global["cybersyn-ticks-per-second"].value
|
mod_settings.tps = settings.global["cybersyn-ticks-per-second"].value
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
--By Mami
|
--By Mami
|
||||||
local area = require("__flib__.area")
|
local area = require("__flib__.area")
|
||||||
|
|
||||||
|
---@param map_data MapData
|
||||||
|
---@param train Train
|
||||||
|
---@param train_id uint
|
||||||
function remove_train(map_data, train, train_id)
|
function remove_train(map_data, train, train_id)
|
||||||
map_data.trains[train_id] = nil
|
map_data.trains[train_id] = nil
|
||||||
map_data.trains_available[train_id] = nil
|
map_data.trains_available[train_id] = nil
|
||||||
@@ -18,6 +21,8 @@ function remove_train(map_data, train, train_id)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---@param map_data MapData
|
||||||
|
---@param train Train
|
||||||
function update_train_layout(map_data, train)
|
function update_train_layout(map_data, train)
|
||||||
local carriages = train.entity.carriages
|
local carriages = train.entity.carriages
|
||||||
local layout = ""
|
local layout = ""
|
||||||
@@ -68,17 +73,18 @@ function update_train_layout(map_data, train)
|
|||||||
train.fluid_capacity = fluid_capacity
|
train.fluid_capacity = fluid_capacity
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---@param map_data MapData
|
||||||
|
---@param station Station
|
||||||
local function reset_station_layout(map_data, station)
|
local function reset_station_layout(map_data, station)
|
||||||
--station.entity
|
local station_rail = station.entity_stop.connected_rail
|
||||||
local station_rail = station.entity.connected_rail
|
|
||||||
local rail_direction_from_station
|
local rail_direction_from_station
|
||||||
if station.entity.connected_rail_direction == defines.rail_direction.front then
|
if station.entity_stop.connected_rail_direction == defines.rail_direction.front then
|
||||||
rail_direction_from_station = defines.rail_direction.back
|
rail_direction_from_station = defines.rail_direction.back
|
||||||
else
|
else
|
||||||
rail_direction_from_station = defines.rail_direction.front
|
rail_direction_from_station = defines.rail_direction.front
|
||||||
end
|
end
|
||||||
local station_direction = station.entity.direction
|
local station_direction = station.entity_stop.direction
|
||||||
local surface = station.entity.surface
|
local surface = station.entity_stop.surface
|
||||||
local middle_x = station_rail.position.x
|
local middle_x = station_rail.position.x
|
||||||
local middle_y = station_rail.position.y
|
local middle_y = station_rail.position.y
|
||||||
local reach = LONGEST_INSERTER_REACH + 1 - DELTA
|
local reach = LONGEST_INSERTER_REACH + 1 - DELTA
|
||||||
@@ -167,6 +173,9 @@ local function reset_station_layout(map_data, station)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---@param map_data MapData
|
||||||
|
---@param station Station
|
||||||
|
---@param train_class_name string
|
||||||
function set_station_train_class(map_data, station, train_class_name)
|
function set_station_train_class(map_data, station, train_class_name)
|
||||||
if train_class_name == TRAIN_CLASS_AUTO then
|
if train_class_name == TRAIN_CLASS_AUTO then
|
||||||
if station.train_class ~= TRAIN_CLASS_AUTO then
|
if station.train_class ~= TRAIN_CLASS_AUTO then
|
||||||
@@ -182,12 +191,16 @@ function set_station_train_class(map_data, station, train_class_name)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---@param map_data MapData
|
||||||
|
---@param station Station
|
||||||
function update_station_if_auto(map_data, station)
|
function update_station_if_auto(map_data, station)
|
||||||
if station.train_class == TRAIN_CLASS_AUTO then
|
if station.train_class == TRAIN_CLASS_AUTO then
|
||||||
reset_station_layout(map_data, station)
|
reset_station_layout(map_data, station)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---@param map_data MapData
|
||||||
|
---@param rail LuaEntity
|
||||||
function update_station_from_rail(map_data, rail)
|
function update_station_from_rail(map_data, rail)
|
||||||
--TODO: search further?
|
--TODO: search further?
|
||||||
local entity = rail.get_rail_segment_entity(nil, false)
|
local entity = rail.get_rail_segment_entity(nil, false)
|
||||||
@@ -195,11 +208,15 @@ function update_station_from_rail(map_data, rail)
|
|||||||
update_station_if_auto(map_data, map_data.stations[entity.unit_number])
|
update_station_if_auto(map_data, map_data.stations[entity.unit_number])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
---@param map_data MapData
|
||||||
|
---@param pump LuaEntity
|
||||||
function update_station_from_pump(map_data, pump)
|
function update_station_from_pump(map_data, pump)
|
||||||
if pump.pump_rail_target then
|
if pump.pump_rail_target then
|
||||||
update_station_from_rail(map_data, pump.pump_rail_target)
|
update_station_from_rail(map_data, pump.pump_rail_target)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
---@param map_data MapData
|
||||||
|
---@param inserter LuaEntity
|
||||||
function update_station_from_inserter(map_data, inserter)
|
function update_station_from_inserter(map_data, inserter)
|
||||||
--TODO: check if correct
|
--TODO: check if correct
|
||||||
local surface = inserter.surface
|
local surface = inserter.surface
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
--By Mami
|
--By Mami
|
||||||
|
|
||||||
|
---@param map_data MapData
|
||||||
|
---@param train Train
|
||||||
local function on_failed_delivery(map_data, train)
|
local function on_failed_delivery(map_data, train)
|
||||||
--NOTE: must change train status to STATUS_D or remove it from tracked trains after this call
|
--NOTE: must change train status to STATUS_D or remove it from tracked trains after this call
|
||||||
local is_p_delivery_made = train.status ~= STATUS_D_TO_P and train.status ~= STATUS_P
|
local is_p_delivery_made = train.status ~= STATUS_D_TO_P and train.status ~= STATUS_P
|
||||||
@@ -7,7 +9,7 @@ local function on_failed_delivery(map_data, train)
|
|||||||
local station = map_data.stations[train.p_station_id]
|
local station = map_data.stations[train.p_station_id]
|
||||||
remove_manifest(map_data, station, train.manifest, 1)
|
remove_manifest(map_data, station, train.manifest, 1)
|
||||||
if train.status == STATUS_P then
|
if train.status == STATUS_P then
|
||||||
set_combinator_output(map_data, station.comb1, nil)
|
set_combinator_output(map_data, station.entity_comb1, nil)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
local is_r_delivery_made = train.status == STATUS_R_TO_D
|
local is_r_delivery_made = train.status == STATUS_R_TO_D
|
||||||
@@ -15,7 +17,7 @@ local function on_failed_delivery(map_data, train)
|
|||||||
local station = map_data.stations[train.r_station_id]
|
local station = map_data.stations[train.r_station_id]
|
||||||
remove_manifest(map_data, station, train.manifest, -1)
|
remove_manifest(map_data, station, train.manifest, -1)
|
||||||
if train.status == STATUS_R then
|
if train.status == STATUS_R then
|
||||||
set_combinator_output(map_data, station.comb1, nil)
|
set_combinator_output(map_data, station.entity_comb1, nil)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
train.r_station_id = 0
|
train.r_station_id = 0
|
||||||
@@ -23,6 +25,10 @@ local function on_failed_delivery(map_data, train)
|
|||||||
train.manifest = nil
|
train.manifest = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---@param map_data MapData
|
||||||
|
---@param stop LuaEntity
|
||||||
|
---@param comb1 LuaEntity
|
||||||
|
---@param comb2 LuaEntity
|
||||||
local function on_station_built(map_data, stop, comb1, comb2)
|
local function on_station_built(map_data, stop, comb1, comb2)
|
||||||
local station = {
|
local station = {
|
||||||
entity_stop = stop,
|
entity_stop = stop,
|
||||||
@@ -44,6 +50,9 @@ local function on_station_built(map_data, stop, comb1, comb2)
|
|||||||
|
|
||||||
update_station_if_auto(map_data, station)
|
update_station_if_auto(map_data, station)
|
||||||
end
|
end
|
||||||
|
---@param map_data MapData
|
||||||
|
---@param station_id uint
|
||||||
|
---@param station Station
|
||||||
local function on_station_broken(map_data, station_id, station)
|
local function on_station_broken(map_data, station_id, station)
|
||||||
if station.deliveries_total > 0 then
|
if station.deliveries_total > 0 then
|
||||||
--search for trains coming to the destroyed station
|
--search for trains coming to the destroyed station
|
||||||
@@ -66,6 +75,10 @@ local function on_station_broken(map_data, station_id, station)
|
|||||||
map_data.stations[station_id] = nil
|
map_data.stations[station_id] = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---@param map_data MapData
|
||||||
|
---@param stop LuaEntity
|
||||||
|
---@param comb_operation string
|
||||||
|
---@param comb_forbidden LuaEntity?
|
||||||
local function search_for_station_combinator(map_data, stop, comb_operation, comb_forbidden)
|
local function search_for_station_combinator(map_data, stop, comb_operation, comb_forbidden)
|
||||||
local pos_x = stop.position.x
|
local pos_x = stop.position.x
|
||||||
local pos_y = stop.position.y
|
local pos_y = stop.position.y
|
||||||
@@ -88,6 +101,8 @@ local function search_for_station_combinator(map_data, stop, comb_operation, com
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---@param map_data MapData
|
||||||
|
---@param comb LuaEntity
|
||||||
local function on_combinator_built(map_data, comb)
|
local function on_combinator_built(map_data, comb)
|
||||||
local pos_x = comb.position.x
|
local pos_x = comb.position.x
|
||||||
local pos_y = comb.position.y
|
local pos_y = comb.position.y
|
||||||
@@ -116,6 +131,7 @@ local function on_combinator_built(map_data, comb)
|
|||||||
position = comb.position,
|
position = comb.position,
|
||||||
force = comb.force
|
force = comb.force
|
||||||
})
|
})
|
||||||
|
assert(out)
|
||||||
comb.connect_neighbour({
|
comb.connect_neighbour({
|
||||||
target_entity = out,
|
target_entity = out,
|
||||||
source_wire_id = defines.circuit_connector_id.combinator_output,
|
source_wire_id = defines.circuit_connector_id.combinator_output,
|
||||||
@@ -190,6 +206,8 @@ local function on_combinator_built(map_data, comb)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
---@param map_data MapData
|
||||||
|
---@param comb LuaEntity
|
||||||
local function on_combinator_broken(map_data, comb)
|
local function on_combinator_broken(map_data, comb)
|
||||||
local out = map_data.to_output[comb.unit_number]
|
local out = map_data.to_output[comb.unit_number]
|
||||||
local stop = map_data.to_stop[comb.unit_number]
|
local stop = map_data.to_stop[comb.unit_number]
|
||||||
@@ -223,12 +241,16 @@ local function on_combinator_broken(map_data, comb)
|
|||||||
map_data.to_output[comb.unit_number] = nil
|
map_data.to_output[comb.unit_number] = nil
|
||||||
map_data.to_stop[comb.unit_number] = nil
|
map_data.to_stop[comb.unit_number] = nil
|
||||||
end
|
end
|
||||||
|
---@param map_data MapData
|
||||||
|
---@param comb LuaEntity
|
||||||
local function on_combinator_updated(map_data, comb)
|
local function on_combinator_updated(map_data, comb)
|
||||||
--NOTE: this is the lazy way to implement updates and is not robust
|
--NOTE: this is the lazy way to implement updates and is not robust
|
||||||
on_combinator_broken(map_data, comb)
|
on_combinator_broken(map_data, comb)
|
||||||
on_combinator_built(map_data, comb)
|
on_combinator_built(map_data, comb)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---@param map_data MapData
|
||||||
|
---@param stop LuaEntity
|
||||||
local function on_stop_built(map_data, stop)
|
local function on_stop_built(map_data, stop)
|
||||||
local pos_x = stop.position.x
|
local pos_x = stop.position.x
|
||||||
local pos_y = stop.position.y
|
local pos_y = stop.position.y
|
||||||
@@ -261,6 +283,8 @@ local function on_stop_built(map_data, stop)
|
|||||||
map_data.depots[stop.unit_number] = depot_comb
|
map_data.depots[stop.unit_number] = depot_comb
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
---@param map_data MapData
|
||||||
|
---@param stop LuaEntity
|
||||||
local function on_stop_broken(map_data, stop)
|
local function on_stop_broken(map_data, stop)
|
||||||
local pos_x = stop.position.x
|
local pos_x = stop.position.x
|
||||||
local pos_y = stop.position.y
|
local pos_y = stop.position.y
|
||||||
@@ -283,6 +307,8 @@ local function on_stop_broken(map_data, stop)
|
|||||||
end
|
end
|
||||||
map_data.depots[stop.unit_number] = nil
|
map_data.depots[stop.unit_number] = nil
|
||||||
end
|
end
|
||||||
|
---@param map_data MapData
|
||||||
|
---@param stop LuaEntity
|
||||||
local function on_station_rename(map_data, stop)
|
local function on_station_rename(map_data, stop)
|
||||||
--search for trains coming to the renamed station
|
--search for trains coming to the renamed station
|
||||||
local station_id = stop.unit_number
|
local station_id = stop.unit_number
|
||||||
@@ -308,6 +334,7 @@ local function on_station_rename(map_data, stop)
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
---@param map_data MapData
|
||||||
local function find_and_add_all_stations_from_nothing(map_data)
|
local function find_and_add_all_stations_from_nothing(map_data)
|
||||||
for _, surface in pairs(game.surfaces) do
|
for _, surface in pairs(game.surfaces) do
|
||||||
local entities = surface.find_entities_filtered({name = COMBINATOR_NAME})
|
local entities = surface.find_entities_filtered({name = COMBINATOR_NAME})
|
||||||
@@ -320,6 +347,8 @@ local function find_and_add_all_stations_from_nothing(map_data)
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
---@param map_data MapData
|
||||||
|
---@param train_entity LuaTrain
|
||||||
local function on_train_arrives_depot(map_data, train_entity)
|
local function on_train_arrives_depot(map_data, train_entity)
|
||||||
local contents = train_entity.get_contents()
|
local contents = train_entity.get_contents()
|
||||||
local train = map_data.trains[train_entity.id]
|
local train = map_data.trains[train_entity.id]
|
||||||
@@ -370,6 +399,9 @@ local function on_train_arrives_depot(map_data, train_entity)
|
|||||||
send_nonempty_train_in_depot_alert(train_entity)
|
send_nonempty_train_in_depot_alert(train_entity)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
---@param map_data MapData
|
||||||
|
---@param stop LuaEntity
|
||||||
|
---@param train Train
|
||||||
local function on_train_arrives_buffer(map_data, stop, train)
|
local function on_train_arrives_buffer(map_data, stop, train)
|
||||||
local station_id = stop.unit_number
|
local station_id = stop.unit_number
|
||||||
if train.manifest then
|
if train.manifest then
|
||||||
@@ -383,6 +415,11 @@ local function on_train_arrives_buffer(map_data, stop, train)
|
|||||||
signals[i] = {index = i, signal = {type = item.type, name = item.name}, count = item.count}
|
signals[i] = {index = i, signal = {type = item.type, name = item.name}, count = item.count}
|
||||||
end
|
end
|
||||||
set_combinator_output(map_data, station.comb1, signals)
|
set_combinator_output(map_data, station.comb1, signals)
|
||||||
|
if station.wagon_combs then
|
||||||
|
for i, entity in ipairs(station.wagon_combs) do
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
elseif train.status == STATUS_P_TO_R then
|
elseif train.status == STATUS_P_TO_R then
|
||||||
if train.r_station_id == station_id then
|
if train.r_station_id == station_id then
|
||||||
@@ -406,22 +443,27 @@ local function on_train_arrives_buffer(map_data, stop, train)
|
|||||||
remove_train(map_data, train, train.entity.id)
|
remove_train(map_data, train, train.entity.id)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
---@param map_data MapData
|
||||||
|
---@param train Train
|
||||||
local function on_train_leaves_station(map_data, train)
|
local function on_train_leaves_station(map_data, train)
|
||||||
if train.manifest then
|
if train.manifest then
|
||||||
if train.status == STATUS_P then
|
if train.status == STATUS_P then
|
||||||
train.status = STATUS_P_TO_R
|
train.status = STATUS_P_TO_R
|
||||||
local station = map_data.stations[train.p_station_id]
|
local station = map_data.stations[train.p_station_id]
|
||||||
remove_manifest(map_data, station, train.manifest, 1)
|
remove_manifest(map_data, station, train.manifest, 1)
|
||||||
set_combinator_output(map_data, station.comb1, nil)
|
set_combinator_output(map_data, station.entity_comb1, nil)
|
||||||
elseif train.status == STATUS_R then
|
elseif train.status == STATUS_R then
|
||||||
train.status = STATUS_R_TO_D
|
train.status = STATUS_R_TO_D
|
||||||
local station = map_data.stations[train.r_station_id]
|
local station = map_data.stations[train.r_station_id]
|
||||||
remove_manifest(map_data, station, train.manifest, -1)
|
remove_manifest(map_data, station, train.manifest, -1)
|
||||||
set_combinator_output(map_data, station.comb1, nil)
|
set_combinator_output(map_data, station.entity_comb1, nil)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
---@param map_data MapData
|
||||||
|
---@param train Train
|
||||||
local function on_train_broken(map_data, train)
|
local function on_train_broken(map_data, train)
|
||||||
if train.manifest then
|
if train.manifest then
|
||||||
on_failed_delivery(map_data, train)
|
on_failed_delivery(map_data, train)
|
||||||
@@ -431,6 +473,9 @@ local function on_train_broken(map_data, train)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
---@param map_data MapData
|
||||||
|
---@param pre_train_id uint
|
||||||
|
---@param train_entity LuaEntity
|
||||||
local function on_train_modified(map_data, pre_train_id, train_entity)
|
local function on_train_modified(map_data, pre_train_id, train_entity)
|
||||||
local train = map_data.trains[pre_train_id]
|
local train = map_data.trains[pre_train_id]
|
||||||
if train then
|
if train then
|
||||||
@@ -528,7 +573,7 @@ local function on_surface_removed(event)
|
|||||||
local train_stops = surface.find_entities_filtered({type = "train-stop"})
|
local train_stops = surface.find_entities_filtered({type = "train-stop"})
|
||||||
for _, entity in pairs(train_stops) do
|
for _, entity in pairs(train_stops) do
|
||||||
if entity.name == "train-stop" then
|
if entity.name == "train-stop" then
|
||||||
on_station_broken(global, entity)
|
on_stop_broken(global, entity)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user