summaryrefslogtreecommitdiff
Commit message (Expand)AuthorAge
* Add MetricsBackend with prometheus counter supportLoic Blot2020-04-29
* Fix breath_bar scaling; delay breath_bar hiding by one second (#8271)ANAND2020-04-28
* cmake: Silence warnings. (#9750)orbea2020-04-28
* Rewrite builtin item entity to use collision infosfan52020-04-27
* Expose collision information to LuaEntity on_stepsfan52020-04-27
* Remove /LTCG from when compiling with clang-cl (#9765)k.h.lai2020-04-27
* Fix detection of in-place path_locale when RUN_IN_PLACE=0sfan52020-04-27
* Add STATIC_LOCALEDIR to BUILD_INFO and move it to version.cppsfan52020-04-27
* Forbid object:attach(obj, ...) (#9762)Loïc Blot2020-04-27
* Script: Enforce type checks if not nil (#9748)SmallJoker2020-04-27
* Fix truncation warning for F1000_MIN, F1000_MAXsfan52020-04-27
* script: Put getGuiEngine() inside a client-only #ifdefsfan52020-04-27
* builtin: Correctly indicate failure in /spawnentitysfan52020-04-27
* script: Fix add_entity returning unusable ref if object deleted in on_activatesfan52020-04-27
* Add PostgreSQL authentication backend (#9756)Loïc Blot2020-04-27
* Add new command /revokeme <priv> (#9584)David Leal2020-04-26
* Remove unused lookup table from noise.cppsfan52020-04-26
* Fix mapgen settings in minetest.conf being ignored (#9737)sfan52020-04-26
* Fix UpdateBonePosition() breaking animations (#9577)theviper1212020-04-26
* Add `animated_image` to clickthrough elements (#9724)v-rob2020-04-25
* Fix DPI scaling on Windowssfan52020-04-25
* mapblock_mesh: Optimize a few things (#9713)sfan52020-04-25
* Ensure game is shutdown if server throws exception (#9742)Paul Ouellette2020-04-25
* Simplify how parseElement splits element string (#9726)Pierre-Yves Rollo2020-04-25
* Add server side translations capability (#9733)EvidenceB Kidscode2020-04-25
* Add LevelDB auth database. (#9476)luk3yx2020-04-23
* Camera: Fix shootline line offsets II (#9730)SmallJoker2020-04-23
* Android: add OpenGL ES 2 support (#9715)Maksim2020-04-22
* minetest.serialize: Reversible number serialization (#9722)HybridDog2020-04-22
* Fix configuration caching in log_deprecated (#9697)HybridDog2020-04-22
* Improve protocol-level receiving code (#9617)sfan52020-04-20
* Fix build badge since switching to github actionsLoïc Blot2020-04-20
* Replace travis with github actions (#9641)Loïc Blot2020-04-20
* Fix alias handling of get_content_id (#9712)sfan52020-04-19
* Reuse object_shader for "wielditem" and "item" entity drawtypes (#9537)Danila Shutov2020-04-19
* Shaders: Complete 478e753. OpenGL 4.3 compatiblitySmallJoker2020-04-18
* script: Move SAO usability check so that it covers all functions (#9698)sfan52020-04-18
* Formspec: allow lists to change size and existence while the formspec is open...DS2020-04-18
* Apply a scrollbar's default value to scroll containers (#9699)DS2020-04-18
* serverpackethandler: Reduce pkt->getPeerId() invocations and more (#9689)HybridDog2020-04-18
* Android: fix handling non-latin characters on older Android devices (#9309)Maksim2020-04-17
* Document which noise APIs add world seed to noiseparams seed (#9693)Paramat2020-04-17
* Rename "subgame" to "game" in 2 error messages (#9680)Wuzzy2020-04-17
* Add an option to disable unittest build, & disable them on Docker build (#9677)Loïc Blot2020-04-16
* Drop -Wabi useless flag (#9676)Loïc Blot2020-04-16
* Android: fix formspec input for AArch64 devices (#9685)Maksim2020-04-16
* Camera: Fix shooting line offsets (#9681)SmallJoker2020-04-16
* Swap out -ffast-math for a safe subset of optimization flags (#9682)sfan52020-04-16
* Optimize get_objects_inside_radius calls (#9671)Loïc Blot2020-04-16
* Android: add Android Studio support, completely redone java part (#9066)Maksim2020-04-15
ss="hl opt">, -- When speed is <2, still allow accelerating DST_FACTOR = 1.5, SHUNT_SPEED_MAX = advtrains.SHUNT_SPEED_MAX, } function advtrains.set_lzb_param(par, val) if params[par] and tonumber(val) then params[par] = tonumber(val) else error("Inexistant param or not a number") end end local function resolve_latest_lzbdata(ckp, index) local i = #ckp local ckpi while i>0 do ckpi = ckp[i] if ckpi.index <= index and ckpi.lzbdata then return ckpi.lzbdata end i=i-1 end return {} end local function look_ahead(id, train) local lzb = train.lzb if lzb.zero_checkpoint then -- if the checkpoints list contains a zero checkpoint, don't look ahead -- in order to not trigger approach callbacks on the wrong path return end local acc = advtrains.get_acceleration(train, 1) -- worst-case: the starting point is maximum speed local vel = train.max_speed or train.velocity local brakedst = ( -(vel*vel) / (2*acc) ) * params.DST_FACTOR --local brake_i = advtrains.path_get_index_by_offset(train, train.index, brakedst + params.BRAKE_SPACE) -- worst case (don't use index_by_offset) local brake_i = atfloor(train.index + brakedst + params.BRAKE_SPACE) atprint("LZB: looking ahead up to ", brake_i) --local aware_i = advtrains.path_get_index_by_offset(train, brake_i, AWARE_ZONE) local trav = lzb.trav_index -- retrieve latest lzbdata if not lzb.trav_lzbdata then lzb.trav_lzbdata = resolve_latest_lzbdata(lzb.checkpoints, trav) end if lzb.trav_lzbdata.off_track then --previous position was off track, do not scan any further end while trav <= brake_i and not lzb.zero_checkpoint do local pos = advtrains.path_get(train, trav) -- check offtrack if trav - 1 == train.path_trk_f then lzb.trav_lzbdata.off_track = true advtrains.lzb_add_checkpoint(train, trav - 1, 0, nil, lzb.trav_lzbdata) else -- run callbacks -- Note: those callbacks are defined in trainlogic.lua for consistency with the other node callbacks advtrains.tnc_call_approach_callback(pos, id, train, trav, lzb.trav_lzbdata) end trav = trav + 1 end lzb.trav_index = trav end advtrains.lzb_look_ahead = look_ahead local function call_runover_callbacks(id, train) if not train.lzb then return end local i = 1 local idx = atfloor(train.index) local ckp = train.lzb.checkpoints while ckp[i] do if ckp[i].index <= idx then atprint("LZB: checkpoint run over: i=",ckp[i].index,"s=",ckp[i].speed) -- call callback local it = ckp[i] if it.callback then it.callback(it.pos, id, train, it.index, it.speed, train.lzb.lzbdata) end -- note: lzbdata is always defined as look_ahead was called before table.remove(ckp, i) else i = i + 1 end end end -- Flood-fills train.path_speed, based on this checkpoint local function apply_checkpoint_to_path(train, checkpoint) if not checkpoint.speed then return end atprint("LZB: applying checkpoint: i=",checkpoint.index,"s=",checkpoint.speed) if checkpoint.speed == 0 then train.lzb.zero_checkpoint = true end -- make sure path exists until checkpoint local pos = advtrains.path_get(train, checkpoint.index) local brake_accel = advtrains.get_acceleration(train, 11) -- start with the checkpoint index at specified speed local index = checkpoint.index local p_speed -- speed in path_speed local c_speed = checkpoint.speed -- calculated speed at current index while true do p_speed = train.path_speed[index] if (p_speed and p_speed <= c_speed) or index < train.index then --we're done. train already slower than wanted at this position return end -- insert calculated target speed train.path_speed[index] = c_speed -- calculate c_speed at previous index advtrains.path_get(train, index-1) local eldist = train.path_dist[index] - train.path_dist[index-1] -- Calculate the start velocity the train would have if it had a end velocity of c_speed and accelerating with brake_accel, after a distance of eldist: -- v0² = v1² - 2*a*s c_speed = math.sqrt( (c_speed * c_speed) - (2 * brake_accel * eldist) ) index = index - 1 end end --[[ Distance needed to accelerate from v0 to v1 with constant acceleration a: v1 - v0 a / v1 - v0 \ 2 v1^2 - v0^2 s = v0 * ------- + - * | ------- | = ----------- a 2 \ a / 2*a ]] -- Removes all LZB checkpoints and restarts the traverser at the current train index function advtrains.lzb_invalidate(train) train.lzb = { trav_index = atfloor(train.index) + 1, checkpoints = {}, } end -- LZB part of path_invalidate_ahead. Clears all checkpoints that are ahead of start_idx -- in contrast to path_inv_ahead, doesn't complain if start_idx is behind train.index, clears everything then function advtrains.lzb_invalidate_ahead(train, start_idx) if train.lzb then local idx = atfloor(start_idx) local i = 1 while train.lzb.checkpoints[i] do if train.lzb.checkpoints[i].index >= idx then table.remove(train.lzb.checkpoints, i) else i=i+1 end end train.lzb.trav_index = idx -- FIX reset trav_lzbdata (look_ahead fetches these when required) train.lzb.trav_lzbdata = nil -- re-apply all checkpoints to path_speed train.path_speed = {} train.lzb.zero_checkpoint = false for _,ckp in ipairs(train.lzb.checkpoints) do apply_checkpoint_to_path(train, ckp) end end end -- Add LZB control point -- lzbdata: If you modify lzbdata in an approach callback, you MUST add a checkpoint AND pass the (modified) lzbdata into it. -- If you DON'T modify lzbdata, you MUST pass nil as lzbdata. Always modify the lzbdata table in place, never overwrite it! -- udata: user-defined data, do not use externally function advtrains.lzb_add_checkpoint(train, index, speed, callback, lzbdata, udata) local lzb = train.lzb local pos = advtrains.path_get(train, index) local lzbdata_c = nil if lzbdata then -- make a shallow copy of lzbdata lzbdata_c = {} for k,v in pairs(lzbdata) do lzbdata_c[k] = v end end local ckp = { pos = pos, index = index, speed = speed, callback = callback, lzbdata = lzbdata_c, udata = udata, } table.insert(lzb.checkpoints, ckp) apply_checkpoint_to_path(train, ckp) end advtrains.te_register_on_new_path(function(id, train) advtrains.lzb_invalidate(train) -- Taken care of in pre-move hook (see train_step_b) --look_ahead(id, train) end) advtrains.te_register_on_invalidate_ahead(function(id, train, start_idx) advtrains.lzb_invalidate_ahead(train, start_idx) end) advtrains.te_register_on_update(function(id, train) if not train.path or not train.lzb then atprint("LZB run: no path on train, skip step") return end -- Note: look_ahead called from train_step_b before applying movement -- TODO: if more pre-move hooks are added, make a separate callback hook --look_ahead(id, train) call_runover_callbacks(id, train) end, true)