Skip to content

Commit

Permalink
0.16 updates and new UX features.
Browse files Browse the repository at this point in the history
  • Loading branch information
dewiniaid committed Dec 13, 2017
1 parent 034c44b commit 3e74a7e
Show file tree
Hide file tree
Showing 6 changed files with 129 additions and 44 deletions.
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@ Make minimum and maximum timewarp amounts configurable.

## Changelog

### 0.1.2 (2017-12-13)
* Update for Factorio 0.16
* Made the time indicator display configurable: It can now be always shown, always hidden, or only shown while warping.

### 0.1.1 (2017-12-11)

* Add a simple indicator in the upper-left when timewarp is active.
140 changes: 100 additions & 40 deletions control.lua
Original file line number Diff line number Diff line change
@@ -1,53 +1,116 @@
local MINIMUM_SPEED = 0.125
local MAXIMUM_SPEED = 64


local function create_gui(player)
local top = player.gui.top
if top.TimeControlSpeedometer then
local DISPLAY_MODE_LOOKUP = {
none = nil,
always = true,
['when-warping'] = false
}
local DISPLAY_DEFAULT_STYLE = "bold_label" -- Style used at 1x warp
local DISPLAY_STYLES = {
[true] = "bold_green_label", -- Style used at speeds > 1
[false] = "bold_red_label", -- Style used at speeds < 1
}

local display_preferences = {}
local display_caption = { "timecontrol.gui-speed-normal" }
local display_style = DISPLAY_DEFAULT_STYLE


local function update_gui(player_index, visible)
if visible == nil then
visible = display_preferences[player_index] or false
end
local top = game.players[player_index].gui.top
local ctl = top.TimeControlSpeedometer
if not ctl then
top.add {
type = "label",
name = "TimeControlSpeedometer",
caption = display_caption,
style = display_style,
}
top.TimeControlSpeedometer.style.visible = visible
return
end

player.gui.top.add {
type = "label",
name = "TimeControlSpeedometer",
style = "bold_label_style",
caption = { "timecontrol.gui-speed", game.speed },
}

player.gui.top.TimeControlSpeedometer.style.visible = (game.speed ~= 1)
if visible then
ctl.caption = display_caption
ctl.style = display_style
ctl.style.visible = true
else
ctl.style.visible = false
end
end

local function update_guis()
local enabled = game.speed ~= 1
for _, player in pairs(game.players) do
local label = player.gui.top.TimeControlSpeedometer
if enabled then
label.caption = { "timecontrol.gui-speed", game.speed }
end
label.style.visible = enabled

local function update_display(all_players)
local warping = game.speed ~= 1
if warping then
display_caption = { "timecontrol.gui-speed-warping", game.speed }
display_style = DISPLAY_STYLES[game.speed > 1]
else
display_caption = { "timecontrol.gui-speed-normal" }
display_style = DISPLAY_DEFAULT_STYLE
end

if all_players then
for index, _ in pairs(game.players) do
update_gui(index)
end
else
for index, always in pairs(display_preferences) do
update_gui(index, warping or always)
end
end
end


local function create_all_guis()
for _, player in pairs(game.players) do
create_gui(player)
local function update_preferences(index)
if not index then
display_preferences = {}
global.display_preferences = display_preferences
for index, _ in pairs(game.players) do update_preferences(index) end
return
end

local mode = DISPLAY_MODE_LOOKUP[settings.get_player_settings(game.players[index])["TimeControl-display"].value or 'when-warping']
display_preferences[index] = mode
return mode
end


local function on_init()
update_preferences()
return update_display(true)
end

local function on_load()
display_preferences = global.display_preferences
end


script.on_init(create_all_guis)
script.on_configuration_changed(create_all_guis)
script.on_init(on_init)
script.on_load(on_load)
script.on_configuration_changed(on_init)
script.on_event(defines.events.on_player_created, function(event)
create_gui(game.players[event.player_index])
update_preferences(event.player_index)
gui_update(event.player_index)
end)
script.on_event(defines.events.on_player_removed, function(event)
display_preferences[event.player_index] = nil
end)
script.on_event(defines.events.on_runtime_mod_setting_changed, function(event)
if event.setting ~= "TimeControl-display" or event.setting_type ~= "runtime-per-user" then
return
end
update_gui(
event.player_index,
update_preferences(event.player_index) or false
)
end)



local function timewarp(event, mult)
local function warp_time(event, multiplier)
local player = game.players[event.player_index]
if not (player and player.permission_group and player.permission_group.allows_action(defines.server_command)) then
return
Expand All @@ -58,19 +121,19 @@ local function timewarp(event, mult)
local oldspeed = game.speed
local newspeed

if mult == 0 then
if multiplier == 0 then
newspeed = 1
msg = "timecontrol.speed-reset"
else
newspeed = game.speed * mult
newspeed = game.speed * multiplier
if newspeed < MINIMUM_SPEED then
newspeed = MINIMUM_SPEED
elseif newspeed > MAXIMUM_SPEED then
newspeed = MAXIMUM_SPEED
end
end

-- If the effective speed wouldn't change, end now to avoid console spam.
-- If the effective speed wouldn't change, avoid console spam.
if newspeed == oldspeed then
return
end
Expand All @@ -81,13 +144,10 @@ local function timewarp(event, mult)

game.print { msg, newspeed, player.name }
game.speed = newspeed
update_guis()
end

script.on_event("timecontrol_normal", function(event) return timewarp(event, 0) end)
script.on_event("timecontrol_slower", function(event) return timewarp(event, 0.5) end)
script.on_event("timecontrol_faster", function(event) return timewarp(event, 2.0) end)



update_display()
end

script.on_event("timecontrol_normal", function(event) return warp_time(event, 0) end)
script.on_event("timecontrol_slower", function(event) return warp_time(event, 0.5) end)
script.on_event("timecontrol_faster", function(event) return warp_time(event, 2.0) end)
2 changes: 2 additions & 0 deletions data.lua
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,6 @@ data:extend({
order = 'a-b',
-- consuming = "all"
},


})
6 changes: 3 additions & 3 deletions info.json
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
{
"name": "TimeControl",
"version": "0.1.1",
"version": "0.1.2",
"title": "Time Control",
"author": "Dewin",
"contact": "https://github.com/dewiniaid/TimeControl",
"homepage": "https://github.com/dewiniaid/TimeControl",
"factorio_version": "0.15",
"dependencies": ["base >= 0.15"],
"factorio_version": "0.16",
"dependencies": ["base >= 0.16"],
"description": "Adds bindings for adjusting game speed."
}
11 changes: 10 additions & 1 deletion locale/en/locale.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,18 @@ speed-changed-by=__2__ changed game speed to __1__x.
speed-reset=Game speed reset to normal .
speed-reset-by=Game speed reset to normal by __2__.

gui-speed=Time Warp: __1__x
gui-speed-warping=Time Warp: __1__x
gui-speed-normal=Time Warp: disabled

[controls]
timecontrol_normal=Normal speed
timecontrol_faster=Faster
timecontrol_slower=Slower

[mod-setting-name]
TimeControl-display=Show time warp status

[string-mod-setting]
TimeControl-display-never=never
TimeControl-TimeControl-display-always=always
TimeControl-TimeControl-display-when-warping=while time warp is active
10 changes: 10 additions & 0 deletions settings.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
data:extend{
{
type = "string-setting",
name = "TimeControl-display",
setting_type = "runtime-per-user",
order = 100,
default_value = 'when-warping',
allowed_values = {'never', 'when-warping', 'always'},
}
}

0 comments on commit 3e74a7e

Please sign in to comment.