forked from Mirrorlandia_minetest/minetest
new texture stuff quite working
This commit is contained in:
parent
841ac10e5c
commit
804b2647ce
@ -57,6 +57,7 @@
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="wsock32.lib"
|
||||
AdditionalLibraryDirectories=""..\irrlicht\irrlicht-1.7.1\lib\Win32-visualstudio";..\zlib125dll\dll32"
|
||||
IgnoreAllDefaultLibraries="false"
|
||||
GenerateDebugInformation="true"
|
||||
@ -136,6 +137,7 @@
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="wsock32.lib"
|
||||
AdditionalLibraryDirectories=""..\irrlicht\irrlicht-1.7.1\lib\Win32-visualstudio";..\zlib125dll\dll32"
|
||||
IgnoreDefaultLibraryNames="libcmtd.dll"
|
||||
GenerateDebugInformation="false"
|
||||
|
@ -10,9 +10,11 @@ add_definitions ( -DUSE_CMAKE_CONFIG_H )
|
||||
|
||||
if(WIN32)
|
||||
# Windows
|
||||
if(MSVC)
|
||||
if(MSVC) # MSVC Specifics
|
||||
# Surpress some useless warnings
|
||||
add_definitions ( /D "_CRT_SECURE_NO_DEPRECATE" /W1 )
|
||||
else() # Probably MinGW = GCC
|
||||
set(PLATFORM_LIBS ws2_32.lib)
|
||||
endif()
|
||||
# Zlib stuff
|
||||
set(ZLIB_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/../../zlib/zlib-1.2.5"
|
||||
|
@ -33,7 +33,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
#ifdef _WIN32
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <windows.h>
|
||||
#include <eh.h>
|
||||
#ifdef _MSC_VER
|
||||
#include <eh.h>
|
||||
#endif
|
||||
#else
|
||||
#endif
|
||||
|
||||
|
@ -122,8 +122,7 @@ public:
|
||||
#ifndef SERVER
|
||||
video::ITexture * getImage()
|
||||
{
|
||||
//TODO
|
||||
//return g_irrlicht->getTexture(content_features(m_content).inventory_texture);
|
||||
return content_features(m_content).inventory_texture;
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
@ -249,6 +248,9 @@ public:
|
||||
#ifndef SERVER
|
||||
video::ITexture * getImage()
|
||||
{
|
||||
if(g_texturesource == NULL)
|
||||
return NULL;
|
||||
|
||||
std::string name;
|
||||
|
||||
if(m_subname == "Stick")
|
||||
@ -262,8 +264,7 @@ public:
|
||||
|
||||
// Get such a texture
|
||||
//return g_irrlicht->getTexture(name);
|
||||
//TODO
|
||||
return NULL;
|
||||
return g_texturesource->getTextureRaw(name);
|
||||
}
|
||||
#endif
|
||||
std::string getText()
|
||||
@ -329,6 +330,9 @@ public:
|
||||
#ifndef SERVER
|
||||
video::ITexture * getImage()
|
||||
{
|
||||
if(g_texturesource == NULL)
|
||||
return NULL;
|
||||
|
||||
std::string basename;
|
||||
if(m_toolname == "WPick")
|
||||
basename = "tool_wpick.png";
|
||||
@ -348,31 +352,14 @@ public:
|
||||
|
||||
float value_f = (float)toolprogress / (float)maxprogress;
|
||||
std::ostringstream os;
|
||||
os<<"[progressbar"<<value_f;
|
||||
os<<basename<<"^[progressbar"<<value_f;
|
||||
|
||||
return g_texturesource->getTextureRaw(os.str());
|
||||
|
||||
/*TextureSpec spec;
|
||||
spec.addTid(g_irrlicht->getTextureId(basename));
|
||||
spec.addTid(g_irrlicht->getTextureId(os.str()));
|
||||
return g_irrlicht->getTexture(spec);*/
|
||||
//TODO
|
||||
return NULL;
|
||||
|
||||
/*// Make texture name for the new texture with a progress bar
|
||||
float value_f = (float)toolprogress / (float)maxprogress;
|
||||
std::ostringstream os;
|
||||
os<<basename<<"[[mod:progressbar"<<value_f;
|
||||
return g_irrlicht->getTexture(os.str());*/
|
||||
|
||||
/*// Make texture name for the new texture with a progress bar
|
||||
std::ostringstream os;
|
||||
os<<basename<<"-toolprogress-"<<toolprogress;
|
||||
std::string finalname = os.str();
|
||||
|
||||
float value_f = (float)toolprogress / (float)maxprogress;
|
||||
|
||||
// Get such a texture
|
||||
TextureMod *mod = new ProgressBarTextureMod(value_f);
|
||||
return g_irrlicht->getTexture(TextureSpec(finalname, basename, mod));*/
|
||||
}
|
||||
#endif
|
||||
std::string getText()
|
||||
|
27
src/main.cpp
27
src/main.cpp
@ -267,9 +267,15 @@ Doing now (most important at the top):
|
||||
# maybe done
|
||||
* not done
|
||||
|
||||
=== Stuff being done
|
||||
=== Immediate stuff
|
||||
* Combine meshes to bigger ones in ClientMap and set them EHM_STATIC
|
||||
|
||||
=== Making it more portable
|
||||
* MinGW: Switch away from swprintf; mingw has a bad version of it.
|
||||
Use snprintf + narrow_to_wide or (w)ostringstream
|
||||
* Some MSVC: std::sto* are defined without a namespace and collide
|
||||
with the ones in utility.h
|
||||
|
||||
=== Stuff to do before release
|
||||
* Save the new mapgen stuff
|
||||
- map/meta.txt, which should contain only plain text, something like this:
|
||||
@ -331,12 +337,12 @@ Doing now (most important at the top):
|
||||
#endif
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma comment(lib, "Irrlicht.lib")
|
||||
//#pragma comment(lib, "jthread.lib")
|
||||
#pragma comment(lib, "zlibwapi.lib")
|
||||
#pragma comment(lib, "Shell32.lib")
|
||||
// This would get rid of the console window
|
||||
//#pragma comment(linker, "/subsystem:windows /ENTRY:mainCRTStartup")
|
||||
#pragma comment(lib, "Irrlicht.lib")
|
||||
//#pragma comment(lib, "jthread.lib")
|
||||
#pragma comment(lib, "zlibwapi.lib")
|
||||
#pragma comment(lib, "Shell32.lib")
|
||||
// This would get rid of the console window
|
||||
//#pragma comment(linker, "/subsystem:windows /ENTRY:mainCRTStartup")
|
||||
#endif
|
||||
|
||||
#include <iostream>
|
||||
@ -1548,9 +1554,8 @@ int main(int argc, char *argv[])
|
||||
These are needed for unit tests at least.
|
||||
*/
|
||||
|
||||
IIrrlichtWrapper irrlicht_dummy;
|
||||
|
||||
init_mapnode(&irrlicht_dummy);
|
||||
// Initial call with g_texturesource not set.
|
||||
init_mapnode();
|
||||
|
||||
/*
|
||||
Run unit tests
|
||||
@ -1716,7 +1721,7 @@ int main(int argc, char *argv[])
|
||||
*/
|
||||
|
||||
init_content_inventory_texture_paths();
|
||||
init_mapnode(g_irrlicht);
|
||||
init_mapnode(); // Second call with g_texturesource set
|
||||
init_mineral(g_irrlicht);
|
||||
|
||||
/*
|
||||
|
@ -341,20 +341,21 @@ TileSpec MapBlock::getNodeTile(MapNode mn, v3s16 p, v3s16 face_dir,
|
||||
Get texture id, translate it to name, append stuff to
|
||||
name, get texture id
|
||||
*/
|
||||
|
||||
// Get original texture name
|
||||
u32 orig_id = spec.texture.id;
|
||||
std::string orig_name = g_texturesource->getTextureName(orig_id);
|
||||
|
||||
// Create new texture name
|
||||
std::ostringstream os;
|
||||
os<<orig_name<<"^[crack"<<mod.param;
|
||||
//os<<orig_name<<"^[progressbar0.5";
|
||||
//os<<"mese.png";
|
||||
|
||||
// Get new texture
|
||||
u32 new_id = g_texturesource->getTextureId(os.str());
|
||||
|
||||
dstream<<"MapBlock::getNodeTile(): Switching from "
|
||||
/*dstream<<"MapBlock::getNodeTile(): Switching from "
|
||||
<<orig_name<<" to "<<os.str()<<" ("
|
||||
<<orig_id<<" to "<<new_id<<")"<<std::endl;
|
||||
<<orig_id<<" to "<<new_id<<")"<<std::endl;*/
|
||||
|
||||
spec.texture = g_texturesource->getTexture(new_id);
|
||||
}
|
||||
@ -864,20 +865,20 @@ void MapBlock::updateMesh(u32 daynight_ratio)
|
||||
//material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
|
||||
material.MaterialType
|
||||
= video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF;
|
||||
//TODO
|
||||
/*if(dir == v3s16(0,-1,0))
|
||||
|
||||
if(dir == v3s16(0,-1,0))
|
||||
material.setTexture(0,
|
||||
g_irrlicht->getTexture("torch_on_floor.png"));
|
||||
g_texturesource->getTextureRaw("torch_on_floor.png"));
|
||||
else if(dir == v3s16(0,1,0))
|
||||
material.setTexture(0,
|
||||
g_irrlicht->getTexture("torch_on_ceiling.png"));
|
||||
g_texturesource->getTextureRaw("torch_on_ceiling.png"));
|
||||
// For backwards compatibility
|
||||
else if(dir == v3s16(0,0,0))
|
||||
material.setTexture(0,
|
||||
g_irrlicht->getTexture("torch_on_floor.png"));
|
||||
g_texturesource->getTextureRaw("torch_on_floor.png"));
|
||||
else
|
||||
material.setTexture(0,
|
||||
g_irrlicht->getTexture("torch.png"));*/
|
||||
g_texturesource->getTextureRaw("torch.png"));
|
||||
|
||||
u16 indices[] = {0,1,2,2,3,0};
|
||||
// Add to mesh collector
|
||||
|
@ -44,6 +44,39 @@ void ContentFeatures::setTexture(u16 i, std::string name, u8 alpha)
|
||||
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);
|
||||
}
|
||||
|
||||
struct ContentFeatures g_content_features[256];
|
||||
@ -53,8 +86,24 @@ ContentFeatures & content_features(u8 i)
|
||||
return g_content_features[i];
|
||||
}
|
||||
|
||||
void init_mapnode(IIrrlichtWrapper *irrlicht)
|
||||
/*
|
||||
See mapnode.h for description.
|
||||
*/
|
||||
void init_mapnode()
|
||||
{
|
||||
if(g_texturesource == NULL)
|
||||
{
|
||||
dstream<<"INFO: Initial run of init_mapnode with "
|
||||
"g_texturesource=NULL. If this segfaults, "
|
||||
"there is a bug with something not checking for "
|
||||
"the NULL value."<<std::endl;
|
||||
}
|
||||
else
|
||||
{
|
||||
dstream<<"INFO: Full run of init_mapnode with "
|
||||
"g_texturesource!=NULL"<<std::endl;
|
||||
}
|
||||
|
||||
// Read some settings
|
||||
bool new_style_water = g_settings.getBool("new_style_water");
|
||||
bool new_style_leaves = g_settings.getBool("new_style_leaves");
|
||||
@ -88,6 +137,7 @@ void init_mapnode(IIrrlichtWrapper *irrlicht)
|
||||
i = CONTENT_STONE;
|
||||
f = &g_content_features[i];
|
||||
f->setAllTextures("stone.png");
|
||||
f->setInventoryTextureCube("stone.png", "stone.png", "stone.png");
|
||||
f->param_type = CPT_MINERAL;
|
||||
f->is_ground_content = true;
|
||||
|
||||
@ -96,13 +146,11 @@ void init_mapnode(IIrrlichtWrapper *irrlicht)
|
||||
f->setAllTextures("mud.png^grass_side.png");
|
||||
f->setTexture(0, "grass.png");
|
||||
f->setTexture(1, "mud.png");
|
||||
//f->setInventoryTexture(irrlicht->getTextureId("grass.png"));
|
||||
f->param_type = CPT_MINERAL;
|
||||
f->is_ground_content = true;
|
||||
|
||||
i = CONTENT_GRASS_FOOTSTEPS;
|
||||
f = &g_content_features[i];
|
||||
//f->setInventoryTexture(irrlicht->getTextureId("grass_footsteps.png"));
|
||||
f->setAllTextures("mud.png^grass_side.png");
|
||||
f->setTexture(0, "grass_footsteps.png");
|
||||
f->setTexture(1, "mud.png");
|
||||
@ -126,7 +174,6 @@ void init_mapnode(IIrrlichtWrapper *irrlicht)
|
||||
f->setAllTextures("tree.png");
|
||||
f->setTexture(0, "tree_top.png");
|
||||
f->setTexture(1, "tree_top.png");
|
||||
//f->setInventoryTexture(irrlicht->getTextureId("tree_top.png"));
|
||||
f->param_type = CPT_MINERAL;
|
||||
f->is_ground_content = true;
|
||||
|
||||
@ -148,26 +195,21 @@ void init_mapnode(IIrrlichtWrapper *irrlicht)
|
||||
i = CONTENT_COALSTONE;
|
||||
f = &g_content_features[i];
|
||||
//f->translate_to = new MapNode(CONTENT_STONE, MINERAL_COAL);
|
||||
/*f->setAllTextures(TextureSpec(irrlicht->getTextureId("coal.png"),
|
||||
irrlicht->getTextureId("mineral_coal.png")));*/
|
||||
f->setAllTextures("stone.png^mineral_coal.png");
|
||||
f->is_ground_content = true;
|
||||
|
||||
i = CONTENT_WOOD;
|
||||
f = &g_content_features[i];
|
||||
//f->setAllTextures(irrlicht->getTextureId("wood.png"));
|
||||
f->setAllTextures("wood.png");
|
||||
f->is_ground_content = true;
|
||||
|
||||
i = CONTENT_MESE;
|
||||
f = &g_content_features[i];
|
||||
//f->setAllTextures(irrlicht->getTextureId("mese.png"));
|
||||
f->setAllTextures("mese.png");
|
||||
f->is_ground_content = true;
|
||||
|
||||
i = CONTENT_CLOUD;
|
||||
f = &g_content_features[i];
|
||||
//f->setAllTextures(irrlicht->getTextureId("cloud.png"));
|
||||
f->setAllTextures("cloud.png");
|
||||
f->is_ground_content = true;
|
||||
|
||||
@ -184,7 +226,7 @@ void init_mapnode(IIrrlichtWrapper *irrlicht)
|
||||
|
||||
i = CONTENT_WATER;
|
||||
f = &g_content_features[i];
|
||||
//f->setInventoryTexture(irrlicht->getTextureId("water.png"));
|
||||
f->setInventoryTextureCube("water.png", "water.png", "water.png");
|
||||
f->param_type = CPT_LIGHT;
|
||||
f->light_propagates = true;
|
||||
f->solidness = 0; // Drawn separately, makes no faces
|
||||
@ -196,7 +238,7 @@ void init_mapnode(IIrrlichtWrapper *irrlicht)
|
||||
|
||||
i = CONTENT_WATERSOURCE;
|
||||
f = &g_content_features[i];
|
||||
//f->setInventoryTexture(irrlicht->getTextureId("water.png"));
|
||||
f->setInventoryTexture("water.png");
|
||||
if(new_style_water)
|
||||
{
|
||||
f->solidness = 0; // drawn separately, makes no faces
|
||||
@ -224,6 +266,7 @@ void init_mapnode(IIrrlichtWrapper *irrlicht)
|
||||
|
||||
i = CONTENT_TORCH;
|
||||
f = &g_content_features[i];
|
||||
f->setInventoryTexture("torch_on_floor.png");
|
||||
f->param_type = CPT_LIGHT;
|
||||
f->light_propagates = true;
|
||||
f->solidness = 0; // drawn separately, makes no faces
|
||||
|
@ -33,9 +33,15 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
Initializes all kind of stuff in here.
|
||||
Many things depend on this.
|
||||
|
||||
irrlicht: Used for getting texture ids.
|
||||
This accesses g_texturesource; if it is non-NULL, textures are set.
|
||||
|
||||
Client first calls this with g_texturesource=NULL to run some
|
||||
unit tests and stuff, then it runs this again with g_texturesource
|
||||
defined to get the textures.
|
||||
|
||||
Server only calls this once with g_texturesource=NULL.
|
||||
*/
|
||||
void init_mapnode(IIrrlichtWrapper *irrlicht);
|
||||
void init_mapnode();
|
||||
|
||||
// Initializes g_content_inventory_texture_paths
|
||||
void init_content_inventory_texture_paths();
|
||||
@ -137,6 +143,7 @@ struct ContentFeatures
|
||||
//std::string inventory_image_path;
|
||||
//TextureSpec inventory_texture;
|
||||
//u32 inventory_texture_id;
|
||||
video::ITexture *inventory_texture;
|
||||
|
||||
bool is_ground_content; //TODO: Remove, use walkable instead
|
||||
bool light_propagates;
|
||||
@ -155,6 +162,7 @@ struct ContentFeatures
|
||||
{
|
||||
translate_to = NULL;
|
||||
param_type = CPT_NONE;
|
||||
inventory_texture = NULL;
|
||||
is_ground_content = false;
|
||||
light_propagates = false;
|
||||
sunlight_propagates = false;
|
||||
@ -212,15 +220,10 @@ struct ContentFeatures
|
||||
}
|
||||
}
|
||||
|
||||
/*void setInventoryTexture(const TextureSpec &spec)
|
||||
{
|
||||
inventory_texture = spec;
|
||||
}*/
|
||||
void setInventoryTexture(std::string imgname);
|
||||
|
||||
/*void setInventoryImage(std::string imgname)
|
||||
{
|
||||
inventory_image_path = porting::getDataPath(imgname.c_str());
|
||||
}*/
|
||||
void setInventoryTextureCube(std::string top,
|
||||
std::string left, std::string right);
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -33,7 +33,7 @@ void initializeMaterialProperties()
|
||||
setStoneLikeDiggingProperties(CONTENT_STONE, 1.0);
|
||||
|
||||
g_material_properties[CONTENT_GRASS].setDiggingProperties("",
|
||||
DiggingProperties(true, 0.5, 0));
|
||||
DiggingProperties(true, 0.4, 0));
|
||||
|
||||
g_material_properties[CONTENT_TORCH].setDiggingProperties("",
|
||||
DiggingProperties(true, 0.0, 0));
|
||||
@ -42,7 +42,7 @@ void initializeMaterialProperties()
|
||||
DiggingProperties(true, 1.5, 0));
|
||||
|
||||
g_material_properties[CONTENT_LEAVES].setDiggingProperties("",
|
||||
DiggingProperties(true, 0.5, 0));
|
||||
DiggingProperties(true, 0.35, 0));
|
||||
|
||||
g_material_properties[CONTENT_GRASS_FOOTSTEPS].setDiggingProperties("",
|
||||
DiggingProperties(true, 0.5, 0));
|
||||
@ -50,7 +50,7 @@ void initializeMaterialProperties()
|
||||
setStoneLikeDiggingProperties(CONTENT_MESE, 0.5);
|
||||
|
||||
g_material_properties[CONTENT_MUD].setDiggingProperties("",
|
||||
DiggingProperties(true, 0.5, 0));
|
||||
DiggingProperties(true, 0.4, 0));
|
||||
|
||||
setStoneLikeDiggingProperties(CONTENT_COALSTONE, 1.5);
|
||||
|
||||
|
@ -30,7 +30,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
#include "debug.h"
|
||||
#include "constants.h"
|
||||
|
||||
#ifdef _WIN32
|
||||
#ifdef _MSC_VER
|
||||
#define SWPRINTF_CHARSTRING L"%S"
|
||||
#else
|
||||
#define SWPRINTF_CHARSTRING L"%s"
|
||||
|
@ -22,10 +22,16 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
|
||||
#ifdef _WIN32
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
// Without this some of the network functions are not found on mingw
|
||||
#ifndef _WIN32_WINNT
|
||||
#define _WIN32_WINNT 0x0501
|
||||
#endif
|
||||
#include <windows.h>
|
||||
#include <winsock2.h>
|
||||
#include <ws2tcpip.h>
|
||||
#pragma comment(lib, "wsock32.lib")
|
||||
#ifdef _MSC_VER
|
||||
#pragma comment(lib, "wsock32.lib")
|
||||
#endif
|
||||
typedef SOCKET socket_t;
|
||||
typedef int socklen_t;
|
||||
#else
|
||||
|
105
src/tile.cpp
105
src/tile.cpp
@ -627,7 +627,22 @@ bool generate_image(std::string part_of_name, video::IImage *& baseimg,
|
||||
<<"modification \""<<part_of_name<<"\""
|
||||
<<std::endl;
|
||||
|
||||
if(part_of_name.substr(0,6) == "[crack")
|
||||
/*
|
||||
This is the simplest of all; it just adds stuff to the
|
||||
name so that a separate texture is created.
|
||||
|
||||
It is used to make textures for stuff that doesn't want
|
||||
to implement getting the texture from a bigger texture
|
||||
atlas.
|
||||
*/
|
||||
if(part_of_name == "[forcesingle")
|
||||
{
|
||||
}
|
||||
/*
|
||||
[crackN
|
||||
Adds a cracking texture
|
||||
*/
|
||||
else if(part_of_name.substr(0,6) == "[crack")
|
||||
{
|
||||
if(baseimg == NULL)
|
||||
{
|
||||
@ -671,9 +686,12 @@ bool generate_image(std::string part_of_name, video::IImage *& baseimg,
|
||||
crackimage->drop();
|
||||
}
|
||||
}
|
||||
/*
|
||||
[combine:WxH:X,Y=filename:X,Y=filename2
|
||||
Creates a bigger texture from an amount of smaller ones
|
||||
*/
|
||||
else if(part_of_name.substr(0,8) == "[combine")
|
||||
{
|
||||
// "[combine:16x128:0,0=stone.png:0,16=grass.png"
|
||||
Strfnd sf(part_of_name);
|
||||
sf.next(":");
|
||||
u32 w0 = stoi(sf.next("x"));
|
||||
@ -713,6 +731,10 @@ bool generate_image(std::string part_of_name, video::IImage *& baseimg,
|
||||
}
|
||||
}
|
||||
}
|
||||
/*
|
||||
[progressbarN
|
||||
Adds a progress bar, 0.0 <= N <= 1.0
|
||||
*/
|
||||
else if(part_of_name.substr(0,12) == "[progressbar")
|
||||
{
|
||||
if(baseimg == NULL)
|
||||
@ -726,8 +748,13 @@ bool generate_image(std::string part_of_name, video::IImage *& baseimg,
|
||||
float value = stof(part_of_name.substr(12));
|
||||
make_progressbar(value, baseimg);
|
||||
}
|
||||
// "[noalpha:filename.png"
|
||||
// Use an image without it's alpha channel
|
||||
/*
|
||||
"[noalpha:filename.png"
|
||||
Use an image without it's alpha channel.
|
||||
Used for the leaves texture when in old leaves mode, so
|
||||
that the transparent parts don't look completely black
|
||||
when simple alpha channel is used for rendering.
|
||||
*/
|
||||
else if(part_of_name.substr(0,8) == "[noalpha")
|
||||
{
|
||||
if(baseimg != NULL)
|
||||
@ -771,6 +798,76 @@ bool generate_image(std::string part_of_name, video::IImage *& baseimg,
|
||||
image->drop();
|
||||
}
|
||||
}
|
||||
/*
|
||||
[inventorycube{topimage{leftimage{rightimage
|
||||
In every subimage, replace ^ with &.
|
||||
Create an "inventory cube".
|
||||
NOTE: This should be used only on its own.
|
||||
Example (a grass block (not actually used in game):
|
||||
"[inventorycube{grass.png{mud.png&grass_side.png{mud.png&grass_side.png"
|
||||
*/
|
||||
else if(part_of_name.substr(0,14) == "[inventorycube")
|
||||
{
|
||||
if(baseimg != NULL)
|
||||
{
|
||||
dstream<<"WARNING: getTextureIdDirect(): baseimg!=NULL "
|
||||
<<"for part_of_name="<<part_of_name
|
||||
<<", cancelling."<<std::endl;
|
||||
return false;
|
||||
}
|
||||
|
||||
// This is just a placeholder
|
||||
|
||||
str_replace_char(part_of_name, '&', '^');
|
||||
Strfnd sf(part_of_name);
|
||||
sf.next("{");
|
||||
std::string imagename_top = sf.next("{");
|
||||
std::string imagename_left = sf.next("{");
|
||||
std::string imagename_right = sf.next("{");
|
||||
|
||||
baseimg = generate_image_from_scratch(
|
||||
imagename_top, driver);
|
||||
|
||||
//TODO
|
||||
#if 0
|
||||
if(driver->queryFeature(video::EVDF_RENDER_TO_TARGET) == false)
|
||||
{
|
||||
dstream<<"WARNING: getTextureIdDirect(): EVDF_RENDER_TO_TARGET"
|
||||
" not supported"<<std::endl;
|
||||
return false;
|
||||
}
|
||||
|
||||
u32 w0 = 16;
|
||||
u32 h0 = 16;
|
||||
dstream<<"INFO: inventorycube w="<<w0<<" h="<<h0<<std::endl;
|
||||
core::dimension2d<u32> dim(w0,h0);
|
||||
|
||||
//baseimg = driver->createImage(video::ECF_A8R8G8B8, dim);
|
||||
|
||||
video::IImage *img_top = generate_image_from_scratch(
|
||||
imagename_top, driver);
|
||||
video::IImage *img_left = generate_image_from_scratch(
|
||||
imagename_left, driver);
|
||||
video::IImage *img_right = generate_image_from_scratch(
|
||||
imagename_right, driver);
|
||||
|
||||
// Render target texture
|
||||
video::ITexture *rtt = NULL;
|
||||
std::string rtt_name = part_of_name + "_RTT";
|
||||
|
||||
rtt = driver->addRenderTargetTexture(dim, rtt_name.c_str());
|
||||
assert(rtt);
|
||||
|
||||
|
||||
|
||||
img_top->drop();
|
||||
img_left->drop();
|
||||
img_right->drop();
|
||||
|
||||
//TODO
|
||||
assert(0);
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
dstream<<"WARNING: getTextureIdDirect(): Invalid "
|
||||
|
@ -193,6 +193,13 @@ public:
|
||||
return getTexture(getTextureId(name));
|
||||
}
|
||||
|
||||
// Gets a separate texture
|
||||
video::ITexture* getTextureRaw(const std::string &name)
|
||||
{
|
||||
AtlasPointer ap = getTexture(name);
|
||||
return ap.atlas;
|
||||
}
|
||||
|
||||
private:
|
||||
/*
|
||||
Build the main texture atlas which contains most of the
|
||||
|
@ -716,6 +716,26 @@ inline std::string ftos(float f)
|
||||
return o.str();
|
||||
}
|
||||
|
||||
inline void str_replace(std::string & str, std::string const & pattern,
|
||||
std::string const & replacement)
|
||||
{
|
||||
std::string::size_type start = str.find(pattern, 0);
|
||||
while(start != str.npos)
|
||||
{
|
||||
str.replace(start, pattern.size(), replacement);
|
||||
start = str.find(pattern, start+replacement.size());
|
||||
}
|
||||
}
|
||||
|
||||
inline void str_replace_char(std::string & str, char from, char to)
|
||||
{
|
||||
for(unsigned int i=0; i<str.size(); i++)
|
||||
{
|
||||
if(str[i] == from)
|
||||
str[i] = to;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
A base class for simple background thread implementation
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user