異星工廠信號總線仲裁算法
背景
游戲里同種類的多個信號在同根信號線上輸出會出現(xiàn)同種類信號相加
若通信系統(tǒng)中出現(xiàn)這種相加狀態(tài)(后稱為疊加狀態(tài))則無法分辨信號源與實際的信息
目標及特征
如何拆分疊加的信號保持信息干凈?(信息指各個子節(jié)點獨立的輸出)
注意幾個信號特征
信號出現(xiàn)疊加狀態(tài)(游戲特性)
不同信號源可能會出現(xiàn)完全相同的信息(信息相同)
方法
針對以上兩種特征就可以引入兩個變量進行總線信息競爭
計數(shù)值,若信號線上計數(shù)值不為1則當前為疊加狀態(tài)(識別疊加特性)
獨立ID,若信息完全相同則信息需要根據(jù)優(yōu)先級進行輸出(區(qū)分信息)
算法及流程
二分法查找最大值,下面算法及流程
信息總和除以平均值
低于平均值刪除,回到1(反復比較平均值,反復比較,反復比較,重要的事說三遍!!!)
剩余最大值
游戲內(nèi)通過運算器的實現(xiàn)過程
說明:A小于平均值則A非最大值,信息可以為資源量,優(yōu)先級等等
由于游戲中沒有浮點運算,精度丟失會造成相鄰數(shù)值無法區(qū)分,改用乘法得到

以下內(nèi)容為游戲內(nèi)詳細的實現(xiàn)的運算流程,可以參考,也可以不看
可通過結(jié)尾驗證藍圖觀察流程,下面公式也只是簡化描述流程!!!可以不看!!!
但是在自行設(shè)計運算時要注意游戲內(nèi)運算器信號TICK會導致外部信息跟內(nèi)部信息比較的延時,會出現(xiàn)反復競爭(踩過的坑)簡單的測試方法:通過添加子節(jié)點或開關(guān)子節(jié)點進行測試

游戲內(nèi)運行流程簡述
由于總線的計數(shù)值也為疊加狀態(tài)
本地輸出的信息值乘以總線計數(shù)值小于總線信息值則關(guān)閉本地輸出否則保持輸出
本地輸出的優(yōu)先級乘以總線計數(shù)值小于總線優(yōu)先級則關(guān)閉本地輸出否則繼續(xù)輸出
流程描述簡化公式(可不看)
舉例A
舉例B
實際演示效果截圖(實際可以通過結(jié)尾的藍圖進行觀察)



可以看到信號不再因為總線關(guān)系而疊加
驗證藍圖