【异星工厂】星期五报道 #389 - 对火车操控系统做出改进


3楼猫 发布时间:2023-12-22 12:55:42 作者:Wube Software Language

大家好,火车是我们最喜欢的游戏部分之一。我们之前已经讨论过了如何改进铁轨 (https://factorio.com/blog/post/fff-377) ,现在讨论一下如何改进运行在铁轨上的火车操控系统。


火车调度列表插入系统

目前控制火车的方式非常静态,火车只是一一经过站点列表。唯一动态的部分是每个站点的等待时间,但没有办法根据正在发生的事件动态去其他的地方。

这种限制带来的最明显的问题是如何给火车加油。在 1.1 中,您需要确保每个调度列表都有一个同时也可以为机车加油的站点。例如,主基地的卸铁站也有一个用于装载燃料的插入器。但您拥有的路线越独特,您需要的加油站就越多。

这有点无聊和重复,当你想改变燃料类型时就更烦人了。另一种办法是设置一个专门的加油站,放在每个调度列表里就可以了,但感觉很浪费。

我们希望火车的实际逻辑非常简单:“只有当你的燃油不足时,才去专用加油站”。由于这感觉非常自然,我们在游戏中实现了一个新功能,可以非常轻松地理清这种逻辑,我们将其称为“调度插入”。

【异星工厂】星期五报道 #389 - 对火车操控系统做出改进-第0张

实现插入功能非常简单,您只需指定触发插入的条件列表,一个目标站点列表 + 等待条件列表就会添加到调度中。每当火车要离开当前车站时,它都会一一检查和评估插入条件。如果满足条件,则会激活插入,并将目标站点作为临时停止站点粘贴到当前计划中。

可用条件大多是熟悉的设置(满/空货物、电路条件、物品/液体计数等),以及一些仅对插入有意义的特殊添加条件。

而且我们应用了临时车站的概念,仅用于手动将火车发送到某个地方。

临时车站就像是一次性订单,一旦火车离开临时车站,该车站就会从调度时刻表中删除。加油的例子是最初的动机,但它的工作方式显然有更广泛的应用。


普通列车

由于插入的条件里有货物,因此我们可以为每种类型的货物进行插入操作,表明应该将其运送到哪里。例如:如果你有铁矿石,就去卸载铁矿石,如果你有铜矿石,就去卸载铜矿石。

【异星工厂】星期五报道 #389 - 对火车操控系统做出改进-第1张

这意味着,具有此类插入功能的火车现在能够处理您给它的任何货物,因此它并不真正关心它是否应该装载铁或铜或其他物品。此时,没有理由区分不同的装载站,只要使用火车停靠站的限制条件,你可以将所有装载站命名为相同的名字,并且只需使用一个调度列表来管理所有事情。

该功能的一大优点是,你的所有列车都能共享所有路线,因此你不必考虑 “装铜列车太少了” 或 “我没有足够的环路列车” 等。因此,可以总结为,要么已满,要么空。


车站问题

这一切看似都很好,但出现了一个新问题,即列车的可用性基于所有卸货站是否拥堵。当某些资源或生产不足时,这可能会导致系统中的列车过多,我们需要一种方法来处理。

所以我们添加了一个特殊的插入条件,称为“目的地已满”,在所有物品都被占用时触发插入,火车将会前往到车站,因此不会阻塞当前车站。

【异星工厂】星期五报道 #389 - 对火车操控系统做出改进-第2张

我们的屏幕截图中包含车站的编辑选项,这就是它们的用途。


插入系统影响全局

最初,插入系统是特定于每个调度列表的,但我们最终意识到,能够在不同的调度列表之间共享相同的插入系统是一个非常好的主意。我们遇到了一个问题,例如,一旦我们想要将燃料从煤炭升级为火箭燃料,我们就必须检查每个调度列表并更新插入系统,这不仅是一个很大的麻烦,而且经常导致一些火车状态没有更新。

因此,我们使插入系统在全局范围内共享(通过其名称进行标识),当您编辑了插入系统,所有具有该插入系统的列车都会发生变化。这使得它更加方便并且不易出错。


插入系统出现插入

通常,当一个插入系统被激活时,在它完成任务之前其他插入将无法对其进行干扰。但在某些特定情况下,这样的限制太大,因此我们添加了另一个特殊的插入条件,称为“插入期间”。允许一个插入系统在另一个插入系统正在工作时仍可以被触发,从而清除原始插入系统并用新的插入目标替换它。

在一些非常具体的情况下,这是至关重要的,它将出现在我们尚未透露的星球上,所以稍后会详细介绍:)。


