Add screwdriver tool

This commit is contained in:
Joachim Stolberg 2022-01-05 12:48:36 +01:00
parent f8ca493a6b
commit 861a36f45c
14 changed files with 252 additions and 13 deletions

View File

@ -694,11 +694,11 @@ function flylib.rotate_nodes(pos, posses1, rot)
for i, pos1 in ipairs(posses1) do
local node = techage.get_node_lvm(pos1)
if rot == "l" then
param2 = techage.param2_turn_left(node.param2)
elseif rot == "r" then
param2 = techage.param2_turn_right(node.param2)
elseif rot == "r" then
param2 = techage.param2_turn_left(node.param2)
else
param2 = techage.param2_turn_left(techage.param2_turn_left(node.param2))
param2 = techage.param2_turn_right(techage.param2_turn_right(node.param2))
end
if not minetest.is_protected(pos1, owner) and is_simple_node(pos1) then
minetest.remove_node(pos1)

View File

@ -80,13 +80,56 @@ function techage.facedir_to_rotation(facedir)
end
function techage.param2_turn_left(param2)
return (RotationViaYAxis[param2] or RotationViaYAxis[0])[1]
return (RotationViaYAxis[param2] or RotationViaYAxis[0])[2]
end
function techage.param2_turn_right(param2)
return (RotationViaYAxis[param2] or RotationViaYAxis[0])[2]
return (RotationViaYAxis[param2] or RotationViaYAxis[0])[1]
end
-- Roll a block in north direction (south is vice versa)
local RollNorth = {
{0,4,22,8},
{1,5,23,9},
{2,6,20,10},
{3,7,21,11},
{12,13,14,15},
{16,19,18,17},
}
-- Roll a block in east direction (west is vice versa)
local RollEast = {
{0,12,20,16},
{1,13,21,17},
{2,14,22,18},
{3,15,23,19},
{4,7,6,5},
{8,9,10,11},
}
-- Generate a table for all facedir and param2 values:
-- TurnUp[facedir][param2] = new_param2
local TurnUp = {[0] = {}, {}, {}, {}}
for i = 1,6 do
for j = 1,4 do
local idx = RollNorth[i][j]
TurnUp[0][idx] = RollNorth[i][j == 4 and 1 or j + 1] -- north
TurnUp[2][idx] = RollNorth[i][j == 1 and 4 or j - 1] -- south
idx = RollEast[i][j]
TurnUp[1][idx] = RollEast[i][j == 4 and 1 or j + 1] -- east
TurnUp[3][idx] = RollEast[i][j == 1 and 4 or j - 1] -- west
end
end
-- facedir is from the players (0..3)
-- param2 is from the node (0..23)
function techage.param2_turn_up(facedir, param2)
return TurnUp[facedir % 4][param2 % 24]
end
-------------------------------------------------------------------------------
-- Rotate nodes around the center
-------------------------------------------------------------------------------

View File

