forked from Mirrorlandia_minetest/minetest
new texture stuff quite working
This commit is contained in:
parent
841ac10e5c
commit
804b2647ce
@ -57,6 +57,7 @@
|
|||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCLinkerTool"
|
Name="VCLinkerTool"
|
||||||
|
AdditionalDependencies="wsock32.lib"
|
||||||
AdditionalLibraryDirectories=""..\irrlicht\irrlicht-1.7.1\lib\Win32-visualstudio";..\zlib125dll\dll32"
|
AdditionalLibraryDirectories=""..\irrlicht\irrlicht-1.7.1\lib\Win32-visualstudio";..\zlib125dll\dll32"
|
||||||
IgnoreAllDefaultLibraries="false"
|
IgnoreAllDefaultLibraries="false"
|
||||||
GenerateDebugInformation="true"
|
GenerateDebugInformation="true"
|
||||||
@ -136,6 +137,7 @@
|
|||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCLinkerTool"
|
Name="VCLinkerTool"
|
||||||
|
AdditionalDependencies="wsock32.lib"
|
||||||
AdditionalLibraryDirectories=""..\irrlicht\irrlicht-1.7.1\lib\Win32-visualstudio";..\zlib125dll\dll32"
|
AdditionalLibraryDirectories=""..\irrlicht\irrlicht-1.7.1\lib\Win32-visualstudio";..\zlib125dll\dll32"
|
||||||
IgnoreDefaultLibraryNames="libcmtd.dll"
|
IgnoreDefaultLibraryNames="libcmtd.dll"
|
||||||
GenerateDebugInformation="false"
|
GenerateDebugInformation="false"
|
||||||
|
@ -10,9 +10,11 @@ add_definitions ( -DUSE_CMAKE_CONFIG_H )
|
|||||||
|
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
# Windows
|
# Windows
|
||||||
if(MSVC)
|
if(MSVC) # MSVC Specifics
|
||||||
# Surpress some useless warnings
|
# Surpress some useless warnings
|
||||||
add_definitions ( /D "_CRT_SECURE_NO_DEPRECATE" /W1 )
|
add_definitions ( /D "_CRT_SECURE_NO_DEPRECATE" /W1 )
|
||||||
|
else() # Probably MinGW = GCC
|
||||||
|
set(PLATFORM_LIBS ws2_32.lib)
|
||||||
endif()
|
endif()
|
||||||
# Zlib stuff
|
# Zlib stuff
|
||||||
set(ZLIB_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/../../zlib/zlib-1.2.5"
|
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
|
#ifdef _WIN32
|
||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <eh.h>
|
#ifdef _MSC_VER
|
||||||
|
#include <eh.h>
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -122,8 +122,7 @@ public:
|
|||||||
#ifndef SERVER
|
#ifndef SERVER
|
||||||
video::ITexture * getImage()
|
video::ITexture * getImage()
|
||||||
{
|
{
|
||||||
//TODO
|
return content_features(m_content).inventory_texture;
|
||||||
//return g_irrlicht->getTexture(content_features(m_content).inventory_texture);
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -249,6 +248,9 @@ public:
|
|||||||
#ifndef SERVER
|
#ifndef SERVER
|
||||||
video::ITexture * getImage()
|
video::ITexture * getImage()
|
||||||
{
|
{
|
||||||
|
if(g_texturesource == NULL)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
std::string name;
|
std::string name;
|
||||||
|
|
||||||
if(m_subname == "Stick")
|
if(m_subname == "Stick")
|
||||||
@ -262,8 +264,7 @@ public:
|
|||||||
|
|
||||||
// Get such a texture
|
// Get such a texture
|
||||||
//return g_irrlicht->getTexture(name);
|
//return g_irrlicht->getTexture(name);
|
||||||
//TODO
|
return g_texturesource->getTextureRaw(name);
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
std::string getText()
|
std::string getText()
|
||||||
@ -329,6 +330,9 @@ public:
|
|||||||
#ifndef SERVER
|
#ifndef SERVER
|
||||||
video::ITexture * getImage()
|
video::ITexture * getImage()
|
||||||
{
|
{
|
||||||
|
if(g_texturesource == NULL)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
std::string basename;
|
std::string basename;
|
||||||
if(m_toolname == "WPick")
|
if(m_toolname == "WPick")
|
||||||
basename = "tool_wpick.png";
|
basename = "tool_wpick.png";
|
||||||
@ -348,31 +352,14 @@ public:
|
|||||||
|
|
||||||
float value_f = (float)toolprogress / (float)maxprogress;
|
float value_f = (float)toolprogress / (float)maxprogress;
|
||||||
std::ostringstream os;
|
std::ostringstream os;
|
||||||
os<<"[progressbar"<<value_f;
|
os<<basename<<"^[progressbar"<<value_f;
|
||||||
|
|
||||||
|
return g_texturesource->getTextureRaw(os.str());
|
||||||
|
|
||||||
/*TextureSpec spec;
|
/*TextureSpec spec;
|
||||||
spec.addTid(g_irrlicht->getTextureId(basename));
|
spec.addTid(g_irrlicht->getTextureId(basename));
|
||||||
spec.addTid(g_irrlicht->getTextureId(os.str()));
|
spec.addTid(g_irrlicht->getTextureId(os.str()));
|
||||||
return g_irrlicht->getTexture(spec);*/
|
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
|
#endif
|
||||||
std::string getText()
|
std::string getText()
|
||||||
|
27
src/main.cpp
27
src/main.cpp
@ -267,9 +267,15 @@ Doing now (most important at the top):
|
|||||||
# maybe done
|
# maybe done
|
||||||
* not done
|
* not done
|
||||||
|
|
||||||
=== Stuff being done
|
=== Immediate stuff
|
||||||
* Combine meshes to bigger ones in ClientMap and set them EHM_STATIC
|
* 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
|
=== Stuff to do before release
|
||||||
* Save the new mapgen stuff
|
* Save the new mapgen stuff
|
||||||
- map/meta.txt, which should contain only plain text, something like this:
|
- map/meta.txt, which should contain only plain text, something like this:
|
||||||
@ -331,12 +337,12 @@ Doing now (most important at the top):
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
#pragma comment(lib, "Irrlicht.lib")
|
#pragma comment(lib, "Irrlicht.lib")
|
||||||
//#pragma comment(lib, "jthread.lib")
|
//#pragma comment(lib, "jthread.lib")
|
||||||
#pragma comment(lib, "zlibwapi.lib")
|
#pragma comment(lib, "zlibwapi.lib")
|
||||||
#pragma comment(lib, "Shell32.lib")
|
#pragma comment(lib, "Shell32.lib")
|
||||||
// This would get rid of the console window
|
// This would get rid of the console window
|
||||||
//#pragma comment(linker, "/subsystem:windows /ENTRY:mainCRTStartup")
|
//#pragma comment(linker, "/subsystem:windows /ENTRY:mainCRTStartup")
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
@ -1548,9 +1554,8 @@ int main(int argc, char *argv[])
|
|||||||
These are needed for unit tests at least.
|
These are needed for unit tests at least.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
IIrrlichtWrapper irrlicht_dummy;
|
// Initial call with g_texturesource not set.
|
||||||
|
init_mapnode();
|
||||||
init_mapnode(&irrlicht_dummy);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Run unit tests
|
Run unit tests
|
||||||
@ -1716,7 +1721,7 @@ int main(int argc, char *argv[])
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
init_content_inventory_texture_paths();
|
init_content_inventory_texture_paths();
|
||||||
init_mapnode(g_irrlicht);
|
init_mapnode(); // Second call with g_texturesource set
|
||||||
init_mineral(g_irrlicht);
|
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
|
Get texture id, translate it to name, append stuff to
|
||||||
name, get texture id
|
name, get texture id
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Get original texture name
|
// Get original texture name
|
||||||
u32 orig_id = spec.texture.id;
|
u32 orig_id = spec.texture.id;
|
||||||
std::string orig_name = g_texturesource->getTextureName(orig_id);
|
std::string orig_name = g_texturesource->getTextureName(orig_id);
|
||||||
|
|
||||||
// Create new texture name
|
// Create new texture name
|
||||||
std::ostringstream os;
|
std::ostringstream os;
|
||||||
os<<orig_name<<"^[crack"<<mod.param;
|
os<<orig_name<<"^[crack"<<mod.param;
|
||||||
//os<<orig_name<<"^[progressbar0.5";
|
|
||||||
//os<<"mese.png";
|
|
||||||
// Get new texture
|
// Get new texture
|
||||||
u32 new_id = g_texturesource->getTextureId(os.str());
|
u32 new_id = g_texturesource->getTextureId(os.str());
|
||||||
|
|
||||||
dstream<<"MapBlock::getNodeTile(): Switching from "
|
/*dstream<<"MapBlock::getNodeTile(): Switching from "
|
||||||
<<orig_name<<" to "<<os.str()<<" ("
|
<<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);
|
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;
|
||||||
material.MaterialType
|
material.MaterialType
|
||||||
= video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF;
|
= video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF;
|
||||||
//TODO
|
|
||||||
/*if(dir == v3s16(0,-1,0))
|
if(dir == v3s16(0,-1,0))
|
||||||
material.setTexture(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))
|
else if(dir == v3s16(0,1,0))
|
||||||
material.setTexture(0,
|
material.setTexture(0,
|
||||||
g_irrlicht->getTexture("torch_on_ceiling.png"));
|
g_texturesource->getTextureRaw("torch_on_ceiling.png"));
|
||||||
// For backwards compatibility
|
// For backwards compatibility
|
||||||
else if(dir == v3s16(0,0,0))
|
else if(dir == v3s16(0,0,0))
|
||||||
material.setTexture(0,
|
material.setTexture(0,
|
||||||
g_irrlicht->getTexture("torch_on_floor.png"));
|
g_texturesource->getTextureRaw("torch_on_floor.png"));
|
||||||
else
|
else
|
||||||
material.setTexture(0,
|
material.setTexture(0,
|
||||||
g_irrlicht->getTexture("torch.png"));*/
|
g_texturesource->getTextureRaw("torch.png"));
|
||||||
|
|
||||||
u16 indices[] = {0,1,2,2,3,0};
|
u16 indices[] = {0,1,2,2,3,0};
|
||||||
// Add to mesh collector
|
// Add to mesh collector
|
||||||
|
@ -44,6 +44,39 @@ void ContentFeatures::setTexture(u16 i, std::string name, u8 alpha)
|
|||||||
tiles[i].alpha = alpha;
|
tiles[i].alpha = alpha;
|
||||||
tiles[i].material_type = MATERIAL_ALPHA_VERTEX;
|
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];
|
struct ContentFeatures g_content_features[256];
|
||||||
@ -53,8 +86,24 @@ ContentFeatures & content_features(u8 i)
|
|||||||
return g_content_features[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
|
// Read some settings
|
||||||
bool new_style_water = g_settings.getBool("new_style_water");
|
bool new_style_water = g_settings.getBool("new_style_water");
|
||||||
bool new_style_leaves = g_settings.getBool("new_style_leaves");
|
bool new_style_leaves = g_settings.getBool("new_style_leaves");
|
||||||
@ -88,6 +137,7 @@ void init_mapnode(IIrrlichtWrapper *irrlicht)
|
|||||||
i = CONTENT_STONE;
|
i = CONTENT_STONE;
|
||||||
f = &g_content_features[i];
|
f = &g_content_features[i];
|
||||||
f->setAllTextures("stone.png");
|
f->setAllTextures("stone.png");
|
||||||
|
f->setInventoryTextureCube("stone.png", "stone.png", "stone.png");
|
||||||
f->param_type = CPT_MINERAL;
|
f->param_type = CPT_MINERAL;
|
||||||
f->is_ground_content = true;
|
f->is_ground_content = true;
|
||||||
|
|
||||||
@ -96,13 +146,11 @@ void init_mapnode(IIrrlichtWrapper *irrlicht)
|
|||||||
f->setAllTextures("mud.png^grass_side.png");
|
f->setAllTextures("mud.png^grass_side.png");
|
||||||
f->setTexture(0, "grass.png");
|
f->setTexture(0, "grass.png");
|
||||||
f->setTexture(1, "mud.png");
|
f->setTexture(1, "mud.png");
|
||||||
//f->setInventoryTexture(irrlicht->getTextureId("grass.png"));
|
|
||||||
f->param_type = CPT_MINERAL;
|
f->param_type = CPT_MINERAL;
|
||||||
f->is_ground_content = true;
|
f->is_ground_content = true;
|
||||||
|
|
||||||
i = CONTENT_GRASS_FOOTSTEPS;
|
i = CONTENT_GRASS_FOOTSTEPS;
|
||||||
f = &g_content_features[i];
|
f = &g_content_features[i];
|
||||||
//f->setInventoryTexture(irrlicht->getTextureId("grass_footsteps.png"));
|
|
||||||
f->setAllTextures("mud.png^grass_side.png");
|
f->setAllTextures("mud.png^grass_side.png");
|
||||||
f->setTexture(0, "grass_footsteps.png");
|
f->setTexture(0, "grass_footsteps.png");
|
||||||
f->setTexture(1, "mud.png");
|
f->setTexture(1, "mud.png");
|
||||||
@ -126,7 +174,6 @@ void init_mapnode(IIrrlichtWrapper *irrlicht)
|
|||||||
f->setAllTextures("tree.png");
|
f->setAllTextures("tree.png");
|
||||||
f->setTexture(0, "tree_top.png");
|
f->setTexture(0, "tree_top.png");
|
||||||
f->setTexture(1, "tree_top.png");
|
f->setTexture(1, "tree_top.png");
|
||||||
//f->setInventoryTexture(irrlicht->getTextureId("tree_top.png"));
|
|
||||||
f->param_type = CPT_MINERAL;
|
f->param_type = CPT_MINERAL;
|
||||||
f->is_ground_content = true;
|
f->is_ground_content = true;
|
||||||
|
|
||||||
@ -148,26 +195,21 @@ void init_mapnode(IIrrlichtWrapper *irrlicht)
|
|||||||
i = CONTENT_COALSTONE;
|
i = CONTENT_COALSTONE;
|
||||||
f = &g_content_features[i];
|
f = &g_content_features[i];
|
||||||
//f->translate_to = new MapNode(CONTENT_STONE, MINERAL_COAL);
|
//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->setAllTextures("stone.png^mineral_coal.png");
|
||||||
f->is_ground_content = true;
|
f->is_ground_content = true;
|
||||||
|
|
||||||
i = CONTENT_WOOD;
|
i = CONTENT_WOOD;
|
||||||
f = &g_content_features[i];
|
f = &g_content_features[i];
|
||||||
//f->setAllTextures(irrlicht->getTextureId("wood.png"));
|
|
||||||
f->setAllTextures("wood.png");
|
f->setAllTextures("wood.png");
|
||||||
f->is_ground_content = true;
|
f->is_ground_content = true;
|
||||||
|
|
||||||
i = CONTENT_MESE;
|
i = CONTENT_MESE;
|
||||||
f = &g_content_features[i];
|
f = &g_content_features[i];
|
||||||
//f->setAllTextures(irrlicht->getTextureId("mese.png"));
|
|
||||||
f->setAllTextures("mese.png");
|
f->setAllTextures("mese.png");
|
||||||
f->is_ground_content = true;
|
f->is_ground_content = true;
|
||||||
|
|
||||||
i = CONTENT_CLOUD;
|
i = CONTENT_CLOUD;
|
||||||
f = &g_content_features[i];
|
f = &g_content_features[i];
|
||||||
//f->setAllTextures(irrlicht->getTextureId("cloud.png"));
|
|
||||||
f->setAllTextures("cloud.png");
|
f->setAllTextures("cloud.png");
|
||||||
f->is_ground_content = true;
|
f->is_ground_content = true;
|
||||||
|
|
||||||
@ -184,7 +226,7 @@ void init_mapnode(IIrrlichtWrapper *irrlicht)
|
|||||||
|
|
||||||
i = CONTENT_WATER;
|
i = CONTENT_WATER;
|
||||||
f = &g_content_features[i];
|
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->param_type = CPT_LIGHT;
|
||||||
f->light_propagates = true;
|
f->light_propagates = true;
|
||||||
f->solidness = 0; // Drawn separately, makes no faces
|
f->solidness = 0; // Drawn separately, makes no faces
|
||||||
@ -196,7 +238,7 @@ void init_mapnode(IIrrlichtWrapper *irrlicht)
|
|||||||
|
|
||||||
i = CONTENT_WATERSOURCE;
|
i = CONTENT_WATERSOURCE;
|
||||||
f = &g_content_features[i];
|
f = &g_content_features[i];
|
||||||
//f->setInventoryTexture(irrlicht->getTextureId("water.png"));
|
f->setInventoryTexture("water.png");
|
||||||
if(new_style_water)
|
if(new_style_water)
|
||||||
{
|
{
|
||||||
f->solidness = 0; // drawn separately, makes no faces
|
f->solidness = 0; // drawn separately, makes no faces
|
||||||
@ -224,6 +266,7 @@ void init_mapnode(IIrrlichtWrapper *irrlicht)
|
|||||||
|
|
||||||
i = CONTENT_TORCH;
|
i = CONTENT_TORCH;
|
||||||
f = &g_content_features[i];
|
f = &g_content_features[i];
|
||||||
|
f->setInventoryTexture("torch_on_floor.png");
|
||||||
f->param_type = CPT_LIGHT;
|
f->param_type = CPT_LIGHT;
|
||||||
f->light_propagates = true;
|
f->light_propagates = true;
|
||||||
f->solidness = 0; // drawn separately, makes no faces
|
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.
|
Initializes all kind of stuff in here.
|
||||||
Many things depend on this.
|
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
|
// Initializes g_content_inventory_texture_paths
|
||||||
void init_content_inventory_texture_paths();
|
void init_content_inventory_texture_paths();
|
||||||
@ -137,6 +143,7 @@ struct ContentFeatures
|
|||||||
//std::string inventory_image_path;
|
//std::string inventory_image_path;
|
||||||
//TextureSpec inventory_texture;
|
//TextureSpec inventory_texture;
|
||||||
//u32 inventory_texture_id;
|
//u32 inventory_texture_id;
|
||||||
|
video::ITexture *inventory_texture;
|
||||||
|
|
||||||
bool is_ground_content; //TODO: Remove, use walkable instead
|
bool is_ground_content; //TODO: Remove, use walkable instead
|
||||||
bool light_propagates;
|
bool light_propagates;
|
||||||
@ -155,6 +162,7 @@ struct ContentFeatures
|
|||||||
{
|
{
|
||||||
translate_to = NULL;
|
translate_to = NULL;
|
||||||
param_type = CPT_NONE;
|
param_type = CPT_NONE;
|
||||||
|
inventory_texture = NULL;
|
||||||
is_ground_content = false;
|
is_ground_content = false;
|
||||||
light_propagates = false;
|
light_propagates = false;
|
||||||
sunlight_propagates = false;
|
sunlight_propagates = false;
|
||||||
@ -212,15 +220,10 @@ struct ContentFeatures
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*void setInventoryTexture(const TextureSpec &spec)
|
void setInventoryTexture(std::string imgname);
|
||||||
{
|
|
||||||
inventory_texture = spec;
|
|
||||||
}*/
|
|
||||||
|
|
||||||
/*void setInventoryImage(std::string imgname)
|
void setInventoryTextureCube(std::string top,
|
||||||
{
|
std::string left, std::string right);
|
||||||
inventory_image_path = porting::getDataPath(imgname.c_str());
|
|
||||||
}*/
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -33,7 +33,7 @@ void initializeMaterialProperties()
|
|||||||
setStoneLikeDiggingProperties(CONTENT_STONE, 1.0);
|
setStoneLikeDiggingProperties(CONTENT_STONE, 1.0);
|
||||||
|
|
||||||
g_material_properties[CONTENT_GRASS].setDiggingProperties("",
|
g_material_properties[CONTENT_GRASS].setDiggingProperties("",
|
||||||
DiggingProperties(true, 0.5, 0));
|
DiggingProperties(true, 0.4, 0));
|
||||||
|
|
||||||
g_material_properties[CONTENT_TORCH].setDiggingProperties("",
|
g_material_properties[CONTENT_TORCH].setDiggingProperties("",
|
||||||
DiggingProperties(true, 0.0, 0));
|
DiggingProperties(true, 0.0, 0));
|
||||||
@ -42,7 +42,7 @@ void initializeMaterialProperties()
|
|||||||
DiggingProperties(true, 1.5, 0));
|
DiggingProperties(true, 1.5, 0));
|
||||||
|
|
||||||
g_material_properties[CONTENT_LEAVES].setDiggingProperties("",
|
g_material_properties[CONTENT_LEAVES].setDiggingProperties("",
|
||||||
DiggingProperties(true, 0.5, 0));
|
DiggingProperties(true, 0.35, 0));
|
||||||
|
|
||||||
g_material_properties[CONTENT_GRASS_FOOTSTEPS].setDiggingProperties("",
|
g_material_properties[CONTENT_GRASS_FOOTSTEPS].setDiggingProperties("",
|
||||||
DiggingProperties(true, 0.5, 0));
|
DiggingProperties(true, 0.5, 0));
|
||||||
@ -50,7 +50,7 @@ void initializeMaterialProperties()
|
|||||||
setStoneLikeDiggingProperties(CONTENT_MESE, 0.5);
|
setStoneLikeDiggingProperties(CONTENT_MESE, 0.5);
|
||||||
|
|
||||||
g_material_properties[CONTENT_MUD].setDiggingProperties("",
|
g_material_properties[CONTENT_MUD].setDiggingProperties("",
|
||||||
DiggingProperties(true, 0.5, 0));
|
DiggingProperties(true, 0.4, 0));
|
||||||
|
|
||||||
setStoneLikeDiggingProperties(CONTENT_COALSTONE, 1.5);
|
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 "debug.h"
|
||||||
#include "constants.h"
|
#include "constants.h"
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _MSC_VER
|
||||||
#define SWPRINTF_CHARSTRING L"%S"
|
#define SWPRINTF_CHARSTRING L"%S"
|
||||||
#else
|
#else
|
||||||
#define SWPRINTF_CHARSTRING L"%s"
|
#define SWPRINTF_CHARSTRING L"%s"
|
||||||
|
@ -22,10 +22,16 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#define WIN32_LEAN_AND_MEAN
|
#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 <windows.h>
|
||||||
#include <winsock2.h>
|
#include <winsock2.h>
|
||||||
#include <ws2tcpip.h>
|
#include <ws2tcpip.h>
|
||||||
#pragma comment(lib, "wsock32.lib")
|
#ifdef _MSC_VER
|
||||||
|
#pragma comment(lib, "wsock32.lib")
|
||||||
|
#endif
|
||||||
typedef SOCKET socket_t;
|
typedef SOCKET socket_t;
|
||||||
typedef int socklen_t;
|
typedef int socklen_t;
|
||||||
#else
|
#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<<"\""
|
<<"modification \""<<part_of_name<<"\""
|
||||||
<<std::endl;
|
<<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)
|
if(baseimg == NULL)
|
||||||
{
|
{
|
||||||
@ -671,9 +686,12 @@ bool generate_image(std::string part_of_name, video::IImage *& baseimg,
|
|||||||
crackimage->drop();
|
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")
|
else if(part_of_name.substr(0,8) == "[combine")
|
||||||
{
|
{
|
||||||
// "[combine:16x128:0,0=stone.png:0,16=grass.png"
|
|
||||||
Strfnd sf(part_of_name);
|
Strfnd sf(part_of_name);
|
||||||
sf.next(":");
|
sf.next(":");
|
||||||
u32 w0 = stoi(sf.next("x"));
|
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")
|
else if(part_of_name.substr(0,12) == "[progressbar")
|
||||||
{
|
{
|
||||||
if(baseimg == NULL)
|
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));
|
float value = stof(part_of_name.substr(12));
|
||||||
make_progressbar(value, baseimg);
|
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")
|
else if(part_of_name.substr(0,8) == "[noalpha")
|
||||||
{
|
{
|
||||||
if(baseimg != NULL)
|
if(baseimg != NULL)
|
||||||
@ -771,6 +798,76 @@ bool generate_image(std::string part_of_name, video::IImage *& baseimg,
|
|||||||
image->drop();
|
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
|
else
|
||||||
{
|
{
|
||||||
dstream<<"WARNING: getTextureIdDirect(): Invalid "
|
dstream<<"WARNING: getTextureIdDirect(): Invalid "
|
||||||
|
@ -193,6 +193,13 @@ public:
|
|||||||
return getTexture(getTextureId(name));
|
return getTexture(getTextureId(name));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Gets a separate texture
|
||||||
|
video::ITexture* getTextureRaw(const std::string &name)
|
||||||
|
{
|
||||||
|
AtlasPointer ap = getTexture(name);
|
||||||
|
return ap.atlas;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/*
|
/*
|
||||||
Build the main texture atlas which contains most of the
|
Build the main texture atlas which contains most of the
|
||||||
|
@ -716,6 +716,26 @@ inline std::string ftos(float f)
|
|||||||
return o.str();
|
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
|
A base class for simple background thread implementation
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user