aboutsummaryrefslogtreecommitdiff
path: root/models/blender
ModeNameSize
-rw-r--r--engine-with-animation.blend599504logplain
d---------gleis1030logplain
-rw-r--r--locomotive.blend459600logplain
-rw-r--r--magnet_track.blend516836logplain
d---------mbb951logplain
-rw-r--r--newlocomotive.blend603376logplain
-rw-r--r--newlocomotive.blend1603376logplain
-rw-r--r--newlocomotive_uvs.png175030logplain
-rw-r--r--newwagon.blend542188logplain
-rw-r--r--newwagon.blend1550292logplain
-rw-r--r--newwagon.png108762logplain
-rw-r--r--subway-train.blend536268logplain
-rw-r--r--subway-train.blend1538188logplain
-rw-r--r--subway-train.png96773logplain
-rw-r--r--subway-train.xcf92558logplain
-rw-r--r--trackplane.blend462200logplain
-rw-r--r--trackvertical1.blend453656logplain
-rw-r--r--trackvertical1.blend1453344logplain
-rw-r--r--trackvertical1.png59146logplain
-rw-r--r--trackvertical2.blend459216logplain
-rw-r--r--trackvertical2.png66755logplain
an class="hl opt">, z=-1}, [12]={x=-1, z=0}, [13]={x=-2, z=1}, [14]={x=-1, z=1}, [15]={x=-1, z=2}, } function advtrains.dirCoordSet(coord, dir) local x,z if advtrains.dir_trans_tbl[dir] then x,z=advtrains.dir_trans_tbl[dir].x, advtrains.dir_trans_tbl[dir].z else error("advtrains: in helpers.lua/dirCoordSet() given dir="..(dir or "nil")) end return {x=coord.x+x, y=coord.y, z=coord.z+z} end function advtrains.dirToCoord(dir) return advtrains.dirCoordSet({x=0, y=0, z=0}, dir) end function advtrains.maxN(list, expectstart) local n=expectstart or 0 while list[n] do n=n+1 end return n-1 end function advtrains.minN(list, expectstart) local n=expectstart or 0 while list[n] do n=n-1 end return n+1 end --vertical_transmit: --[[ rely1, rely2 tell to which height the connections are pointed to. 1 means it will go up the next node ]] function advtrains.conway(midreal, prev, drives_on)--in order prev,mid,return local mid=advtrains.round_vector_floor_y(midreal) local midnode_ok, middir1, middir2, midrely1, midrely2=advtrains.get_rail_info_at(mid, drives_on) if not midnode_ok then return nil end local next, chkdir, chkrely, y_offset y_offset=0 --atprint(" in order mid1,mid2",middir1,middir2) --try if it is dir1 local cor1=advtrains.dirCoordSet(mid, middir2)--<<<< if cor1.x==prev.x and cor1.z==prev.z then--this was previous next=advtrains.dirCoordSet(mid, middir1) if midrely1>=1 then next.y=next.y+1 --atprint("found midrely1 to be >=1: next is now "..(next and minetest.pos_to_string(next) or "nil")) y_offset=1 end chkdir=middir1 chkrely=midrely1 --atprint("dir2 applied next pos:",minetest.pos_to_string(next),"(chkdir is ",chkdir,")") end --dir2??? local cor2=advtrains.dirCoordSet(mid, middir1)--<<<< if math.floor(cor2.x+0.5)==math.floor(prev.x+0.5) and math.floor(cor2.z+0.5)==math.floor(prev.z+0.5) then next=advtrains.dirCoordSet(mid, middir2)--dir2 wird überprüft, alles gut. if midrely2>=1 then next.y=next.y+1 --atprint("found midrely2 to be >=1: next is now "..(next and minetest.pos_to_string(next) or "nil")) y_offset=1 end chkdir=middir2 chkrely=midrely2 --atprint(" dir2 applied next pos:",minetest.pos_to_string(next),"(chkdir is ",chkdir,")") end --atprint("dir applied next pos: "..(next and minetest.pos_to_string(next) or "nil").."(chkdir is "..(chkdir or "nil")..", y-offset "..y_offset..")") --is there a next if not next then atprint("in conway: no next rail(nil), returning!") return nil end local nextnode_ok, nextdir1, nextdir2, nextrely1, nextrely2, nextrailheight=advtrains.get_rail_info_at(advtrains.round_vector_floor_y(next), drives_on) --is it a rail? if(not nextnode_ok) then atprint("in conway: next "..minetest.pos_to_string(next).." not a rail, trying one node below!") next.y=next.y-1 y_offset=y_offset-1 nextnode_ok, nextdir1, nextdir2, nextrely1, nextrely2, nextrailheight=advtrains.get_rail_info_at(advtrains.round_vector_floor_y(next), drives_on) if(not nextnode_ok) then atprint("in conway: one below "..minetest.pos_to_string(next).." is not a rail either, returning!") return nil end end --is this next rail connecting to the mid? if not ( (((nextdir1+8)%16)==chkdir and nextrely1==chkrely-y_offset) or (((nextdir2+8)%16)==chkdir and nextrely2==chkrely-y_offset) ) then atprint("in conway: next "..minetest.pos_to_string(next).." not connecting, trying one node below!") next.y=next.y-1 y_offset=y_offset-1 nextnode_ok, nextdir1, nextdir2, nextrely1, nextrely2, nextrailheight=advtrains.get_rail_info_at(advtrains.round_vector_floor_y(next), drives_on) if(not nextnode_ok) then atprint("in conway: (at connecting if check again) one below "..minetest.pos_to_string(next).." is not a rail either, returning!") return nil end if not ( (((nextdir1+8)%16)==chkdir and nextrely1==chkrely) or (((nextdir2+8)%16)==chkdir and nextrely2==chkrely) ) then atprint("in conway: one below "..minetest.pos_to_string(next).." rail not connecting, returning!") atprint(" in order mid1,2,next1,2,chkdir "..middir1.." "..middir2.." "..nextdir1.." "..nextdir2.." "..chkdir) return nil end end --atprint("conway found rail.") return vector.add(advtrains.round_vector_floor_y(next), {x=0, y=nextrailheight, z=0}), chkdir end --TODO use this function advtrains.oppd(dir) return ((dir+8)%16) end function advtrains.round_vector_floor_y(vec) return {x=math.floor(vec.x+0.5), y=math.floor(vec.y), z=math.floor(vec.z+0.5)} end function advtrains.yawToDirection(yaw, conn1, conn2) if not conn1 or not conn2 then error("given nil to yawToDirection: conn1="..(conn1 or "nil").." conn2="..(conn1 or "nil")) end local yaw1=math.pi*(conn1/4) local yaw2=math.pi*(conn2/4) if advtrains.minAngleDiffRad(yaw, yaw1)<advtrains.minAngleDiffRad(yaw, yaw2) then--change to > if weird behavior return conn2 else return conn1 end end function advtrains.minAngleDiffRad(r1, r2) local try1=r2-r1 local try2=(r2+2*math.pi)-r1