233
234
235
236
237
238
239
240
241
242
243
244
245
246
...
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
...
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
...
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
...
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
|
--[[if not how.gift then -- cheap hack to make starting batteries fully charged
E.battery.setCharge(st, 0)
end]]
E.battery.update(st)
end;
};
fab = def.fab;
dynamo = {
vtable = E.dynamo.kind.battery;
};
battery = def;
};
})
end)
................................................................................
return fab.size and fab.size.print or 1
else
return bType[s] * (bTier[s] or 1) * (bSize[s] or 1)
end
end
local swID = 'starlit_electronics:schematic_'..baseID
fab.reverseEngineer = {
complexity = bTier.complexity * bSize.complexity * bType.complexity;
sw = swID;
}
fab.flag = {print=true}
starlit.item.battery.link(id, {
name = name;
desc = table.concat({
bType.desc or '';
bTier.desc or '';
bSize.desc or '';
}, ' ');
fab = fab;
capacity = batStat 'capacity';
dischargeRate = batStat 'dischargeRate';
leak = batStat 'leak';
decay = batStat 'decay';
})
................................................................................
-- chips --
-----------
E.sw = {}
function E.sw.findSchematicFor(item)
local id = ItemStack(item):get_name()
local fm = minetest.registered_items[id]._starlit
if not (fm and fm.fab and fm.fab.reverseEngineer) then return nil end
local id = fm.fab.reverseEngineer.sw
return id, starlit.item.sw.db[id]
end
E.chip = { file = {} }
do local T,G = lib.marshal.t, lib.marshal.g
-- love too reinvent unions from first principles
E.chip.data = G.struct {
................................................................................
elseif file.kind == 'note' then
local sz = 0x10 + #file.body.author
for _, e in pairs(file.body.entries) do
sz = sz + #e.title + #e.body + 0x10 -- header overhead
end
return sz
elseif file.kind == 'research' then
local re = assert(minetest.registered_items[file.body.itemId]._starlit.fab.reverseEngineer)
return starlit.item.sw.db[re.sw].size * file.body.progress
elseif file.kind == 'sw' then
return starlit.item.sw.db[file.body.pgmId].size
elseif file.kind == 'genome' then
return 0 -- TODO
end
end
................................................................................
}
local n = 0
for _, e in pairs(chips) do
n = n + 1
if not e:is_empty() then
local ch = e:get_definition()._starlit.chip
c.cycles = c.cycles + ch.clockRate
c.ram = c.ram + ch.clockRate
c.flashFree = c.flashFree + E.chip.freeSpace(e)
c.powerEfficiency = c.powerEfficiency + ch.powerEfficiency
end
end
if n > 0 then c.powerEfficiency = c.powerEfficiency / n end
return c
end
|
>
<
<
<
<
>
>
>
>
|
|
|
|
|
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
...
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
...
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
...
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
...
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
|
--[[if not how.gift then -- cheap hack to make starting batteries fully charged
E.battery.setCharge(st, 0)
end]]
E.battery.update(st)
end;
};
fab = def.fab;
reverseEngineer = def.reverseEngineer;
dynamo = {
vtable = E.dynamo.kind.battery;
};
battery = def;
};
})
end)
................................................................................
return fab.size and fab.size.print or 1
else
return bType[s] * (bTier[s] or 1) * (bSize[s] or 1)
end
end
local swID = 'starlit_electronics:schematic_'..baseID
fab.flag = {print=true}
starlit.item.battery.link(id, {
name = name;
desc = table.concat({
bType.desc or '';
bTier.desc or '';
bSize.desc or '';
}, ' ');
fab = fab;
reverseEngineer = {
complexity = bTier.complexity * bSize.complexity * bType.complexity;
sw = swID;
};
capacity = batStat 'capacity';
dischargeRate = batStat 'dischargeRate';
leak = batStat 'leak';
decay = batStat 'decay';
})
................................................................................
-- chips --
-----------
E.sw = {}
function E.sw.findSchematicFor(item)
local id = ItemStack(item):get_name()
local fm = minetest.registered_items[id]._starlit
if not (fm and fm.reverseEngineer) then return nil end
local id = fm.reverseEngineer.sw
return id, starlit.item.sw.db[id]
end
E.chip = { file = {} }
do local T,G = lib.marshal.t, lib.marshal.g
-- love too reinvent unions from first principles
E.chip.data = G.struct {
................................................................................
elseif file.kind == 'note' then
local sz = 0x10 + #file.body.author
for _, e in pairs(file.body.entries) do
sz = sz + #e.title + #e.body + 0x10 -- header overhead
end
return sz
elseif file.kind == 'research' then
local re = assert(minetest.registered_items[file.body.itemId]._starlit.reverseEngineer)
return starlit.item.sw.db[re.sw].size * file.body.progress
elseif file.kind == 'sw' then
return starlit.item.sw.db[file.body.pgmId].size
elseif file.kind == 'genome' then
return 0 -- TODO
end
end
................................................................................
}
local n = 0
for _, e in pairs(chips) do
n = n + 1
if not e:is_empty() then
local ch = e:get_definition()._starlit.chip
c.cycles = c.cycles + ch.clockRate
c.ram = c.ram + ch.ram
c.flashFree = c.flashFree + E.chip.freeSpace(e)
c.powerEfficiency = c.powerEfficiency + ch.powerEfficiency
end
end
if n > 0 then c.powerEfficiency = c.powerEfficiency / n end
return c
end
|