This commit is contained in:
Zoryn
2024-10-22 19:01:46 -04:00
11 changed files with 45 additions and 67 deletions

View File

@@ -1,4 +1,13 @@
---------------------------------------------------------------------------------------------------
Version: 2.0.2
Changes:
- Refactored quality handling
- Initial update of the LTN GUI for 2.0
---------------------------------------------------------------------------------------------------
Version: 2.0.1
Bugfixes:
- Migrate the get_rail_segment_entity function call that no longer exists in 2.0
---------------------------------------------------------------------------------------------------
Version: 2.0.0
Changes:
- Initial version of 2.0 compatibility

View File

@@ -1,6 +1,6 @@
{
"name": "cybersyn",
"version": "2.0.0",
"version": "2.0.2",
"title": "Project Cybersyn",
"author": "Mami",
"factorio_version": "2.0",

View File

@@ -588,6 +588,7 @@ local function tick_poll_station(map_data, mod_settings)
local item_name = v.signal.name
local item_count = v.count
local item_type = v.signal.type
-- FIXME handle v.signal.quality
if item_name then
if item_type == "virtual" then
if item_name == SIGNAL_PRIORITY then
@@ -605,6 +606,7 @@ local function tick_poll_station(map_data, mod_settings)
local item_name = v.signal.name
local item_count = v.count
local item_type = v.signal.type
-- FIXME handle v.signal.quality
if item_name then
if item_type == "virtual" then
if item_name == SIGNAL_PRIORITY then

View File

@@ -689,40 +689,8 @@ end
function set_combinator_output(map_data, comb, signals)
local out = map_data.to_output[comb.unit_number]
if out.valid then
--out.get_or_create_control_behavior().parameters = signals
local constBehaviour = out.get_or_create_control_behavior()
if constBehaviour.sections == nil or constBehaviour.sections_count == 0 then
constBehaviour.add_section()
end
if constBehaviour.sections and constBehaviour.sections_count > 0 then
if constBehaviour.sections_count > 1 then
--only the default section, messy but whatever
local i = 1
for _,v in pairs(constBehaviour.sections) do
if i ~= 1 then
constBehaviour.removeSection(i)
end
i = i + 1
end
end
local primarySection = constBehaviour.get_section(1)
local filters = {}
if signals ~= nil then
for _,v in pairs(signals) do
local filt = {
type = v.signal.type,
name = v.signal.name,
quality = nil,
comparator = nil
}
table.insert(filters, filt)
end
end
primarySection.filters = filters
end
-- out is a non-interactable, invisible combinator whiche means players cannot change the number of sections
out.get_or_create_control_behavior().get_section(1).filters = signals or {}
end
end
@@ -757,7 +725,8 @@ function set_comb2(map_data, station)
for item_name, count in pairs(deliveries) do
local i = #signals + 1
local is_fluid = prototypes.item[item_name] == nil--NOTE: this is expensive
signals[i] = {index = i, signal = {type = is_fluid and "fluid" or "item", name = item_name}, count = sign*count}
-- FIXME: the circuit network can only carry exact qualities, so deliveries must provide each quality separately
signals[i] = {value = {type = is_fluid and "fluid" or "item", name = item_name, quality = "normal", comparator = "="}, min = sign*count} -- constant combinator cannot have quality = nil (any)
end
set_combinator_output(map_data, station.entity_comb2, signals)
end

View File

@@ -102,6 +102,7 @@
---@class ManifestEntry
---@field public type string
---@field public name string
---@field public quality string
---@field public count int
---@class Economy

View File

@@ -100,6 +100,7 @@ function inventory_tab.build(map_data, player_data)
if comb1_signals then
for _, signal_ID in pairs(comb1_signals) do
local item = signal_ID.signal.name
-- FIXME handle signal_ID.signal.quality
if item then
if item == search_item then
goto has_match
@@ -136,6 +137,7 @@ function inventory_tab.build(map_data, player_data)
if station.is_stack and item_type == "item" then
r_threshold = r_threshold*get_stack_size(map_data, item.name)
end
-- FIXME handle v.signal.quality
if -count >= r_threshold then
if inventory_requested[item.name] == nil then

View File

@@ -133,6 +133,7 @@ function stations_tab.build(map_data, player_data, query_limit)
if comb1_signals then
for _, signal_ID in pairs(comb1_signals) do
local item = signal_ID.signal.name
-- FIXME handle signal_ID.signal.quality
if item then
if item == search_item then
goto has_match

View File

@@ -104,6 +104,7 @@ function util.slot_table_build_from_station(station)
end
local count = v.count
local name = item.name
-- FIXME handle item.quality
local sprite, img_path, item_string = util.generate_item_references(name)
if sprite ~= nil then
local color
@@ -181,6 +182,7 @@ function util.slot_table_build_from_control_signals(station, map_data)
local item = v.signal
local count = v.count
local name = item.name
-- FIXME handle item.quality
local sprite = ""
local color = "default"
if item.type ~= "virtual" then

View File

@@ -228,7 +228,8 @@ function set_p_wagon_combs(map_data, station, train)
local count_to_fill = min(item_slots_capacity*stack_size, item_count)
local slots_to_fill = ceil(count_to_fill/stack_size)
signals[i] = {index = i, signal = {type = item.type, name = item.name}, count = sign*count_to_fill}
-- FIXME: quality any for now, should match the delivery
signals[i] = {value = {type = item.type, name = item.name}, min = sign*count_to_fill}
item_count = item_count - count_to_fill
item_slots_capacity = item_slots_capacity - slots_to_fill
if comb then
@@ -323,7 +324,8 @@ function set_r_wagon_combs(map_data, station, train)
local stack = inv[stack_i]
if stack.valid_for_read then
local i = #signals + 1
signals[i] = {index = i, signal = {type = "item", name = stack.name}, count = sign*stack.count}
-- FIXME item stacks have quality
signals[i] = {value = {type = "item", name = stack.name, quality = "normal", comparator = "="}, min = sign*stack.count}
end
end
set_combinator_output(map_data, comb, signals)
@@ -334,7 +336,8 @@ function set_r_wagon_combs(map_data, station, train)
local inv = carriage.get_fluid_contents()
for fluid_name, count in pairs(inv) do
local i = #signals + 1
signals[i] = {index = i, signal = {type = "fluid", name = fluid_name}, count = sign*floor(count)}
-- FIXME ? pump conditions can have quality (but why? fluids can only be produced at normal quality and pump filters ignore quality)
signals[i] = {value = {type = "fluid", name = fluid_name, quality = "normal", comparator = "="}, min = sign*floor(count)}
end
set_combinator_output(map_data, comb, signals)
end
@@ -388,10 +391,12 @@ function set_refueler_combs(map_data, refueler, train)
if stack.valid_for_read then
if comb then
local i = #wagon_signals + 1
wagon_signals[i] = {index = i, signal = {type = "item", name = stack.name}, count = stack.count}
-- FIXME fuel items can have quality which improves acceleration and top speed (but not fuel value)
wagon_signals[i] = {value = {type = "item", name = stack.name, quality = "normal", comparator = "="}, min = stack.count}
end
local j = #signals + 1
signals[j] = {index = j, signal = {type = "item", name = stack.name}, count = stack.count}
-- FIXME fuel items can have quality which improves acceleration and top speed (but not fuel value)
signals[j] = {value = {type = "item", name = stack.name, quality = "normal", comparator = "="}, min = stack.count}
end
end
if comb then
@@ -650,27 +655,12 @@ end
function update_stop_from_rail(map_data, rail, forbidden_entity, force)
--NOTE: is this a correct way to figure out the direction?
---@type LuaEntity?
local rail_front = rail
---@type LuaEntity?
local rail_back = rail
---@type defines.rail_direction
for i = 1, 112 do
if rail_back then
local entity = rail_back.get_rail_segment_signal(defines_back, false)
if entity and entity.name == "train-stop" then
resolve_update_stop_from_rail(map_data, entity, forbidden_entity, force)
return
end
rail_back = rail_back.get_connected_rail({rail_direction = defines_back, rail_connection_direction = defines_straight})
end
if rail_front then
local entity = rail_front.get_rail_segment_signal(defines_front, false)
if entity and entity.name == "train-stop" then
resolve_update_stop_from_rail(map_data, entity, forbidden_entity, force)
return
end
rail_front = rail_front.get_connected_rail({rail_direction = defines_front, rail_connection_direction = defines_straight})
end
local stop = rail.get_rail_segment_stop(defines_front)
if not stop then
stop = rail.get_rail_segment_stop(defines_back)
end
if stop then
resolve_update_stop_from_rail(map_data, stop, forbidden_entity, force)
end
end

View File

@@ -259,11 +259,13 @@ local function on_combinator_built(map_data, comb)
force = comb.force
})
assert(out, "cybersyn: could not spawn combinator controller")
local wireConnectorRed = comb.get_wire_connector(defines.wire_connector_id.circuit_red, true)
local wireConnectorGreen = comb.get_wire_connector(defines.wire_connector_id.circuit_green, true)
local comb_red = comb.get_wire_connector(defines.wire_connector_id.combinator_output_red, true)
local out_red = out.get_wire_connector(defines.wire_connector_id.circuit_red, true)
out_red.connect_to(comb_red, false, defines.wire_origin.script)
wireConnectorRed.connect_to(out.get_wire_connector(defines.wire_connector_id.circuit_red, true))
wireConnectorGreen.connect_to(out.get_wire_connector(defines.wire_connector_id.circuit_green, true))
local comb_green = comb.get_wire_connector(defines.wire_connector_id.combinator_output_green, true)
local out_green = out.get_wire_connector(defines.wire_connector_id.circuit_green, true)
out_green.connect_to(comb_green, false, defines.wire_origin.script)
local control = get_comb_control(comb)
local params = control.parameters

View File

@@ -13,7 +13,7 @@ local function set_comb1(map_data, station, manifest, sign)
if manifest then
local signals = {}
for i, item in ipairs(manifest) do
signals[i] = {index = i, signal = {type = item.type, name = item.name}, count = sign*item.count}
signals[i] = {value = {type = item.type, name = item.name, quality = item.quality or "normal", comparator = "="}, min = sign*item.count}
end
set_combinator_output(map_data, comb, signals)
else