aboutsummaryrefslogtreecommitdiff
path: root/build
Commit message (Expand)AuthorAge
* Add open user data button to main menu (#10579)rubenwardy2020-12-19
* Shaders for Android (GLES 2) (#10506)Vitaliy2020-10-25
* Android: update gradle, NDK and built tools versionMaksim2020-10-13
* Android: add ci with saving artifactsMaksim2020-10-13
* Android: get deps as a zip archive and sqlite3 from official sourceMaksim2020-10-13
* Android: replace InputDialogActivity on simple dialog window (#10034)Maksim2020-09-26
* Bump version to 5.3.0sfan52020-07-09
* Release test build to Android beta programrubenwardy2020-06-25
* Android: fix maxAspectRatio (should be float) (#10080)Maksim2020-06-23
* Android: Fix asset upgrade by renaming license file (#10073)rubenwardy2020-06-20
* Add .nomedia file to Android assets (#10047)rubenwardy2020-06-18
* Show Toast in UI thread and fix unpacking on Android 10 (#9900)Bektur2020-06-05
* Implement spawning particles with node texture appearancesfan52020-05-23
* Add core.open_url() to main menu API (#8592)rubenwardy2020-05-17
* Android: some java-part improvements (#9760)Maksim2020-05-04
* Android: add OpenGL ES 2 support (#9715)Maksim2020-04-22
* Android: add Android Studio support, completely redone java part (#9066)Maksim2020-04-15
* Add scroll_container formspec element (redo) (#9101)DS2020-04-13
* Drop content_sao.{cpp,h}Loic Blot2020-04-11
* Move serveractiveobject & unitsaoLoic Blot2020-04-11
* Drop genericobject.{cpp,h} (#9629)Loïc Blot2020-04-10
* Bump version to 5.2.0sfan52020-04-05
* Add animated_image[] formspec element (#9258)Hugues Ross2020-02-15
* Formspec: Create a new class for inventorylists (#9287)DS2020-02-01
* Android: fix cyrillic characters, update iconv lib (#9117)Maksim2020-01-13
* Refactor to centralize GUIButton styling/rendering code (#9090)Hugues Ross2019-12-09
* Fix android build due to omitted file in src filesZaoqi2019-12-06
* Add arm64-v8a but it's not sufficient for 64bit buildLoic Blot2019-11-09
* Bump to version code 25Loic Blot2019-11-09
* Android: build fixes & compat fixesMoNTE482019-11-09
* Formspec: draw order and clipping for all elements (#8740)DS2019-11-07
* Bump version to 5.1.0sfan52019-10-12
* Move Quicktune code to util/ (#8871)ANAND2019-09-29
* Fix misuse of AsyncTask (#8799)Linjie Pan2019-09-19
* Update Gradle to 5.5.1 (#8771)hannesa22019-08-12
* Unify OpenGL ES supportsfan52019-08-04
* Add styles to most elementsrubenwardy2019-08-03
* Add custom colorable GUIButton implementationrubenwardy2019-08-03
* Add IGUIScrollbar implementation with variable bar sizes (#8507)stujones112019-05-24
* Add Android keystore to the repositoryLoic Blot2019-03-05
* Bump android version codeLoïc Blot2019-03-03
* Revert "Revert CSM particles commit to fix particle spawner bug for 5.0.0 (#8...Loïc Blot2019-02-26
* Revert CSM particles commit to fix particle spawner bug for 5.0.0 (#8288)Paramat2019-02-26
* Android build fixesLoïc Blot2019-01-09
* Drop libgmp on Android and use mini-gmp (#8047)Loïc Blot2019-01-04
* Bump android version code for next Play Store versionLoïc Blot2019-01-04
* Android: Fix start-up crashes on version 4.x (#8003)stujones112018-12-22
* Android: Add activeobjectmgr.cpp and ieee_float.cpp, sort listSmallJoker2018-12-14
* Gradle now copy most of assetsLoic Blot2018-12-05
* Update android version code (rebuild)Loic Blot2018-12-04
>-- tpg: the track place group to register the candidates for -- NOTE: This value is automatically added to the node definition (ndef) in field ndef.advtrains.track_place_group! -- name, ndef: the node name and node definition table to register -- as_single: whether the rail should be considered as candidate for one-endpoint connection -- Typically only set for the straight rail variants -- as_double: whether the rail should be considered as candidate for two-endpoint connection -- Typically set for straights and curves -- ignore_2conn_for_legacy_xing: skips the 2-connection assertion - ONLY for compatibility with the legacy crossing nodes, DO NOT USE! function tp.register_candidate(tpg, name, ndef, as_single, as_double, ignore_2conn_for_legacy_xing) --atdebug("TP Register candidate:",tpg, name, as_single, as_double) --get or create TP group if not tp.groups[tpg] then tp.groups[tpg] = {double = {}, single1 = {}, single2 = {}, default = {name = name, param2 = 0} } -- note: this causes the first candidate to ever be registered to be the default (which is typically what you want) -- But it can be overwritten using tp.set_default_place_candidate end local g = tp.groups[tpg] -- get conns if not ignore_2conn_for_legacy_xing then assert(#ndef.at_conns == 2) end local c1, c2 = ndef.at_conns[1].c, ndef.at_conns[2].c local is_symmetrical = (rotate(c1, 8) == c2) -- store all possible rotations (param2 values) for i=0,3 do if as_double then g.double[rotate(c1,i*4).."_"..rotate(c2,i*4)] = {name=name, param2=i} if not is_symmetrical then g.double[rotate(c2,i*4).."_"..rotate(c1,i*4)] = {name=name, param2=i} -- if the track is unsymmetric (e.g. a curve), we may require the "wrong" orientation to fill a gap. end end if as_single then g.single1[rotate(c1,i*4)] = {name=name, param2=i} g.single2[rotate(c2,i*4)] = {name=name, param2=i} end end -- Set track place group on the node if not ndef.advtrains then ndef.advtrains = {} end ndef.advtrains.track_place_group = tpg end -- Sets the node that is placed by the track placer when there is no track nearby. param2 defaults to 0 function tp.set_default_place_candidate(tpg, name, param2) if not tp.groups[tpg] then tp.groups[tpg] = {double = {}, single1 = {}, single2 = {}, default = {name = name, param2 = param2 or 0} } else tp.groups[tpg].default = {name = name, param2 = param2 or 0} end end local function check_or_bend_rail(origin, dir, pname, commit) local pos = advtrains.pos_add_dir(origin, dir) local back_dir = advtrains.oppd(dir); local node_ok, conns = advtrains.get_rail_info_at(pos) if not node_ok then -- try the node one level below pos.y = pos.y - 1 node_ok, conns = advtrains.get_rail_info_at(pos) end if not node_ok then return false end -- if one conn of the node here already points towards us, nothing to do for connid, conn in ipairs(conns) do if back_dir == conn.c then return true end end -- can we bend the node here? local node = advtrains.ndb.get_node(pos) local ndef = minetest.registered_nodes[node.name] if not ndef or not ndef.advtrains or not ndef.advtrains.track_place_group then return false end -- now the track must be two-conn, else it wouldn't be allowed to have track_place_group set. --assert(#conns == 2) -- cannot check here, because of legacy crossing hack -- Is player and game allowed to do this? if not advtrains.can_dig_or_modify_track(pos) then return false end if not advtrains.check_track_protection(pos, pname) then return false end -- we confirmed that track can be modified. Does there exist a suitable connection candidate? -- check if there are any unbound ends local bound_connids = {} for connid, conn in ipairs(conns) do local adj_pos, adj_connid = advtrains.get_adjacent_rail(pos, conns, connid) if adj_pos then bound_connids[#bound_connids+1] = connid end end -- depending on the nummber of ends, decide if #bound_connids == 2 then -- rail is within a fixed track, do not break up return false end -- obtain the group table local g = tp.groups[ndef.advtrains.track_place_group] if #bound_connids == 1 then -- we can attempt double local bound_dir = conns[bound_connids[1]].c if g.double[back_dir.."_"..bound_dir] then if commit then advtrains.ndb.swap_node(pos, g.double[back_dir.."_"..bound_dir]) end return true end else -- rail is entirely unbound, we can attempt single1 if g.single1[back_dir] then if commit then advtrains.ndb.swap_node(pos, g.single1[back_dir]) end return true end end end local function track_place_node(pos, node, ndef, pname) --atdebug("track_place_node: ",pos, node) advtrains.ndb.swap_node(pos, node) local ndef = minetest.registered_nodes[node.name] if ndef and ndef.after_place_node then -- resolve player again local player = pname and core.get_player_by_name(pname) or nil ndef.after_place_node(pos, player) -- note: itemstack and pointed_thing are NOT available here anymore (crap!) end end -- Main API function to place a track. Replaces the older "placetrack" -- This function will attempt to place a track of the specified track placing group at the specified position, connecting it -- with neighboring rails. Neighboring rails can themselves be replaced ("bent") within their own track place group, -- if the player is permitted to do this. -- Order of preference is: -- Connect two track ends if possible -- Connect one track end if any rail is near -- Place the default track if no tracks are near -- The function returns true on success. function tp.place_track(pos, tpg, pname, yaw) -- 1. collect neighboring tracks and whether they can be connected --atdebug("tp.place_track(",pos, tpg, pname, yaw,")") local cand = {} for i=0,15 do if check_or_bend_rail(pos, i, pname) then cand[#cand+1] = i end end --atdebug("Candidates: ",cand) -- obtain the group table local g = tp.groups[tpg] if not g then error("tp.place_track: for tpg="..tpg.." couldn't find the group table") end --atdebug("Group table:",g) -- 2. try all possible two-endpoint connections for k1, conn1 in ipairs(cand) do for k2, conn2 in ipairs(cand) do if k1~=k2 then -- order of conn1/conn2: prefer conn1 being in the direction of the player facing. -- the combination the other way round will be run through in a later loop iteration if advtrains.yawToDirection(yaw, conn1, conn2) == conn1 then -- does there exist a suitable double-connection rail? --atdebug("Try double conn: ",conn1, conn2) local node = g.double[conn1.."_"..conn2] if node then check_or_bend_rail(pos, conn1, pname, true) check_or_bend_rail(pos, conn2, pname, true) track_place_node(pos, node, pname) -- calls after_place_node implicitly return true end end end end end -- 3. try all possible one_endpoint connections for k1, conn1 in ipairs(cand) do -- select single1 or single2? depending on yaw local single if advtrains.yawToDirection(yaw, conn1, advtrains.oppd(conn1)) == conn1 then single = g.single1 else single = g.single2 end --atdebug("Try single conn: ",conn1) local node = single[conn1] if node then check_or_bend_rail(pos, conn1, pname, true) track_place_node(pos, node, nil, pname) -- calls after_place_node implicitly return true end end -- 4. if nothing worked, set the default local node = g.default track_place_node(pos, node, nil, pname) -- calls after_place_node implicitly return true end -- TRACK WORKER -- minetest.register_craftitem("advtrains:trackworker",{ description = attrans("Track Worker Tool\n\nLeft-click: change rail type (straight/curve/switch)\nRight-click: rotate object"), groups = {cracky=1}, -- key=name, value=rating; rating=1..3. inventory_image = "advtrains_trackworker.png", wield_image = "advtrains_trackworker.png", stack_max = 1, on_place = function(itemstack, placer, pointed_thing) local name = placer:get_player_name() if not name then return end local has_aux1_down = placer:get_player_control().aux1 if pointed_thing.type=="node" then local pos=pointed_thing.under if not advtrains.check_track_protection(pos, name) then return end local node=minetest.get_node(pos) -- New since 2.5: only the fields in the node definition are considered, no more hacky pattern matching on the nodename local ndef = minetest.registered_nodes[node.name] if not ndef.advtrains or not ndef.advtrains.trackworker_next_rot then minetest.chat_send_player(placer:get_player_name(), attrans("This node can't be rotated using the trackworker!")) return end -- check if the node is modify-protected if advtrains.is_track(node.name) then -- is a track, we can query local can_modify, reason = advtrains.can_dig_or_modify_track(pos) if not can_modify then local str = attrans("This track can not be rotated!") if reason then str = str .. " " .. reason end minetest.chat_send_player(placer:get_player_name(), str) return end end if has_aux1_down then --feature: flip the node by 180° --i've always wanted this! advtrains.ndb.swap_node(pos, {name=node.name, param2=(node.param2+2)%4}) return end local new_node = {name = ndef.advtrains.trackworker_next_rot, param2 = node.param2} if ndef.advtrains.trackworker_rot_incr_param2 then new_node.param2 = ((node.param2 + 1) % 4) end advtrains.ndb.swap_node(pos, new_node) end end, on_use=function(itemstack, player, pointed_thing) local name = player:get_player_name() if not name then return end if pointed_thing.type=="node" then local pos=pointed_thing.under local node=minetest.get_node(pos) if not advtrains.check_track_protection(pos, name) then return end -- New since 2.5: only the fields in the node definition are considered, no more hacky pattern matching on the nodename local ndef = minetest.registered_nodes[node.name] if not ndef.advtrains or not ndef.advtrains.trackworker_next_var then minetest.chat_send_player(name, attrans("This node can't be changed using the trackworker!")) return end -- check if the node is modify-protected if advtrains.is_track(node.name) then -- is a track, we can query local can_modify, reason = advtrains.can_dig_or_modify_track(pos) if not can_modify then local str = attrans("This track can not be rotated!") if reason then str = str .. " " .. reason end minetest.chat_send_player(name, str) return end end local new_node = {name = ndef.advtrains.trackworker_next_var, param2 = node.param2} advtrains.ndb.swap_node(pos, new_node) end end, }) --putting into right place advtrains.trackplacer=tp