返回提交历史

XFEstudio/MCIndustry

增加磁驱传输的传输速度

f054b6a
X
XFEstudio <mail@xfegzs.com>
提交于

代码差异

4 个文件 +69 -6
Modified content/blocks/磁驱传输器.hjson +3 -2
@@ -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": {
Added scripts/blocks/磁驱传输器.js +63 -0
@@ -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 ));
Modified scripts/main.js +1 -0
@@ -1,4 +1,5 @@
1 1
2 2 require("units/辅助型UAV");
3 require("blocks/磁驱传输器");
3 4
4 5 this.window = this;
Modified scripts/units/辅助型UAV.js +2 -4
@@ -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