starlit  Diff

Differences From Artifact [6d0114ddbf]:

To Artifact [6f6bfb54e1]:


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