Skip to content
This repository was archived by the owner on Oct 22, 2024. It is now read-only.

Commit

Permalink
New sensor: pollution around the player
Browse files Browse the repository at this point in the history
Also adds necessary infrastructure to support player-specific sensors, of
which the pollution sensor is an instance (different players are in
different places, therefore they should see different pollution values).
  • Loading branch information
narc0tiq committed Aug 15, 2015
1 parent c5a2b05 commit dae2341
Show file tree
Hide file tree
Showing 9 changed files with 87 additions and 29 deletions.
36 changes: 23 additions & 13 deletions evoGUI.lua
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ require "value_sensors.day_time"
require "value_sensors.evolution_factor"
require "value_sensors.play_time"
require "value_sensors.player_locations"
require "value_sensors.pollution_around_player"
require "settingsGUI"

if not evogui then evogui = {} end
Expand Down Expand Up @@ -36,18 +37,27 @@ function evogui.create_player_globals(player)
local player_settings = global.evogui[player.name]

if not player_settings.version then player_settings.version = "" end

if not player_settings.always_visible then
player_settings.always_visible = {
["evolution_factor"] = true,
["play_time"] = true,
}
end

if not player_settings.in_popup then
player_settings.in_popup = {
["day_time"] = true,
}
end

if not player_settings.popup_open then player_settings.popup_open = false end

if not player_settings.personal_sensors then
player_settings.personal_sensors = {}

table.insert(player_settings.personal_sensors, PollutionSensor.new(player))
end
end


Expand Down Expand Up @@ -96,11 +106,9 @@ function evogui.create_sensor_display(player)
end


function evogui.update_av(player, element)
local always_visible = global.evogui[player.name].always_visible

for _, sensor in ipairs(evogui.value_sensors) do
if always_visible[sensor.name] then
local function update_sensors(element, sensor_list, active_sensors)
for _, sensor in ipairs(sensor_list) do
if active_sensors[sensor.name] then
sensor:create_ui(element)
sensor:update_ui(element)
else
Expand All @@ -110,19 +118,21 @@ function evogui.update_av(player, element)
end


function evogui.update_av(player, element)
local always_visible = global.evogui[player.name].always_visible

update_sensors(element, evogui.value_sensors, always_visible)
update_sensors(element, global.evogui[player.name].personal_sensors, always_visible)
end


function evogui.update_ip(player, element)
if not global.evogui[player.name].popup_open then return end

local in_popup = global.evogui[player.name].in_popup

for _, sensor in ipairs(evogui.value_sensors) do
if in_popup[sensor.name] then
sensor:create_ui(element)
sensor:update_ui(element)
else
sensor:delete_ui(element)
end
end
update_sensors(element, evogui.value_sensors, in_popup)
update_sensors(element, global.evogui[player.name].personal_sensors, in_popup)
end


Expand Down
9 changes: 7 additions & 2 deletions script-locale/en.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,13 @@ sensor.evolution_factor.format=Biter evolution: __1__.
sensor.play_time.name=Time played
sensor.play_time.format=Play time: __1__.
sensor.players.name=Player locations
sensor.players.format=Players:
sensor.player_locations.name=Player locations
sensor.player_locations.format=Players:
sensor.pollution_around_player.name=Nearby pollution level
sensor.pollution_around_player.format=Pollution: __1__ PU.
settings_title=EvoGUI settings
settings_always_visible=Always visible
settings_in_popup=Visible in popup
Expand Down
37 changes: 24 additions & 13 deletions settingsGUI.lua
Original file line number Diff line number Diff line change
Expand Up @@ -42,29 +42,40 @@ local function toggle_in_popup(event)
end


local function add_sensor_table_row(table, sensor, always_visible, in_popup)
local sensor_always_visible = always_visible[sensor.name] ~= nil
local sensor_in_popup = in_popup[sensor.name] ~= nil

