X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fnodedef.h;h=1f596e46baff75fc977e3bc3e5754b1e87c847da;hb=58e6d25e033c76dc91aaac18fdeda92ac23fe0e1;hp=2f2bfe46eb17040febd839f7fc8d1ac9e0d8081e;hpb=d0ea6f9920d30f46d1f5d44e8823a8d932f9f29d;p=oweals%2Fminetest.git diff --git a/src/nodedef.h b/src/nodedef.h index 2f2bfe46e..1f596e46b 100644 --- a/src/nodedef.h +++ b/src/nodedef.h @@ -1,6 +1,6 @@ /* -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 Lesser General Public License as published by @@ -20,13 +20,15 @@ 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" +#include "shader.h" #endif #include "itemgroup.h" #include "sound.h" // SimpleSoundSpec @@ -34,8 +36,11 @@ with this program; if not, write to the Free Software Foundation, Inc., class IItemDefManager; class ITextureSource; +class IShaderSource; class IGameDef; +typedef std::list > GroupItems; + enum ContentParamType { CPT_NONE, @@ -53,20 +58,23 @@ enum ContentParamType2 CPT2_FACEDIR, // Direction for signs, torches and such CPT2_WALLMOUNTED, + // Block level like FLOWINGLIQUID + CPT2_LEVELED, }; enum LiquidType { LIQUID_NONE, LIQUID_FLOWING, - LIQUID_SOURCE + LIQUID_SOURCE, }; 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) + NODEBOX_LEVELED, // Same as fixed, but with dynamic height from param2. for snow, ... }; struct NodeBox @@ -74,23 +82,17 @@ 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) - {} - - void serialize(std::ostream &os) const; + aabb3f wall_top; + aabb3f wall_bottom; + aabb3f wall_side; // being at the -X side + + NodeBox() + { reset(); } + + void reset(); + void serialize(std::ostream &os, u16 protocol_version) const; void deSerialize(std::istream &is); }; @@ -125,7 +127,7 @@ struct TileDef animation.length = 1.0; } - void serialize(std::ostream &os) const; + void serialize(std::ostream &os, u16 protocol_version) const; void deSerialize(std::istream &is); }; @@ -143,9 +145,13 @@ 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 +#define CF_SPECIAL_COUNT 6 struct ContentFeatures { @@ -204,6 +210,10 @@ struct ContentFeatures bool climbable; // Player can build on these bool buildable_to; + // Player cannot build to these (placement prediction disabled) + bool rightclickable; + // Flowing liquid or snow, value = default level + u8 leveled; // 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. @@ -214,10 +224,20 @@ 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; + // Ice for water, water for ice + std::string freezemelt; + // Number of flowing liquids surrounding source + u8 liquid_range; + u8 drowning; // Amount of light the node emits u8 light_source; u32 damage_per_second; + NodeBox node_box; NodeBox selection_box; + // Used for waving leaves/plants + u8 waving; // Compatibility with old maps // Set to true if paramtype used to be 'facedir_simple' bool legacy_facedir_simple; @@ -236,8 +256,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 @@ -266,7 +288,7 @@ public: 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 @@ -279,15 +301,14 @@ public: virtual const ContentFeatures& get(content_t c) const=0; virtual const ContentFeatures& get(const MapNode &n) const=0; virtual bool getId(const std::string &name, content_t &result) const=0; + // If not found, returns CONTENT_IGNORE 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 + // If not found, returns the features of CONTENT_UNKNOWN virtual const ContentFeatures& get(const std::string &name) const=0; - // Register node definition - virtual void set(content_t c, const ContentFeatures &def)=0; // Register node definition by name (allocate an id) // If returns CONTENT_IGNORE, could not allocate id virtual content_t set(const std::string &name, @@ -303,11 +324,11 @@ public: /* Update tile textures to latest return values of TextueSource. - Call after updating the texture atlas of a TextureSource. */ - virtual void updateTextures(ITextureSource *tsrc)=0; + virtual void updateTextures(ITextureSource *tsrc, + IShaderSource *shdsrc)=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; };