mirror of
https://github.com/Xevion/project-cybersyn.git
synced 2025-12-10 16:08:13 -06:00
quality must be set from deliveries
Circuit network signals can only have exact qualities and can only set exact filters on inserters. Ultimately this means Cybersyn must handle each quality separately. For now the quality is hardcoded to comparator "=", quality "normal". Cybercyn's output constant combinators won't send signals otherwise.
This commit is contained in:
@@ -689,40 +689,8 @@ end
|
|||||||
function set_combinator_output(map_data, comb, signals)
|
function set_combinator_output(map_data, comb, signals)
|
||||||
local out = map_data.to_output[comb.unit_number]
|
local out = map_data.to_output[comb.unit_number]
|
||||||
if out.valid then
|
if out.valid then
|
||||||
--out.get_or_create_control_behavior().parameters = signals
|
-- out is a non-interactable, invisible combinator whiche means players cannot change the number of sections
|
||||||
local constBehaviour = out.get_or_create_control_behavior()
|
out.get_or_create_control_behavior().get_section(1).filters = signals or {}
|
||||||
|
|
||||||
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
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -757,7 +725,8 @@ function set_comb2(map_data, station)
|
|||||||
for item_name, count in pairs(deliveries) do
|
for item_name, count in pairs(deliveries) do
|
||||||
local i = #signals + 1
|
local i = #signals + 1
|
||||||
local is_fluid = prototypes.item[item_name] == nil--NOTE: this is expensive
|
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
|
end
|
||||||
set_combinator_output(map_data, station.entity_comb2, signals)
|
set_combinator_output(map_data, station.entity_comb2, signals)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -102,6 +102,7 @@
|
|||||||
---@class ManifestEntry
|
---@class ManifestEntry
|
||||||
---@field public type string
|
---@field public type string
|
||||||
---@field public name string
|
---@field public name string
|
||||||
|
---@field public quality string
|
||||||
---@field public count int
|
---@field public count int
|
||||||
|
|
||||||
---@class Economy
|
---@class Economy
|
||||||
|
|||||||
@@ -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 count_to_fill = min(item_slots_capacity*stack_size, item_count)
|
||||||
local slots_to_fill = ceil(count_to_fill/stack_size)
|
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_count = item_count - count_to_fill
|
||||||
item_slots_capacity = item_slots_capacity - slots_to_fill
|
item_slots_capacity = item_slots_capacity - slots_to_fill
|
||||||
if comb then
|
if comb then
|
||||||
@@ -323,7 +324,8 @@ function set_r_wagon_combs(map_data, station, train)
|
|||||||
local stack = inv[stack_i]
|
local stack = inv[stack_i]
|
||||||
if stack.valid_for_read then
|
if stack.valid_for_read then
|
||||||
local i = #signals + 1
|
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
|
||||||
end
|
end
|
||||||
set_combinator_output(map_data, comb, signals)
|
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()
|
local inv = carriage.get_fluid_contents()
|
||||||
for fluid_name, count in pairs(inv) do
|
for fluid_name, count in pairs(inv) do
|
||||||
local i = #signals + 1
|
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
|
end
|
||||||
set_combinator_output(map_data, comb, signals)
|
set_combinator_output(map_data, comb, signals)
|
||||||
end
|
end
|
||||||
@@ -388,10 +391,12 @@ function set_refueler_combs(map_data, refueler, train)
|
|||||||
if stack.valid_for_read then
|
if stack.valid_for_read then
|
||||||
if comb then
|
if comb then
|
||||||
local i = #wagon_signals + 1
|
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
|
end
|
||||||
local j = #signals + 1
|
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
|
||||||
end
|
end
|
||||||
if comb then
|
if comb then
|
||||||
@@ -650,27 +655,12 @@ end
|
|||||||
function update_stop_from_rail(map_data, rail, forbidden_entity, force)
|
function update_stop_from_rail(map_data, rail, forbidden_entity, force)
|
||||||
--NOTE: is this a correct way to figure out the direction?
|
--NOTE: is this a correct way to figure out the direction?
|
||||||
---@type LuaEntity?
|
---@type LuaEntity?
|
||||||
local rail_front = rail
|
local stop = rail.get_rail_segment_stop(defines_front)
|
||||||
---@type LuaEntity?
|
if not stop then
|
||||||
local rail_back = rail
|
stop = rail.get_rail_segment_stop(defines_back)
|
||||||
---@type defines.rail_direction
|
end
|
||||||
for i = 1, 112 do
|
if stop then
|
||||||
if rail_back then
|
resolve_update_stop_from_rail(map_data, stop, forbidden_entity, force)
|
||||||
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
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ local function set_comb1(map_data, station, manifest, sign)
|
|||||||
if manifest then
|
if manifest then
|
||||||
local signals = {}
|
local signals = {}
|
||||||
for i, item in ipairs(manifest) do
|
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
|
end
|
||||||
set_combinator_output(map_data, comb, signals)
|
set_combinator_output(map_data, comb, signals)
|
||||||
else
|
else
|
||||||
|
|||||||
Reference in New Issue
Block a user