Better audio and visual feedback for crafting

master
PilzAdam 2015-11-01 16:06:21 +01:00
parent 4d150af357
commit a449aed678
3 changed files with 65 additions and 34 deletions

View File

@ -46,12 +46,20 @@ License of textures:
Copyright (C) 2013 PilzAdam <pilzadam@minetest.net>
CC BY-SA 3.0: http://creativecommons.org/licenses/by-sa/3.0/
License of sound effects:
-------------------------
Copyright (C) 2013 Mito551
CC BY-SA 3.0: http://creativecommons.org/licenses/by-sa/3.0/
License of sounds:
------------------
score_dig.ogg, score_footstep.*.ogg:
Copyright (C) 2013Mito551
CC BY-SA 3.0: http://creativecommons.org/licenses/by-sa/3.0/
License of background music (score_background.ogg):
---------------------------------------------------
Copyright (C) 2006 natlyea https://libre.fm/artist/natlyea/
CC BY 2.5: http://creativecommons.org/licenses/by/2.5/
score_background.*.ogg:
Copyright (C) 2006 natlyea (https://libre.fm/artist/natlyea/)
CC BY 2.5: http://creativecommons.org/licenses/by/2.5/
score_craft.ogg:
Copyright (C) 2015 MrAuralization (https://freesound.org/people/MrAuralization/)
CC BY 3.0: http://creativecommons.org/licenses/by/3.0/
score_flash.ogg:
Copyright (C) 2015 PilzAdam <pilzadam@minetest.net>
CC BY-SA 3.0: http://creativecommons.org/licenses/by-sa/3.0/

View File

@ -22,6 +22,32 @@ local hud_ids = {
]]
}
local function show_status_message(player, message)
local left, right = message:match("(.+)\n(.+)")
if left and right then
show_status_message(player, left)
show_status_message(player, right)
return
end
local id = hud_ids[player:get_player_name()].status_message
local previous = player:hud_get(id).text
if previous ~= "" then
player:hud_change(id, "text", previous .. "\n" .. message)
else
player:hud_change(id, "text", message)
end
minetest.after(5, function(player, id)
local previous = player:hud_get(id).text
local pos = previous:find("\n")
if pos then
player:hud_change(id, "text", previous:sub(pos + 1))
else
player:hud_change(id, "text", "")
end
end, player, id)
end
local function get_pick_info(player)
local hud_inv = player:get_inventory()
local pick = hud_inv:get_stack("main", INV_PICK_INDEX)
@ -282,6 +308,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
local level, speed = get_pick_info(player)
if level >= LEVEL_MAX then
show_status_message(player, "Already at max level")
return true
end
@ -289,6 +316,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
for item, required in pairs(pick_cost) do
if not inv[item] or inv[item] < required then
update_formspec(player, "pick_level")
show_status_message(player, "Not enough resources")
return true
end
end
@ -298,6 +326,10 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
hud_inv:set_stack("main", INV_PICK_INDEX, ItemStack(get_pick_name(level + 1, math.max(speed - 1, 1))))
minetest.sound_play("score_craft", {
to_player = player:get_player_name(),
})
show_status_message(player, "+1 Pick level")
update_formspec(player)
return true
end
@ -309,6 +341,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
local level, speed = get_pick_info(player)
if speed >= SPEED_MAX then
show_status_message(player, "Already at max speed")
return true
end
@ -316,6 +349,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
for item, required in pairs(pick_cost) do
if not inv[item] or inv[item] < required then
update_formspec(player, "pick_speed")
show_status_message(player, "Not enough resources")
return true
end
end
@ -325,6 +359,10 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
hud_inv:set_stack("main", INV_PICK_INDEX, ItemStack(get_pick_name(level, speed + 1)))
minetest.sound_play("score_craft", {
to_player = player:get_player_name(),
})
show_status_message(player, "+1 Pick speed")
update_formspec(player)
return true
end
@ -337,6 +375,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
for item, required in pairs(light_cost) do
if not inv[item] or inv[item] < required then
update_formspec(player, "light")
show_status_message(player, "Not enough resources")
return true
end
end
@ -348,6 +387,10 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
light:add_item(ItemStack("score:light"))
hud_inv:set_stack("main", INV_LIGHT_INDEX, light)
minetest.sound_play("score_craft", {
to_player = player:get_player_name(),
})
show_status_message(player, "+1 Light")
update_formspec(player)
return true
end
@ -357,6 +400,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
local hud_inv = player:get_inventory()
if player:get_hp() >= HP_MAX then
show_status_message(player, "Already at max health")
return
end
@ -364,6 +408,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
for item, required in pairs(heal_cost) do
if not inv[item] or inv[item] < required then
update_formspec(player, "heal")
show_status_message(player, "Not enough resources")
return true
end
end
@ -374,6 +419,10 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
local new_health = math.min(player:get_hp() + 2, HP_MAX)
player:set_hp(new_health)
minetest.sound_play("score_craft", {
to_player = player:get_player_name(),
})
show_status_message(player, "+1 Health")
update_formspec(player)
return true
end
@ -383,32 +432,6 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
end
end)
local function show_status_message(player, message)
local left, right = message:match("(.+)\n(.+)")
if left and right then
show_status_message(player, left)
show_status_message(player, right)
return
end
local id = hud_ids[player:get_player_name()].status_message
local previous = player:hud_get(id).text
if previous ~= "" then
player:hud_change(id, "text", previous .. "\n" .. message)
else
player:hud_change(id, "text", message)
end
minetest.after(5, function(player, id)
local previous = player:hud_get(id).text
local pos = previous:find("\n")
if pos then
player:hud_change(id, "text", previous:sub(pos + 1))
else
player:hud_change(id, "text", "")
end
end, player, id)
end
minetest.register_on_joinplayer(function(player)
player:set_properties({ textures = {} })
player:set_sky("0x000000", "plain", {})

Binary file not shown.