88 lines
2.5 KiB
Lua
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)
|
|
|