commit
ced150bc5b
10 changed files with 690 additions and 0 deletions
@ -0,0 +1,23 @@ |
|||
Minetest mod: boost_cart |
|||
======================= |
|||
Based on the mod "carts" by PilzAdam |
|||
Target: Run smoothly and do not use too much CPU |
|||
|
|||
License of source code: |
|||
----------------------- |
|||
WTFPL |
|||
|
|||
License of media (textures, sounds and models): |
|||
----------------------------------------------- |
|||
CC-0 |
|||
|
|||
Authors of media files: |
|||
----------------------- |
|||
kddekadenz: |
|||
cart_bottom.png |
|||
cart_side.png |
|||
cart_top.png |
|||
|
|||
Zeg9: |
|||
cart.x |
|||
cart.png |
@ -0,0 +1 @@ |
|||
default |
@ -0,0 +1,103 @@ |
|||
function boost_cart:get_sign(z) |
|||
if z == 0 then |
|||
return 0 |
|||
else |
|||
return z / math.abs(z) |
|||
end |
|||
end |
|||
|
|||
function boost_cart:velocity_to_dir(v) |
|||
if math.abs(v.x) > math.abs(v.z) then |
|||
return {x=boost_cart:get_sign(v.x), y=boost_cart:get_sign(v.y), z=0} |
|||
else |
|||
return {x=0, y=boost_cart:get_sign(v.y), z=boost_cart:get_sign(v.z)} |
|||
end |
|||
end |
|||
|
|||
function boost_cart:is_rail(pos) |
|||
local node = minetest.get_node(pos).name |
|||
return minetest.get_item_group(node, "rail") ~= 0 |
|||
end |
|||
|
|||
function boost_cart:get_rail_direction(pos_, dir_) |
|||
local pos = vector.round(pos_) |
|||
local dir = vector.new(dir_) |
|||
local cur = nil |
|||
|
|||
-- Front |
|||
dir.y = 0 |
|||
cur = vector.add(pos, dir) |
|||
if boost_cart:is_rail(cur) then |
|||
return dir |
|||
end |
|||
|
|||
-- Down |
|||
dir.y = -1 |
|||
cur = vector.add(pos, dir) |
|||
if boost_cart:is_rail(cur) then |
|||
return dir |
|||
end |
|||
|
|||
-- Up |
|||
dir.y = 1 |
|||
cur = vector.add(pos, dir) |
|||
if boost_cart:is_rail(cur) then |
|||
return dir |
|||
end |
|||
|
|||
-- Left, right |
|||
dir.y = 0 |
|||
|
|||
-- Check left and right |
|||
local view, opposite, val |
|||
|
|||
if dir.x == 0 and dir.z ~= 0 then |
|||
view = "z" |
|||
other = "x" |
|||
if dir.z < 0 then |
|||
val = {1, -1} |
|||
else |
|||
val = {-1, 1} |
|||
end |
|||
elseif dir.z == 0 and dir.x ~= 0 then |
|||
view = "x" |
|||
other = "z" |
|||
if dir.x > 0 then |
|||
val = {1, -1} |
|||
else |
|||
val = {-1, 1} |
|||
end |
|||
else |
|||
return {x=0, y=0, z=0} |
|||
end |
|||
|
|||
dir[view] = 0 |
|||
dir[other] = val[1] |
|||
cur = vector.add(pos, dir) |
|||
if boost_cart:is_rail(cur) then |
|||
return dir |
|||
end |
|||
|
|||
-- Down |
|||
dir.y = -1 |
|||
cur = vector.add(pos, dir) |
|||
if boost_cart:is_rail(cur) then |
|||
return dir |
|||
end |
|||
dir.y = 0 |
|||
|
|||
dir[other] = val[2] |
|||
cur = vector.add(pos, dir) |
|||
if boost_cart:is_rail(cur) then |
|||
return dir |
|||
end |
|||
|
|||
-- Down |
|||
dir.y = -1 |
|||
cur = vector.add(pos, dir) |
|||
if boost_cart:is_rail(cur) then |
|||
return dir |
|||
end |
|||
|
|||
return {x=0, y=0, z=0} |
|||
end |
@ -0,0 +1,208 @@ |
|||
-- TODO: |
|||
-- Fix way-up |
|||
-- Add rail-cross switching |
|||
-- Prevent from floating carts |
|||
-- Speed up and brake rails |
|||
|
|||
boost_cart = {} |
|||
boost_cart.modpath = minetest.get_modpath("boost_cart") |
|||
boost_cart.speed_max = 8 |
|||
|
|||
dofile(boost_cart.modpath.."/functions.lua") |
|||
dofile(boost_cart.modpath.."/rails.lua") |
|||
|
|||
boost_cart.cart = { |
|||
physical = false, |
|||
collisionbox = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, |
|||
visual = "mesh", |
|||
mesh = "cart.x", |
|||
visual_size = {x=1, y=1}, |
|||
textures = {"cart.png"}, |
|||
|
|||
driver = nil, |
|||
punch = false, -- used to re-send velocity and position |
|||
velocity = {x=0, y=0, z=0}, -- only used on punch |
|||
old_dir = {x=0, y=0, z=0}, |
|||
old_pos = nil |
|||
} |
|||
|
|||
function boost_cart.cart:on_rightclick(clicker) |
|||
if not clicker or not clicker:is_player() then |
|||
return |
|||
end |
|||
local player_name = clicker:get_player_name() |
|||
if self.driver and player_name == self.driver then |
|||
self.driver = nil |
|||
clicker:set_detach() |
|||
elseif not self.driver then |
|||
self.driver = player_name |
|||
clicker:set_attach(self.object, "", {x=0,y=5,z=0}, {x=0,y=0,z=0}) |
|||
end |
|||
end |
|||
|
|||
function boost_cart.cart:on_activate(staticdata, dtime_s) |
|||
self.object:set_armor_groups({immortal=1}) |
|||
self.old_pos = self.object:getpos() |
|||
end |
|||
|
|||
function boost_cart.cart:on_punch(puncher, time_from_last_punch, tool_capabilities, direction) |
|||
if not puncher or not puncher:is_player() then |
|||
return |
|||
end |
|||
|
|||
if puncher:get_player_control().sneak then |
|||
if self.driver then |
|||
local player = minetest.get_player_by_name(self.driver) |
|||
if player then |
|||
player:set_detach() |
|||
end |
|||
end |
|||
self.object:remove() |
|||
puncher:get_inventory():add_item("main", "boost_cart:cart") |
|||
return |
|||
end |
|||
|
|||
local vel = self.velocity |
|||
if puncher:get_player_name() == self.driver then |
|||
if math.abs(vel.x) > 2 or math.abs(vel.z) > 2 then |
|||
return |
|||
end |
|||
end |
|||
|
|||
local cart_dir = boost_cart:velocity_to_dir(direction) |
|||
if cart_dir.x == 0 and cart_dir.z == 0 then |
|||
local fd = minetest.dir_to_facedir(puncher:get_look_dir()) |
|||
if fd == 0 then |
|||
cart_dir.x = 1 |
|||
elseif fd == 1 then |
|||
cart_dir.z = -1 |
|||
elseif fd == 2 then |
|||
cart_dir.x = -1 |
|||
elseif fd == 3 then |
|||
cart_dir.z = 1 |
|||
end |
|||
end |
|||
|
|||
if time_from_last_punch > tool_capabilities.full_punch_interval then |
|||
time_from_last_punch = tool_capabilities.full_punch_interval |
|||
end |
|||
local dir = boost_cart:get_rail_direction(self.object:getpos(), cart_dir) |
|||
|
|||
local f = 3 * (time_from_last_punch / tool_capabilities.full_punch_interval) |
|||
vel.x = dir.x * f |
|||
vel.z = dir.y * f |
|||
vel.z = dir.z * f |
|||
self.velocity = vel |
|||
self.punch = true |
|||
end |
|||
|
|||
function boost_cart.cart:on_step(dtime) |
|||
local vel = self.object:getvelocity() |
|||
if self.punch then |
|||
vel = vector.add(vel, self.velocity) |
|||
self.velocity = {x=0,y=0,z=0} |
|||
elseif vector.equals(vel, {x=0,y=0,z=0}) then |
|||
return |
|||
end |
|||
|
|||
local pos = self.object:getpos() |
|||
local fpos, fold_pos = vector.round(pos), vector.round(self.old_pos) |
|||
if vector.equals(fpos, fold_pos) and not self.punch then |
|||
return |
|||
end |
|||
self.old_pos = vector.new(pos) |
|||
|
|||
local cart_dir = { |
|||
x = boost_cart:get_sign(vel.x), |
|||
y = boost_cart:get_sign(vel.y), |
|||
z = boost_cart:get_sign(vel.z) |
|||
} |
|||
local dir = boost_cart:get_rail_direction(pos, cart_dir) |
|||
if vector.equals(dir, {x=0, y=0, z=0}) then |
|||
vel = {x=0, y=0, z=0} |
|||
self.object:setacceleration({x=0, y=0, z=0}) |
|||
self.punch = true |
|||
else |
|||
-- If the direction changed |
|||
if dir.x ~= 0 and self.old_dir.z ~= 0 then |
|||
vel.x = dir.x * math.abs(vel.z) |
|||
vel.z = 0 |
|||
pos.z = math.floor(pos.z + 0.5) |
|||
self.punch = true |
|||
end |
|||
if dir.z ~= 0 and self.old_dir.x ~= 0 then |
|||
vel.z = dir.z * math.abs(vel.x) |
|||
vel.x = 0 |
|||
pos.x = math.floor(pos.x + 0.5) |
|||
self.punch = true |
|||
end |
|||
-- Up, down? |
|||
if dir.y ~= self.old_dir.y then |
|||
vel.y = dir.y * (math.abs(vel.x) + math.abs(vel.z)) |
|||
pos.y = math.floor(pos.y + 0.5) |
|||
self.punch = true |
|||
end |
|||
|
|||
-- Slow down or speed up.. |
|||
local acc = -2 * dir.y - 0.4 |
|||
self.object:setacceleration({ |
|||
x = dir.x * acc, |
|||
y = dir.y * (math.abs(dir.x) + math.abs(dir.z)) * acc, |
|||
z = dir.z * acc |
|||
}) |
|||
end |
|||
|
|||
self.old_dir = vector.new(dir) |
|||
|
|||
-- Limits |
|||
for _,v in ipairs({"x","y","z"}) do |
|||
if math.abs(vel[v]) > boost_cart.speed_max then |
|||
vel[v] = boost_cart:get_sign(vel[v]) * boost_cart.speed_max |
|||
self.punch = true |
|||
end |
|||
end |
|||
|
|||
if dir.x < 0 then |
|||
self.object:setyaw(math.pi / 2) |
|||
elseif dir.x > 0 then |
|||
self.object:setyaw(3 * math.pi / 2) |
|||
elseif dir.z < 0 then |
|||
self.object:setyaw(math.pi) |
|||
elseif dir.z > 0 then |
|||
self.object:setyaw(0) |
|||
end |
|||
|
|||
if dir.y == -1 then |
|||
self.object:set_animation({x=1, y=1}, 1, 0) |
|||
elseif dir.y == 1 then |
|||
self.object:set_animation({x=2, y=2}, 1, 0) |
|||
else |
|||
self.object:set_animation({x=0, y=0}, 1, 0) |
|||
end |
|||
if self.punch then |
|||
self.object:setvelocity(vel) |
|||
self.object:setpos(pos) |
|||
self.old_pos = {x=0, y=0, z=0} |
|||
end |
|||
self.punch = false |
|||
end |
|||
|
|||
minetest.register_entity("boost_cart:cart", boost_cart.cart) |
|||
minetest.register_craftitem("boost_cart:cart", { |
|||
description = "Cart", |
|||
inventory_image = minetest.inventorycube("cart_top.png", "cart_side.png", "cart_side.png"), |
|||
wield_image = "cart_side.png", |
|||
on_place = function(itemstack, placer, pointed_thing) |
|||
if not pointed_thing.type == "node" then |
|||
return |
|||
end |
|||
if boost_cart:is_rail(pointed_thing.under) then |
|||
minetest.add_entity(pointed_thing.under, "boost_cart:cart") |
|||
elseif boost_cart:is_rail(pointed_thing.above) then |
|||
minetest.add_entity(pointed_thing.above, "boost_cart:cart") |
|||
else return end |
|||
|
|||
itemstack:take_item() |
|||
return itemstack |
|||
end, |
|||
}) |
After Width: | Height: | Size: 216 B |
@ -0,0 +1,339 @@ |
|||
xof 0303txt 0032 |
|||
|
|||
Frame Root { |
|||
FrameTransformMatrix { |
|||
1.000000, 0.000000, 0.000000, 0.000000, |
|||
0.000000, 0.000000, 1.000000, 0.000000, |
|||
0.000000, 1.000000,-0.000000, 0.000000, |
|||
0.000000, 0.000000, 0.000000, 1.000000;; |
|||
} |
|||
Frame Cube { |
|||
FrameTransformMatrix { |
|||
5.000000, 0.000000,-0.000000, 0.000000, |
|||
-0.000000, 3.535534, 3.535534, 0.000000, |
|||
0.000000,-3.535534, 3.535534, 0.000000, |
|||
0.000000,-3.000000, 3.000000, 1.000000;; |
|||
} |
|||
Mesh { //Cube_001 Mesh |
|||
72; |
|||
-1.000000; 1.000000;-1.000000;, |
|||
-1.000000;-1.000000;-1.000000;, |
|||
1.000000;-1.000000;-1.000000;, |
|||
1.000000; 1.000000;-1.000000;, |
|||
-0.833334;-1.000000; 1.000000;, |
|||
-1.000000;-1.000000; 1.000000;, |
|||
-1.000000;-0.833333; 1.000000;, |
|||
-0.833334;-0.833333; 1.000000;, |
|||
-1.000000;-1.000000;-1.000000;, |
|||
-1.000000;-1.000000; 1.000000;, |
|||
0.999999;-1.000001; 1.000000;, |
|||
1.000000;-1.000000;-1.000000;, |
|||
0.999999;-1.000001; 1.000000;, |
|||
0.833332;-1.000000; 1.000000;, |
|||
0.833333;-0.833334; 1.000000;, |
|||
1.000000;-0.833334; 1.000000;, |
|||
0.833332;-1.000000; 1.000000;, |
|||
-0.833334;-1.000000; 1.000000;, |
|||
-0.833334;-0.833333; 1.000000;, |
|||
0.833333;-0.833334; 1.000000;, |
|||
1.000000; 0.833333; 1.000000;, |
|||
0.833334; 0.833333; 1.000000;, |
|||
0.833334; 1.000000; 1.000000;, |
|||
1.000000; 0.999999; 1.000000;, |
|||
1.000000;-0.833334; 1.000000;, |
|||
0.833333;-0.833334; 1.000000;, |
|||
0.833334; 0.833333; 1.000000;, |
|||
1.000000; 0.833333; 1.000000;, |
|||
0.833334; 0.833333; 1.000000;, |
|||
-0.833333; 0.833333; 1.000000;, |
|||
-0.833333; 1.000000; 1.000000;, |
|||
0.833334; 1.000000; 1.000000;, |
|||
0.833334; 0.833333;-0.800000;, |
|||
-0.833333; 0.833333;-0.800000;, |
|||
-0.833333; 0.833333; 1.000000;, |
|||
0.833334; 0.833333; 1.000000;, |
|||
-0.833333; 0.833333; 1.000000;, |
|||
-1.000000; 0.833333; 1.000000;, |
|||
-1.000000; 1.000000; 1.000000;, |
|||
-0.833333; 1.000000; 1.000000;, |
|||
-0.833334;-0.833333; 1.000000;, |
|||
-1.000000;-0.833333; 1.000000;, |
|||
-1.000000; 0.833333; 1.000000;, |
|||
-0.833333; 0.833333; 1.000000;, |
|||
0.833333;-0.833334;-0.800000;, |
|||
-0.833334;-0.833333;-0.800000;, |
|||
-0.833333; 0.833333;-0.800000;, |
|||
0.833334; 0.833333;-0.800000;, |
|||
-0.833333; 0.833333;-0.800000;, |
|||
-0.833334;-0.833333;-0.800000;, |
|||
-0.833334;-0.833333; 1.000000;, |
|||
-0.833333; 0.833333; 1.000000;, |
|||
-0.833334;-0.833333;-0.800000;, |
|||
0.833333;-0.833334;-0.800000;, |
|||
0.833333;-0.833334; 1.000000;, |
|||
-0.833334;-0.833333; 1.000000;, |
|||
0.833333;-0.833334;-0.800000;, |
|||
0.833334; 0.833333;-0.800000;, |
|||
0.833334; 0.833333; 1.000000;, |
|||
0.833333;-0.833334; 1.000000;, |
|||
-1.000000; 1.000000;-1.000000;, |
|||
-1.000000; 1.000000; 1.000000;, |
|||
-1.000000;-1.000000; 1.000000;, |
|||
-1.000000;-1.000000;-1.000000;, |
|||
-1.000000; 1.000000; 1.000000;, |
|||
-1.000000; 1.000000;-1.000000;, |
|||
1.000000; 1.000000;-1.000000;, |
|||
1.000000; 0.999999; 1.000000;, |
|||
1.000000;-1.000000;-1.000000;, |
|||
0.999999;-1.000001; 1.000000;, |
|||
1.000000; 0.999999; 1.000000;, |
|||
1.000000; 1.000000;-1.000000;; |
|||
18; |
|||
4;0;1;2;3;, |
|||
4;4;5;6;7;, |
|||
4;8;9;10;11;, |
|||
4;12;13;14;15;, |
|||
4;16;17;18;19;, |
|||
4;20;21;22;23;, |
|||
4;24;25;26;27;, |
|||
4;28;29;30;31;, |
|||
4;32;33;34;35;, |
|||
4;36;37;38;39;, |
|||
4;40;41;42;43;, |
|||
4;44;45;46;47;, |
|||
4;48;49;50;51;, |
|||
4;52;53;54;55;, |
|||
4;56;57;58;59;, |
|||
4;60;61;62;63;, |
|||
4;64;65;66;67;, |
|||
4;68;69;70;71;; |
|||
MeshNormals { //Cube_001 Normals |
|||
72; |
|||
0.000000; 0.000000;-1.000000;, |
|||
0.000000; 0.000000;-1.000000;, |
|||
0.000000; 0.000000;-1.000000;, |
|||
0.000000; 0.000000;-1.000000;, |
|||
0.000000;-0.000000; 1.000000;, |
|||
0.000000;-0.000000; 1.000000;, |
|||
0.000000;-0.000000; 1.000000;, |
|||
0.000000;-0.000000; 1.000000;, |
|||
-0.000000;-1.000000;-0.000000;, |
|||
-0.000000;-1.000000;-0.000000;, |
|||
-0.000000;-1.000000;-0.000000;, |
|||
-0.000000;-1.000000;-0.000000;, |
|||
0.000000;-0.000000; 1.000000;, |
|||
0.000000;-0.000000; 1.000000;, |
|||
0.000000;-0.000000; 1.000000;, |
|||
0.000000;-0.000000; 1.000000;, |
|||
0.000000;-0.000000; 1.000000;, |
|||
0.000000;-0.000000; 1.000000;, |
|||
0.000000;-0.000000; 1.000000;, |
|||
0.000000;-0.000000; 1.000000;, |
|||
0.000000;-0.000000; 1.000000;, |
|||
0.000000;-0.000000; 1.000000;, |
|||
0.000000;-0.000000; 1.000000;, |
|||
0.000000;-0.000000; 1.000000;, |
|||
0.000000;-0.000000; 1.000000;, |
|||
0.000000;-0.000000; 1.000000;, |
|||
0.000000;-0.000000; 1.000000;, |
|||
0.000000;-0.000000; 1.000000;, |
|||
0.000000;-0.000000; 1.000000;, |
|||
0.000000;-0.000000; 1.000000;, |
|||
0.000000;-0.000000; 1.000000;, |
|||
0.000000;-0.000000; 1.000000;, |
|||
-0.000000;-1.000000; 0.000000;, |
|||
-0.000000;-1.000000; 0.000000;, |
|||
-0.000000;-1.000000; 0.000000;, |
|||
-0.000000;-1.000000; 0.000000;, |
|||
0.000000;-0.000000; 1.000000;, |
|||
0.000000;-0.000000; 1.000000;, |
|||
0.000000;-0.000000; 1.000000;, |
|||
0.000000;-0.000000; 1.000000;, |
|||
0.000000;-0.000000; 1.000000;, |
|||
0.000000;-0.000000; 1.000000;, |
|||
0.000000;-0.000000; 1.000000;, |
|||
0.000000;-0.000000; 1.000000;, |
|||
0.000000;-0.000000; 1.000000;, |
|||
0.000000;-0.000000; 1.000000;, |
|||
0.000000;-0.000000; 1.000000;, |
|||
0.000000;-0.000000; 1.000000;, |
|||
1.000000;-0.000000; 0.000000;, |
|||
1.000000;-0.000000; 0.000000;, |
|||
1.000000;-0.000000; 0.000000;, |
|||
1.000000;-0.000000; 0.000000;, |
|||
0.000000; 1.000000; 0.000000;, |
|||
0.000000; 1.000000; 0.000000;, |
|||
0.000000; 1.000000; 0.000000;, |
|||
0.000000; 1.000000; 0.000000;, |
|||
-1.000000; 0.000000; 0.000000;, |
|||
-1.000000; 0.000000; 0.000000;, |
|||
-1.000000; 0.000000; 0.000000;, |
|||
-1.000000; 0.000000; 0.000000;, |
|||
-1.000000; 0.000000;-0.000000;, |
|||
-1.000000; 0.000000;-0.000000;, |
|||
-1.000000; 0.000000;-0.000000;, |
|||
-1.000000; 0.000000;-0.000000;, |
|||
0.000000; 1.000000; 0.000000;, |
|||
0.000000; 1.000000; 0.000000;, |
|||
0.000000; 1.000000; 0.000000;, |
|||
0.000000; 1.000000; 0.000000;, |
|||
1.000000;-0.000000; 0.000000;, |
|||
1.000000;-0.000000; 0.000000;, |
|||
1.000000;-0.000000; 0.000000;, |
|||
1.000000;-0.000000; 0.000000;; |
|||
18; |
|||
4;0;1;2;3;, |
|||
4;4;5;6;7;, |
|||
4;8;9;10;11;, |
|||
4;12;13;14;15;, |
|||
4;16;17;18;19;, |
|||
4;20;21;22;23;, |
|||
4;24;25;26;27;, |
|||
4;28;29;30;31;, |
|||
4;32;33;34;35;, |
|||
4;36;37;38;39;, |
|||
4;40;41;42;43;, |
|||
4;44;45;46;47;, |
|||
4;48;49;50;51;, |
|||
4;52;53;54;55;, |
|||
4;56;57;58;59;, |
|||
4;60;61;62;63;, |
|||
4;64;65;66;67;, |
|||
4;68;69;70;71;; |
|||
} //End of Cube_001 Normals |
|||
MeshMaterialList { //Cube_001 Material List |
|||
1; |
|||
18; |
|||
0, |
|||
0, |
|||
0, |
|||
0, |
|||
0, |
|||
0, |
|||
0, |
|||
0, |
|||
0, |
|||
0, |
|||
0, |
|||
0, |
|||
0, |
|||
0, |
|||
0, |
|||
0, |
|||
0, |
|||
0;; |
|||
Material Material { |
|||
0.640000; 0.640000; 0.640000; 1.000000;; |
|||
96.078431; |
|||
0.500000; 0.500000; 0.500000;; |
|||
0.000000; 0.000000; 0.000000;; |
|||
TextureFilename {"cart.png";} |
|||
} |
|||
} //End of Cube_001 Material List |
|||
MeshTextureCoords { //Cube_001 UV Coordinates |
|||
72; |
|||
0.000000; 0.500000;, |
|||
0.500000; 0.500000;, |
|||
0.500000; 1.000000;, |
|||
0.000000; 1.000000;, |
|||
0.031250; 0.500000;, |
|||
-0.000000; 0.500000;, |
|||
-0.000000; 0.468750;, |
|||
0.031250; 0.468750;, |
|||
0.500000; 0.500000;, |
|||
0.500000; 0.000000;, |
|||
1.000000; 0.000000;, |
|||
1.000000; 0.500000;, |
|||
0.468750; 0.468750;, |
|||
0.500000; 0.468750;, |
|||
0.500000; 0.500000;, |
|||
0.468750; 0.500000;, |
|||
0.031250; 0.468750;, |
|||
0.468750; 0.468750;, |
|||
0.468750; 0.500000;, |
|||
0.031250; 0.500000;, |
|||
0.468750; 0.000000;, |
|||
0.500000; 0.000000;, |
|||
0.500000; 0.031250;, |
|||
0.468750; 0.031250;, |
|||
0.468750; 0.031250;, |
|||
0.500000; 0.031250;, |
|||
0.500000; 0.468750;, |
|||
0.468750; 0.468750;, |
|||
0.468750; 0.031250;, |
|||
0.031250; 0.031250;, |
|||
0.031250; 0.000000;, |
|||
0.468750; 0.000000;, |
|||
1.000000; 0.500000;, |
|||
0.500000; 0.500000;, |
|||
0.500000; 0.000000;, |
|||
1.000000; 0.000000;, |
|||
0.031250; 0.031250;, |
|||
0.000000; 0.031250;, |
|||
0.000000; 0.000000;, |
|||
0.031250; 0.000000;, |
|||
0.031250; 0.468750;, |
|||
-0.000000; 0.468750;, |
|||
0.000000; 0.031250;, |
|||
0.031250; 0.031250;, |
|||
0.000000; 0.500000;, |
|||
0.500000; 0.500000;, |
|||
0.500000; 1.000000;, |
|||
0.000000; 1.000000;, |
|||
1.000000; 0.500000;, |
|||
0.500000; 0.500000;, |
|||
0.500000; 0.000000;, |
|||
1.000000; 0.000000;, |
|||
1.000000; 0.500000;, |
|||
0.500000; 0.500000;, |
|||
0.500000; 0.000000;, |
|||
1.000000; 0.000000;, |
|||
1.000000; 0.500000;, |
|||
0.500000; 0.500000;, |
|||
0.500000; 0.000000;, |
|||
1.000000; 0.000000;, |
|||
0.500000; 0.500000;, |
|||
0.500000; 0.000000;, |
|||
1.000000; 0.000000;, |
|||
1.000000; 0.500000;, |
|||
1.000000; 0.000000;, |
|||
1.000000; 0.500000;, |
|||
0.500000; 0.500000;, |
|||
0.500000; 0.000000;, |
|||
0.500000; 0.500000;, |
|||
0.500000; 0.000000;, |
|||
1.000000; 0.000000;, |
|||
1.000000; 0.500000;; |
|||
} //End of Cube_001 UV Coordinates |
|||
} //End of Cube_001 Mesh |
|||
} //End of Cube |
|||
} //End of Root Frame |
|||
AnimationSet { |
|||
Animation { |
|||
{Cube} |
|||
AnimationKey { //Position |
|||
2; |
|||
4; |
|||
0;3; 0.000000, 0.000000, 0.000000;;, |
|||
1;3; 0.000000, 3.000000, 3.000000;;, |
|||
2;3; 0.000000,-3.000000, 3.000000;;, |
|||
3;3; 0.000000,-3.000000, 3.000000;;; |
|||
} |
|||
AnimationKey { //Rotation |
|||
0; |
|||
4; |
|||
0;4; -1.000000, 0.000000, 0.000000, 0.000000;;, |
|||
1;4; -0.923880,-0.382683,-0.000000, 0.000000;;, |
|||
2;4; -0.923880, 0.382683, 0.000000, 0.000000;;, |
|||
3;4; -0.923880, 0.382683, 0.000000, 0.000000;;; |
|||
} |
|||
AnimationKey { //Scale |
|||
1; |
|||
4; |
|||
0;3; 5.000000, 5.000000, 5.000000;;, |
|||
1;3; 5.000000, 5.000000, 5.000000;;, |
|||
2;3; 5.000000, 5.000000, 5.000000;;, |
|||
3;3; 5.000000, 5.000000, 5.000000;;; |
|||
} |
|||
} |
|||
} //End of AnimationSet |
@ -0,0 +1,16 @@ |
|||
minetest.register_node(":default:rail", { |
|||
description = "Rail", |
|||
drawtype = "raillike", |
|||
tiles = {"default_rail.png", "default_rail_curved.png", "default_rail_t_junction.png", "default_rail_crossing.png"}, |
|||
inventory_image = "default_rail.png", |
|||
wield_image = "default_rail.png", |
|||
paramtype = "light", |
|||
sunlight_propagates = true, |
|||
is_ground_content = true, |
|||
walkable = false, |
|||
selection_box = { |
|||
type = "fixed", |
|||
fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2}, |
|||
}, |
|||
groups = {dig_immediate = 2, attached_node = 1, rail = 1, connect_to_raillike = 1}, |
|||
}) |
After Width: | Height: | Size: 114 B |
After Width: | Height: | Size: 147 B |
After Width: | Height: | Size: 131 B |
Loading…
Reference in new issue