X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fnodedef.h;h=43bd1966d9673a8dcb3699fc7aefe4ff880a8cca;hb=eed727c61b51f46f6d172c56ecd26a3b1752d449;hp=f5662967bf1ef5f0662a73b8694ed6cf70002ebc;hpb=a48a0e77eb48a0afe8b2d66f3f5ea75e39b9d504;p=dragonfireclient.git diff --git a/src/nodedef.h b/src/nodedef.h index f5662967b..43bd1966d 100644 --- a/src/nodedef.h +++ b/src/nodedef.h @@ -22,6 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "common_irrlicht.h" #include +#include #include #include "mapnode.h" #ifndef SERVER @@ -29,6 +30,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #endif #include "materials.h" // MaterialProperties class ITextureSource; +class IGameDef; /* TODO: Rename to nodedef.h @@ -95,6 +97,9 @@ struct NodeBox 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); + void deSerialize(std::istream &is); }; struct MapNode; @@ -109,48 +114,76 @@ struct MaterialSpec tname(tname_), backface_culling(backface_culling_) {} + + void serialize(std::ostream &os); + void deSerialize(std::istream &is); +}; + +enum NodeDrawType +{ + NDT_NORMAL, // A basic solid block + NDT_AIRLIKE, // Nothing is drawn + NDT_LIQUID, // Do not draw face towards same kind of flowing/source liquid + NDT_FLOWINGLIQUID, // A very special kind of thing + NDT_GLASSLIKE, // Glass-like, don't draw faces towards other glass + NDT_ALLFACES, // Leaves-like, draw all faces no matter what + NDT_ALLFACES_OPTIONAL, // Fancy -> allfaces, fast -> normal + NDT_TORCHLIKE, + NDT_SIGNLIKE, + NDT_PLANTLIKE, + NDT_FENCELIKE, + NDT_RAILLIKE, }; #define CF_SPECIAL_COUNT 2 struct ContentFeatures { + /* + Cached stuff + */ #ifndef SERVER // 0 1 2 3 4 5 // up down right left back front TileSpec tiles[6]; - video::ITexture *inventory_texture; - - // Post effect color, drawn when the camera is inside the node. - video::SColor post_effect_color; - // Special material/texture // - Currently used for flowing liquids video::SMaterial *special_materials[CF_SPECIAL_COUNT]; AtlasPointer *special_aps[CF_SPECIAL_COUNT]; + u8 solidness; // Used when choosing which face is drawn + u8 visual_solidness; // When solidness=0, this tells how it looks like + bool backface_culling; #endif + // List of all block textures that have been used (value is dummy) + // Used for texture atlas making. + // Exists on server too for cleaner code in content_mapnode.cpp. + std::set used_texturenames; + + // True if this actually contains non-default data + bool modified; + + /* + Actual data + */ + // Visual definition + enum NodeDrawType drawtype; + float visual_scale; // Misc. scale parameter std::string tname_tiles[6]; std::string tname_inventory; MaterialSpec mspec_special[CF_SPECIAL_COUNT]; u8 alpha; - bool backface_culling; - // List of all block textures that have been used (value is dummy) - // Used for texture atlas making. - // Exists on server too for cleaner code in content_mapnode.cpp. - std::set used_texturenames; - + // Post effect color, drawn when the camera is inside the node. + video::SColor post_effect_color; // Type of MapNode::param1 ContentParamType param_type; // True for all ground-like things like stone and mud, false for eg. trees bool is_ground_content; bool light_propagates; bool sunlight_propagates; - u8 solidness; // Used when choosing which face is drawn - u8 visual_solidness; // When solidness=0, this tells how it looks like // This is used for collision detection. // Also for general solidness queries. bool walkable; @@ -172,18 +205,14 @@ struct ContentFeatures // Used for texture atlas creation. // Currently only enabled for CONTENT_STONE. bool often_contains_mineral; - // Inventory item string as which the node appears in inventory when dug. // Mineral overrides this. std::string dug_item; - // Extra dug item and its rarity std::string extra_dug_item; s32 extra_dug_item_rarity; - // Initial metadata is cloned from this NodeMetadata *initial_metadata; - // 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. @@ -194,72 +223,22 @@ struct ContentFeatures // 1 giving almost instantaneous propagation and 7 being // the slowest possible u8 liquid_viscosity; - // Amount of light the node emits u8 light_source; - u32 damage_per_second; - NodeBox selection_box; - MaterialProperties material; - - // NOTE: Move relevant properties to here from elsewhere - void reset() - { - // This isn't exactly complete due to lazyness - // TODO: Make it completely reset everything -#ifndef SERVER - inventory_texture = NULL; - - post_effect_color = video::SColor(0, 0, 0, 0); - for(u16 j=0; j