X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fnodedef.h;h=2691aca33eb59376bec13174eb465639310479b6;hb=d5ca3b721e049fc4f59718a55c932a06533d4b3c;hp=a7ffa5a2ee44073969a7785b018f0783b4e43bd8;hpb=06e93f8d9508a23e86751dfae2f6a7e550d8e1af;p=dragonfireclient.git diff --git a/src/nodedef.h b/src/nodedef.h index a7ffa5a2e..2691aca33 100644 --- a/src/nodedef.h +++ b/src/nodedef.h @@ -1,18 +1,18 @@ /* -Minetest-c55 -Copyright (C) 2010-2011 celeron55, Perttu Ahola +Minetest +Copyright (C) 2010-2013 celeron55, Perttu Ahola 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 +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 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. +GNU Lesser General Public License for more details. -You should have received a copy of the GNU General Public License along +You should have received a copy of the GNU Lesser 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. */ @@ -20,20 +20,25 @@ with this program; if not, write to the Free Software Foundation, Inc., #ifndef NODEDEF_HEADER #define NODEDEF_HEADER -#include "irrlichttypes.h" +#include "irrlichttypes_bloated.h" #include #include #include +#include #include "mapnode.h" #ifndef SERVER #include "tile.h" #endif #include "itemgroup.h" #include "sound.h" // SimpleSoundSpec +#include "constants.h" // BS + class IItemDefManager; class ITextureSource; class IGameDef; +typedef std::list > GroupItems; + enum ContentParamType { CPT_NONE, @@ -63,7 +68,7 @@ enum LiquidType enum NodeBoxType { NODEBOX_REGULAR, // Regular block; allows buildable_to - NODEBOX_FIXED, // Static separately defined box + NODEBOX_FIXED, // Static separately defined box(es) NODEBOX_WALLMOUNTED, // Box for wall mounted nodes; (top, bottom, side) }; @@ -72,22 +77,16 @@ struct NodeBox enum NodeBoxType type; // NODEBOX_REGULAR (no parameters) // NODEBOX_FIXED - core::aabbox3d fixed; + std::vector fixed; // NODEBOX_WALLMOUNTED - core::aabbox3d wall_top; - core::aabbox3d wall_bottom; - core::aabbox3d wall_side; // being at the -X side - - NodeBox(): - type(NODEBOX_REGULAR), - // default is rail-like - fixed(-BS/2, -BS/2, -BS/2, BS/2, -BS/2+BS/16., BS/2), - // default is sign/ladder-like - wall_top(-BS/2, BS/2-BS/16., -BS/2, BS/2, BS/2, BS/2), - wall_bottom(-BS/2, -BS/2, -BS/2, BS/2, -BS/2+BS/16., BS/2), - wall_side(-BS/2, -BS/2, -BS/2, -BS/2+BS/16., BS/2, BS/2) - {} + aabb3f wall_top; + aabb3f wall_bottom; + aabb3f wall_side; // being at the -X side + + NodeBox() + { reset(); } + void reset(); void serialize(std::ostream &os) const; void deSerialize(std::istream &is); }; @@ -95,17 +94,35 @@ struct NodeBox struct MapNode; class NodeMetadata; -struct MaterialSpec +/* + Stand-alone definition of a TileSpec (basically a server-side TileSpec) +*/ +enum TileAnimationType{ + TAT_NONE=0, + TAT_VERTICAL_FRAMES=1, +}; +struct TileDef { - std::string tname; - bool backface_culling; - - MaterialSpec(const std::string &tname_="", bool backface_culling_=true): - tname(tname_), - backface_culling(backface_culling_) - {} + std::string name; + bool backface_culling; // Takes effect only in special cases + struct{ + enum TileAnimationType type; + int aspect_w; // width for aspect ratio + int aspect_h; // height for aspect ratio + float length; // seconds + } animation; + + TileDef() + { + name = ""; + backface_culling = true; + animation.type = TAT_NONE; + animation.aspect_w = 1; + animation.aspect_h = 1; + animation.length = 1.0; + } - void serialize(std::ostream &os) const; + void serialize(std::ostream &os, u16 protocol_version) const; void deSerialize(std::istream &is); }; @@ -123,6 +140,10 @@ enum NodeDrawType NDT_PLANTLIKE, NDT_FENCELIKE, NDT_RAILLIKE, + NDT_NODEBOX, + NDT_GLASSLIKE_FRAMED, // Glass-like, draw connected frames and all all + // visible faces + // uses 2 textures, one for frames, second for faces }; #define CF_SPECIAL_COUNT 2 @@ -144,6 +165,11 @@ struct ContentFeatures bool backface_culling; #endif + // Server-side cached callback existence for fast skipping + bool has_on_construct; + bool has_on_destruct; + bool has_after_destruct; + /* Actual data */ @@ -154,8 +180,8 @@ struct ContentFeatures // Visual definition enum NodeDrawType drawtype; float visual_scale; // Misc. scale parameter - std::string tname_tiles[6]; - MaterialSpec mspec_special[CF_SPECIAL_COUNT]; // Use setter methods + TileDef tiledef[6]; + TileDef tiledef_special[CF_SPECIAL_COUNT]; // eg. flowing liquid u8 alpha; // Post effect color, drawn when the camera is inside the node. @@ -179,8 +205,8 @@ struct ContentFeatures bool climbable; // Player can build on these bool buildable_to; - // Metadata name of node (eg. "furnace") - std::string metadata_name; + // Player cannot build to these (placement prediction disabled) + bool rightclickable; // Whether the node is non-liquid, source liquid or flowing liquid enum LiquidType liquid_type; // If the content is liquid, this is the flowing version of the liquid. @@ -191,9 +217,12 @@ struct ContentFeatures // 1 giving almost instantaneous propagation and 7 being // the slowest possible u8 liquid_viscosity; + // Is liquid renewable (new liquid source will be created between 2 existing) + bool liquid_renewable; // Amount of light the node emits u8 light_source; u32 damage_per_second; + NodeBox node_box; NodeBox selection_box; // Compatibility with old maps // Set to true if paramtype used to be 'facedir_simple' @@ -213,8 +242,10 @@ struct ContentFeatures ContentFeatures(); ~ContentFeatures(); void reset(); - void serialize(std::ostream &os); + void serialize(std::ostream &os, u16 protocol_version); void deSerialize(std::istream &is); + void serializeOld(std::ostream &os, u16 protocol_version); + void deSerializeOld(std::istream &is, int version); /* Some handy methods @@ -238,9 +269,12 @@ class INodeDefManager virtual const ContentFeatures& get(const MapNode &n) const=0; virtual bool getId(const std::string &name, content_t &result) const=0; virtual content_t getId(const std::string &name) const=0; + // Allows "group:name" in addition to regular node names + virtual void getIds(const std::string &name, std::set &result) + const=0; virtual const ContentFeatures& get(const std::string &name) const=0; - virtual void serialize(std::ostream &os)=0; + virtual void serialize(std::ostream &os, u16 protocol_version)=0; }; class IWritableNodeDefManager : public INodeDefManager @@ -254,6 +288,9 @@ class IWritableNodeDefManager : public INodeDefManager virtual const ContentFeatures& get(const MapNode &n) const=0; virtual bool getId(const std::string &name, content_t &result) const=0; virtual content_t getId(const std::string &name) const=0; + // Allows "group:name" in addition to regular node names + virtual void getIds(const std::string &name, std::set &result) + const=0; // If not found, returns the features of CONTENT_IGNORE virtual const ContentFeatures& get(const std::string &name) const=0; @@ -278,7 +315,7 @@ class IWritableNodeDefManager : public INodeDefManager */ virtual void updateTextures(ITextureSource *tsrc)=0; - virtual void serialize(std::ostream &os)=0; + virtual void serialize(std::ostream &os, u16 protocol_version)=0; virtual void deSerialize(std::istream &is)=0; };