mirror of
https://github.com/ElCeejo/creatura.git
synced 2025-04-30 13:51:41 -04:00
Code cleanup
This commit is contained in:
parent
00585fa406
commit
edff8aed14
1 changed files with 18 additions and 28 deletions
46
spawning.lua
46
spawning.lua
|
@ -18,6 +18,8 @@ end)
|
||||||
|
|
||||||
-- Math --
|
-- Math --
|
||||||
|
|
||||||
|
local abs = math.abs
|
||||||
|
local pi = math.pi
|
||||||
local random = math.random
|
local random = math.random
|
||||||
|
|
||||||
local function vec_raise(v, n)
|
local function vec_raise(v, n)
|
||||||
|
@ -49,12 +51,12 @@ function creatura.register_spawn_egg(name, col1, col2, inventory_image) -- depre
|
||||||
stack_max = 99,
|
stack_max = 99,
|
||||||
on_place = function(itemstack, _, pointed_thing)
|
on_place = function(itemstack, _, pointed_thing)
|
||||||
local mobdef = minetest.registered_entities[name]
|
local mobdef = minetest.registered_entities[name]
|
||||||
local spawn_offset = math.abs(mobdef.collisionbox[2])
|
local spawn_offset = abs(mobdef.collisionbox[2])
|
||||||
local pos = minetest.get_pointed_thing_position(pointed_thing, true)
|
local pos = minetest.get_pointed_thing_position(pointed_thing, true)
|
||||||
pos.y = (pos.y - 0.49) + spawn_offset
|
pos.y = (pos.y - 0.49) + spawn_offset
|
||||||
local object = minetest.add_entity(pos, name)
|
local object = minetest.add_entity(pos, name)
|
||||||
if object then
|
if object then
|
||||||
object:set_yaw(math.random(1, 6))
|
object:set_yaw(random(1, 6))
|
||||||
object:get_luaentity().last_yaw = object:get_yaw()
|
object:get_luaentity().last_yaw = object:get_yaw()
|
||||||
end
|
end
|
||||||
if not creative then
|
if not creative then
|
||||||
|
@ -66,6 +68,7 @@ function creatura.register_spawn_egg(name, col1, col2, inventory_image) -- depre
|
||||||
end
|
end
|
||||||
|
|
||||||
function creatura.register_spawn_item(name, def)
|
function creatura.register_spawn_item(name, def)
|
||||||
|
local inventory_image
|
||||||
if not def.inventory_image
|
if not def.inventory_image
|
||||||
and def.col1 and def.col2 then
|
and def.col1 and def.col2 then
|
||||||
local base = "(creatura_spawning_crystal.png^[multiply:#" .. def.col1 .. ")"
|
local base = "(creatura_spawning_crystal.png^[multiply:#" .. def.col1 .. ")"
|
||||||
|
@ -77,18 +80,17 @@ function creatura.register_spawn_item(name, def)
|
||||||
minetest.register_craftitem(mod_name .. ":spawn_" .. mob_name, {
|
minetest.register_craftitem(mod_name .. ":spawn_" .. mob_name, {
|
||||||
description = def.description or "Spawn " .. format_name(name),
|
description = def.description or "Spawn " .. format_name(name),
|
||||||
inventory_image = def.inventory_image or inventory_image,
|
inventory_image = def.inventory_image or inventory_image,
|
||||||
stack_max = 99,
|
on_place = function(itemstack, player, pointed_thing)
|
||||||
on_place = function(itemstack, _, pointed_thing)
|
|
||||||
local mobdef = minetest.registered_entities[name]
|
local mobdef = minetest.registered_entities[name]
|
||||||
local spawn_offset = math.abs(mobdef.collisionbox[2])
|
local spawn_offset = abs(mobdef.collisionbox[2])
|
||||||
local pos = minetest.get_pointed_thing_position(pointed_thing, true)
|
local pos = minetest.get_pointed_thing_position(pointed_thing, true)
|
||||||
pos.y = (pos.y - 0.49) + spawn_offset
|
pos.y = (pos.y - 0.49) + spawn_offset
|
||||||
local object = minetest.add_entity(pos, name)
|
local object = minetest.add_entity(pos, name)
|
||||||
if object then
|
if object then
|
||||||
object:set_yaw(math.random(1, 6))
|
object:set_yaw(random(0, pi * 2))
|
||||||
object:get_luaentity().last_yaw = object:get_yaw()
|
object:get_luaentity().last_yaw = object:get_yaw()
|
||||||
end
|
end
|
||||||
if not creative then
|
if not minetest.is_creative_enabled(player:get_player_name()) then
|
||||||
itemstack:take_item()
|
itemstack:take_item()
|
||||||
return itemstack
|
return itemstack
|
||||||
end
|
end
|
||||||
|
@ -127,7 +129,7 @@ end
|
||||||
|
|
||||||
-- Utility Functions --
|
-- Utility Functions --
|
||||||
|
|
||||||
function is_value_in_table(tbl, val)
|
local function is_value_in_table(tbl, val)
|
||||||
for _, v in pairs(tbl) do
|
for _, v in pairs(tbl) do
|
||||||
if v == val then
|
if v == val then
|
||||||
return true
|
return true
|
||||||
|
@ -136,24 +138,11 @@ function is_value_in_table(tbl, val)
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
function get_biome_name(pos)
|
local function get_biome_name(pos)
|
||||||
if not pos then return end
|
if not pos then return end
|
||||||
return minetest.get_biome_name(minetest.get_biome_data(pos).biome)
|
return minetest.get_biome_name(minetest.get_biome_data(pos).biome)
|
||||||
end
|
end
|
||||||
|
|
||||||
function get_ground_level(pos)
|
|
||||||
local node = minetest.get_node(pos)
|
|
||||||
local node_def = minetest.registered_nodes[node.name]
|
|
||||||
local height = 0
|
|
||||||
while node_def.walkable
|
|
||||||
and height < 4 do
|
|
||||||
height = height + 1
|
|
||||||
node = minetest.get_node(vec_raise(pos, height))
|
|
||||||
node_def = minetest.registered_nodes[node.name]
|
|
||||||
end
|
|
||||||
return vec_raise(pos, height)
|
|
||||||
end
|
|
||||||
|
|
||||||
local function get_spawnable_mobs(pos)
|
local function get_spawnable_mobs(pos)
|
||||||
local biome = get_biome_name(pos)
|
local biome = get_biome_name(pos)
|
||||||
if not biome then biome = "_nil" end
|
if not biome then biome = "_nil" end
|
||||||
|
@ -169,12 +158,10 @@ end
|
||||||
|
|
||||||
-- Spawning Function --
|
-- Spawning Function --
|
||||||
|
|
||||||
local spawn_queue = {}
|
|
||||||
|
|
||||||
local min_spawn_radius = 32
|
local min_spawn_radius = 32
|
||||||
local max_spawn_radius = 128
|
local max_spawn_radius = 128
|
||||||
|
|
||||||
function execute_spawns(player)
|
local function execute_spawns(player)
|
||||||
if not player:get_pos() then return end
|
if not player:get_pos() then return end
|
||||||
local pos = player:get_pos()
|
local pos = player:get_pos()
|
||||||
|
|
||||||
|
@ -216,7 +203,10 @@ function execute_spawns(player)
|
||||||
if type(spawn_on) == "string" then
|
if type(spawn_on) == "string" then
|
||||||
spawn_on = {spawn_on}
|
spawn_on = {spawn_on}
|
||||||
end
|
end
|
||||||
local spawn_y_array = index_func(vec_raise(spawn_pos_center, -max_spawn_radius), vec_raise(spawn_pos_center, max_spawn_radius), spawn_on)
|
local spawn_y_array = index_func(
|
||||||
|
vec_raise(spawn_pos_center, -max_spawn_radius),
|
||||||
|
vec_raise(spawn_pos_center, max_spawn_radius),
|
||||||
|
spawn_on)
|
||||||
if spawn_y_array[1] then
|
if spawn_y_array[1] then
|
||||||
local spawn_pos = spawn_y_array[1]
|
local spawn_pos = spawn_y_array[1]
|
||||||
local dist = vector.distance(pos, spawn_pos)
|
local dist = vector.distance(pos, spawn_pos)
|
||||||
|
@ -254,7 +244,7 @@ function execute_spawns(player)
|
||||||
y = spawn_pos.y,
|
y = spawn_pos.y,
|
||||||
z = spawn_pos.z + random(-3, 3)
|
z = spawn_pos.z + random(-3, 3)
|
||||||
}
|
}
|
||||||
spawn_pos = get_ground_level(spawn_pos)
|
spawn_pos = creatura.get_ground_level(spawn_pos, 4)
|
||||||
minetest.add_node(spawn_pos, {name = "creatura:spawn_node"})
|
minetest.add_node(spawn_pos, {name = "creatura:spawn_node"})
|
||||||
local meta = minetest.get_meta(spawn_pos)
|
local meta = minetest.get_meta(spawn_pos)
|
||||||
meta:set_string("mob", mob)
|
meta:set_string("mob", mob)
|
||||||
|
@ -301,7 +291,7 @@ minetest.register_abm({
|
||||||
local amount = meta:get_int("cluster")
|
local amount = meta:get_int("cluster")
|
||||||
local obj
|
local obj
|
||||||
if amount > 0 then
|
if amount > 0 then
|
||||||
for i = 1, amount do
|
for _ = 1, amount do
|
||||||
obj = minetest.add_entity(pos, name)
|
obj = minetest.add_entity(pos, name)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
|
|
Loading…
Add table
Reference in a new issue