summaryrefslogtreecommitdiff
path: root/pairingtool.lua
diff options
context:
space:
mode:
authorcheapie <no-email-for-you@example.com>2023-08-08 22:16:42 -0500
committercheapie <no-email-for-you@example.com>2023-08-08 22:16:42 -0500
commit08cbd3adfe523ae8ad4e7263f11ff5ae1d521230 (patch)
treee9881649c7e2f78dcb5a7c16971455906019853a /pairingtool.lua
parentca33ea9d98cbf6dbd5afa668ce676ba0d9064632 (diff)
downloadcelevator-08cbd3adfe523ae8ad4e7263f11ff5ae1d521230.tar
celevator-08cbd3adfe523ae8ad4e7263f11ff5ae1d521230.tar.gz
celevator-08cbd3adfe523ae8ad4e7263f11ff5ae1d521230.tar.bz2
celevator-08cbd3adfe523ae8ad4e7263f11ff5ae1d521230.tar.xz
celevator-08cbd3adfe523ae8ad4e7263f11ff5ae1d521230.zip
Add initial car motion functionality
Place a machine (no texture yet) above the car somewhere when the car is at the lowest floor, then pair it to the drive with the pairing tool. Not much error checking yet, it'll probably crash if you do anything weird.
Diffstat (limited to 'pairingtool.lua')
-rw-r--r--pairingtool.lua43
1 files changed, 43 insertions, 0 deletions
diff --git a/pairingtool.lua b/pairingtool.lua
index 9bea461..7a48f31 100644
--- a/pairingtool.lua
+++ b/pairingtool.lua
@@ -50,6 +50,49 @@ minetest.register_tool("celevator:pairingtool",{
local stackmeta = itemstack:get_meta()
stackmeta:set_string("controllerpos",minetest.pos_to_string(pos))
minetest.chat_send_player(name,"Now pairing with controller at "..minetest.pos_to_string(pos))
+ elseif minetest.get_item_group(node.name,"_celevator_drive") == 1 then
+ local stackmeta = itemstack:get_meta()
+ stackmeta:set_string("drivepos",minetest.pos_to_string(pos))
+ minetest.chat_send_player(name,"Now pairing with drive at "..minetest.pos_to_string(pos))
+ elseif minetest.get_item_group(node.name,"_celevator_machine") == 1 then
+ local stackmeta = itemstack:get_meta()
+ local nodemeta = minetest.get_meta(pos)
+ local oldpairing = minetest.string_to_pos(nodemeta:get_string("drivepos"))
+ local drivepos = minetest.string_to_pos(stackmeta:get_string("drivepos"))
+ local origin = minetest.string_to_pos(nodemeta:get_string("origin"))
+ if not origin then
+ minetest.chat_send_player(name,"Car has not been located! Try punching the machine to search for one.")
+ elseif not drivepos then
+ minetest.chat_send_player(name,"Nothing has been selected to pair with! Punch a drive first.")
+ elseif oldpairing then
+ local drivemeta = minetest.get_meta(oldpairing)
+ drivemeta:set_string("machinepos","")
+ drivemeta:set_string("apos","0")
+ drivemeta:set_string("dpos","0")
+ drivemeta:set_string("vel","0")
+ drivemeta:set_string("maxvel","0.2")
+ drivemeta:set_string("state","uninit")
+ drivemeta:set_string("startpos","0")
+ drivemeta:set_string("origin",minetest.pos_to_string(origin))
+ nodemeta:set_string("drivepos","")
+ minetest.chat_send_player(player:get_player_name(),"Unpaired from "..minetest.pos_to_string(oldpairing))
+ elseif minetest.get_item_group(minetest.get_node(drivepos).name,"_celevator_drive") ~= 1 then
+ minetest.chat_send_player(name,"Drive has been removed. Punch a new drive to pair to that one.")
+ else
+ if minetest.is_protected(drivepos,name) and not minetest.check_player_privs(name,{protection_bypass=true}) then
+ minetest.chat_send_player(name,"Unable to pair - drive at "..minetest.pos_to_string(drivepos).." is protected!")
+ minetest.record_protection_violation(drivepos,name)
+ elseif minetest.is_protected(pos,name) and not minetest.check_player_privs(name,{protection_bypass=true}) then
+ minetest.chat_send_player(name,"Unable to pair - item to be paired is protected!")
+ minetest.record_protection_violation(pos,name)
+ else
+ local drivemeta = minetest.get_meta(drivepos)
+ nodemeta:set_string("drivepos",minetest.pos_to_string(drivepos))
+ drivemeta:set_string("machinepos",minetest.pos_to_string(pos))
+ drivemeta:set_string("state","stopped")
+ minetest.chat_send_player(player:get_player_name(),"Machine paired to "..minetest.pos_to_string(drivepos))
+ end
+ end
elseif minetest.get_item_group(node.name,"_celevator_callbutton") == 1 then
local stackmeta = itemstack:get_meta()
local nodemeta = minetest.get_meta(pos)