aboutsummaryrefslogtreecommitdiff
path: root/advtrains/debugitems.lua
blob: 2236cba7fb850510215b8aace1d5599c574dd468 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
minetest.register_tool("advtrains:tunnelborer",
{
	description = "tunnelborer",
	groups = {cracky=1}, -- key=name, value=rating; rating=1..3.
	inventory_image = "drwho_screwdriver.png",
	wield_image = "drwho_screwdriver.png",
	stack_max = 1,
	range = 7.0,
		
	on_place = function(itemstack, placer, pointed_thing)
	
	end,
	--[[
	^ Shall place item and return the leftover itemstack
	^ default: minetest.item_place ]]
	on_use = function(itemstack, user, pointed_thing)
		if pointed_thing.type=="node" then
			for x=-1,1 do
				for y=-1,1 do
					for z=-1,1 do
						minetest.remove_node(vector.add(pointed_thing.under, {x=x, y=y, z=z}))
					end
				end
			end
		end
	end,
}
)

minetest.register_chatcommand("atyaw",
	{
        params = "angledeg conn1 conn2", 
        description = "", 
        func = function(name, param)
			local angledegs, conn1s, conn2s = string.match(param, "^(%S+)%s(%S+)%s(%S+)$")
			if angledegs and conn1s and conn2s then
				local angledeg, conn1, conn2 = angledegs+0,conn1s+0,conn2s+0
				local yaw = angledeg*math.pi/180
				local yaw1 = advtrains.dir_to_angle(conn1)
				local yaw2 = advtrains.dir_to_angle(conn2)
				local adiff1 = advtrains.minAngleDiffRad(yaw, yaw1)
				local adiff2 = advtrains.minAngleDiffRad(yaw, yaw2)
				
				atdebug("yaw1",atfloor(yaw1*180/math.pi))
				atdebug("yaw2",atfloor(yaw2*180/math.pi))
				atdebug("dif1",atfloor(adiff1*180/math.pi))
				atdebug("dif2",atfloor(adiff2*180/math.pi))
				
				minetest.chat_send_all(advtrains.yawToAnyDir(yaw))
				return true, advtrains.yawToDirection(yaw, conn1, conn2)
			end
        end,
})
	
minetest.register_tool("advtrains:wagonpos_tester",
{
	description = "Wagon position tester",
	groups = {cracky=1}, -- key=name, value=rating; rating=1..3.
	inventory_image = "drwho_screwdriver.png",
	wield_image = "drwho_screwdriver.png",
	stack_max = 1,
	range = 7.0,
		
	on_place = function(itemstack, placer, pointed_thing)
	
	end,
	--[[
	^ Shall place item and return the leftover itemstack
	^ default: minetest.item_place ]]
	on_use = function(itemstack, user, pointed_thing)
		if pointed_thing.type=="node" then
			local pos = pointed_thing.under
			local trains = advtrains.occ.get_trains_at(pos)
			for train_id, index in pairs(trains) do
				local wagon_num, wagon_id, wagon_data, offset_from_center = advtrains.get_wagon_at_index(train_id, index)
				if wagon_num then
					atdebug(wagon_num, wagon_id, offset_from_center)
				end
			end
		end
	end,
}
)


local function trackitest(initial_pos, initial_connid)
	local ti, pos, connid, ok
	ti = advtrains.get_track_iterator(initial_pos, initial_connid, 500, true)
	atdebug("Starting at pos:",initial_pos,initial_connid)
	while ti:has_next_branch() do
		pos, connid = ti:next_branch() -- in first iteration, this will be the node at initial_pos. In subsequent iterations this will be the switch node from which we are branching off
		atdebug("Next Branch:",pos, connid)
		ok = true
		while ok do
			ok, pos, connid = ti:next_track()
			atdebug("Next Track:", ok, pos, connid)
		end
	end
	atdebug("End of traverse. Visited: ",table.concat(ti.visited, ","))
end

minetest.register_tool("advtrains:trackitest",
{
	description = "Track Iterator Tester (leftclick conn 1, rightclick conn 2)",
	groups = {cracky=1}, -- key=name, value=rating; rating=1..3.
	inventory_image = "advtrains_track_swlcr_45.png",
	wield_image = "advtrains_track_swlcr_45.png",
	stack_max = 1,
	range = 7.0,
		
	on_place = function(itemstack, placer, pointed_thing)
		if pointed_thing.type ~= "node" then return end
		trackitest(pointed_thing.under, 2)
	end,
	on_use = function(itemstack, user, pointed_thing)
		if pointed_thing.type ~= "node" then return end
		trackitest(pointed_thing.under, 1)
	end,
}
)

minetest.register_chatcommand("at_trackdef_audit",
	{
        params = "", 
        description = "Performs an audit of all track definitions currently loaded and checks for potential problems", 
        func = function(name, param)
			for name, ndef in pairs(minetest.registered_nodes) do
				--TODO finish this!
				if ndef.at_conns then
					-- check if conn_map is there and if it has enough entries
					if #ndef.at_conns > 2 then
						if #ndef.at_conn_map < #ndef.at_conns then
							atwarn("AUDIT: Node",name,"- Not enough connmap entries! Check ndef:",ndef)
						end
					end
				end
			end
        end,
})