XFEstudio/MCIndustry
增加磁驱传输的传输速度
f054b6a
代码差异
4 个文件
+69
-6
@@ -7,8 +7,9 @@
7
7
磁铜/20
8
8
],
9
9
"range": 300,
10
"transportTime": 0.1,
11
"itemCapacity": 30,
10
// 每 1 tick 传输一组;每组大小由脚本设为 10。
11
"transportTime": 1,
12
"itemCapacity": 100,
12
13
"canOverdrive": false,
13
14
"hasPower": true,
14
15
"consumes": {
@@ -0,0 +1,63 @@
1
const magneticBridge = Vars.content.getByName(
2
ContentType.block,
3
modName + "-磁驱传输器"
4
);
5
6
const batchSize = 10;
7
8
if(magneticBridge == null){
9
throw new Error("找不到磁驱传输器内容:" + modName + "-磁驱传输器");
10
}
11
12
// ItemBridge.setStats() 只按 transportTime 计算单件速度;初始化完成后将
13
// 数据库面板中的速度替换为实际的“每批数量 × 每秒批数”。
14
Events.on(ContentInitEvent, cons(() => {
15
magneticBridge.stats.remove(Stat.itemsMoved);
16
magneticBridge.stats.add(
17
Stat.itemsMoved,
18
batchSize * 60 / magneticBridge.transportTime,
19
StatUnit.itemsSecond
20
);
21
}));
22
23
// ItemBridge 原版每次只处理 1 件物品。这里保留它的计时、供电与连接
24
// 规则,但把一次传输事件改成最多搬运 10 件物品。
25
magneticBridge.buildType = prov(() => extend(
26
ItemBridge.ItemBridgeBuild,
27
magneticBridge,
28
{
29
updateTransport(other){
30
this.transportCounter += this.edelta();
31
32
while(this.transportCounter >= magneticBridge.transportTime){
33
const item = this.items.first();
34
35
if(item != null && other.acceptItem(this, item)){
36
// 两端都是同一种 ItemBridge;按对端的总容量截断批量,
37
// 再用一次 handleStack 完成真正的成组传输。
38
const amount = Math.min(
39
batchSize,
40
this.items.get(item),
41
magneticBridge.itemCapacity - other.items.total()
42
);
43
44
if(amount > 0){
45
this.items.remove(item, amount);
46
other.handleStack(item, amount, this);
47
this.moved = true;
48
}
49
}
50
51
this.transportCounter -= magneticBridge.transportTime;
52
}
53
},
54
55
// 无有效链接时,ItemBridge 会向相邻建筑卸货。原版这里同样只有
56
// 1 件/tick,因此必须一起扩展,否则整条线路仍会卡在约 60 件/秒。
57
doDump(){
58
for(let i = 0; i < batchSize; i++){
59
if(!this.dump()) break;
60
}
61
}
62
}
63
));
@@ -1,4 +1,5 @@
1
1
2
2
require("units/辅助型UAV");
3
require("blocks/磁驱传输器");
3
4
4
5
this.window = this;
@@ -1,7 +1,5 @@
1
1
2
var 辅助型UAV = extendContent(UnitType, '辅助型UAV', {});
3
辅助型UAV.defaultController = prov(() => extend(BuilderAI, {}));
2
var 辅助型UAV = Vars.content.getByName(ContentType.unit, modName + "-辅助型UAV");
3
辅助型UAV.aiController = prov(() => new BuilderAI());
4
4
辅助型UAV.drawShields = false;
5
5
辅助型UAV.abilities.add( new RepairFieldAbility(20, 60, 80));
6
辅助型UAV.constructor = prov(() => extend(UnitTypes.poly.constructor.get().class, {}));
7