88 lines
2.5 KiB
Lua

require "template"
-- Preload known vanilla types
local entity_types = {
["unit"] = {
["small-biter"] = true,
["medium-biter"] = true,
["big-biter"] = true,
["behemoth-biter"] = true,
["small-spitter"] = true,
["medium-spitter"] = true,
["big-spitter"] = true,
["behemoth-spitter"] = true,
},
["unit-spawner"] = {
["biter-spawner"] = true,
["spitter-spawner"] = true,
},
}
local function is_entity_type(what_type, entity_name)
if not entity_types[what_type] then entity_types[what_type] = {} end
local type_cache = entity_types[what_type]
if type_cache[entity_name] ~= nil then
return type_cache[entity_name]
end
local prototype = game.entity_prototypes[entity_name]
if prototype and prototype.type == what_type then
type_cache[entity_name] = true
else
type_cache[entity_name] = false
end
return type_cache[entity_name]
end
local function is_biter(entity_name)
return is_entity_type("unit", entity_name)
end
local function is_spawner(entity_name)
return is_entity_type("unit-spawner", entity_name)
end
local sensor = ValueSensor.new("kill_count")
function sensor:update_ui(owner)
local player = game.players[owner.player_index]
local biter_count = 0
local spawner_count = 0
local other_count = 0
for entity_name, kill_count in pairs(player.force.kill_count_statistics.input_counts) do
if is_biter(entity_name) then
biter_count = biter_count + kill_count
elseif is_spawner(entity_name) then
spawner_count = spawner_count + kill_count
else
other_count = other_count + kill_count
end
end
local biter_kills = {"sensor.kill_count.biter_fragment_single"}
if biter_count ~= 1 then
biter_kills = {"sensor.kill_count.biter_fragment_multiple", evogui.format_number(biter_count)}
end
local spawner_kills = {"sensor.kill_count.spawner_fragment_single"}
if spawner_count ~= 1 then
spawner_kills = {"sensor.kill_count.spawner_fragment_multiple", evogui.format_number(spawner_count)}
end
local other_kills = {"sensor.kill_count.other_fragment_single"}
if other_count ~= 1 then
other_kills = {"sensor.kill_count.other_fragment_multiple", evogui.format_number(other_count)}
end
owner[self.name].caption = {self.format_key, biter_kills, spawner_kills, other_kills}
end
ValueSensor.register(sensor)