diff options
Diffstat (limited to 'src/materials.cpp')
-rw-r--r-- | src/materials.cpp | 159 |
1 files changed, 0 insertions, 159 deletions
diff --git a/src/materials.cpp b/src/materials.cpp deleted file mode 100644 index c37b7c505..000000000 --- a/src/materials.cpp +++ /dev/null @@ -1,159 +0,0 @@ -/* -Minetest-c55 -Copyright (C) 2011 celeron55, Perttu Ahola <celeron55@gmail.com> - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ - -#include "materials.h" -#include "utility.h" - -void MaterialProperties::serialize(std::ostream &os) -{ - writeU8(os, 0); // version - writeU8(os, diggability); - writeF1000(os, constant_time); - writeF1000(os, weight); - writeF1000(os, crackiness); - writeF1000(os, crumbliness); - writeF1000(os, cuttability); - writeF1000(os, flammability); -} - -void MaterialProperties::deSerialize(std::istream &is) -{ - int version = readU8(is); - if(version != 0) - throw SerializationError("unsupported MaterialProperties version"); - diggability = (enum Diggability)readU8(is); - constant_time = readF1000(is); - weight = readF1000(is); - crackiness = readF1000(is); - crumbliness = readF1000(is); - cuttability = readF1000(is); - flammability = readF1000(is); -} - -ToolDiggingProperties::ToolDiggingProperties(float full_punch_interval_, - float a, float b, float c, float d, float e, - float f, float g, float h, float i, float j): - full_punch_interval(full_punch_interval_), - basetime(a), - dt_weight(b), - dt_crackiness(c), - dt_crumbliness(d), - dt_cuttability(e), - basedurability(f), - dd_weight(g), - dd_crackiness(h), - dd_crumbliness(i), - dd_cuttability(j) -{} - -void ToolDiggingProperties::serialize(std::ostream &os) -{ - writeU8(os, 0); // version - writeF1000(os, full_punch_interval); - writeF1000(os, basetime); - writeF1000(os, dt_weight); - writeF1000(os, dt_crackiness); - writeF1000(os, dt_crumbliness); - writeF1000(os, dt_cuttability); - writeF1000(os, basedurability); - writeF1000(os, dd_weight); - writeF1000(os, dd_crackiness); - writeF1000(os, dd_crumbliness); - writeF1000(os, dd_cuttability); -} - -void ToolDiggingProperties::deSerialize(std::istream &is) -{ - int version = readU8(is); - if(version != 0) throw SerializationError( - "unsupported ToolDiggingProperties version"); - full_punch_interval = readF1000(is); - basetime = readF1000(is); - dt_weight = readF1000(is); - dt_crackiness = readF1000(is); - dt_crumbliness = readF1000(is); - dt_cuttability = readF1000(is); - basedurability = readF1000(is); - dd_weight = readF1000(is); - dd_crackiness = readF1000(is); - dd_crumbliness = readF1000(is); - dd_cuttability = readF1000(is); -} - -DiggingProperties getDiggingProperties(const MaterialProperties *mp, - const ToolDiggingProperties *tp, float time_from_last_punch) -{ - if(mp->diggability == DIGGABLE_NOT) - return DiggingProperties(false, 0, 0); - if(mp->diggability == DIGGABLE_CONSTANT) - return DiggingProperties(true, mp->constant_time, 0); - - float time = tp->basetime; - time += tp->dt_weight * mp->weight; - time += tp->dt_crackiness * mp->crackiness; - time += tp->dt_crumbliness * mp->crumbliness; - time += tp->dt_cuttability * mp->cuttability; - if(time < 0.2) - time = 0.2; - - float durability = tp->basedurability; - durability += tp->dd_weight * mp->weight; - durability += tp->dd_crackiness * mp->crackiness; - durability += tp->dd_crumbliness * mp->crumbliness; - durability += tp->dd_cuttability * mp->cuttability; - if(durability < 1) - durability = 1; - - if(time_from_last_punch < tp->full_punch_interval){ - float f = time_from_last_punch / tp->full_punch_interval; - time /= f; - durability /= f; - } - - float wear = 1.0 / durability; - u16 wear_i = 65535.*wear; - return DiggingProperties(true, time, wear_i); -} - -DiggingProperties getDiggingProperties(const MaterialProperties *mp, - const ToolDiggingProperties *tp) -{ - return getDiggingProperties(mp, tp, 1000000); -} - -HittingProperties getHittingProperties(const MaterialProperties *mp, - const ToolDiggingProperties *tp, float time_from_last_punch) -{ - DiggingProperties digprop = getDiggingProperties(mp, tp, - time_from_last_punch); - - // If digging time would be 1 second, 2 hearts go in 1 second. - s16 hp = 2.0 * 2.0 / digprop.time; - // Wear is the same as for digging a single node - s16 wear = (float)digprop.wear; - - return HittingProperties(hp, wear); -} - -HittingProperties getHittingProperties(const MaterialProperties *mp, - const ToolDiggingProperties *tp) -{ - return getHittingProperties(mp, tp, 1000000); -} - |