table.add{type="label", caption=sensor.display_name}
table.add{type="checkbox", name="AV_"..sensor.name,
caption={"settings_always_visible"}, state=sensor_always_visible}
table.add{type="checkbox", name="IP_"..sensor.name,
caption={"settings_in_popup"}, state=sensor_in_popup}

evogui.on_click["AV_"..sensor.name] = toggle_always_visible
evogui.on_click["IP_"..sensor.name] = toggle_in_popup
end


function evogui.on_click.evoGUI_settings(event)
local player = game.get_player(event.player_index)
if player.gui.center.evoGUI_settingsGUI then return end

evogui.create_player_globals(player)
local always_visible = global.evogui[player.name].always_visible
local in_popup = global.evogui[player.name].in_popup
local player_data = global.evogui[player.name]

local root = player.gui.center.add{type="frame", direction="vertical", name="evoGUI_settingsGUI"}
local root = player.gui.center.add{type="frame",
direction="vertical",
name="evoGUI_settingsGUI",
caption={"settings_title"}}
local table = root.add{type="table", colspan=3}

for _, sensor in ipairs(evogui.value_sensors) do
local sensor_always_visible = always_visible[sensor.name] ~= nil
local sensor_in_popup = in_popup[sensor.name] ~= nil

table.add{type="label", caption=sensor.display_name}
table.add{type="checkbox", name="AV_"..sensor.name,
caption={"settings_always_visible"}, state=sensor_always_visible}
table.add{type="checkbox", name="IP_"..sensor.name,
caption={"settings_in_popup"}, state=sensor_in_popup}
add_sensor_table_row(table, sensor, player_data.always_visible, player_data.in_popup)
end

evogui.on_click["AV_"..sensor.name] = toggle_always_visible
evogui.on_click["IP_"..sensor.name] = toggle_in_popup
for _, sensor in ipairs(player_data.personal_sensors) do
add_sensor_table_row(table, sensor, player_data.always_visible, player_data.in_popup)
end

local buttons = root.add{type="flow", direction="horizontal"}
Expand Down
2 changes: 2 additions & 0 deletions value_sensors/day_time.lua
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,5 @@ function sensor:get_line()
string.format("%d:%02d", day_time_hours, rounded_minutes % 60),
string.format("%d%%", brightness)}
end

ValueSensor.register(sensor)
2 changes: 2 additions & 0 deletions value_sensors/evolution_factor.lua
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,5 @@ local sensor = ValueSensor.new("evolution_factor")
function sensor:get_line()
return {self.format_key, string.format("%0.1f%%", game.evolution_factor * 100)}
end

ValueSensor.register(sensor)
2 changes: 2 additions & 0 deletions value_sensors/play_time.lua
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,5 @@ function sensor:get_line()
return {self.format_key,
string.format("%d:%02d:%02d", play_time_hours, play_time_minutes % 60, play_time_seconds % 60)}
end

ValueSensor.register(sensor)
2 changes: 2 additions & 0 deletions value_sensors/player_locations.lua
Original file line number Diff line number Diff line change
Expand Up @@ -28,3 +28,5 @@ function sensor:update_ui(owner)
self.player_list[p.name].caption = desc
end
end

ValueSensor.register(sensor)
21 changes: 21 additions & 0 deletions value_sensors/pollution_around_player.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
require "template"

PollutionSensor = {}

function PollutionSensor.new(player)
local sensor = ValueSensor.new("pollution_around_player")

sensor.player = player

function sensor:get_line()
local surface = self.player.surface
local pollution = surface.get_pollution(self.player.position)

return {self.format_key, string.format("%0.1f", pollution)}
end

return sensor
end



5 changes: 4 additions & 1 deletion value_sensors/template.lua
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,11 @@ function ValueSensor.new(name)
end
end

table.insert(evogui.value_sensors, sensor)
return sensor
end

function ValueSensor.register(sensor)
table.insert(evogui.value_sensors, sensor)
end

return ValueSensor

0 comments on commit dae2341

Please sign in to comment.