From 64996422c00ddb70cfc8aee7da7b62485b8b0416 Mon Sep 17 00:00:00 2001 From: Perttu Ahola Date: Sun, 13 Nov 2011 10:57:55 +0200 Subject: Move ContentFeatures to mapnode_contentfeatures.{h,cpp} and clean stuff --- src/mapnode_contentfeatures.cpp | 145 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 145 insertions(+) create mode 100644 src/mapnode_contentfeatures.cpp (limited to 'src/mapnode_contentfeatures.cpp') diff --git a/src/mapnode_contentfeatures.cpp b/src/mapnode_contentfeatures.cpp new file mode 100644 index 000000000..aeab713c5 --- /dev/null +++ b/src/mapnode_contentfeatures.cpp @@ -0,0 +1,145 @@ +/* +Minetest-c55 +Copyright (C) 2010 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 +(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 "mapnode_contentfeatures.h" + +#include "main.h" // For g_settings and g_texturesource +#include "nodemetadata.h" + +struct ContentFeatures g_content_features[MAX_CONTENT+1]; + +/* + Initialize content feature table. + + Must be called before accessing the table. +*/ +void init_contentfeatures() +{ +#ifndef SERVER + /* + Set initial material type to same in all tiles, so that the + same material can be used in more stuff. + This is set according to the leaves because they are the only + differing material to which all materials can be changed to + get this optimization. + */ + u8 initial_material_type = MATERIAL_ALPHA_SIMPLE; + /*if(new_style_leaves) + initial_material_type = MATERIAL_ALPHA_SIMPLE; + else + initial_material_type = MATERIAL_ALPHA_NONE;*/ + for(u16 i=0; ireset(); + + for(u16 j=0; j<6; j++) + f->tiles[j].material_type = initial_material_type; + } +#endif + + /* + Initially set every block to be shown as an unknown block. + Don't touch CONTENT_IGNORE or CONTENT_AIR. + */ + for(u16 i=0; isetAllTextures("unknown_block.png"); + f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1"; + } + + // Make CONTENT_IGNORE to not block the view when occlusion culling + content_features(CONTENT_IGNORE).solidness = 0; + +} + +ContentFeatures::~ContentFeatures() +{ + delete initial_metadata; +#ifndef SERVER + delete special_material; + delete special_atlas; +#endif +} + +#ifndef SERVER +void ContentFeatures::setTexture(u16 i, std::string name, u8 alpha) +{ + used_texturenames[name] = true; + + if(g_texturesource) + { + tiles[i].texture = g_texturesource->getTexture(name); + } + + if(alpha != 255) + { + tiles[i].alpha = alpha; + tiles[i].material_type = MATERIAL_ALPHA_VERTEX; + } + + if(inventory_texture == NULL) + setInventoryTexture(name); +} + +void ContentFeatures::setInventoryTexture(std::string imgname) +{ + if(g_texturesource == NULL) + return; + + imgname += "^[forcesingle"; + + inventory_texture = g_texturesource->getTextureRaw(imgname); +} + +void ContentFeatures::setInventoryTextureCube(std::string top, + std::string left, std::string right) +{ + if(g_texturesource == NULL) + return; + + str_replace_char(top, '^', '&'); + str_replace_char(left, '^', '&'); + str_replace_char(right, '^', '&'); + + std::string imgname_full; + imgname_full += "[inventorycube{"; + imgname_full += top; + imgname_full += "{"; + imgname_full += left; + imgname_full += "{"; + imgname_full += right; + inventory_texture = g_texturesource->getTextureRaw(imgname_full); +} +#endif + +ContentFeatures & content_features(content_t i) +{ + return g_content_features[i]; +} +ContentFeatures & content_features(MapNode &n) +{ + return content_features(n.getContent()); +} + + -- cgit v1.2.3