aboutsummaryrefslogtreecommitdiff
path: root/src/content_abm.cpp
Commit message (Collapse)AuthorAge
* Move globals from main.cpp to more sane locationsCraig Robbins2015-04-01
| | | | | | | | | | | | Move debug streams to log.cpp|h Move GUI-related globals to clientlauncher Move g_settings and g_settings_path to settings.cpp|h Move g_menuclouds to clouds.cpp|h Move g_profiler to profiler.cpp|h
* Remove liquid_finite and weatherproller2014-04-18
|
* Move the sapling growing and grass adding/removing ABMs to LuaNovatux2013-11-02
|
* Remove mapgen_air alias (#935)0gb.us2013-10-05
|
* Weather: Clean up getHeat/getHumidity somewhatkwolekr2013-09-16
|
* Omnicleanup: header cleanup, add ModApiUtil shared between game and mainmenuKahrl2013-08-14
|
* Freeze-melt adjustproller2013-08-04
|
* Better snow fall, finite liquid transform, leveled nodes apiproller2013-07-28
|
* Weather supportproller2013-07-27
|
* Optimize liquid queue on generate map for liquid_finiteproller2013-06-30
|
* Liquid adjusting: continue to dropproller2013-05-31
|
* Use the group "soil" for nodes that saplings grow onShadowNinja2013-05-20
|
* Grow dirt_with_snow instead of dirt_with_grass if snow is above itPilzAdam2013-04-23
|
* Make saplings only grow on dirt or grass, make jungle tree trunks only ↵kwolekr2013-03-16
| | | | replace air
* Re-add jungles, apple treeskwolekr2013-03-16
|
* Migrate to STL containers/algorithms.Ilya Zhuravlev2013-03-11
|
* Merge pull request #482 from proller/liquidkwolekr2013-02-25
|\ | | | | finite liquid
| * new adjustable finite liquidproller2013-02-24
| |
* | Update Copyright YearsSfan52013-02-24
| |
* | Change Minetest-c55 to MinetestPilzAdam2013-02-24
|/
* Add seed parameter for default and L-system treesRealBadAngel2013-02-24
|
* Dont remove grass under unloaded blocksPilzAdam2013-02-10
|
* Fixed content_abm aliasesdannydark2013-01-04
| | | | | | | | | | Since commit 5a13c49492 when I'm in a new area of the world that hasn't yet been generated the debug log gets flooded with the following error: Map::setNode(): Not allowing to place CONTENT_IGNORE while trying to replace "default:dirt_with_grass" at (729,1,-219) (block (45,0,-14)) This commit fixes that.
* Change the nodenames for dirt -> grass and sapling -> tree abms to match the ↵PilzAdam2013-01-02
| | | | mapgen aliases
* L-System treegenRealBadAngel2012-12-30
|
* Experimental-ish rollback functionalityPerttu Ahola2012-07-27
|
* Switch the license to be LGPLv2/later, with small parts still remaining as ↵Perttu Ahola2012-06-05
| | | | GPLv2/later, by agreement of major contributors
* Entity damage system WIP; Remove C++ mobsPerttu Ahola2012-03-10
|
* Modify builtin ABMs to have lower interval and higher trigger non-chancePerttu Ahola2011-11-29
|
* Replace old active block random node modifying things with actual ↵Perttu Ahola2011-11-29
ActiveBlockModifiers
er : public IEventReceiver { public: // This is the one method that we have to implement virtual bool OnEvent(const SEvent& event) { /* React to nothing here if a menu is active */ if (noMenuActive() == false) { #ifdef HAVE_TOUCHSCREENGUI if (m_touchscreengui != 0) { 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) { if (event.KeyInput.PressedDown) { keyIsDown.set(event.KeyInput); keyWasDown.set(event.KeyInput); } else { keyIsDown.unset(event.KeyInput); } } #ifdef HAVE_TOUCHSCREENGUI // case of touchscreengui we have to handle different events if ((m_touchscreengui != 0) && (event.EventType == irr::EET_TOUCH_INPUT_EVENT)) { m_touchscreengui->translateEvent(event); return true; } #endif // handle mouse events if (event.EventType == irr::EET_MOUSE_INPUT_EVENT) { if (noMenuActive() == false) { left_active = false; middle_active = false; right_active = false; } else { left_active = event.MouseInput.isLeftPressed(); middle_active = event.MouseInput.isMiddlePressed(); right_active = event.MouseInput.isRightPressed(); if (event.MouseInput.Event == EMIE_LMOUSE_PRESSED_DOWN) { leftclicked = true; } if (event.MouseInput.Event == EMIE_RMOUSE_PRESSED_DOWN) { rightclicked = true; } if (event.MouseInput.Event == EMIE_LMOUSE_LEFT_UP) { leftreleased = true; } if (event.MouseInput.Event == EMIE_RMOUSE_LEFT_UP) { rightreleased = true; } if (event.MouseInput.Event == EMIE_MOUSE_WHEEL) { mouse_wheel += event.MouseInput.Wheel; } } } 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: ") + (const char*) event.LogEvent.Text); return true; } /* always return false in order to continue processing events */ return false; } bool IsKeyDown(const KeyPress &keyCode) const { return keyIsDown[keyCode]; } // Checks whether a key was down and resets the state bool WasKeyDown(const KeyPress &keyCode) { bool b = keyWasDown[keyCode]; if (b) keyWasDown.unset(keyCode); return b; } s32 getMouseWheel() { s32 a = mouse_wheel; mouse_wheel = 0; return a; } void clearInput() { keyIsDown.clear(); keyWasDown.clear(); leftclicked = false; rightclicked = false; leftreleased = false; rightreleased = false; left_active = false; middle_active = false; right_active = false; mouse_wheel = 0; } MyEventReceiver() { clearInput(); #ifdef HAVE_TOUCHSCREENGUI m_touchscreengui = NULL; #endif } bool leftclicked; bool rightclicked; bool leftreleased; bool rightreleased; bool left_active; bool middle_active; bool right_active; s32 mouse_wheel; #ifdef HAVE_TOUCHSCREENGUI TouchScreenGUI* m_touchscreengui; #endif private: // The current state of keys KeyList keyIsDown; // Whether a key has been pressed or not KeyList keyWasDown; }; /* Separated input handler */ class RealInputHandler : public InputHandler { public: RealInputHandler(IrrlichtDevice *device, MyEventReceiver *receiver): m_device(device), m_receiver(receiver), m_mousepos(0,0) { } virtual bool isKeyDown(const KeyPress &keyCode) { return m_receiver->IsKeyDown(keyCode); } virtual bool wasKeyDown(const KeyPress &keyCode) { return m_receiver->WasKeyDown(keyCode); } virtual v2s32 getMousePos() { if (m_device->getCursorControl()) { return m_device->getCursorControl()->getPosition(); } else { return m_mousepos; } } virtual void setMousePos(s32 x, s32 y) { if (m_device->getCursorControl()) { m_device->getCursorControl()->setPosition(x, y); } else { m_mousepos = v2s32(x,y); } } virtual bool getLeftState() { return m_receiver->left_active; } virtual bool getRightState() { return m_receiver->right_active; } virtual bool getLeftClicked() { return m_receiver->leftclicked; } virtual bool getRightClicked() { return m_receiver->rightclicked; } virtual void resetLeftClicked() { m_receiver->leftclicked = false; } virtual void resetRightClicked() { m_receiver->rightclicked = false; } virtual bool getLeftReleased() { return m_receiver->leftreleased; } virtual bool getRightReleased() { return m_receiver->rightreleased; } virtual void resetLeftReleased() { m_receiver->leftreleased = false; } virtual void resetRightReleased() { m_receiver->rightreleased = false; } virtual s32 getMouseWheel() { return m_receiver->getMouseWheel(); } void clear() { m_receiver->clearInput(); } private: IrrlichtDevice *m_device; MyEventReceiver *m_receiver; v2s32 m_mousepos; }; class RandomInputHandler : public InputHandler { public: RandomInputHandler() { leftdown = false; rightdown = false; leftclicked = false; rightclicked = false; leftreleased = false; rightreleased = false; keydown.clear(); } virtual bool isKeyDown(const KeyPress &keyCode) { return keydown[keyCode]; } virtual bool wasKeyDown(const KeyPress &keyCode) { return false; } virtual v2s32 getMousePos() { return mousepos; } virtual void setMousePos(s32 x, s32 y) { mousepos = v2s32(x, y); } virtual bool getLeftState() { return leftdown; } virtual bool getRightState() { return rightdown; } virtual bool getLeftClicked() { return leftclicked; } virtual bool getRightClicked() { return rightclicked; } virtual void resetLeftClicked() { leftclicked = false; } virtual void resetRightClicked() { rightclicked = false; } virtual bool getLeftReleased() { return leftreleased; } virtual bool getRightReleased() { return rightreleased; } virtual void resetLeftReleased() { leftreleased = false; } virtual void resetRightReleased() { rightreleased = false; } virtual s32 getMouseWheel() { return 0; } virtual void step(float dtime) { { static float counter1 = 0; counter1 -= dtime; if (counter1 < 0.0) { counter1 = 0.1 * Rand(1, 40); keydown.toggle(getKeySetting("keymap_jump")); } } { static float counter1 = 0; counter1 -= dtime; if (counter1 < 0.0) { counter1 = 0.1 * Rand(1, 40); keydown.toggle(getKeySetting("keymap_special1")); } } { static float counter1 = 0; counter1 -= dtime; if (counter1 < 0.0) { counter1 = 0.1 * Rand(1, 40); keydown.toggle(getKeySetting("keymap_forward")); } } { static float counter1 = 0; counter1 -= dtime; if (counter1 < 0.0) { counter1 = 0.1 * Rand(1, 40); keydown.toggle(getKeySetting("keymap_left")); } } { static float counter1 = 0; counter1 -= dtime; if (counter1 < 0.0) { counter1 = 0.1 * Rand(1, 20); mousespeed = v2s32(Rand(-20, 20), Rand(-15, 20)); } } { static float counter1 = 0; counter1 -= dtime; if (counter1 < 0.0) { counter1 = 0.1 * Rand(1, 30); leftdown = !leftdown; if (leftdown) leftclicked = true; if (!leftdown) leftreleased = true; } } { static float counter1 = 0; counter1 -= dtime; if (counter1 < 0.0) { counter1 = 0.1 * Rand(1, 15); rightdown = !rightdown; if (rightdown) rightclicked = true; if (!rightdown) rightreleased = true; } } mousepos += mousespeed; } s32 Rand(s32 min, s32 max) { return (myrand()%(max-min+1))+min; } private: KeyList keydown; v2s32 mousepos; v2s32 mousespeed; bool leftdown; bool rightdown; bool leftclicked; bool rightclicked; bool leftreleased; bool rightreleased; }; #endif