]> git.lizzy.rs Git - karaoke.git/blob - init.lua
Create .gitignore
[karaoke.git] / init.lua
1 karaoke = {}
2
3 local storage = minetest.get_mod_storage("karaoke")
4 local etime, lines
5
6 function karaoke.remaining()
7         return lines
8 end
9
10 function karaoke.sing(title)
11         local text = storage:get_string(title)
12
13         if text == "" then
14                 return false, "Song not found"
15         end
16
17         lines = text:split("\n")
18         etime = 0
19 end
20
21 minetest.register_chatcommand("kedit", {
22         func = function(param)
23                 minetest.show_formspec("karaoke", [[
24                         size[9,5;]
25                         field[0.5,0.3;8.5,1;title;Song Title;]] .. param .. [[]
26                         textarea[0.5,1.1;8.5,4;text;Song Text;]] .. storage:get_string(param) .. [[]
27                         button_exit[3.3,4.5;2,1;save;Save]
28                 ]])
29         end,
30 })
31
32 minetest.register_chatcommand("kdelete", {
33         func = function(param)
34                 storage:set_string(param, "")
35                 return true, "Song deleted: " .. param
36         end,
37 })
38
39 minetest.register_chatcommand("ksing", {
40         func = karaoke.sing,
41 })
42
43 minetest.register_chatcommand("kcancel", {
44         func = function()
45                 etime, lines = nil
46         end,
47 })
48
49 minetest.register_chatcommand("klist", {
50         func = function()
51                 local songs = {}
52
53                 for k in pairs(storage:to_table().fields) do
54                         table.insert(songs, k)
55                 end
56
57                 return true, table.concat(songs, ", ")
58         end,
59 })
60
61 minetest.register_on_formspec_input(function(formname, fields)
62         if formname == "karaoke" and fields.title and fields.text and fields.title ~= "" and fields.text ~= "" then
63                 storage:set_string(fields.title, fields.text)
64                 print("Song saved: " .. fields.title)
65         end
66 end)
67
68 minetest.register_globalstep(function(dtime)
69         if lines then
70                 etime = etime - dtime
71
72                 if etime < 0 then
73                         local line = table.remove(lines, 1)
74
75                         if line then
76                                 minetest.send_chat_message("/me " .. minetest.colorize("#C609FF", line) .. "")
77                                 etime = line:len() * 0.1
78                         else
79                                 etime, lines = nil
80                         end
81                 end
82         end
83 end)