Advertisement
Guest User

Untitled

a guest
Sep 12th, 2012
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.46 KB | None | 0 0
  1. minetest.register_alias("music_player", "technic:music_player")
  2. minetest.register_craft({
  3. output = 'technic:music_player',
  4. recipe = {
  5. {'default:wood', 'default:wood', 'default:wood'},
  6. {'technic:diamond', 'technic:diamond', 'technic:diamond'},
  7. {'default:stone', 'moreores:copper_ingot', 'default:stone'},
  8. }
  9. })
  10.  
  11. minetest.register_craftitem("technic:music_player", {
  12. description = "Music Player",
  13. stack_max = 99,
  14. })
  15.  
  16. music_player_formspec =
  17. "invsize[8,9;]"..
  18. "image[1,1;1,2;technic_power_meter_bg.png]"..
  19. "label[0,0;Music Player]"..
  20. "label[1,3;Power level]"..
  21. "button[5,2;1,1;track1;1]"..
  22. "button[6,2;1,1;track2;2]"
  23.  
  24.  
  25. minetest.register_node("technic:music_player", {
  26. description = "Music Player",
  27. tiles = {"technic_music_player_top.png", "technic_machine_bottom.png", "technic_music_player_side.png",
  28. "technic_music_player_side.png", "technic_music_player_side.png", "technic_music_player_side.png"},
  29. groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
  30. sounds = default.node_sound_wood_defaults(),
  31. technic_power_machine=1,
  32. internal_EU_buffer=0,
  33. internal_EU_buffer_size=5000,
  34. music_player_on=0,
  35. music_playing =0,
  36. music_handle = 0,
  37. music_player_current_track =1,
  38. on_construct = function(pos)
  39. local meta = minetest.env:get_meta(pos)
  40. meta:set_string("infotext", "Music Player")
  41. meta:set_float("technic_power_machine", 1)
  42. meta:set_float("internal_EU_buffer", 1)
  43. meta:set_float("internal_EU_buffer_size", 5000)
  44. meta:set_string("formspec", music_player_formspec)
  45. meta:set_float("music_player_on", 0)
  46. meta:set_float("music_player_current_track", 1)
  47. end,
  48.  
  49. on_receive_fields = function(pos, formanme, fields, sender)
  50.  
  51. local meta = minetest.env:get_meta(pos)
  52. player_on=meta:get_float("music_player_on")
  53. music_handle=meta:get_float("music_handle")
  54. music_player_current_track=meta:get_float("music_player_current_track")
  55. if fields.track1 then music_player_current_track=1 end
  56. if fields.track2 then music_player_current_track=2 end
  57. if fields.track3 then music_player_current_track=3 end
  58. if fields.track4 then music_player_current_track=4 end
  59. if fields.track5 then music_player_current_track=5 end
  60. if fields.track6 then music_player_current_track=6 end
  61. if fields.track7 then music_player_current_track=7 end
  62. if fields.track8 then music_player_current_track=8 end
  63. if fields.track9 then music_player_current_track=9 end
  64. meta:set_float("music_player_current_track",music_player_current_track)
  65. if fields.play and player_on==1 then
  66. if music_handle then minetest.sound_stop(music_handle) end
  67. music_handle=minetest.sound_play("technic_track"..music_player_current_track, {pos = pos, gain = 1.0,loop = true, max_hear_distance = 72,})
  68. meta:set_float("music_playing",1)
  69. end
  70. if fields.stop then
  71. meta:set_float("music_playing",0)
  72. if music_handle then minetest.sound_stop(music_handle) end
  73. end
  74. meta:set_float("music_handle",music_handle)
  75. end,
  76. })
  77.  
  78. minetest.register_abm({
  79. nodenames = {"technic:music_player"},
  80. interval = 1,
  81. chance = 1,
  82. action = function(pos, node, active_object_count, active_object_count_wider)
  83. local meta = minetest.env:get_meta(pos)
  84. local charge= meta:get_float("internal_EU_buffer")
  85. local max_charge= meta:get_float("internal_EU_buffer_size")
  86. player_on=meta:get_float("music_player_on")
  87. music_player_current_track=meta:get_float("music_player_current_track")
  88. local play_cost=80
  89.  
  90. if charge>play_cost then
  91. if meta:get_float("music_playing")==1 then charge=charge-play_cost end
  92. meta:set_float("internal_EU_buffer",charge)
  93. meta:set_float("music_player_on",1)
  94. else
  95. meta:set_float("music_playing",0)
  96. meta:set_float("music_player_on",0)
  97. if music_handle then minetest.sound_stop(music_handle) end
  98. end
  99. local load = math.floor((charge/max_charge)*100)
  100. meta:set_string("formspec",
  101. "invsize[8,9;]"..
  102. "image[1,1;1,2;technic_power_meter_bg.png^[lowpart:"..
  103. (load)..":technic_power_meter_fg.png]"..
  104. "label[0,0;Music Player]"..
  105. "label[1,3;Power level]"..
  106. "button[4,1;1,1;track1;1]"..
  107. "button[5,1;1,1;track2;2]"..
  108. "button[6,1;1,1;track3;3]"..
  109. "button[4,2;1,1;track4;4]"..
  110. "button[5,2;1,1;track5;5]"..
  111. "button[6,2;1,1;track6;6]"..
  112. "button[4,3;1,1;track7;7]"..
  113. "button[5,3;1,1;track8;8]"..
  114. "button[6,3;1,1;track9;9]"..
  115. "button[4,4;1,2;play;Play]"..
  116. "button[6,4;1,2;stop;Stop]"..
  117. "label[4,0;Current track "..tostring(music_player_current_track).."]"
  118.  
  119. )
  120.  
  121.  
  122.  
  123.  
  124. end
  125. })
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement