mirror of
https://github.com/minetest/minetest.git
synced 2024-12-28 08:57:30 +01:00
Disable fall damage when "immortal" group set (#6946)
This commit is contained in:
parent
04e5a65c65
commit
62c10e3d08
@ -32,6 +32,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
#include "raycast.h"
|
||||
#include "voxelalgorithms.h"
|
||||
#include "settings.h"
|
||||
#include "content_cao.h"
|
||||
#include <algorithm>
|
||||
#include "client/renderingengine.h"
|
||||
|
||||
@ -207,6 +208,8 @@ void ClientEnvironment::step(float dtime)
|
||||
|
||||
//std::cout<<"Looped "<<loopcount<<" times."<<std::endl;
|
||||
|
||||
bool player_immortal = lplayer->getCAO() && lplayer->getCAO()->isImmortal();
|
||||
|
||||
for (const CollisionInfo &info : player_collisions) {
|
||||
v3f speed_diff = info.new_speed - info.old_speed;;
|
||||
// Handle only fall damage
|
||||
@ -227,7 +230,7 @@ void ClientEnvironment::step(float dtime)
|
||||
pre_factor = 1.0 + (float)addp/100.0;
|
||||
}
|
||||
float speed = pre_factor * speed_diff.getLength();
|
||||
if (speed > tolerance) {
|
||||
if (speed > tolerance && !player_immortal) {
|
||||
f32 damage_f = (speed - tolerance) / BS * post_factor;
|
||||
u8 damage = (u8)MYMIN(damage_f + 0.5, 255);
|
||||
if (damage != 0) {
|
||||
|
@ -360,6 +360,11 @@ v3f GenericCAO::getPosition()
|
||||
return pos_translator.vect_show;
|
||||
}
|
||||
|
||||
const bool GenericCAO::isImmortal()
|
||||
{
|
||||
return itemgroup_get(getGroups(), "immortal");
|
||||
}
|
||||
|
||||
scene::ISceneNode* GenericCAO::getSceneNode()
|
||||
{
|
||||
if (m_meshnode) {
|
||||
|
@ -124,7 +124,10 @@ public:
|
||||
{
|
||||
return ACTIVEOBJECT_TYPE_GENERIC;
|
||||
}
|
||||
|
||||
inline const ItemGroupList &getGroups() const
|
||||
{
|
||||
return m_armor_groups;
|
||||
}
|
||||
void initialize(const std::string &data);
|
||||
|
||||
void processInitData(const std::string &data);
|
||||
@ -143,6 +146,8 @@ public:
|
||||
return m_yaw;
|
||||
}
|
||||
|
||||
const bool isImmortal();
|
||||
|
||||
scene::ISceneNode *getSceneNode();
|
||||
|
||||
scene::IAnimatedMeshSceneNode *getAnimatedMeshSceneNode();
|
||||
|
Loading…
Reference in New Issue
Block a user