From e849f33780208e4366fdc2b1003649ce86f7d97c Mon Sep 17 00:00:00 2001 From: crabman77 Date: Wed, 18 Mar 2015 03:11:20 +0100 Subject: [PATCH] add hudbars support and optimize add new hudbars support optimize fonction cactus Active sprint only when we move --- mods/sprint/README.md | 8 ++ mods/sprint/depends.txt | 1 + mods/sprint/esprint.lua | 104 ++++++++++++-------- mods/sprint/init.lua | 10 ++ mods/sprint/textures/sprint_particle.png | Bin 0 -> 791 bytes mods/sprint/textures/sprint_stamina_bar.png | Bin 0 -> 80 bytes mods/sprint/wsprint.lua | 30 ++++-- 7 files changed, 103 insertions(+), 50 deletions(-) create mode 100644 mods/sprint/depends.txt create mode 100644 mods/sprint/textures/sprint_particle.png create mode 100644 mods/sprint/textures/sprint_stamina_bar.png diff --git a/mods/sprint/README.md b/mods/sprint/README.md index 6e73c21f..71e7d44d 100755 --- a/mods/sprint/README.md +++ b/mods/sprint/README.md @@ -6,6 +6,14 @@ allow him/her to jump 10% higher. Also adds a stamina bar that goes down when the player sprints and goes up when he/she isn't sprinting. +This mod is compatible with the HUD bars [hudbars] mod, but does +not depend on it. In this care, a green HUD bar will be displayed, +also showing a number. +If this mod is not present, a standard statbar with 0-20 +“half-arrows” is shown, which is a bit more coarse than the HUD +bar version. + + Licence: CC0 (see COPYING file) --- diff --git a/mods/sprint/depends.txt b/mods/sprint/depends.txt new file mode 100644 index 00000000..3e1d5c20 --- /dev/null +++ b/mods/sprint/depends.txt @@ -0,0 +1 @@ +hudbars? diff --git a/mods/sprint/esprint.lua b/mods/sprint/esprint.lua index 88d98e4c..adda7e9b 100755 --- a/mods/sprint/esprint.lua +++ b/mods/sprint/esprint.lua @@ -12,12 +12,17 @@ local staminaHud = {} minetest.register_on_joinplayer(function(player) local playerName = player:get_player_name() + players[playerName] = { sprinting = false, timeOut = 0, stamina = SPRINT_STAMINA, epressed = false, - hud = player:hud_add({ + } + if SPRINT_HUDBARS_USED then + hb.init_hudbar(player, "sprint") + else + players[playerName].hud = player:hud_add({ hud_elem_type = "statbar", position = {x=0.5,y=1}, size = {x=24, y=24}, @@ -26,67 +31,73 @@ minetest.register_on_joinplayer(function(player) alignment = {x=0,y=1}, offset = {x=-320, y=-186}, } - ), - } + ) + end end) minetest.register_on_leaveplayer(function(player) local playerName = player:get_player_name() players[playerName] = nil end) + +local gameTime = 0 minetest.register_globalstep(function(dtime) --Get the gametime - local gameTime = minetest.get_gametime() + gameTime = gameTime + dtime --Loop through all connected players for playerName,playerInfo in pairs(players) do local player = minetest.get_player_by_name(playerName) if player ~= nil then - local pos = player:getpos() - -- From playerplus : - -- am I near a cactus? - pos.y = pos.y + 0.1 - local near = minetest.find_node_near(pos, 1, "default:cactus") - if near then - pos = near - - -- am I touching the cactus? if so it hurts - for _,player in ipairs(minetest.get_objects_inside_radius(pos, 1.0)) do - if player:get_hp() > 0 then - player:set_hp(player:get_hp()-1) - end - end - end - + --no sprint if stand (if in keybinding setting menu, checkbox ["Use" = climb down] is checked , climb down use sprint) --Check if they are pressing the e key - players[playerName]["epressed"] = player:get_player_control()["aux1"] - + local pressed = player:get_player_control()["aux1"] + if pressed and (player:get_player_control()["up"] or player:get_player_control()["down"] or player:get_player_control()["left"] or player:get_player_control()["right"]) then + players[playerName]["epressed"] = true + else + players[playerName]["epressed"] = false + end --Stop sprinting if the player is pressing the LMB or RMB if player:get_player_control()["LMB"] or player:get_player_control()["RMB"] then setSprinting(playerName, false) playerInfo["timeOut"] = 3 end - --If the player is sprinting, create particles behind him/her - if playerInfo["sprinting"] == true and gameTime % 0.1 == 0 then - local numParticles = math.random(1, 2) - local playerPos = player:getpos() - local playerNode = minetest.get_node({x=playerPos["x"], y=playerPos["y"]-1, z=playerPos["z"]}) - if playerNode["name"] ~= "air" then - for i=1, numParticles, 1 do - minetest.add_particle({ - pos = {x=playerPos["x"]+math.random(-1,1)*math.random()/2,y=playerPos["y"]+0.1,z=playerPos["z"]+math.random(-1,1)*math.random()/2}, - vel = {x=0, y=5, z=0}, - acc = {x=0, y=-13, z=0}, - expirationtime = math.random(), - size = math.random()+0.5, - collisiondetection = true, - vertical = false, - texture = "default_dirt.png", - }) + + if gameTime > 0.4 then + gameTime = 0 + local pos = player:getpos() + -- From playerplus : + -- am I near a cactus? + pos.y = pos.y + 0.1 + local near = minetest.find_node_near(pos, 1, "default:cactus") + if near then + if player:get_hp() > 0 then + player:set_hp(player:get_hp()-1) + end + end + + --If the player is sprinting, create particles behind him/her + if playerInfo["sprinting"] == true then + local numParticles = math.random(1, 2) + local playerPos = player:getpos() + local playerNode = minetest.get_node({x=playerPos["x"], y=playerPos["y"]-1, z=playerPos["z"]}) + if playerNode["name"] ~= "air" then + for i=1, numParticles, 1 do + minetest.add_particle({ + pos = {x=playerPos["x"]+math.random(-1,1)*math.random()/2,y=playerPos["y"]+0.1,z=playerPos["z"]+math.random(-1,1)*math.random()/2}, + vel = {x=0, y=5, z=0}, + acc = {x=0, y=-13, z=0}, + expirationtime = math.random(), + size = math.random()+0.5, + collisiondetection = true, + vertical = false, + texture = "sprint_particle.png", + }) + end end end end - + --Adjust player states if players[playerName]["epressed"] == true and playerInfo["timeOut"] == 0 then --Stopped setSprinting(playerName, true) @@ -116,10 +127,19 @@ minetest.register_globalstep(function(dtime) if playerInfo["sprinting"] == false and playerInfo["stamina"] < SPRINT_STAMINA then playerInfo["stamina"] = playerInfo["stamina"] + dtime end + -- Cap stamina at SPRINT_STAMINA + if playerInfo["stamina"] > SPRINT_STAMINA then + playerInfo["stamina"] = SPRINT_STAMINA + end --Update the players's hud sprint stamina bar - local numBars = (playerInfo["stamina"]/SPRINT_STAMINA)*20 - player:hud_change(playerInfo["hud"], "number", numBars) + + if SPRINT_HUDBARS_USED then + hb.change_hudbar(player, "sprint", playerInfo["stamina"]) + else + local numBars = (playerInfo["stamina"]/SPRINT_STAMINA)*20 + player:hud_change(playerInfo["hud"], "number", numBars) + end end end end) diff --git a/mods/sprint/init.lua b/mods/sprint/init.lua index 325adb7a..91da678e 100755 --- a/mods/sprint/init.lua +++ b/mods/sprint/init.lua @@ -14,6 +14,16 @@ SPRINT_JUMP = 1.1 SPRINT_STAMINA = 10 SPRINT_TIMEOUT = 0.5 --Only used if SPRINT_METHOD = 0 +if minetest.get_modpath("hudbars") ~= nil then + hb.register_hudbar("sprint", 0xFFFFFF, "Stamina", + { bar = "sprint_stamina_bar.png", icon = "stamina.png" }, + SPRINT_STAMINA, SPRINT_STAMINA, + false, "%s: %.1f/%.1f") + SPRINT_HUDBARS_USED = true +else + SPRINT_HUDBARS_USED = false +end + if SPRINT_METHOD == 0 then dofile(minetest.get_modpath("sprint") .. "/wsprint.lua") elseif SPRINT_METHOD == 1 then diff --git a/mods/sprint/textures/sprint_particle.png b/mods/sprint/textures/sprint_particle.png new file mode 100644 index 0000000000000000000000000000000000000000..451fbba42e715504db85b330c88192d7518bc412 GIT binary patch literal 791 zcmV+y1L*vTP)#5o9oea44^j5QS zzrVS=BS`-HxZ$)%!NRf}^54UYoYC!RBxdc~kM&btDk0F!A=bOLE)Vs$?@#9!=Re=w zps!y(zdk*ranub%)%KJ!1i{&ne-`@~fw$eEsyoNFe!D*TvCfNKjshDZ!+6Q|2m+6o zmT5L!KWmVV>0%}Kb7QG{CtCU8|!^&C;>WZCQ^K7iuPkzHeyNkHg3hO_!B5WNbaUo68|Mb01hw-|!6qu?>GlE5W4F?7^Z<`N5Co+eG(wj)PaS4zF?>+kCwv=^H! zQ^=fz^j(Jwkp{%I&DF6Fv!Z$4cO%yT(nkRx#H-7*hxINzN`N-gNoY#4Nmx2cLpSyu zwDepqW!v_Kj<#i!6=fQSLJBTs4M0=JX%yr|#l-wpH2b>8#4`F}L>TB8wPJ8>yC0}y znTMvY+nx)tE30~7u4PyzPC^eOFfWKnOx+{a!ZIl1Rns}d%68SrCj@|LV2qGq;OEUD zatwTN9EVE>0EiJBMrIm11fZkrH1_hc#t5GuN0Sgu)0n!h%`?_C`S`jOYQ8#2`hgBy z>9edFnna#s8X825v2mJ~j!pUO`Y}9;!Z270IWxhlj=tta82DVO>(%8?x0m-H-W7Fw zoJ3@?cy}KE^YDxzL`qB$Xq-za)u&&tU0eVC{l(PoO@L SPRINT_STAMINA then + playerInfo["stamina"] = SPRINT_STAMINA + end --Update the players's hud sprint stamina bar - local numBars = (playerInfo["stamina"]/SPRINT_STAMINA)*20 - player:hud_change(playerInfo["hud"], "number", numBars) + + if SPRINT_HUDBARS_USED then + hb.change_hudbar(player, "sprint", playerInfo["stamina"]) + else + local numBars = (playerInfo["stamina"]/SPRINT_STAMINA)*20 + player:hud_change(playerInfo["hud"], "number", numBars) + end end end end)