summaryrefslogtreecommitdiff
path: root/src/collision.cpp
Commit message (Expand)AuthorAge
* Add missing sao->isGone() checkssfan52020-05-18
* Collision detection - #9343 follow-up (#9764)TheTermos2020-05-14
* Expose collided objects in moveresultsfan52020-05-06
* 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
* Move serveractiveobject & unitsaoLoic Blot2020-04-11
* Collision various fixes (#9343)TheTermos2020-04-08
* Revert collision tweaks #9365 and #9327 (#9591)SmallJoker2020-04-04
* Collision detection tweak #2 (#9365)TheTermos2020-02-13
* Collision temporary fix for issue #6886TheTermos2020-01-27
* Better F6 profiler (#8750)SmallJoker2019-08-13
* Merge pull request #8776 from osjc/FixGetNodeJozef Behran2019-08-10
* Add disable_jump to liquids and ladders (#7688)SmallJoker2019-06-10
* Move client-specific files to 'src/client' (#7902)Quentin Bazin2018-11-28
* Client-side autojump. Remove Android-only stepheight autojump (#7228)Ben Deutsch2018-11-22
* Prevent objects from colliding with own child attachments (#7610)SmallJoker2018-08-05
* Optimize a little bit isBlockInSight, adjustDist & collisions (#7193)Loïc Blot2018-04-04
* Fix various clang-tidy reported performance-type-promotion-in-math-fnLoïc Blot2018-04-03
* CollisionMoveSimple: Collide with 'ignore' nodesparamat2018-02-26
* Node definition manager refactor (#7016)Dániel Juhász2018-02-10
* Change BS constant from implicit double to float (#6286)Jens Rottmann2017-08-20
* clientobject, clouds, collision, clientsimpleobject: code modernization (#6260)Loïc Blot2017-08-17
* Add tiny Y offset in collisionMoveSimple() to tweak performanceJens Rottmann2017-08-05
* Fix player coordinate rounding in collisionMoveSimple() (#6197)Jens Rottmann2017-08-05
* C++11 patchset 9: move hardcoded init parameters to class definitions (part 1...Loïc Blot2017-06-16
* Environment & IGameDef code refactoring (#4985)Ner'zhul2017-01-09
* Move ServerEnvironment to dedicated cpp/header filesLoic Blot2017-01-08
* Move ClientEnvironment to dedicated cpp/header filesLoic Blot2017-01-08
* PlayerSAO/LocalPlayer refactor: (#4612)Ner'zhul2016-10-30
* Collision: Improve performance by combining 6 vectors into 1 using a structShadowNinja2016-09-15
* Fix #3955 (player dying on login).Nathanaël Courant2016-04-06
* Allow nodes to specify which sides to connect to.Auke Kok2016-03-12
* Nodebox: Allow nodeboxes to "connect"Auke Kok2016-03-12
* Revert "Fix jumping at node edge"nerzhul2016-03-01
* Little collision.cpp cleanupsLoic Blot2016-02-20
* Fix jumping at node edgegregorycu2016-02-19
* Don't pass non-const references to collision methodsest312016-01-29
* Make collisionMoveSimple time overflow message written to log/show up at max ...Sapier2015-12-29
* Fix jittering sounds on entities (fixes #2974)BlockMen2015-10-26
* Use warningstream for log messages with WARNINGShadowNinja2015-10-14
* Fix falling through nodes on world load (fixes #2784)Christof Kaufmann2015-09-26
* Change i++ to ++iDavid Jones2015-08-25
* Remove profiler.h include where it's not needed. Remove some unreachable and ...Loic Blot2015-07-21
* Use std::vector instead of std::set for Environment::getObjectsInsideRadiusLoic Blot2015-04-16
* Move globals from main.cpp to more sane locationsCraig Robbins2015-04-01
* For usages of assert() that are meant to persist in Release builds (when NDEB...Craig Robbins2015-03-07
* collisionMoveSimple: use std::vector instead of std::list, this improve the p...Loic Blot2015-03-05
* Remove most exceptions from getNode() (and variants)Craig Robbins2014-11-14
* Custom collision boxes node property.RealBadAngel2014-10-19
* Add an option to disable object <-> object collision for Lua entitiesPilzAdam2013-07-20
("keymap_cmd_local"); key[KeyType::CONSOLE] = getKeySetting("keymap_console"); key[KeyType::MINIMAP] = getKeySetting("keymap_minimap"); key[KeyType::FREEMOVE] = getKeySetting("keymap_freemove"); key[KeyType::PITCHMOVE] = getKeySetting("keymap_pitchmove"); key[KeyType::FASTMOVE] = getKeySetting("keymap_fastmove"); key[KeyType::NOCLIP] = getKeySetting("keymap_noclip"); key[KeyType::HOTBAR_PREV] = getKeySetting("keymap_hotbar_previous"); key[KeyType::HOTBAR_NEXT] = getKeySetting("keymap_hotbar_next"); key[KeyType::MUTE] = getKeySetting("keymap_mute"); key[KeyType::INC_VOLUME] = getKeySetting("keymap_increase_volume"); key[KeyType::DEC_VOLUME] = getKeySetting("keymap_decrease_volume"); key[KeyType::CINEMATIC] = getKeySetting("keymap_cinematic"); key[KeyType::SCREENSHOT] = getKeySetting("keymap_screenshot"); key[KeyType::TOGGLE_HUD] = getKeySetting("keymap_toggle_hud"); key[KeyType::TOGGLE_CHAT] = getKeySetting("keymap_toggle_chat"); key[KeyType::TOGGLE_FOG] = getKeySetting("keymap_toggle_fog"); key[KeyType::TOGGLE_UPDATE_CAMERA] = getKeySetting("keymap_toggle_update_camera"); key[KeyType::TOGGLE_DEBUG] = getKeySetting("keymap_toggle_debug"); key[KeyType::TOGGLE_PROFILER] = getKeySetting("keymap_toggle_profiler"); key[KeyType::CAMERA_MODE] = getKeySetting("keymap_camera_mode"); key[KeyType::INCREASE_VIEWING_RANGE] = getKeySetting("keymap_increase_viewing_range_min"); key[KeyType::DECREASE_VIEWING_RANGE] = getKeySetting("keymap_decrease_viewing_range_min"); key[KeyType::RANGESELECT] = getKeySetting("keymap_rangeselect"); key[KeyType::ZOOM] = getKeySetting("keymap_zoom"); key[KeyType::QUICKTUNE_NEXT] = getKeySetting("keymap_quicktune_next"); key[KeyType::QUICKTUNE_PREV] = getKeySetting("keymap_quicktune_prev"); key[KeyType::QUICKTUNE_INC] = getKeySetting("keymap_quicktune_inc"); key[KeyType::QUICKTUNE_DEC] = getKeySetting("keymap_quicktune_dec"); for (int i = 0; i < HUD_HOTBAR_ITEMCOUNT_MAX; i++) { std::string slot_key_name = "keymap_slot" + std::to_string(i + 1); key[KeyType::SLOT_1 + i] = getKeySetting(slot_key_name.c_str()); } if (handler) { // First clear all keys, then re-add the ones we listen for handler->dontListenForKeys(); for (const KeyPress &k : key) { handler->listenForKey(k); } handler->listenForKey(EscapeKey); handler->listenForKey(CancelKey); } } bool MyEventReceiver::OnEvent(const SEvent &event) { /* React to nothing here if a menu is active */ if (isMenuActive()) { #ifdef HAVE_TOUCHSCREENGUI if (m_touchscreengui) { m_touchscreengui->Toggle(false); } #endif return g_menumgr.preprocessEvent(event); } // Remember whether each key is down or up if (event.EventType == irr::EET_KEY_INPUT_EVENT) { const KeyPress &keyCode = event.KeyInput; if (keysListenedFor[keyCode]) { // If the key is being held down then the OS may // send a continuous stream of keydown events. // In this case, we don't want to let this // stream reach the application as it will cause // certain actions to repeat constantly. if (event.KeyInput.PressedDown) { if (!IsKeyDown(keyCode)) { keyWasDown.set(keyCode); keyWasPressed.set(keyCode); } keyIsDown.set(keyCode); } else { if (IsKeyDown(keyCode)) keyWasReleased.set(keyCode); keyIsDown.unset(keyCode); } return true; } #ifdef HAVE_TOUCHSCREENGUI } else if (m_touchscreengui && event.EventType == irr::EET_TOUCH_INPUT_EVENT) { // In case of touchscreengui, we have to handle different events m_touchscreengui->translateEvent(event); return true; #endif } else if (event.EventType == irr::EET_JOYSTICK_INPUT_EVENT) { /* TODO add a check like: if (event.JoystickEvent != joystick_we_listen_for) return false; */ return joystick->handleEvent(event.JoystickEvent); } else if (event.EventType == irr::EET_MOUSE_INPUT_EVENT) { // Handle mouse events KeyPress key; switch (event.MouseInput.Event) { case EMIE_LMOUSE_PRESSED_DOWN: key = "KEY_LBUTTON"; keyIsDown.set(key); keyWasDown.set(key); keyWasPressed.set(key); break; case EMIE_MMOUSE_PRESSED_DOWN: key = "KEY_MBUTTON"; keyIsDown.set(key); keyWasDown.set(key); keyWasPressed.set(key); break; case EMIE_RMOUSE_PRESSED_DOWN: key = "KEY_RBUTTON"; keyIsDown.set(key); keyWasDown.set(key); keyWasPressed.set(key); break; case EMIE_LMOUSE_LEFT_UP: key = "KEY_LBUTTON"; keyIsDown.unset(key); keyWasReleased.set(key); break; case EMIE_MMOUSE_LEFT_UP: key = "KEY_MBUTTON"; keyIsDown.unset(key); keyWasReleased.set(key); break; case EMIE_RMOUSE_LEFT_UP: key = "KEY_RBUTTON"; keyIsDown.unset(key); keyWasReleased.set(key); break; case EMIE_MOUSE_WHEEL: mouse_wheel += event.MouseInput.Wheel; break; default: break; } } else if (event.EventType == irr::EET_LOG_TEXT_EVENT) { static const LogLevel irr_loglev_conv[] = { LL_VERBOSE, // ELL_DEBUG LL_INFO, // ELL_INFORMATION LL_WARNING, // ELL_WARNING LL_ERROR, // ELL_ERROR LL_NONE, // ELL_NONE }; assert(event.LogEvent.Level < ARRLEN(irr_loglev_conv)); g_logger.log(irr_loglev_conv[event.LogEvent.Level], std::string("Irrlicht: ") + event.LogEvent.Text); return true; } /* always return false in order to continue processing events */ return false; } /* * RandomInputHandler */ s32 RandomInputHandler::Rand(s32 min, s32 max) { return (myrand() % (max - min + 1)) + min; } struct RandomInputHandlerSimData { std::string key; float counter; int time_max; }; void RandomInputHandler::step(float dtime) { static RandomInputHandlerSimData rnd_data[] = { { "keymap_jump", 0.0f, 40 }, { "keymap_special1", 0.0f, 40 }, { "keymap_forward", 0.0f, 40 }, { "keymap_left", 0.0f, 40 }, { "keymap_dig", 0.0f, 30 }, { "keymap_place", 0.0f, 15 } }; for (auto &i : rnd_data) { i.counter -= dtime; if (i.counter < 0.0) { i.counter = 0.1 * Rand(1, i.time_max); keydown.toggle(getKeySetting(i.key.c_str())); } } { static float counter1 = 0; counter1 -= dtime; if (counter1 < 0.0) { counter1 = 0.1 * Rand(1, 20); mousespeed = v2s32(Rand(-20, 20), Rand(-15, 20)); } } mousepos += mousespeed; }