forked from VoxeLibre/VoxeLibre
Merge branch 'master' of https://git.minetest.land/MineClone2/MineClone2
This commit is contained in:
commit
c1da231f9d
|
@ -34,7 +34,6 @@ keepInventory = false
|
||||||
|
|
||||||
# Performance settings
|
# Performance settings
|
||||||
dedicated_server_step = 0.001
|
dedicated_server_step = 0.001
|
||||||
liquid_update = 0.25
|
|
||||||
abm_interval = 0.25
|
abm_interval = 0.25
|
||||||
max_objects_per_block = 4096
|
max_objects_per_block = 4096
|
||||||
max_packets_per_iteration = 10096
|
max_packets_per_iteration = 10096
|
||||||
|
|
|
@ -47,7 +47,72 @@ local alldirs=
|
||||||
{ x = 0, y = 0, z = 1}
|
{ x = 0, y = 0, z = 1}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
-- 3 exptime variants because the animation is not tied to particle expiration time.
|
||||||
|
-- 3 colorized variants to imitate minecraft's
|
||||||
|
local smoke_pdef_base = {
|
||||||
|
amount = 0.001,
|
||||||
|
time = 0,
|
||||||
|
-- minpos = vector.add(pos, { x = -0.45, y = -0.45, z = -0.45 }),
|
||||||
|
-- maxpos = vector.add(pos, { x = 0.45, y = 0.45, z = 0.45 }),
|
||||||
|
minvel = { x = -0.1, y = 0.3, z = -0.1 },
|
||||||
|
maxvel = { x = 0.1, y = 1.6, z = 0.1 },
|
||||||
|
-- minexptime = 3 exptime variants,
|
||||||
|
-- maxexptime = 3 exptime variants
|
||||||
|
minsize = 4.0,
|
||||||
|
maxsize = 4.5,
|
||||||
|
-- texture = "mcl_particles_smoke_anim.png^[colorize:#000000:(3 colourize variants)",
|
||||||
|
animation = {
|
||||||
|
type = "vertical_frames",
|
||||||
|
aspect_w = 8,
|
||||||
|
aspect_h = 8,
|
||||||
|
-- length = 3 exptime variants
|
||||||
|
},
|
||||||
|
collisiondetection = true,
|
||||||
|
}
|
||||||
|
local smoke_pdef_cached = {}
|
||||||
local spawn_smoke = function(pos)
|
local spawn_smoke = function(pos)
|
||||||
|
local min = math.min
|
||||||
|
local new_minpos = vector.add(pos, { x = -0.45, y = -0.45, z = -0.45 })
|
||||||
|
local new_maxpos = vector.add(pos, { x = 0.45, y = 0.45, z = 0.45 })
|
||||||
|
|
||||||
|
-- populate the cache
|
||||||
|
if not next(smoke_pdef_cached) then
|
||||||
|
-- the last frame plays for 1/8 * N seconds, so we can take advantage of it
|
||||||
|
-- to have varying exptime for each variant.
|
||||||
|
local exptimes = { 0.75, 1.5, 4.0 }
|
||||||
|
local colorizes = { "199", "209", "243" } -- round(78%, 82%, 90% of 256) - 1
|
||||||
|
|
||||||
|
local id = 1
|
||||||
|
for _,exptime in ipairs(exptimes) do
|
||||||
|
for _,colorize in ipairs(colorizes) do
|
||||||
|
smoke_pdef_base.minpos = new_minpos
|
||||||
|
smoke_pdef_base.maxpos = new_maxpos
|
||||||
|
smoke_pdef_base.maxexptime = exptime
|
||||||
|
smoke_pdef_base.animation.length = exptime + 0.1
|
||||||
|
-- minexptime must be set such that the last frame is actully rendered,
|
||||||
|
-- even if its very short. Larger exptime -> larger range
|
||||||
|
smoke_pdef_base.minexptime = min(exptime, (7.0/8.0 * (exptime + 0.1) + 0.1))
|
||||||
|
smoke_pdef_base.texture = "mcl_particles_smoke_anim.png^[colorize:#000000:" ..colorize
|
||||||
|
|
||||||
|
smoke_pdef_cached[id] = table.copy(smoke_pdef_base)
|
||||||
|
|
||||||
|
mcl_particles.add_node_particlespawner(pos, smoke_pdef_cached[id], "high")
|
||||||
|
|
||||||
|
id = id + 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- cache already populated
|
||||||
|
else
|
||||||
|
for i, smoke_pdef in ipairs(smoke_pdef_cached) do
|
||||||
|
smoke_pdef.minpos = new_minpos
|
||||||
|
smoke_pdef.maxpos = new_maxpos
|
||||||
|
mcl_particles.add_node_particlespawner(pos, smoke_pdef, "high")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
--[[ Old smoke pdef
|
||||||
|
local spawn_smoke = function(pos)
|
||||||
mcl_particles.add_node_particlespawner(pos, {
|
mcl_particles.add_node_particlespawner(pos, {
|
||||||
amount = 0.1,
|
amount = 0.1,
|
||||||
time = 0,
|
time = 0,
|
||||||
|
@ -67,6 +132,8 @@ local spawn_smoke = function(pos)
|
||||||
length = 2.1,
|
length = 2.1,
|
||||||
},
|
},
|
||||||
}, "high")
|
}, "high")
|
||||||
|
-- ]]
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
--
|
--
|
||||||
|
|
|
@ -64,7 +64,7 @@ local function destroy_nether_portal(pos)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
local node = minetest.get_node(pos)
|
local node = minetest.get_node(pos)
|
||||||
local nn, orientation = node.name, node.param2
|
local nn, orientation = node.name, node.param2
|
||||||
local obsidian = nn == "mcl_core:obsidian"
|
local obsidian = nn == "mcl_core:obsidian"
|
||||||
|
|
||||||
local has_meta = minetest.string_to_pos(meta:get_string("portal_frame1"))
|
local has_meta = minetest.string_to_pos(meta:get_string("portal_frame1"))
|
||||||
if has_meta then
|
if has_meta then
|
||||||
|
@ -138,8 +138,6 @@ minetest.register_node("mcl_portals:portal", {
|
||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "blend" or true,
|
use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "blend" or true,
|
||||||
walkable = false,
|
walkable = false,
|
||||||
diggable = false,
|
|
||||||
pointable = false,
|
|
||||||
buildable_to = false,
|
buildable_to = false,
|
||||||
is_ground_content = false,
|
is_ground_content = false,
|
||||||
drop = "",
|
drop = "",
|
||||||
|
@ -152,7 +150,8 @@ minetest.register_node("mcl_portals:portal", {
|
||||||
{-0.5, -0.5, -0.1, 0.5, 0.5, 0.1},
|
{-0.5, -0.5, -0.1, 0.5, 0.5, 0.1},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
groups = {portal=1, not_in_creative_inventory = 1},
|
groups = { creative_breakable = 1, portal = 1, not_in_creative_inventory = 1 },
|
||||||
|
sounds = mcl_sounds.node_sound_glass_defaults(),
|
||||||
on_destruct = destroy_nether_portal,
|
on_destruct = destroy_nether_portal,
|
||||||
|
|
||||||
_mcl_hardness = -1,
|
_mcl_hardness = -1,
|
||||||
|
@ -583,7 +582,7 @@ local function check_and_light_shape(pos, orientation)
|
||||||
meta:set_string("portal_time", tostring(0))
|
meta:set_string("portal_time", tostring(0))
|
||||||
meta:set_string("portal_target", "")
|
meta:set_string("portal_target", "")
|
||||||
end
|
end
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Attempts to light a Nether portal at pos
|
-- Attempts to light a Nether portal at pos
|
||||||
|
@ -842,7 +841,7 @@ minetest.override_item("mcl_core:obsidian", {
|
||||||
_on_ignite = function(user, pointed_thing)
|
_on_ignite = function(user, pointed_thing)
|
||||||
local x, y, z = pointed_thing.under.x, pointed_thing.under.y, pointed_thing.under.z
|
local x, y, z = pointed_thing.under.x, pointed_thing.under.y, pointed_thing.under.z
|
||||||
-- Check empty spaces around obsidian and light all frames found:
|
-- Check empty spaces around obsidian and light all frames found:
|
||||||
local portals_placed =
|
local portals_placed =
|
||||||
mcl_portals.light_nether_portal({x = x - 1, y = y, z = z}) or mcl_portals.light_nether_portal({x = x + 1, y = y, z = z}) or
|
mcl_portals.light_nether_portal({x = x - 1, y = y, z = z}) or mcl_portals.light_nether_portal({x = x + 1, y = y, z = z}) or
|
||||||
mcl_portals.light_nether_portal({x = x, y = y - 1, z = z}) or mcl_portals.light_nether_portal({x = x, y = y + 1, z = z}) or
|
mcl_portals.light_nether_portal({x = x, y = y - 1, z = z}) or mcl_portals.light_nether_portal({x = x, y = y + 1, z = z}) or
|
||||||
mcl_portals.light_nether_portal({x = x, y = y, z = z - 1}) or mcl_portals.light_nether_portal({x = x, y = y, z = z + 1})
|
mcl_portals.light_nether_portal({x = x, y = y, z = z - 1}) or mcl_portals.light_nether_portal({x = x, y = y, z = z + 1})
|
||||||
|
@ -863,4 +862,3 @@ minetest.override_item("mcl_core:obsidian", {
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -50,16 +50,27 @@ end
|
||||||
|
|
||||||
local function setSprinting(playerName, sprinting) --Sets the state of a player (0=stopped/moving, 1=sprinting)
|
local function setSprinting(playerName, sprinting) --Sets the state of a player (0=stopped/moving, 1=sprinting)
|
||||||
local player = minetest.get_player_by_name(playerName)
|
local player = minetest.get_player_by_name(playerName)
|
||||||
|
local controls = player:get_player_control()
|
||||||
if players[playerName] then
|
if players[playerName] then
|
||||||
players[playerName].sprinting = sprinting
|
players[playerName].sprinting = sprinting
|
||||||
if sprinting == true then
|
if sprinting == true or controls.RMB and string.find(player:get_wielded_item():get_name(), "mcl_bows:bow") and player:get_wielded_item():get_name() ~= "mcl_bows:bow" then
|
||||||
players[playerName].fov = math.min(players[playerName].fov + 0.05, 1.2)
|
if sprinting == true then
|
||||||
player:set_fov(players[playerName].fov, true, 0.15)
|
players[playerName].fov = math.min(players[playerName].fov + 0.05, 1.2)
|
||||||
playerphysics.add_physics_factor(player, "speed", "mcl_sprint:sprint", mcl_sprint.SPEED)
|
players[playerName].fade_time = .15
|
||||||
elseif sprinting == false then
|
else
|
||||||
|
players[playerName].fov = .7
|
||||||
|
players[playerName].fade_time = .3
|
||||||
|
end
|
||||||
|
player:set_fov(players[playerName].fov, true, players[playerName].fade_time)
|
||||||
|
if sprinting == true then
|
||||||
|
playerphysics.add_physics_factor(player, "speed", "mcl_sprint:sprint", mcl_sprint.SPEED)
|
||||||
|
end
|
||||||
|
elseif sprinting == false and player:get_wielded_item():get_name() ~= "mcl_bows:bow_0" and player:get_wielded_item():get_name() ~= "mcl_bows:bow_1" and player:get_wielded_item():get_name() ~= "mcl_bows:bow_2" then
|
||||||
players[playerName].fov = math.max(players[playerName].fov - 0.05, 1.0)
|
players[playerName].fov = math.max(players[playerName].fov - 0.05, 1.0)
|
||||||
player:set_fov(players[playerName].fov, true, 0.15)
|
player:set_fov(players[playerName].fov, true, 0.15)
|
||||||
playerphysics.remove_physics_factor(player, "speed", "mcl_sprint:sprint")
|
if sprinting == false then
|
||||||
|
playerphysics.remove_physics_factor(player, "speed", "mcl_sprint:sprint")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue