techage_modpack/minecart/tool.lua

112 lines
2.9 KiB
Lua
Raw Permalink Normal View History

2021-05-14 20:19:09 +03:00
--[[
Minecart
========
Copyright (C) 2019-2021 Joachim Stolberg
MIT
See license.txt for more information
2023-03-05 13:54:37 +03:00
2021-05-14 20:19:09 +03:00
]]--
-- for lazy programmers
local M = minetest.get_meta
local S = minecart.S
local P2S = function(pos) if pos then return minetest.pos_to_string(pos) end end
local S2P = minetest.string_to_pos
local P2H = minetest.hash_node_position
local sDir = {[0] = "north", "east", "south", "west"}
2023-03-05 13:54:37 +03:00
local function DOTS(dots)
2021-05-14 20:19:09 +03:00
if dots then
return table.concat(dots, ", ")
else
return ""
end
end
local old_pos
2021-08-01 12:00:22 +03:00
local function test_get_buffer(pos, player)
local yaw = player:get_look_horizontal()
local dir = minetest.yaw_to_dir(yaw)
local facedir = minetest.dir_to_facedir(dir)
local pos1 = minecart.get_next_buffer(pos, facedir)
if pos1 then
minecart.set_marker(pos1, "buffer", 1.2, 10)
end
end
2021-05-14 20:19:09 +03:00
local function test_get_route(pos, node, player)
local yaw = player:get_look_horizontal()
local dir = minetest.yaw_to_dir(yaw)
local facedir = minetest.dir_to_facedir(dir)
local route = minecart.get_waypoint(pos, facedir, {})
if route then
-- print(dump(route))
minecart.set_marker(route.pos, "pos", 0.3, 10)
if route.cart_pos then
minecart.set_marker(route.cart_pos, "cart", 0.3, 10)
end
2023-03-05 13:54:37 +03:00
2021-05-14 20:19:09 +03:00
-- determine some kind of current y
old_pos = old_pos or pos
local curr_y = pos.y > old_pos.y and 1 or pos.y < old_pos.y and -1 or 0
2023-03-05 13:54:37 +03:00
2021-05-14 20:19:09 +03:00
local cart_pos, extra_cycle = minecart.get_current_cart_pos_correction(pos, facedir, curr_y, route.dot)
minecart.set_marker(cart_pos, "curr", 0.3, 10)
old_pos = pos
2023-03-05 13:54:37 +03:00
print(string.format("Route: dist = %u, dot = %u, speed = %d, extra cycle = %s",
2021-05-14 20:19:09 +03:00
vector.distance(pos, route.pos), route.dot, route.speed or 0, extra_cycle))
end
end
local function test_get_connections(pos, node, player, ctrl)
local wp = minecart.get_waypoints(pos)
for i = 0,3 do
if wp[i] then
local dir = minecart.Dot2Dir[ wp[i].dot]
print(sDir[i], vector.distance(pos, wp[i].pos), dir.y)
end
end
print(dump(M(pos):to_table()))
end
local function click_left(itemstack, placer, pointed_thing)
if pointed_thing.type == "node" then
local pos = pointed_thing.under
2021-08-01 12:00:22 +03:00
if minecart.is_rail(pos) then
2021-10-30 17:52:44 +03:00
--test_get_buffer(pos, placer)
minecart.delete_waypoint(pos)
2021-05-14 20:19:09 +03:00
end
end
end
local function click_right(itemstack, placer, pointed_thing)
if pointed_thing.type == "node" then
local pos = pointed_thing.under
local node = minetest.get_node(pos)
if node.name == "carts:rail" or node.name == "carts:powerrail" then
test_get_connections(pos, node, placer)
elseif node.name == "minecart:buffer" then
local route = minecart.get_route(P2S(pos))
print(dump(route))
end
end
end
minetest.register_node("minecart:tool", {
description = "Tool",
inventory_image = "minecart_tool.png",
wield_image = "minecart_tool.png",
liquids_pointable = true,
2022-07-11 21:24:44 +03:00
use_texture_alpha = minecart.CLIP,
2021-05-14 20:19:09 +03:00
groups = {cracky=1, book=1},
on_use = click_left,
on_place = click_right,
node_placement_prediction = "",
stack_max = 1,
})