预订系统的升级

更先进的插入系统在很大程度上取决于火车停靠的预订站点。这可以防止系统中的所有火车都前往同一车站。

但系统存在一个小问题,甚至可能导致交通拥堵 / 锁住,而在通用的调度列表中,这一问题变得更加重要。

问题是,一旦火车决定离开车站,插入系统会立即清除火车对这个站点的占用,但同时仍然物理上阻塞车站。这使得另一列驶向车站的火车可能没有足够的空间等待而不阻塞主线。所以我们修复了这个问题,这样火车只有在离开火车站所在的街区时才会放弃预订站点。我很想知道其他人是否在 1.1 中也遇到过这个问题。


火车组

缺少火车组以及无法同时编辑多个调度列表很烦人,但在插入系统应用之前这些并不那么重要,因为您实际上并不会频繁更新/调整当前调度列表。

但对于插入系统和更通用的列车,您可能需要频繁更新现有列车的调度列表/插入系统,因此显然必须做出调整。该方法类似于我们在 2.0 更新中对其他分组更改所做的操作(物流组和插入系统)。

【异星工厂】星期五报道 #389 - 对火车操控系统做出改进-第3张

因此,对小组中一列火车的日程安排做出的任何更改都会更新整个小组。重要的是,这会忽视临时停靠站点,因为它们是各个火车状态的一部分(因此改变一辆火车的行程,将您带到某个地方且不会破坏任何东西)。

只有在火车概览中显示小组才有意义。

【异星工厂】星期五报道 #389 - 对火车操控系统做出改进-第4张

因此,现在您只需放置一列新火车,将其设置为您想要的小组,然后就可以出发了。如果您有太多的单一类型的物品,您可以重新分配火车组并将其从载铁火车转变为载铜火车,而无需寻找一辆已存在的火车进行复制粘贴。

当您添加新的插入系统(以处理新的物品类型)时,它将被添加到组中的所有插入系统中,并且一切都会“正常工作”,而无需调整任何不必要的火车/调度列表。


根据目的地自动调整颜色

有一件之前的 FFF 报道中常被提到的事情。我们喜欢根据火车运送的物品来给火车上色,但在通用系统中,任何火车都可以运载任何东西,静态着色是行不通的。

最初我们想以某种方式向调度列表 GUI 添加颜色,但这会很麻烦,因为每个车站都将需要另一种 UI 颜色( 当前的 GUI 已经不是那么简单明了)。

但我们意识到可以采用更自然的方法。因此,我们在机车颜色小部件中添加了一个简单的复选框(默认情况下处于打开状态),以根据目的地更改其颜色。

【异星工厂】星期五报道 #389 - 对火车操控系统做出改进-第5张

视频:对火车操控系统做出改进


结论

我们多次被要求做“物流列车”之类的设计。但调度插入系统提供了一个更通用的选择,物流列车只是您可以从中构建的东西之一。例如,您可以拥有一个系统,让车站根据线路和插入条件来决定将列车发往何处。

它也更易使用,因为您可以使用插入系统来加油或做一些简单的事情,同时仍然保持正常的调度列表。我们已经使用这个功能很长一段时间了,这是我们目前无法没有的功能之一。

需要澄清的是,这是一个核心引擎功能,每个人都可以通过 2.0 基础游戏更新使用该功能。


还有更多即将推出...

我们并没有就此止步,我们还为 2.0 准备了更多与火车相关的改进内容,但我们将不得不把它们留到另一天......

#steam游戏#    #开发日志#   #自动化#  #基地建设# 


© 2022 3楼猫 下载APP 站点地图 广告合作:asmrly666@gmail.com