@ -85,6 +85,7 @@ techage.Items = {
ta3_powerswitchbox = "techage:powerswitch_box",
ta3_powerterminal = "techage:ta3_power_terminal",
ta3_trowel = "techage:trowel",
ta3_screwdriver = "techage:screwdriver",
ta3_tinygenerator = "techage:tiny_generator",
ta3_akkublock = "techage:ta3_akku",
ta3_furnace = "techage:ta3_furnace_pas",

View File

@ -139,6 +139,7 @@ techage.manual_DE.aTitel = {
"3,TechAge Programmer",
"3,TechAge Kelle / Trowel",
"3,TA3 Bohrgestängezange / TA3 Drill Pipe Wrench",
"3,Techage Schraubendreher",
"1,TA4: Gegenwart",
"2,Windkraftanlage",
"3,TA4 Windkraftanlage / Wind Turbine",
@ -1268,6 +1269,15 @@ techage.manual_DE.aText = {
"\n"..
"\n"..
"\n",
"Der Techage Schraubendreher dient als Ersatz für den normalen Schraubendreher. Es besitzt folgende Funktionen:\n"..
"\n"..
" - Linksklick: Den Block nach links drehen\n"..
" - Rechtsklick: Die sichtbare Seite des Blockes nach oben drehen\n"..
" - Shift+Linksklick: Ausrichtung des angeklickten Blockes speichern\n"..
" - Shift+Rechtsklick: Die gespeicherte Ausrichtung auf den angeklickten Block anwenden\n"..
"\n"..
"\n"..
"\n",
"Regenerative Energiequellen wie Wind\\, Sonne und Biokraft helfen dir\\, das Ölzeitalter zu verlassen. Mit modernen Technologien und intelligenten Maschinen machst du dich auf in die Zukunft.\n"..
"\n"..
"\n"..
@ -2198,6 +2208,7 @@ techage.manual_DE.aItemName = {
"ta3_programmer",
"ta3_trowel",
"ta3_drill_pipe_wrench",
"ta3_screwdriver",
"techage_ta4",
"",
"ta4_windturbine",
@ -2446,6 +2457,7 @@ techage.manual_DE.aPlanTable = {
"",
"",
"",
"",
"ta4_windturbine",
"",
"",
@ -2552,3 +2564,4 @@ techage.manual_DE.aPlanTable = {
"",
"",
}

View File

@ -139,6 +139,7 @@ techage.manual_EN.aTitel = {
"3,TechAge Programmer",
"3,TechAge Trowel / Trowel",
"3,TA3 drill pipe wrench",
"3,Techage Screwdriver",
"1,TA4: Present",
"2,Wind Turbine",
"3,TA4 Wind Turbine",
@ -1266,6 +1267,15 @@ techage.manual_EN.aText = {
"\n"..
"\n"..
"\n",
"The Techage Screwdriver serves as a replacement for the normal screwdriver. It has the following functions:\n"..
"\n"..
" - Left click: turn the block to the left\n"..
" - Right click: turn the visible side of the block upwards\n"..
" - Shift + left click: save the alignment of the clicked block\n"..
" - Shift + right click: apply the saved alignment to the clicked block\n"..
"\n"..
" \n"..
"\n",
"Renewable energy sources such as wind\\, sun and biofuels help you to leave the oil age. With modern technologies and intelligent machines you set out into the future.\n"..
"\n"..
"\n"..
@ -2193,6 +2203,7 @@ techage.manual_EN.aItemName = {
"ta3_programmer",
"ta3_trowel",
"ta3_drill_pipe_wrench",
"ta3_screwdriver",
"techage_ta4",
"",
"ta4_windturbine",
@ -2440,6 +2451,7 @@ techage.manual_EN.aPlanTable = {
"",
"",
"",
"",
"ta4_windturbine",
"",
"",
@ -2545,3 +2557,4 @@ techage.manual_EN.aPlanTable = {
"",
"",
}

View File

@ -228,6 +228,7 @@ dofile(MP.."/tools/repairkit.lua")
dofile(MP.."/tools/pipe_wrench.lua")
dofile(MP.."/basic_machines/blackhole.lua")
dofile(MP.."/basic_machines/forceload.lua")
dofile(MP.."/tools/screwdriver.lua")
-- Lamps
dofile(MP.."/lamps/lib.lua")

View File

@ -1049,6 +1049,11 @@ TA4 Rotor Blade=TA4 Rotorblatt
TA4 Wind Turbine=TA4 Windkraftanlage
TA4 Wind Turbine Nacelle=TA4 Windkraftanlagengondel
### screwdriver.lua ###
Block alignment stored!=Blockausrichtung gespeichert!
Techage Screwdriver@n(See: TA3 > Tools)=Techage Schraubendreher@n(Siehe: TA3 > Werkzeuge)
### sensorchest.lua ###
Allow public chest access=Erlaube öffentlichen Zugriff

View File

@ -1049,6 +1049,11 @@ TA4 Rotor Blade=
TA4 Wind Turbine=
TA4 Wind Turbine Nacelle=
### screwdriver.lua ###
Block alignment stored!=
Techage Screwdriver@n(See: TA3 > Tools)=
### sensorchest.lua ###
Allow public chest access=

View File

@ -836,8 +836,6 @@ Mit Shift+Rechtsklick kann bei einigen Blöcken ein erweitertes Menü geöffnet
[ta3_end_wrench|image]
### TechAge Programmer
Mit dem Programmer können Blocknummern mit einem Rechtsklick von mehreren Blöcken eingesammelt und mit einem Linksklick in einen Block wie Taster/Schalter geschrieben werden.
@ -845,8 +843,6 @@ Wird in die Luft geklickt, wird der interne Speicher gelöscht.
[ta3_programmer|image]
### TechAge Kelle / Trowel
Die Kelle dient zum Verputzen von Stromkabel. Siehe dazu "TA Stromkabel".
@ -859,3 +855,14 @@ Die Kelle dient zum Verputzen von Stromkabel. Siehe dazu "TA Stromkabel".
Mit diesem Werkzeug lassen sich die Bohrgestängezange Blöcke wieder entfernen, wenn dort bspw. ein Tunnel durch soll.
[ta3_drill_pipe_wrench|image]
### Techage Schraubendreher
Der Techage Schraubendreher dient als Ersatz für den normalen Schraubendreher. Es besitzt folgende Funktionen:
- Linksklick: Den Block nach links drehen
- Rechtsklick: Die sichtbare Seite des Blockes nach oben drehen
- Shift+Linksklick: Ausrichtung des angeklickten Blockes speichern
- Shift+Rechtsklick: Die gespeicherte Ausrichtung auf den angeklickten Block anwenden
[ta3_screwdriver|image]

View File

@ -829,7 +829,6 @@ With Shift + right click an extended menu can be opened for some blocks. Dependi
[ta3_end_wrench|image]
### TechAge Programmer
With the programmer, block numbers can be collected from several blocks with a right click and written into a block like a button / switch with a left click.
@ -837,17 +836,25 @@ If you click in the air, the internal memory is deleted.
[ta3_programmer|image]
### TechAge Trowel / Trowel
The trowel is used for plastering power cables. See also "TA power cable".
[ta3_trowel|image]
### TA3 drill pipe wrench
This tool can be used to remove the drill pipe blocks if, for example, a tunnel is to pass through there.
[ta3_drill_pipe_wrench|image]
### Techage Screwdriver
The Techage Screwdriver serves as a replacement for the normal screwdriver. It has the following functions:
- Left click: turn the block to the left
- Right click: turn the visible side of the block upwards
- Shift + left click: save the alignment of the clicked block
- Shift + right click: apply the saved alignment to the clicked block
[ta3_screwdriver|image]

View File

@ -138,6 +138,7 @@
- [TechAge Programmer](./manual_ta3_DE.md#techage-programmer)
- [TechAge Kelle / Trowel](./manual_ta3_DE.md#techage-kelle--trowel)
- [TA3 Bohrgestängezange / TA3 Drill Pipe Wrench](./manual_ta3_DE.md#ta3-bohrgestängezange--ta3-drill-pipe-wrench)
- [Techage Schraubendreher](./manual_ta3_DE.md#techage-schraubendreher)
- [TA4: Gegenwart](./manual_ta4_DE.md#ta4:-gegenwart)
- [Windkraftanlage](./manual_ta4_DE.md#windkraftanlage)
- [TA4 Windkraftanlage / Wind Turbine](./manual_ta4_DE.md#ta4-windkraftanlage--wind-turbine)

View File

@ -138,6 +138,7 @@
- [TechAge Programmer](./manual_ta3_EN.md#techage-programmer)
- [TechAge Trowel / Trowel](./manual_ta3_EN.md#techage-trowel--trowel)
- [TA3 drill pipe wrench](./manual_ta3_EN.md#ta3-drill-pipe-wrench)
- [Techage Screwdriver](./manual_ta3_EN.md#techage-screwdriver)
- [TA4: Present](./manual_ta4_EN.md#ta4:-present)
- [Wind Turbine](./manual_ta4_EN.md#wind-turbine)
- [TA4 Wind Turbine](./manual_ta4_EN.md#ta4-wind-turbine)

Binary file not shown.

After

Width:  |  Height:  |  Size: 290 B

142
tools/screwdriver.lua Normal file
View File

@ -0,0 +1,142 @@
--[[
TechAge
=======
Copyright (C) 2020-2022 Joachim Stolberg
AGPL v3
See LICENSE.txt for more information
Screwdriver
]]--
if minetest.global_exists("screwdriver") then
local S = techage.S
local M = minetest.get_meta
local USES = 2000
local function base_checks(user, pointed_thing)
if pointed_thing.type ~= "node" then
return false
end
if not user then
return false
end
local pos = pointed_thing.under
local player_name = user:get_player_name()
if minetest.is_protected(pos, player_name) then
return false
end
local node = minetest.get_node(pos)
local ndef = minetest.registered_nodes[node.name]
if not ndef then
return false
end
if ndef.on_rotate == screwdriver.disallow then
return false
end
local yaw = user:get_look_horizontal()
local dir = minetest.yaw_to_dir(yaw)
local facedir = minetest.dir_to_facedir(dir)
print("base_checks", facedir, ndef.paramtype2)
return true, pos, player_name, facedir, node, ndef
end
local function store_node_param2(user, node)
user:get_meta():set_string("techage_screwdriver_param2", node.param2)
minetest.chat_send_player(user:get_player_name(), S("Block alignment stored!"))
end
local function turn_node_param2(pos, node, user)
local param2 = user:get_meta():get_string("techage_screwdriver_param2")
minetest.swap_node(pos, {name = node.name, param2 = param2})
end
local function turn_left(pos, node)
local param2 = techage.param2_turn_left(node.param2)
minetest.swap_node(pos, {name = node.name, param2 = param2})
end
local function turn_up(pos, node, facedir)
local param2 = techage.param2_turn_up(facedir, node.param2)
minetest.swap_node(pos, {name = node.name, param2 = param2})
end
-- on_use == on_left_click == turn left
local function on_use(itemstack, user, pointed_thing)
local res, pos, player_name, facedir, node, ndef = base_checks(user, pointed_thing)
if res then
if ndef.paramtype2 == "facedir" then
if user:get_player_control().sneak then
store_node_param2(user, node)
else
turn_left(pos, node)
end
else
return screwdriver.handler(itemstack, user, pointed_thing, screwdriver.ROTATE_FACE, USES)
end
if not minetest.is_creative_enabled(player_name) then
itemstack:add_wear(65535 / (USES - 1))
end
end
return itemstack
end
-- on_place == on_right_click == turn up
local function on_place(itemstack, user, pointed_thing)
local res, pos, player_name, facedir, node, ndef = base_checks(user, pointed_thing)
if res then
if ndef.paramtype2 == "facedir" then
if ndef.on_rotate ~= screwdriver.rotate_simple then
if user:get_player_control().sneak then
turn_node_param2(pos, node, user)
else
turn_up(pos, node, facedir)
end
else
return itemstack
end
else
return screwdriver.handler(itemstack, user, pointed_thing, screwdriver.ROTATE_AXIS, USES)
end
if not minetest.is_creative_enabled(player_name) then
itemstack:add_wear(65535 / (USES - 1))
end
end
return itemstack
end
minetest.register_tool("techage:screwdriver", {
description = S("Techage Screwdriver\n(See: TA3 > Tools)"),
inventory_image = "techage_screwdriver.png",
on_use = on_use,
on_place = on_place,
node_placement_prediction = "",
stack_max = 1,
})
minetest.register_craft({
output = "techage:screwdriver",
recipe = {
{"", "default:diamond", ""},
{"", "default:stick", ""},
{"", "", ""},
},
})
end