220 lines
6.6 KiB
Lua
220 lines
6.6 KiB
Lua
paint = {}
|
|
paint.loopmax=50
|
|
paint.loops=0
|
|
|
|
minetest.register_alias("pencil", "mtpaint:pencil")
|
|
minetest.register_alias("fill", "mtpaint:fill")
|
|
minetest.register_alias("bucket", "mtpaint:fill")
|
|
minetest.register_alias("eraser", "mtpaint:eraser")
|
|
minetest.register_alias("gum", "mtpaint:eraser")
|
|
minetest.register_alias("picker", "mtpaint:picker")
|
|
minetest.register_alias("colorpicker", "mtpaint:picker")
|
|
minetest.register_alias("nodepicker", "mtpaint:picker")
|
|
|
|
--function
|
|
|
|
paint.has_air = function(pos)
|
|
print("check for air")
|
|
for i=-1,1,2 do
|
|
local p = {x=pos.x+i, y=pos.y, z=pos.z}
|
|
local n = minetest.env:get_node(p).name
|
|
print(n)
|
|
if minetest.registered_nodes[n].walkable == false then
|
|
return true
|
|
end
|
|
end
|
|
for i=-1,1,2 do
|
|
local p = {x=pos.x, y=pos.y+i, z=pos.z}
|
|
local n = minetest.env:get_node(p).name
|
|
print(n)
|
|
if minetest.registered_nodes[n].walkable == false then
|
|
return true
|
|
end
|
|
end
|
|
for i=-1,1,2 do
|
|
local p = {x=pos.x, y=pos.y, z=pos.z+i}
|
|
local n = minetest.env:get_node(p).name
|
|
print(n)
|
|
if minetest.registered_nodes[n].walkable == false then
|
|
return true
|
|
end
|
|
end
|
|
print("doesnothaveair")
|
|
return false
|
|
end
|
|
|
|
paint.replace = function(user, position, replace, replacer, full)
|
|
|
|
if not minetest.registered_nodes[replacer] then return end
|
|
if replace == replacer then return end
|
|
if paint.loops > 2000 then return end
|
|
local pos = position
|
|
if full == false then
|
|
if paint.has_air(pos) == false then return end
|
|
end
|
|
paint.loops = paint.loops + 1
|
|
|
|
local node = replacer
|
|
|
|
minetest.env:set_node(pos,{name=node})
|
|
|
|
for i=-1,1,2 do
|
|
local p = {x=pos.x+i, y=pos.y, z=pos.z}
|
|
local n = minetest.env:get_node(p).name
|
|
if n == replace then
|
|
minetest.env:set_node(pos,{name=node})
|
|
paint.replace(user,p, replace, replacer, full)
|
|
end
|
|
end
|
|
|
|
for i=-1,1,2 do
|
|
local p = {x=pos.x, y=pos.y+i, z=pos.z}
|
|
local n = minetest.env:get_node(p).name
|
|
if n == replace then
|
|
minetest.env:set_node(pos,{name=node})
|
|
paint.replace(user,p, replace, replacer, full)
|
|
end
|
|
end
|
|
for i=-1,1,2 do
|
|
local p = {x=pos.x, y=pos.y, z=pos.z+i}
|
|
local n = minetest.env:get_node(p).name
|
|
if n == replace then
|
|
minetest.env:set_node(pos,{name=node})
|
|
paint.replace(user,p, replace, replacer, full)
|
|
end
|
|
end
|
|
end
|
|
|
|
--tools
|
|
minetest.register_tool("mtpaint:eraser", {
|
|
description = "Eraser",
|
|
inventory_image = "paint_eraser.png",
|
|
on_use = function(itemstack, user, pointed_thing)
|
|
if pointed_thing.type == "node" then
|
|
minetest.env:remove_node(pointed_thing.under)
|
|
end
|
|
end,
|
|
})
|
|
|
|
minetest.register_tool("mtpaint:pencil", {
|
|
description = "Pencil",
|
|
inventory_image = "paint_pencil.png",
|
|
on_use = function(itemstack, user, pointed_thing)
|
|
if pointed_thing.type == "node" then
|
|
local node = user:get_inventory():get_stack("main", 1):get_name()
|
|
if user:get_player_control().sneak then
|
|
minetest.env:set_node(pointed_thing.under,{name=node})
|
|
else
|
|
minetest.env:set_node(pointed_thing.above,{name=node})
|
|
end
|
|
end
|
|
return
|
|
end,
|
|
on_place = function(self, user, pointed_thing)
|
|
if pointed_thing.type == "node" then
|
|
local node = user:get_inventory():get_stack("main", 2):get_name()
|
|
if user:get_player_control().sneak then
|
|
minetest.env:set_node(pointed_thing.under,{name=node})
|
|
else
|
|
minetest.env:set_node(pointed_thing.above,{name=node})
|
|
end
|
|
end
|
|
return
|
|
end,
|
|
})
|
|
|
|
minetest.register_tool("mtpaint:picker", {
|
|
description = "Picker",
|
|
inventory_image = "paint_picker.png",
|
|
on_use = function(itemstack, user, pointed_thing)
|
|
if pointed_thing.type == "node" then
|
|
local node = minetest.env:get_node(pointed_thing.under).name
|
|
if node == nil or node == "ignore" then return end
|
|
local oldnode = user:get_inventory():get_stack("main", 1):get_name()
|
|
local stack = ItemStack(oldnode)
|
|
local inv = user:get_inventory()
|
|
inv:set_stack("main", 1, node)
|
|
if inv:contains_item("main", oldnode) then
|
|
else
|
|
if inv:room_for_item("main", stack) then
|
|
inv:add_item("main", oldnode.." 1")
|
|
end
|
|
end
|
|
end
|
|
return
|
|
end,
|
|
on_place = function(self, user, pointed_thing)
|
|
if pointed_thing.type == "node" then
|
|
local node = minetest.env:get_node(pointed_thing.under).name
|
|
if node == nil or node == "ignore" then return end
|
|
local oldnode = user:get_inventory():get_stack("main", 2):get_name()
|
|
local stack = ItemStack(oldnode)
|
|
local inv = user:get_inventory()
|
|
inv:set_stack("main", 2, node)
|
|
if inv:contains_item("main", oldnode) then
|
|
else
|
|
if inv:room_for_item("main", stack) then
|
|
inv:add_item("main", oldnode.." 1")
|
|
end
|
|
end
|
|
end
|
|
return
|
|
end,
|
|
})
|
|
|
|
minetest.register_tool("mtpaint:fill", {
|
|
description = "Fill",
|
|
inventory_image = "paint_fill.png",
|
|
on_use = function(itemstack, user, pointed_thing)
|
|
if pointed_thing.type == "node" then
|
|
local pos = pointed_thing.under
|
|
local replace = minetest.env:get_node(pos).name
|
|
local replacer = user:get_inventory():get_stack("main", 1):get_name()
|
|
paint.loops = 0
|
|
if user:get_player_control().sneak then
|
|
paint.replace(user, pos, replace, replacer, true)
|
|
else
|
|
paint.replace(user, pos, replace, replacer, false)
|
|
end
|
|
end
|
|
return
|
|
end,
|
|
on_place = function(itemstack, user, pointed_thing)
|
|
if pointed_thing.type == "node" then
|
|
local pos = pointed_thing.under
|
|
local replace = minetest.env:get_node(pos).name
|
|
local replacer = user:get_inventory():get_stack("main", 2):get_name()
|
|
paint.loops = 0
|
|
if user:get_player_control().sneak then
|
|
paint.replace(user, pos, replace, replacer, true)
|
|
else
|
|
paint.replace(user, pos, replace, replacer, false)
|
|
end
|
|
end
|
|
return
|
|
end,
|
|
|
|
})
|
|
|
|
--[[WIP
|
|
minetest.register_tool("mtpaint:select_square", {
|
|
description = "Square selection",
|
|
inventory_image = "paint_select_square.png",
|
|
on_use = function(itemstack, user, pointed_thing)
|
|
if pointed_thing.under then
|
|
minetest.env:remove_node(pointed_thing.under)
|
|
end
|
|
end,
|
|
})
|
|
|
|
minetest.register_tool("mtpaint:select_ellipse", {
|
|
description = "Ellipse selection",
|
|
inventory_image = "paint_select_ellipse.png",
|
|
on_use = function(itemstack, user, pointed_thing)
|
|
if pointed_thing.under then
|
|
minetest.env:remove_node()
|
|
end
|
|
end,
|
|
})
|
|
]]--
|