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)
 | |
| 
 |