File size: 2,277 Bytes
898c672
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
local mod_gui = require("mod-gui")

local script_data =
{
  finished = {},
  removed_old_gui = true
}

local remove_old_frame = function(player)
  local gui = mod_gui.get_frame_flow(player)
  local frame = gui.silo_gui_frame
  if frame then frame.destroy() end
end

local remove_old_button = function(player)
  local button_flow = mod_gui.get_button_flow(player)
  local button = button_flow.silo_gui_sprite_button
  if button then button.destroy() end
end

local remove_old_gui = function()
  for k, player in pairs (game.players) do
    remove_old_frame(player)
    remove_old_button(player)
  end
end

local on_rocket_launched = function(event)
  if global.no_victory then return end

  local rocket = event.rocket
  if not (rocket and rocket.valid) then return end

  local force = rocket.force  
  
  script_data.finished = script_data.finished or {}
  if script_data.finished[force.name] then
    return
  end

  script_data.finished[force.name] = true

  game.set_game_state
  {
    game_finished = true,
    player_won = true,
    can_continue = true,
    victorious_force = force
  }

end

local add_remote_interface = function()
  if not remote.interfaces["silo_script"] then
    remote.add_interface("silo_script",
    {
      set_no_victory = function(bool)
        if type(bool) ~= "boolean" then error("Value for 'set_no_victory' must be a boolean") end
        global.no_victory = bool
      end
    })
  end
end
add_remote_interface()

local silo_script = {}

silo_script.events =
{
  [defines.events.on_rocket_launched] = on_rocket_launched
}

silo_script.on_configuration_changed = function()
  if not script_data.removed_old_gui then
    script_data.removed_old_gui = true
    script_data.tracked_items = nil
    remove_old_gui()
    log("Remove the old silo script GUI")
  end
  script_data.finished = script_data.finished or {}
end

silo_script.on_init = function()
  global.silo_script = global.silo_script or script_data
end

silo_script.on_load = function()
  script_data = global.silo_script or script_data
end

silo_script.get_events = function()
  --legacy
  return silo_script.events
end

silo_script.add_remote_interface = function()
  --legacy
  add_remote_interface()
end

silo_script.add_commands = function()
  --legacy
end

return silo_script