Skip to content

Commit

Permalink
[CSM] Add on_death, on_hp_modification & oh_damage_taken callbacks (#…
Browse files Browse the repository at this point in the history
…5093)

* Add on_death callback
* Add on_hp_modification & on_damage_taken callbacks
* move preview code to preview.lua
  • Loading branch information
nerzhul committed Mar 13, 2017
1 parent cb3a61f commit 9978f5a
Show file tree
Hide file tree
Showing 8 changed files with 76 additions and 18 deletions.
17 changes: 3 additions & 14 deletions builtin/client/init.lua
Expand Up @@ -3,20 +3,9 @@ local scriptpath = core.get_builtin_path()..DIR_DELIM
local clientpath = scriptpath.."client"..DIR_DELIM

dofile(clientpath .. "register.lua")
dofile(clientpath .. "preview.lua")

-- This is an example function to ensure it's working properly, should be removed before merge
core.register_on_shutdown(function()
print("shutdown client")
core.register_on_death(function()
core.display_chat_message("You died.")
end)

-- This is an example function to ensure it's working properly, should be removed before merge
core.register_on_receiving_chat_messages(function(message)
print("Received message " .. message)
return false
end)

-- This is an example function to ensure it's working properly, should be removed before merge
core.register_on_sending_chat_messages(function(message)
print("Sending message " .. message)
return false
end)
24 changes: 24 additions & 0 deletions builtin/client/preview.lua
@@ -0,0 +1,24 @@
-- This is an example function to ensure it's working properly, should be removed before merge
core.register_on_shutdown(function()
print("shutdown client")
end)

-- This is an example function to ensure it's working properly, should be removed before merge
core.register_on_receiving_chat_messages(function(message)
print("[PREVIEW] Received message " .. message)
return false
end)

-- This is an example function to ensure it's working properly, should be removed before merge
core.register_on_sending_chat_messages(function(message)
print("[PREVIEW] Sending message " .. message)
return false
end)

core.register_on_hp_modification(function(hp)
print("[PREVIEW] HP modified " .. hp)
end)

core.register_on_damage_taken(function(hp)
print("[PREVIEW] Damage taken " .. hp)
end)
3 changes: 3 additions & 0 deletions builtin/client/register.lua
Expand Up @@ -58,5 +58,8 @@ end
core.registered_on_shutdown, core.register_on_shutdown = make_registration()
core.registered_on_receiving_chat_messages, core.register_on_receiving_chat_messages = make_registration()
core.registered_on_sending_chat_messages, core.register_on_sending_chat_messages = make_registration()
core.registered_on_death, core.register_on_death = make_registration()
core.registered_on_hp_modification, core.register_on_hp_modification = make_registration()
core.registered_on_damage_taken, core.register_on_damage_taken = make_registration()


2 changes: 2 additions & 0 deletions src/client.h
Expand Up @@ -562,6 +562,8 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
m_chat_queue.push(input);
}

ClientScripting *getScript() { return m_script; }

private:

// Virtual methods from con::PeerHandler
Expand Down
7 changes: 3 additions & 4 deletions src/game.cpp
Expand Up @@ -41,7 +41,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "guiKeyChangeMenu.h"
#include "guiPasswordChange.h"
#include "guiVolumeChange.h"
#include "hud.h"
#include "mainmenumanager.h"
#include "mapblock.h"
#include "nodedef.h" // Needed for determining pointing to nodes
Expand All @@ -61,6 +60,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "version.h"
#include "minimap.h"
#include "mapblock_mesh.h"
#include "script/clientscripting.h"

#include "sound.h"

Expand Down Expand Up @@ -3240,8 +3240,7 @@ void Game::processClientEvents(CameraOrientation *cam, float *damage_flash)

if (event.type == CE_PLAYER_DAMAGE &&
client->getHP() != 0) {
//u16 damage = event.player_damage.amount;
//infostream<<"Player damage: "<<damage<<std::endl;
client->getScript()->on_damage_taken(event.player_damage.amount);

*damage_flash += 95.0 + 3.2 * event.player_damage.amount;
*damage_flash = MYMIN(*damage_flash, 127.0);
Expand All @@ -3259,7 +3258,7 @@ void Game::processClientEvents(CameraOrientation *cam, float *damage_flash)
show_deathscreen(&current_formspec, client, texture_src,
device, &input->joystick);

chat_backend->addMessage(L"", L"You died.");
client->getScript()->on_death();

/* Handle visualization */
*damage_flash = 0;
Expand Down
2 changes: 2 additions & 0 deletions src/network/clientpackethandler.cpp
Expand Up @@ -526,6 +526,8 @@ void Client::handleCommand_HP(NetworkPacket* pkt)

player->hp = hp;

m_script->on_hp_modification(hp);

if (hp < oldhp) {
// Add to ClientEvent queue
ClientEvent event;
Expand Down
35 changes: 35 additions & 0 deletions src/script/cpp_api/s_client.cpp
Expand Up @@ -59,3 +59,38 @@ bool ScriptApiClient::on_receiving_message(const std::string &message)
bool ate = lua_toboolean(L, -1);
return ate;
}

void ScriptApiClient::on_damage_taken(int32_t damage_amount)
{
SCRIPTAPI_PRECHECKHEADER

// Get core.registered_on_chat_messages
lua_getglobal(L, "core");
lua_getfield(L, -1, "registered_on_damage_taken");
// Call callbacks
lua_pushinteger(L, damage_amount);
runCallbacks(1, RUN_CALLBACKS_MODE_OR_SC);
}

void ScriptApiClient::on_hp_modification(int32_t newhp)
{
SCRIPTAPI_PRECHECKHEADER

// Get core.registered_on_chat_messages
lua_getglobal(L, "core");
lua_getfield(L, -1, "registered_on_hp_modification");
// Call callbacks
lua_pushinteger(L, newhp);
runCallbacks(1, RUN_CALLBACKS_MODE_OR_SC);
}

void ScriptApiClient::on_death()
{
SCRIPTAPI_PRECHECKHEADER

// Get registered shutdown hooks
lua_getglobal(L, "core");
lua_getfield(L, -1, "registered_on_death");
// Call callbacks
runCallbacks(0, RUN_CALLBACKS_MODE_FIRST);
}
4 changes: 4 additions & 0 deletions src/script/cpp_api/s_client.h
Expand Up @@ -32,5 +32,9 @@ class ScriptApiClient: virtual public ScriptApiBase
// Chat message handlers
bool on_sending_message(const std::string &message);
bool on_receiving_message(const std::string &message);

void on_damage_taken(int32_t damage_amount);
void on_hp_modification(int32_t newhp);
void on_death();
};
#endif

0 comments on commit 9978f5a

Please sign in to comment.