X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fgame.cpp;h=588a0fef34cd1dbc43094b754d4b0a8807914dcc;hb=13358c29b8a754709c49b0ba997f029af26134bc;hp=42863ff3749a5c067193a434d91505d9a4359e54;hpb=d2b1210376f6cc52fe031ac41d3bf54720ebd356;p=oweals%2Fminetest.git diff --git a/src/game.cpp b/src/game.cpp index 42863ff37..588a0fef3 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -36,6 +36,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "guiChatConsole.h" #include "config.h" #include "clouds.h" +#include "particles.h" #include "camera.h" #include "farmesh.h" #include "mapblock.h" @@ -118,13 +119,20 @@ struct TextDestPlayerInventory : public TextDest TextDestPlayerInventory(Client *client) { m_client = client; + m_formname = ""; + } + TextDestPlayerInventory(Client *client, std::string formname) + { + m_client = client; + m_formname = formname; } void gotText(std::map fields) { - m_client->sendInventoryFields("", fields); + m_client->sendInventoryFields(m_formname, fields); } Client *m_client; + std::string m_formname; }; /* Respawn menu callback */ @@ -1310,6 +1318,9 @@ void the_game( float damage_flash = 0; s16 farmesh_range = 20*MAP_BLOCKSIZE; + float jump_timer = 0; + bool reset_jump_timer = false; + const float object_hit_delay = 0.2; float object_hit_delay_timer = 0.0; float time_from_last_punch = 10; @@ -1335,6 +1346,8 @@ void the_game( float time_of_day = 0; float time_of_day_smooth = 0; + float repeat_rightclick_timer = 0; + /* Shader constants */ @@ -1590,6 +1603,10 @@ void the_game( // Input handler step() (used by the random input generator) input->step(dtime); + // Increase timer for doubleclick of "jump" + if(g_settings->getBool("doubletap_jump") && jump_timer <= 0.2) + jump_timer += dtime; + /* Launch menus and trigger stuff according to keys */ @@ -1679,6 +1696,27 @@ void the_game( statustext += L" (note: no 'fly' privilege)"; } } + else if(input->wasKeyDown(getKeySetting("keymap_jump"))) + { + if(g_settings->getBool("doubletap_jump") && jump_timer < 0.2) + { + if(g_settings->getBool("free_move")) + { + g_settings->set("free_move","false"); + statustext = L"free_move disabled"; + statustext_time = 0; + } + else + { + g_settings->set("free_move","true"); + statustext = L"free_move enabled"; + statustext_time = 0; + if(!client.checkPrivilege("fly")) + statustext += L" (note: no 'fly' privilege)"; + } + } + reset_jump_timer = true; + } else if(input->wasKeyDown(getKeySetting("keymap_fastmove"))) { if(g_settings->getBool("fast_move")) @@ -1841,6 +1879,13 @@ void the_game( statustext_time = 0; } + // Reset jump_timer + if(!input->isKeyDown(getKeySetting("keymap_jump")) && reset_jump_timer) + { + reset_jump_timer = false; + jump_timer = 0.0; + } + // Handle QuicktuneShortcutter if(input->wasKeyDown(getKeySetting("keymap_quicktune_next"))) quicktune.next(); @@ -2055,7 +2100,8 @@ void the_game( { break; } - else if(event.type == CE_PLAYER_DAMAGE) + else if(event.type == CE_PLAYER_DAMAGE && + client.getHP() != 0) { //u16 damage = event.player_damage.amount; //infostream<<"Player damage: "<setFormSource(current_formspec); + menu->setTextDest(new TextDestPlayerInventory(&client,*(event.show_formspec.formname))); menu->drop(); } else @@ -2125,6 +2172,7 @@ void the_game( current_formspec->setForm(*(event.show_formspec.formspec)); } delete(event.show_formspec.formspec); + delete(event.show_formspec.formname); } else if(event.type == CE_TEXTURES_UPDATED) { @@ -2266,6 +2314,11 @@ void the_game( bool left_punch = false; soundmaker.m_player_leftpunch_sound.name = ""; + if(input->getRightState()) + repeat_rightclick_timer += dtime; + else + repeat_rightclick_timer = 0; + if(playeritem_usable && input->getLeftState()) { if(input->getLeftClicked()) @@ -2349,6 +2402,13 @@ void the_game( else { dig_time_complete = params.time; + if (g_settings->getBool("enable_particles")) + { + const ContentFeatures &features = + client.getNodeDefManager()->get(n); + addPunchingParticles + (gamedef, smgr, player, nodepos, features.tiles); + } } if(dig_time_complete >= 0.001) @@ -2380,6 +2440,14 @@ void the_game( MapNode wasnode = map.getNode(nodepos); client.removeNode(nodepos); + if (g_settings->getBool("enable_particles")) + { + const ContentFeatures &features = + client.getNodeDefManager()->get(wasnode); + addDiggingParticles + (gamedef, smgr, player, nodepos, features.tiles); + } + dig_time = 0; digging = false; @@ -2406,8 +2474,10 @@ void the_game( camera.setDigging(0); // left click animation } - if(input->getRightClicked()) + if(input->getRightClicked() || + repeat_rightclick_timer >= g_settings->getFloat("repeat_rightclick_time")) { + repeat_rightclick_timer = 0; infostream<<"Ground right-clicked"<update(v2f(player_position.X, player_position.Z), brightness, farmesh_range); } + + /* + Update particles + */ + + allparticles_step(dtime, client.getEnv()); /* Fog