A simple mod for the game "Factorio" that does what it's name implies.
Revision | f77f891c5a2f19dce464a82ea2dbbb1b9e5ea980 (tree) |
---|---|
Time | 2018-08-06 16:18:41 |
Author | Eric Hopper <hopper@omni...> |
Commiter | Eric Hopper |
A nice, complete, simple mod.
@@ -1,24 +1,68 @@ | ||
1 | +local conf_speed1 = setmetatable({}, { | |
2 | + __index = function(self, id) | |
3 | + local v = settings.get_player_settings(game.players[id])["runspeeedtoggle-speed1"].value | |
4 | + rawset(self, id, v) | |
5 | + return v | |
6 | + end | |
7 | +}) | |
8 | +local conf_speed2 = setmetatable({}, { | |
9 | + __index = function(self, id) | |
10 | + local v = settings.get_player_settings(game.players[id])["runspeeedtoggle-speed2"].value | |
11 | + rawset(self, id, v) | |
12 | + return v | |
13 | + end | |
14 | +}) | |
15 | +local conf_speed3 = setmetatable({}, { | |
16 | + __index = function(self, id) | |
17 | + local v = settings.get_player_settings(game.players[id])["runspeeedtoggle-speed3"].value | |
18 | + rawset(self, id, v) | |
19 | + return v | |
20 | + end | |
21 | +}) | |
22 | + | |
23 | +script.on_event(defines.events.on_runtime_mod_setting_changed, | |
24 | + function(event) | |
25 | + if not event or not event.setting then | |
26 | + return | |
27 | + end | |
28 | + if event.setting == "runspeeedtoggle-speed1" then | |
29 | + conf_speed1[event.player_index] = nil | |
30 | + elseif event.setting == "runspeeedtoggle-speed2" then | |
31 | + conf_speed2[event.player_index] = nil | |
32 | + elseif event.setting == "runspeeedtoggle-speed3" then | |
33 | + conf_speed3[event.player_index] = nil | |
34 | + end | |
35 | +end) | |
36 | + | |
1 | 37 | local function xy_add(p1, p2) |
2 | 38 | return {x = p1.x + p2.x, |
3 | 39 | y = p1.y + p2.y} |
4 | 40 | end |
5 | 41 | |
42 | +local function approx_eq(v1, v2, errscale) | |
43 | + offset = v2 * errscale | |
44 | + return ((v1 >= (v2 - offset)) and (v1 <= (v2 + offset))) | |
45 | +end | |
46 | + | |
6 | 47 | local function on_hotkey(event) |
7 | 48 | local player = game.players[event.player_index] |
8 | - local speed = player.character_running_speed_modifier | |
49 | + local speed1 = conf_speed1[event.player_index] | |
50 | + local speed2 = conf_speed2[event.player_index] | |
51 | + local speed3 = conf_speed3[event.player_index] | |
52 | + local curspeed = player.character_running_speed_modifier | |
9 | 53 | local msg = "" |
10 | 54 | |
11 | - if speed == 0 then | |
12 | - speed = 1.5 | |
55 | + if approx_eq(curspeed, speed1, 0.000001) then | |
56 | + curspeed = speed2 | |
13 | 57 | msg = ">" |
14 | - elseif (speed > 1.49999) and (speed < 1.50001) then | |
15 | - speed = 15 | |
58 | + elseif approx_eq(curspeed, speed2, 0.000001) then | |
59 | + curspeed = speed3 | |
16 | 60 | msg = ">>" |
17 | 61 | else |
18 | - speed = 0 | |
62 | + curspeed = speed1 | |
19 | 63 | msg = "0" |
20 | 64 | end |
21 | - player.character_running_speed_modifier = speed | |
65 | + player.character_running_speed_modifier = curspeed | |
22 | 66 | player.surface.create_entity( |
23 | 67 | {name = "flying-text", |
24 | 68 | position = xy_add(player.position,{x=-0.5,y=0.2}), |
@@ -1,2 +1,12 @@ | ||
1 | 1 | [controls] |
2 | 2 | runspeedtoggle_hotkey=Switch the running speed |
3 | + | |
4 | +[mod-setting-name] | |
5 | +runspeeedtoggle-speed1=Speed for floating '0' | |
6 | +runspeeedtoggle-speed2=Speed for floating '>' | |
7 | +runspeeedtoggle-speed3=Speed for floating '>>' | |
8 | + | |
9 | +[mod-setting-description] | |
10 | +runspeeedtoggle-speed1=This is expected to be the smallest modifier. 0 is the unmodified running speed. Negative numbers slow the player down by that fraction. Positive numbers multiply the speed by 1 + number (i.e. 0.3 means 30% faster). | |
11 | +runspeeedtoggle-speed2=This is expected to be the middle speed modifier. 0 is the unmodified running speed. Negative numbers slow the player down by that fraction. Positive numbers multiply the speed by 1 + number (i.e. 0.3 means 30% faster). | |
12 | +runspeeedtoggle-speed3=This is expected to be the largest modifier. 0 is the unmodified running speed. Negative numbers slow the player down by that fraction. Positive numbers multiply the speed by 1 + number (i.e. 0.3 means 30% faster). |