diff --git a/mods/rgt_machines/rgt_machines_mechanical/rgt_machines_mechanical/init.lua b/mods/rgt_machines/rgt_machines_mechanical/rgt_machines_mechanical/init.lua index 31e7382..65ddd86 100644 --- a/mods/rgt_machines/rgt_machines_mechanical/rgt_machines_mechanical/init.lua +++ b/mods/rgt_machines/rgt_machines_mechanical/rgt_machines_mechanical/init.lua @@ -72,8 +72,8 @@ ShaftNetwork = { end, tick = function(e, dtime) local constant_load = math.max(0, math.abs(e.torque.value) -e.load.value) *math.sign(e.torque.value) - local net_torque = constant_load -(5 *e.omega) - e.alpha = net_torque /e.inertia.value + local net_torque = constant_load -(12 *math.sign(e.omega)) -(e.omega) + e.alpha = net_torque /math.max(1, e.inertia.value) e.omega = e.omega +(e.alpha *dtime) if math.abs(e.omega) < 0.05 then @@ -109,8 +109,11 @@ local function propagate_shaft_update(pos, net, ignore) local e = shaft_networks[old_net][i] if e and e.pos == pos then if not shaft_networks[net] then - shaft_networks[net] = ShaftNetwork(net) - shaft_networks[net]:read(shaft_networks[old_net]:store()) + local new_net = ShaftNetwork(net) + new_net.alpha = shaft_networks[old_net].alpha + new_net.omega = shaft_networks[old_net].omega + new_net.angle = shaft_networks[old_net].angle + shaft_networks[net] = new_net end e:change_network(net) end @@ -199,7 +202,7 @@ function ns.update_shaft(pos, removing, ignore) for i, x in ipairs(nets) do net = string.format("net_%d_%06d", minetest.get_us_time(), math.random(100000, 999999)) -- Provide a different ignore table each time, to ensure that when the same network abuts this node on multiple edges, all touching nodes get the same network in the end. - propagate_shaft_update(x, net, {[pos_hash] = true, color = i == 1 and "red" or "blue"}) + propagate_shaft_update(x, net, {[pos_hash] = true}) end end end @@ -232,7 +235,7 @@ rgt.register_entity("shaft", { shaft_networks[e.net] = ShaftNetwork(e.net) end e:set_angle(shaft_networks[e.net].angle) - shaft_networks[e.net].inertia:set(e.pos:to_string(), 1) + shaft_networks[e.net].inertia:set(e.pos:to_string(), 0.1) table.insert(shaft_networks[e.net], e) end, on_deactivate = function(e) @@ -248,7 +251,6 @@ rgt.register_entity("shaft", { end, change_network = function(e, new_net) - say("Changed network at "..e.pos:to_string().." from "..e.net.." to "..new_net) local net = shaft_networks[e.net] net.inertia:set(e.pos:to_string(), nil) table.remove(net, table.indexof(net, e)) @@ -257,7 +259,7 @@ rgt.register_entity("shaft", { shaft_networks[e.net] = ShaftNetwork(e.net) end table.insert(shaft_networks[e.net], e) - shaft_networks[e.net].inertia:set(e.pos:to_string(), 1) + shaft_networks[e.net].inertia:set(e.pos:to_string(), 0.1) end, set_angle = function(e, angle) -- e.object:set_properties { @@ -291,6 +293,7 @@ rgt.register_node("shaft", { entities = shafts, on_place = function(s, p, pt) + if rgt.players[p:get_player_name()]:try_rightclick(s, p, pt) then return end local under = minetest.get_node(pt.under) if under.name == "red_glazed_terracotta:shaft" then return minetest.item_place_node(s, p, pt, under.param2) @@ -298,9 +301,9 @@ rgt.register_node("shaft", { if not p:get_player_control().sneak then local target = minetest.registered_nodes[under.name].buildable_to and pt.under or pt.above - for _, neighbor in ipairs(minetest.find_nodes_in_area(target:offset(-1,-1,-1), target:offset(1,1,1), "shaft")) do + for _, neighbor in ipairs(minetest.find_nodes_in_area(target:offset(-1,-1,-1), target:offset(1,1,1), "group:shaft")) do if neighbor:distance(target) <= 1 then - return minetest.item_place_node(s, p, pt, minetest.get_node(neighbor).param2) + return minetest.item_place_node(s, p, pt, minetest.dir_to_facedir(neighbor:direction(target))) end end end @@ -368,7 +371,7 @@ rgt.register_entity("hand_crank", { shaft_networks[e.net] = ShaftNetwork(e.net) end e:set_angle(shaft_networks[e.net].angle) - shaft_networks[e.net].inertia:set(e.pos:to_string(), 1) + shaft_networks[e.net].inertia:set(e.pos:to_string(), 0.3) table.insert(shaft_networks[e.net], e) end, on_deactivate = function(e) @@ -384,7 +387,14 @@ rgt.register_entity("hand_crank", { end, on_step = function(e, dtime) if not e.cranking then - e:set_torque(math.max(0, e.torque -1)) + e:set_torque(math.max(0, e.torque -30)) + end + + local net = shaft_networks[e.net] + if e.torque *shaft_networks[e.net].omega > 200 then + net.torque:set(e.pos:to_string(), 200 /shaft_networks[e.net].omega) + else + net.torque:set(e.pos:to_string(), e.torque) end end, @@ -398,24 +408,22 @@ rgt.register_entity("hand_crank", { shaft_networks[e.net] = ShaftNetwork(e.net) end table.insert(shaft_networks[e.net], e) - shaft_networks[e.net].inertia:set(e.pos:to_string(), 1) + shaft_networks[e.net].inertia:set(e.pos:to_string(), 0.3) shaft_networks[e.net].torque:set(e.pos:to_string(), e.torque) end, add_torque = function(e) - e:set_torque(math.min(20, e.torque +1)) + e:set_torque(math.min(200, e.torque +10)) end, set_torque = function(e, torque) if torque ~= e.torque then e.torque = torque - local net = shaft_networks[e.net] - net.torque:set(e.pos:to_string(), e.torque) end end, set_angle = function(e, angle) --- local net = shaft_networks[e.net] --- e.object:set_properties { --- nametag = string.format("Torque: %s\nLoad: %s\nI: %s\na: %s\nw: %s\nangle: %s", net.torque.value, net.load.value, net.inertia.value, net.alpha, net.omega, net.angle) --- } + local net = shaft_networks[e.net] + e.object:set_properties { + nametag = string.format("Torque: %s\nLoad: %s\nI: %s\na: %s\nw: %s\nangle: %s", net.torque.value, net.load.value, net.inertia.value, net.alpha, net.omega, net.angle) + } e.object:set_bone_override("root", { rotation = { vec = vector.new(0, 0, e.invert and angle or -angle), @@ -499,133 +507,143 @@ rgt.register_node("hand_crank", { end }) -local load_testers = {} +local gearboxes = {} -rgt.register_entity("shaft_load_tester", { +rgt.register_entity("gearbox", { initial_properties = { visual = "mesh", - mesh = "rgt_shaft.gltf", + mesh = "rgt_gearbox_shafts.gltf", textures = {"rgt_shaft.png"}, - pointable = false, + pointable = false }, on_activate = function(e, data) e.pos = e.object:get_pos():round() - if load_testers[minetest.hash_node_position(e.pos)] or not minetest.get_node(e.pos).name:find "shaft_load_tester" then + if gearboxes[minetest.hash_node_position(e.pos)] or not minetest.get_node(e.object:get_pos()).name:find "gearbox" then e.object:remove() return end extend(e, minetest.deserialize(data or "return {}")) - e.torque = 0 - e.omega = 0 - e.angle = e.angle or 0 + e.rotation = vector.new(e.rotation.x, e.rotation.y, e.rotation.z) e.object:set_armor_groups{immortal = 1} e.object:set_rotation(e.rotation) - e.object:set_bone_override("root", { - rotation = { - vec = vector.new(0, 0, -e.angle), - interpolation = 0, - absolute = true - } - }) - - load_testers[minetest.hash_node_position(e.pos)] = e + gearboxes[minetest.hash_node_position(e.pos)] = e if not shaft_networks[e.net] then shaft_networks[e.net] = ShaftNetwork(e.net) end - shaft_networks[e.net].inertia:set(e.pos:to_string(), 2) - shaft_networks[e.net].load:set(e.pos:to_string(), 4) + e:set_angle(shaft_networks[e.net].angle) + shaft_networks[e.net].inertia:set(e.pos:to_string(), 0.1) table.insert(shaft_networks[e.net], e) end, on_deactivate = function(e) - load_testers[minetest.hash_node_position(e.pos)] = nil + gearboxes[minetest.hash_node_position(e.pos)] = nil + if not shaft_networks[e.net] then return end + table.remove(shaft_networks[e.net], table.indexof(shaft_networks[e.net], e)) if not shaft_networks[e.net][1] then - table.remove(shaft_networks[e.net], table.indexof(shaft_networks[e.net], e)) - shaft_networks[e.net]:save() + db:set_string(e.net, minetest.serialize(shaft_networks[e.net])) shaft_networks[e.net] = nil end end, get_staticdata = function(e) - return minetest.serialize{rotation = e.rotation, angle = e.angle, net = e.net} - end, - on_step = function(e, dtime) - if e.omega == 0 then return end - - minetest.after(0, function() - e.angle = (e.angle +(e.omega *dtime)) %(math.pi *2) - e.object:set_bone_override("root", { - rotation = { - vec = vector.new(0, 0, -e.angle), - interpolation = 0.1, - absolute = true - } - }) - end) + return minetest.serialize{rotation = e.rotation, invert1 = e.invert1, invert2 = e.invert2, net = e.net} end, - set_angular_velocity = function(e, w) - e.omega = w + + change_network = function(e, new_net) + local net = shaft_networks[e.net] + net.inertia:set(e.pos:to_string(), nil) + table.remove(net, table.indexof(net, e)) + e.net = new_net + if not shaft_networks[e.net] then + shaft_networks[e.net] = ShaftNetwork(e.net) + end + table.insert(shaft_networks[e.net], e) + shaft_networks[e.net].inertia:set(e.pos:to_string(), 0.1) + end, + set_angle = function(e, angle) + local net = shaft_networks[e.net] +-- e.object:set_properties { +-- nametag = e.net +-- } + e.object:set_bone_override("shaft1", { + rotation = { + vec = vector.new(0, 0, e.invert1 and angle or -angle), + interpolation = 0.1, + absolute = true + } + }) + e.object:set_bone_override("shaft2", { + rotation = { + vec = vector.new(e.invert2 and angle or -angle, 0, 0), + interpolation = 0.1, + absolute = true + } + }) end, }) -rgt.register_node("shaft_load_tester", { - drawtype = "airlike", - paramtype = "light", - paramtype2 = "facedir", - walkable = false, - selection_box = { +rgt.register_node("gearbox", { + drawtype = "nodebox", + node_box = { type = "fixed", fixed = { - -0.5, -0.5, 0.5, - 0.5, 0.5, 6/16 + { + -7/16, -6/16, -7/16, + 7/16, 6/16, 7/16 + }, + { + -0.5, -0.5, -0.5, + 0.5, -6/16, 0.5 + }, + { + -0.5, 0.5, -0.5, + 0.5, 6/16, 0.5 + }, } }, + tiles = {{name = "rgt_spruce_planks.png", align_style = "world"}}, + paramtype = "light", + paramtype2 = "facedir", groups = {shaft = 2, dig_immediate = 3}, - entities = load_testers, + entities = gearboxes, on_construct = function(pos) local param2 = minetest.get_node(pos).param2 local dir = minetest.facedir_to_dir(param2) - local angle + local rot = rgt.facedir_to_rotation(param2) + local right = vector.new(1, 0, 0):rotate(rot) - local back = minetest.get_node(pos +dir) - if back.name:find "shaft" then - angle = shafts[minetest.hash_node_position(pos +dir)].angle - end - - minetest.add_entity(pos, "red_glazed_terracotta:shaft_load_tester", minetest.serialize{rotation = rgt.facedir_to_rotation(minetest.get_node(pos).param2), angle = angle, invert = dir.z < 0 or dir.z < 0, net = ns.update_shaft(pos)}) + minetest.add_entity(pos, "red_glazed_terracotta:gearbox", minetest.serialize{rotation = rot, invert1 = dir.x < 0 or dir.y < 0 or dir.z < 0, invert2 = right.x < 0 or right.y < 0 or right.z < 0, net = ns.update_shaft(pos)}) end, on_destruct = function(pos) - load_testers[minetest.hash_node_position(pos)].object:remove() - load_testers[minetest.hash_node_position(pos)] = nil + local e = gearboxes[minetest.hash_node_position(pos)] + shaft_networks[e.net].inertia:set(e.pos:to_string(), nil) + e.object:remove() + gearboxes[minetest.hash_node_position(pos)] = nil ns.update_shaft(pos) end, - on_rightclick = function(pos, node, p, s, pt) - local m = rgt.players[p:get_player_name()] - if m.cranking then return end - m.cranking = minetest.hash_node_position(pos) - load_testers[m.cranking].cranking = true - m:listen("tick", do_crank) - end, _network_can_accept = function(pos, from, param2) - local dir = minetest.facedir_to_dir(param2) + local rot = rgt.facedir_to_rotation(param2) + local dir = from:direction(pos) - return dir == pos:direction(from) + return dir == vector.new(0, 0, 1):rotate(rot) or + dir == vector.new(0, 0, -1):rotate(rot) or + dir == vector.new(1, 0, 0):rotate(rot) or + dir == vector.new(-1, 0, 0):rotate(rot) end, _network_neighbors = function(pos, param2) - local param2 = minetest.get_node(pos).param2 - local dir = minetest.facedir_to_dir(param2) - local angle + local rot = rgt.facedir_to_rotation(param2) - local back = minetest.get_node_raw(pos.x +dir.x, pos.y +dir.y, pos.z +dir.z) - if minetest.get_item_group(rgt.content_ids_to_nodes[back], "shaft") > 0 then - return {pos +dir} - end - return {} + return { + pos +vector.new(0, 0, 1):rotate(rot), + pos +vector.new(0, 0, -1):rotate(rot), + pos +vector.new(1, 0, 0):rotate(rot), + pos +vector.new(-1, 0, 0):rotate(rot) + } end -}) +}) \ No newline at end of file diff --git a/mods/rgt_machines/rgt_machines_mechanical/rgt_machines_mechanical/models/rgt_gearbox.gltf b/mods/rgt_machines/rgt_machines_mechanical/rgt_machines_mechanical/models/rgt_gearbox.gltf new file mode 100644 index 0000000..3e11db2 --- /dev/null +++ b/mods/rgt_machines/rgt_machines_mechanical/rgt_machines_mechanical/models/rgt_gearbox.gltf @@ -0,0 +1 @@ +{"asset":{"version":"2.0","generator":"Blockbench 4.12.5 glTF exporter"},"scenes":[{"nodes":[3],"name":"blockbench_export"}],"scene":0,"nodes":[{"translation":[0,3.75,0],"name":"cube","mesh":0},{"translation":[0,-5,0],"name":"cube","mesh":1},{"translation":[0,-8.125,0],"name":"cube","mesh":2},{"children":[0,1,2]}],"bufferViews":[{"buffer":0,"byteOffset":0,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":288,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":576,"byteLength":192,"target":34962,"byteStride":8},{"buffer":0,"byteOffset":768,"byteLength":72,"target":34963},{"buffer":0,"byteOffset":840,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":1128,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":1416,"byteLength":192,"target":34962,"byteStride":8},{"buffer":0,"byteOffset":1608,"byteLength":72,"target":34963},{"buffer":0,"byteOffset":1680,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":1968,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":2256,"byteLength":192,"target":34962,"byteStride":8},{"buffer":0,"byteOffset":2448,"byteLength":72,"target":34963}],"buffers":[{"byteLength":2520,"uri":"data:application/octet-stream;base64,AAC0QAAAoD8AALRAAAC0QAAAoD8AALTAAAC0QAAAAAAAALRAAAC0QAAAAAAAALTAAAC0wAAAoD8AALTAAAC0wAAAoD8AALRAAAC0wAAAAAAAALTAAAC0wAAAAAAAALRAAAC0wAAAoD8AALTAAAC0QAAAoD8AALTAAAC0wAAAoD8AALRAAAC0QAAAoD8AALRAAAC0wAAAAAAAALRAAAC0QAAAAAAAALRAAAC0wAAAAAAAALTAAAC0QAAAAAAAALTAAAC0wAAAoD8AALRAAAC0QAAAoD8AALRAAAC0wAAAAAAAALRAAAC0QAAAAAAAALRAAAC0QAAAoD8AALTAAAC0wAAAoD8AALTAAAC0QAAAAAAAALTAAAC0wAAAAAAAALTAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AADQPgAAgD4AAAw/AACAPgAA0D4AAIg+AAAMPwAAiD4AANA+AACIPgAADD8AAIg+AADQPgAAkD4AAAw/AACQPgAAED4AABA+AAAAAAAAED4AABA+AAAAAAAAAAAAAAAAAAAQPgAAED4AAAAAAAAQPgAAED4AAJA+AAAAAAAAkD4AAIg+AADQPgAA0D4AANA+AACIPgAA2D4AANA+AADYPgAA0D4AAHA+AAAMPwAAcD4AANA+AACAPgAADD8AAIA+AAACAAEAAgADAAEABAAGAAUABgAHAAUACAAKAAkACgALAAkADAAOAA0ADgAPAA0AEAASABEAEgATABEAFAAWABUAFgAXABUAAAC0QAAAoD8AALRAAAC0QAAAoD8AALTAAAC0QAAAAAAAALRAAAC0QAAAAAAAALTAAAC0wAAAoD8AALTAAAC0wAAAoD8AALRAAAC0wAAAAAAAALTAAAC0wAAAAAAAALRAAAC0wAAAoD8AALTAAAC0QAAAoD8AALTAAAC0wAAAoD8AALRAAAC0QAAAoD8AALRAAAC0wAAAAAAAALRAAAC0QAAAAAAAALRAAAC0wAAAAAAAALTAAAC0QAAAAAAAALTAAAC0wAAAoD8AALRAAAC0QAAAoD8AALRAAAC0wAAAAAAAALRAAAC0QAAAAAAAALRAAAC0QAAAoD8AALTAAAC0wAAAoD8AALTAAAC0QAAAAAAAALTAAAC0wAAAAAAAALTAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AADQPgAAmD4AAAw/AACYPgAA0D4AAKA+AAAMPwAAoD4AAIg+AADYPgAA0D4AANg+AACIPgAA4D4AANA+AADgPgAAkD4AABA+AAAQPgAAED4AAJA+AAAAAAAAED4AAAAAAACQPgAAED4AABA+AAAQPgAAkD4AAJA+AAAQPgAAkD4AANA+AADQPgAADD8AANA+AADQPgAA2D4AAAw/AADYPgAA0D4AAJA+AAAMPwAAkD4AANA+AACYPgAADD8AAJg+AAACAAEAAgADAAEABAAGAAUABgAHAAUACAAKAAkACgALAAkADAAOAA0ADgAPAA0AEAASABEAEgATABEAFAAWABUAFgAXABUAAACgQAAAPkEAAKBAAACgQAAAPkEAAKDAAACgQAAAjEAAAKBAAACgQAAAjEAAAKDAAACgwAAAPkEAAKDAAACgwAAAPkEAAKBAAACgwAAAjEAAAKDAAACgwAAAjEAAAKBAAACgwAAAPkEAAKDAAACgQAAAPkEAAKDAAACgwAAAPkEAAKBAAACgQAAAPkEAAKBAAACgwAAAjEAAAKBAAACgQAAAjEAAAKBAAACgwAAAjEAAAKDAAACgQAAAjEAAAKDAAACgwAAAPkEAAKBAAACgQAAAPkEAAKBAAACgwAAAjEAAAKBAAACgQAAAjEAAAKBAAACgQAAAPkEAAKDAAACgwAAAPkEAAKDAAACgQAAAjEAAAKDAAACgwAAAjEAAAKDAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AACQPgAAAD4AANA+AAAAPgAAkD4AAGA+AADQPgAAYD4AAIA+AACgPgAAwD4AAKA+AACAPgAA0D4AAMA+AADQPgAAAD4AANA+AAAAAAAA0D4AAAA+AACQPgAAAAAAAJA+AADQPgAAAAAAAJA+AAAAAAAA0D4AAAA+AACQPgAAAD4AAJA+AABgPgAA0D4AAGA+AACQPgAAoD4AANA+AACgPgAAAD4AAJA+AACAPgAAkD4AAAA+AADAPgAAgD4AAMA+AAACAAEAAgADAAEABAAGAAUABgAHAAUACAAKAAkACgALAAkADAAOAA0ADgAPAA0AEAASABEAEgATABEAFAAWABUAFgAXABUA"}],"accessors":[{"bufferView":0,"componentType":5126,"count":24,"max":[5.625,1.25,5.625],"min":[-5.625,0,-5.625],"type":"VEC3"},{"bufferView":1,"componentType":5126,"count":24,"max":[1,1,1],"min":[-1,-1,-1],"type":"VEC3"},{"bufferView":2,"componentType":5126,"count":24,"max":[0.546875,0.421875],"min":[0,0],"type":"VEC2"},{"bufferView":3,"componentType":5123,"count":36,"max":[23],"min":[0],"type":"SCALAR"},{"bufferView":4,"componentType":5126,"count":24,"max":[5.625,1.25,5.625],"min":[-5.625,0,-5.625],"type":"VEC3"},{"bufferView":5,"componentType":5126,"count":24,"max":[1,1,1],"min":[-1,-1,-1],"type":"VEC3"},{"bufferView":6,"componentType":5126,"count":24,"max":[0.546875,0.4375],"min":[0.140625,0],"type":"VEC2"},{"bufferView":7,"componentType":5123,"count":36,"max":[23],"min":[0],"type":"SCALAR"},{"bufferView":8,"componentType":5126,"count":24,"max":[5,11.875,5],"min":[-5,4.375,-5],"type":"VEC3"},{"bufferView":9,"componentType":5126,"count":24,"max":[1,1,1],"min":[-1,-1,-1],"type":"VEC3"},{"bufferView":10,"componentType":5126,"count":24,"max":[0.40625,0.40625],"min":[0,0],"type":"VEC2"},{"bufferView":11,"componentType":5123,"count":36,"max":[23],"min":[0],"type":"SCALAR"}],"materials":[{"pbrMetallicRoughness":{"metallicFactor":0,"roughnessFactor":1,"baseColorTexture":{"index":0}},"alphaMode":"MASK","alphaCutoff":0.05,"doubleSided":true}],"textures":[{"sampler":0,"source":0,"name":"texture"}],"samplers":[{"magFilter":9728,"minFilter":9728,"wrapS":33071,"wrapT":33071}],"images":[{"mimeType":"image/png","name":"texture","uri":"texture.png"}],"meshes":[{"primitives":[{"mode":4,"attributes":{"POSITION":0,"NORMAL":1,"TEXCOORD_0":2},"indices":3,"material":0}]},{"primitives":[{"mode":4,"attributes":{"POSITION":4,"NORMAL":5,"TEXCOORD_0":6},"indices":7,"material":0}]},{"primitives":[{"mode":4,"attributes":{"POSITION":8,"NORMAL":9,"TEXCOORD_0":10},"indices":11,"material":0}]}]} \ No newline at end of file diff --git a/mods/rgt_machines/rgt_machines_mechanical/rgt_machines_mechanical/models/rgt_gearbox_shafts.gltf b/mods/rgt_machines/rgt_machines_mechanical/rgt_machines_mechanical/models/rgt_gearbox_shafts.gltf new file mode 100644 index 0000000..5015c7d --- /dev/null +++ b/mods/rgt_machines/rgt_machines_mechanical/rgt_machines_mechanical/models/rgt_gearbox_shafts.gltf @@ -0,0 +1 @@ +{"asset":{"version":"2.0","generator":"Blockbench 4.12.5 glTF exporter"},"scenes":[{"nodes":[5],"name":"blockbench_export"}],"scene":0,"nodes":[{"translation":[0,-5,0],"name":"bone"},{"translation":[0,-0.625,-5],"name":"cube","mesh":0},{"name":"shaft1","children":[1]},{"rotation":[0,-0.7071067811865475,0,0.7071067811865476],"name":"cube","mesh":1},{"name":"shaft2","children":[3]},{"children":[0,2,4]}],"bufferViews":[{"buffer":0,"byteOffset":0,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":288,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":576,"byteLength":192,"target":34962,"byteStride":8},{"buffer":0,"byteOffset":768,"byteLength":72,"target":34963},{"buffer":0,"byteOffset":840,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":1128,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":1416,"byteLength":192,"target":34962,"byteStride":8},{"buffer":0,"byteOffset":1608,"byteLength":72,"target":34963},{"buffer":0,"byteOffset":1680,"byteLength":4},{"buffer":0,"byteOffset":1684,"byteLength":16},{"buffer":0,"byteOffset":1700,"byteLength":4},{"buffer":0,"byteOffset":1704,"byteLength":16}],"buffers":[{"byteLength":1720,"uri":"data:application/octet-stream;base64,AADwPwAAIEAAACBBAADwPwAAIEAAAAAAAADwPwAAoL8AACBBAADwPwAAoL8AAAAAAADwvwAAIEAAAAAAAADwvwAAIEAAACBBAADwvwAAoL8AAAAAAADwvwAAoL8AACBBAADwvwAAIEAAAAAAAADwPwAAIEAAAAAAAADwvwAAIEAAACBBAADwPwAAIEAAACBBAADwvwAAoL8AACBBAADwPwAAoL8AACBBAADwvwAAoL8AAAAAAADwPwAAoL8AAAAAAADwvwAAIEAAACBBAADwPwAAIEAAACBBAADwvwAAoL8AACBBAADwPwAAoL8AACBBAADwPwAAIEAAAAAAAADwvwAAIEAAAAAAAADwPwAAoL8AAAAAAADwvwAAoL8AAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAAA/AAAAAAAAAAAAAEA+AAAAPwAAQD4AAAAAAABAPgAAAD8AAEA+AAAAAAAAwD4AAAA/AADAPgAAQD4AAGA/AAAAAAAAYD8AAEA+AADAPgAAAAAAAMA+AADAPgAAwD4AAEA+AADAPgAAwD4AAGA/AABAPgAAYD8AAAA/AAAAAAAAMD8AAAAAAAAAPwAAQD4AADA/AABAPgAAwD4AAMA+AAAQPwAAwD4AAMA+AAAQPwAAED8AABA/AAACAAEAAgADAAEABAAGAAUABgAHAAUACAAKAAkACgALAAkADAAOAA0ADgAPAA0AEAASABEAEgATABEAFAAWABUAFgAXABUAAADwPwAA8D8AAKBAAADwPwAA8D8AAKDAAADwPwAA8L8AAKBAAADwPwAA8L8AAKDAAADwvwAA8D8AAKDAAADwvwAA8D8AAKBAAADwvwAA8L8AAKDAAADwvwAA8L8AAKBAAADwvwAA8D8AAKDAAADwPwAA8D8AAKDAAADwvwAA8D8AAKBAAADwPwAA8D8AAKBAAADwvwAA8L8AAKBAAADwPwAA8L8AAKBAAADwvwAA8L8AAKDAAADwPwAA8L8AAKDAAADwvwAA8D8AAKBAAADwPwAA8D8AAKBAAADwvwAA8L8AAKBAAADwPwAA8L8AAKBAAADwPwAA8D8AAKDAAADwvwAA8D8AAKDAAADwPwAA8L8AAKDAAADwvwAA8L8AAKDAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAAA/AAAAAAAAAAAAAEA+AAAAPwAAQD4AAAAAAABAPgAAAD8AAEA+AAAAAAAAwD4AAAA/AADAPgAAQD4AAGA/AAAAAAAAYD8AAEA+AADAPgAAAAAAAMA+AADAPgAAwD4AAEA+AADAPgAAwD4AAGA/AABAPgAAYD8AAAA/AAAAAAAAMD8AAAAAAAAAPwAAQD4AADA/AABAPgAAwD4AAMA+AAAQPwAAwD4AAMA+AAAQPwAAED8AABA/AAACAAEAAgADAAEABAAGAAUABgAHAAUACAAKAAkACgALAAkADAAOAA0ADgAPAA0AEAASABEAEgATABEAFAAWABUAFgAXABUAAAAAAAAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAAAAAAAAAAACAPw=="}],"accessors":[{"bufferView":0,"componentType":5126,"count":24,"max":[1.875,2.5,10],"min":[-1.875,-1.25,0],"type":"VEC3"},{"bufferView":1,"componentType":5126,"count":24,"max":[1,1,1],"min":[-1,-1,-1],"type":"VEC3"},{"bufferView":2,"componentType":5126,"count":24,"max":[0.6875,0.875],"min":[0,0],"type":"VEC2"},{"bufferView":3,"componentType":5123,"count":36,"max":[23],"min":[0],"type":"SCALAR"},{"bufferView":4,"componentType":5126,"count":24,"max":[1.875,1.875,5],"min":[-1.875,-1.875,-5],"type":"VEC3"},{"bufferView":5,"componentType":5126,"count":24,"max":[1,1,1],"min":[-1,-1,-1],"type":"VEC3"},{"bufferView":6,"componentType":5126,"count":24,"max":[0.6875,0.875],"min":[0,0],"type":"VEC2"},{"bufferView":7,"componentType":5123,"count":36,"max":[23],"min":[0],"type":"SCALAR"},{"bufferView":8,"componentType":5126,"count":1,"max":[0],"min":[0],"type":"SCALAR"},{"bufferView":9,"componentType":5126,"count":1,"max":[0,0,0,1],"min":[0,0,0,1],"type":"VEC4"},{"bufferView":10,"componentType":5126,"count":1,"max":[0],"min":[0],"type":"SCALAR"},{"bufferView":11,"componentType":5126,"count":1,"max":[0,0,0,1],"min":[0,0,0,1],"type":"VEC4"}],"materials":[{"pbrMetallicRoughness":{"metallicFactor":0,"roughnessFactor":1,"baseColorTexture":{"index":0}},"alphaMode":"MASK","alphaCutoff":0.05,"doubleSided":true}],"textures":[{"sampler":0,"source":0,"name":"rgt_shaft.png"}],"samplers":[{"magFilter":9728,"minFilter":9728,"wrapS":33071,"wrapT":33071}],"images":[{"mimeType":"image/png","name":"rgt_shaft.png","uri":"rgt_shaft.png"}],"meshes":[{"primitives":[{"mode":4,"attributes":{"POSITION":0,"NORMAL":1,"TEXCOORD_0":2},"indices":3,"material":0}]},{"primitives":[{"mode":4,"attributes":{"POSITION":4,"NORMAL":5,"TEXCOORD_0":6},"indices":7,"material":0}]}],"animations":[{"name":"animation","samplers":[{"input":8,"output":9,"interpolation":"LINEAR"},{"input":10,"output":11,"interpolation":"LINEAR"}],"channels":[{"sampler":0,"target":{"node":2,"path":"rotation"}},{"sampler":1,"target":{"node":4,"path":"rotation"}}]}]} \ No newline at end of file diff --git a/mods/rgt_player/init.lua b/mods/rgt_player/init.lua index 6cc66ce..d562740 100644 --- a/mods/rgt_player/init.lua +++ b/mods/rgt_player/init.lua @@ -426,6 +426,15 @@ Player = { p:hud_set_hotbar_image("[combine:"..(21 *slots +1).."x22"..list) p:hud_set_hotbar_selected_image("rgt_hotbar_selected.png") end, + try_rightclick = function(m, s, p, pt) + if m.pointed_node and m.pointed_node.node_under then + local rc = minetest.registered_nodes[m.pointed_node.node_under.name].on_rightclick + if rc then + rc(m.pointed_node.under, m.pointed_node.node_under, p, s, pt) + return true + end + end + end, deinit = function(m) m:dispatch("deinit") m.health_display:remove() diff --git a/mods/rgt_towns/rgt_towns_core/visuals.lua b/mods/rgt_towns/rgt_towns_core/visuals.lua index 839ff9a..92f2fa1 100644 --- a/mods/rgt_towns/rgt_towns_core/visuals.lua +++ b/mods/rgt_towns/rgt_towns_core/visuals.lua @@ -25,7 +25,7 @@ function ns.add_point(point, args) min = vector.new(-1,-1,-1), max = vector.new(1,1,1) }, - texture = args and args.color and "[fill:1x1:0,0:"..args.color or args.texture or "[fill:1x1:0,0:#faa", + texture = args and args.color and "[fill:1x1:0,0:"..args.color or args and args.texture or "[fill:1x1:0,0:#faa", time = 10, amount = 50, size = 5