2014-06-20 09:50:53 +02:00
|
|
|
-- This code is distributed under GN GPL v2 license. Copyright© Jimy-Byerley
|
|
|
|
|
2014-06-28 15:35:38 +02:00
|
|
|
local opened_laptop = "computers:laptop_open"
|
|
|
|
local closed_laptop = "computers:laptop_close"
|
|
|
|
local connected_laptop = "computers:laptop_connect"
|
|
|
|
|
|
|
|
local welcome_message = "/* welcome to cybertronic OS v2.2 */"
|
|
|
|
local default_laptop = opened_laptop
|
2014-06-20 09:50:53 +02:00
|
|
|
|
|
|
|
computers = {}
|
|
|
|
|
|
|
|
local computer_action = function(pos, formname, fields, sender)
|
|
|
|
--use shell
|
|
|
|
computers.execute_oscommand(fields.text, pos, sender)
|
|
|
|
end
|
|
|
|
|
2014-06-22 10:01:16 +02:00
|
|
|
computers.registered_command_names = {}
|
|
|
|
computers.registered_commands = {}
|
2014-06-20 09:50:53 +02:00
|
|
|
|
2014-06-22 10:01:16 +02:00
|
|
|
computers.register_oscommand = function(name, short_description, long_description, exe)
|
2014-06-28 15:35:38 +02:00
|
|
|
if computers.registered_commands[name] == nil then
|
|
|
|
computers.registered_command_names[#computers.registered_command_names+1] = name
|
|
|
|
end
|
|
|
|
computers.registered_commands[name] = {
|
|
|
|
short_description=short_description,
|
|
|
|
long_description=long_description,
|
|
|
|
exe=exe
|
|
|
|
}
|
2014-06-20 09:50:53 +02:00
|
|
|
end
|
|
|
|
|
|
|
|
computers.execute_oscommand = function(cmdline, pos, player)
|
|
|
|
if cmdline == nil then return end
|
|
|
|
local command = string.match(cmdline, "([^ ]+) *")
|
|
|
|
if command == nil then return end
|
2014-06-22 10:01:16 +02:00
|
|
|
local message = command..": command not found"
|
2014-06-20 09:50:53 +02:00
|
|
|
local continue = false
|
|
|
|
|
|
|
|
print("pass command to computer : "..command)
|
2014-06-22 10:01:16 +02:00
|
|
|
if computers.registered_commands[command] then
|
|
|
|
local func = computers.registered_commands[command].exe
|
|
|
|
if func then
|
|
|
|
continue = true
|
|
|
|
message, continue = func(cmdline, pos, player)
|
|
|
|
end
|
2014-06-20 09:50:53 +02:00
|
|
|
end
|
|
|
|
|
|
|
|
--minetest.chat_send_player(player:get_player_name(), message)
|
|
|
|
--display message
|
|
|
|
local meta = minetest.env:get_meta(pos)
|
|
|
|
meta:set_string("infotext", message)
|
|
|
|
|
|
|
|
return continue
|
|
|
|
end
|
|
|
|
|
|
|
|
dofile(minetest.get_modpath("computers").."/os.lua")
|
|
|
|
|
|
|
|
-- crafting
|
|
|
|
|
|
|
|
|
|
|
|
minetest.register_craft({
|
|
|
|
output = 'computers:keyboard',
|
|
|
|
recipe = {
|
|
|
|
{'technology:button', 'technology:button', 'technology:button'},
|
|
|
|
{'technology:button', 'technology:button', 'technology:button'},
|
|
|
|
{'technology:button', 'technology:button', 'technology:button'},
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
minetest.register_craft({
|
2014-06-28 15:35:38 +02:00
|
|
|
output = default_laptop,
|
2014-06-20 09:50:53 +02:00
|
|
|
recipe = {
|
|
|
|
{'technology:flat_screen_off', "technology:wire"},
|
|
|
|
{'technology:electronic_card', "technology:wire"},
|
|
|
|
{'technology:keyboard', "technology:wire"},
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
-- node defs
|
|
|
|
|
|
|
|
minetest.register_node("computers:keyboard", {
|
|
|
|
description = "keyboard",
|
|
|
|
stack_max = 1,
|
|
|
|
node_placement_prediction = "",
|
|
|
|
paramtype = "light",
|
|
|
|
light_source = 3,
|
|
|
|
paramtype2 = "facedir",
|
|
|
|
drawtype = "nodebox",
|
|
|
|
node_box = {type = "fixed", fixed = {-0.44, -0.5, -0.44, 0.44, -0.45, -0.02}},
|
|
|
|
selection_box = {type = "fixed", fixed = {-0.44, -0.5, -0.44, 0.44, -0.45, -0.02}},
|
|
|
|
tiles = {"keyboard_top.png", "keyboard_bottom.png", "keyboard_side.png", "keyboard_side.png", "keyboard_side.png", "keyboard_side.png"},
|
|
|
|
walkable = true,
|
|
|
|
groups = {choppy=2, dig_immediate=2},
|
|
|
|
})
|
|
|
|
|
|
|
|
minetest.register_node("computers:laptop_open", {
|
|
|
|
description = "Laptop from computers mod",
|
|
|
|
stack_max = 1,
|
|
|
|
node_placement_prediction = "",
|
|
|
|
paramtype = "light",
|
|
|
|
light_source = 4,
|
|
|
|
paramtype2 = "facedir",
|
|
|
|
drawtype = "nodebox",
|
2014-06-28 15:35:38 +02:00
|
|
|
node_box = {type = "fixed", fixed = {
|
2014-06-20 09:50:53 +02:00
|
|
|
-- top part
|
|
|
|
{-0.3, -0.45, 0.05, 0.3, 0.05, 0.1},
|
|
|
|
-- bottom part
|
|
|
|
{-0.3, -0.5, -0.45, 0.3, -0.45, 0.075},
|
|
|
|
}},
|
|
|
|
selection_box = {type = "fixed", fixed = {
|
|
|
|
-- top part
|
|
|
|
{-0.3, -0.45, 0.05, 0.3, 0.05, 0.1},
|
|
|
|
-- bottom part
|
|
|
|
{-0.3, -0.5, -0.45, 0.3, -0.45, 0.075},
|
|
|
|
}},
|
|
|
|
tiles = {"laptop_top.png", "laptop_bottom.png", "laptop_left.png", "laptop_right.png", "laptop_back.png", {
|
|
|
|
image="laptop_front_general.png",
|
|
|
|
backface_culling=false,
|
|
|
|
animation={type="vertical_frames", aspect_w=128, aspect_h=128, length=4.5}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
walkable = true,
|
|
|
|
groups = {choppy=2, dig_immediate=2},
|
|
|
|
drop = default_laptop,
|
|
|
|
on_punch = function(pos, node, puncher)
|
|
|
|
node.name = "computers:laptop_close"
|
|
|
|
minetest.env:set_node(pos, node)
|
|
|
|
end,
|
|
|
|
on_construct = function(pos)
|
|
|
|
--set metadata
|
|
|
|
local meta = minetest.env:get_meta(pos)
|
|
|
|
meta:set_string("formspec", "field[text;;${text}]")
|
|
|
|
meta:set_string("infotext", welcome_message)
|
|
|
|
end,
|
|
|
|
on_receive_fields = computer_action,
|
|
|
|
})
|
|
|
|
|
|
|
|
laptop_open_action = function(pos, node, puncher)
|
|
|
|
--set opened computer
|
|
|
|
node.name = "computers:laptop_open"
|
|
|
|
minetest.env:set_node(pos, node)
|
|
|
|
--set metadata
|
|
|
|
local meta = minetest.env:get_meta(pos)
|
|
|
|
meta:set_string("formspec", "field[text;;${text}]")
|
|
|
|
meta:set_string("infotext", welcome_message)
|
|
|
|
end
|
|
|
|
|
|
|
|
minetest.register_node("computers:laptop_close", {
|
|
|
|
description = "Laptop from computers mod",
|
|
|
|
stack_max = 1,
|
|
|
|
node_placement_prediction = "",
|
|
|
|
paramtype = "light",
|
|
|
|
paramtype2 = "facedir",
|
|
|
|
drawtype = "nodebox",
|
|
|
|
node_box = {type = "fixed", fixed = {
|
|
|
|
-- bottom part
|
|
|
|
{-0.3, -0.5, -0.45, 0.3, -0.4, 0.075},
|
|
|
|
}},
|
|
|
|
selection_box = {type = "fixed", fixed = {-0.3, -0.5, -0.45, 0.3, -0.4, 0.075},},
|
|
|
|
tiles = {"laptop_cover.png", "laptop_bottom.png", "laptop_left.png", "laptop_right.png", "laptop_back.png", {
|
|
|
|
image="laptop_front_general.png",
|
|
|
|
backface_culling=false,
|
|
|
|
animation={type="vertical_frames", aspect_w=128, aspect_h=128, length=4.5}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
walkable = true,
|
|
|
|
groups = {choppy=2, dig_immediate=2, not_in_creative_inventory=1},
|
|
|
|
drop = default_laptop,
|
|
|
|
|
|
|
|
on_punch = laptop_open_action,
|
|
|
|
on_rightclick = laptop_open_action,
|
|
|
|
})
|
|
|
|
|
|
|
|
minetest.register_node("computers:laptop_connect", {
|
|
|
|
inventory_image = "laptop_wielded.png",
|
|
|
|
wield_image = "laptop_wielded.png",
|
|
|
|
stack_max = 1,
|
|
|
|
node_placement_prediction = "",
|
|
|
|
paramtype = "light",
|
|
|
|
light_source = 6,
|
|
|
|
paramtype2 = "facedir",
|
|
|
|
drawtype = "nodebox",
|
2014-06-28 15:35:38 +02:00
|
|
|
node_box = {type = "fixed", fixed = {
|
|
|
|
-- top part
|
|
|
|
{-0.3, -0.45, 0.05, 0.3, 0.05, 0.1},
|
|
|
|
-- bottom part
|
|
|
|
{-0.3, -0.5, -0.45, 0.3, -0.45, 0.075},
|
2014-06-20 09:50:53 +02:00
|
|
|
}},
|
2014-06-28 15:35:38 +02:00
|
|
|
selection_box = {type = "fixed", fixed = {
|
|
|
|
-- top part
|
|
|
|
{-0.3, -0.45, 0.05, 0.3, 0.05, 0.1},
|
|
|
|
-- bottom part
|
|
|
|
{-0.3, -0.5, -0.45, 0.3, -0.45, 0.075},
|
|
|
|
}},
|
|
|
|
tiles = {"laptop_top.png", "laptop_bottom.png", "laptop_left.png", "laptop_right.png", "laptop_back.png", {
|
|
|
|
image="laptop_front_connect.png",
|
|
|
|
backface_culling=false,
|
|
|
|
animation={type="vertical_frames", aspect_w=128, aspect_h=128, length=4.5}
|
|
|
|
}
|
|
|
|
},
|
2014-06-20 09:50:53 +02:00
|
|
|
walkable = true,
|
|
|
|
groups = {choppy=2, dig_immediate=2, not_in_creative_inventory=1},
|
|
|
|
drop = default_laptop,
|
|
|
|
|
|
|
|
on_punch = function(pos, node, puncher)
|
|
|
|
node.name = "computers:laptop_close"
|
|
|
|
minetest.env:set_node(pos, node)
|
|
|
|
end,
|
2014-06-28 15:35:38 +02:00
|
|
|
|
|
|
|
on_receive_fields = computers.oscommand_com_main
|
2014-06-20 09:50:53 +02:00
|
|
|
})
|
|
|
|
|
2014-06-28 15:35:38 +02:00
|
|
|
minetest.register_alias("computers:laptop", "computers:laptop_open")
|