1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-08-01 17:38:41 +00:00

Added a more flexible path system (and fixed some minor stuff)

This commit is contained in:
Perttu Ahola 2011-01-07 19:39:27 +02:00
parent dc414091e7
commit 6b6c2d37ea
22 changed files with 356 additions and 111 deletions

View file

@ -17,17 +17,22 @@ with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
/*
(c) 2010 Perttu Ahola <celeron55@gmail.com>
*/
#ifndef CONSTANTS_HEADER
#define CONSTANTS_HEADER
/*
All kinds of constants.
Cross-platform compatibility crap should go in porting.h.
*/
#define APPNAME "minetest"
#define DEBUGFILE "debug.txt"
// Define for simulating the quirks of sending through internet
// WARNING: This disables unit testing of socket and connection
// Define for simulating the quirks of sending through internet.
// Causes the socket class to deliberately drop random packets.
// This disables unit testing of socket and connection.
#define INTERNET_SIMULATOR 0
#define CONNECTION_TIMEOUT 30

View file

@ -21,7 +21,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "debug.h"
#include <stdio.h>
#include <stdlib.h>
#include "porting.h"
/*
Debug output
@ -74,8 +73,6 @@ void assert_fail(const char *assertion, const char *file,
if(g_debugstreams[1])
fclose(g_debugstreams[1]);
//sleep_ms(3000);
abort();
}

View file

@ -20,6 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "guiPauseMenu.h"
#include "debug.h"
#include "serialization.h"
#include "porting.h"
GUIPauseMenu::GUIPauseMenu(gui::IGUIEnvironment* env,
gui::IGUIElement* parent, s32 id,
@ -127,11 +128,11 @@ void GUIPauseMenu::regenerateGui(v2u32 screensize)
L"by Perttu Ahola\n"
L"celeron55@gmail.com\n\n"
L"SER_FMT_VER_HIGHEST=%i\n"
L"max_texture_size=\n(%i,%i)\n"
L"userdata path = \n"
SWPRINTF_CHARSTRING
,
(int)SER_FMT_VER_HIGHEST,
max_texture_size.X,
max_texture_size.Y
porting::path_userdata.c_str()
);
Environment->addStaticText(text, rect, false, true, this, 259);

View file

@ -97,12 +97,12 @@ InventoryItem* InventoryItem::deSerialize(std::istream &is)
video::ITexture * MapBlockObjectItem::getImage()
{
if(m_inventorystring.substr(0,3) == "Rat")
//return g_device->getVideoDriver()->getTexture("../data/rat.png");
return g_irrlicht->getTexture("../data/rat.png");
//return g_device->getVideoDriver()->getTexture(porting::getDataPath("rat.png").c_str());
return g_irrlicht->getTexture(porting::getDataPath("rat.png").c_str());
if(m_inventorystring.substr(0,4) == "Sign")
//return g_device->getVideoDriver()->getTexture("../data/sign.png");
return g_irrlicht->getTexture("../data/sign.png");
//return g_device->getVideoDriver()->getTexture(porting::getDataPath("sign.png").c_str());
return g_irrlicht->getTexture(porting::getDataPath("sign.png").c_str());
return NULL;
}

View file

@ -131,7 +131,7 @@ public:
if(m_content >= USEFUL_CONTENT_COUNT)
return NULL;
return g_irrlicht->getTexture(g_content_inventory_textures[m_content]);
return g_irrlicht->getTexture(g_content_inventory_texture_paths[m_content]);
}
#endif
std::string getText()
@ -258,7 +258,7 @@ public:
{
std::string basename;
if(m_subname == "Stick")
basename = "../data/stick.png";
basename = porting::getDataPath("stick.png").c_str();
// Default to cloud texture
else
basename = tile_texture_path_get(TILE_CLOUD);
@ -333,11 +333,11 @@ public:
{
std::string basename;
if(m_toolname == "WPick")
basename = "../data/tool_wpick.png";
basename = porting::getDataPath("tool_wpick.png").c_str();
else if(m_toolname == "STPick")
basename = "../data/tool_stpick.png";
basename = porting::getDataPath("tool_stpick.png").c_str();
else if(m_toolname == "MesePick")
basename = "../data/tool_mesepick.png";
basename = porting::getDataPath("tool_mesepick.png").c_str();
// Default to cloud texture
else
basename = tile_texture_path_get(TILE_CLOUD);

View file

@ -124,11 +124,11 @@ video::ITexture * CrackTextureMod::make(video::ITexture *original,
video::IImage *baseimage = driver->createImage(original, pos_base, dim);
assert(baseimage);
video::IImage *crackimage = driver->createImageFromFile("../data/crack.png");
video::IImage *crackimage = driver->createImageFromFile(porting::getDataPath("crack.png").c_str());
assert(crackimage);
#if 0
video::ITexture *other = driver->getTexture("../data/crack.png");
video::ITexture *other = driver->getTexture(porting::getDataPath("crack.png").c_str());
dstream<<__FUNCTION_NAME<<": crack texture size is "
<<other->getSize().Width<<"x"

View file

@ -177,6 +177,8 @@ TODO: When server sees that client is removing an inexistent block or
TODO: When player dies, throw items on map
TODO: Use porting::path_userdata for configuration file
TODO: Optimize day/night mesh updating somehow
- create copies of all textures for all lighting values and only
change texture for material?
@ -187,12 +189,11 @@ TODO: Optimize day/night mesh updating somehow
TODO: Map generator version 2
- Create surface areas based on central points; a given point's
area type is given by the nearest central point
- Separate points for heightmap, caves, plants and minerals?
- Flat land, mountains, forest, jungle
- Cliffs, arcs
TODO: A Constant for the "../data/" path (differs on Mac and on proper
linux installations)
TODO: Add defined(__APPLE__) to filesys.cpp
TODO: Add gui option to remove map
Doing now:
======================================================================
@ -257,6 +258,7 @@ Doing now:
#include "guiTextInputMenu.h"
#include "materials.h"
#include "guiMessageMenu.h"
#include "filesys.h"
IrrlichtWrapper *g_irrlicht;
@ -1099,7 +1101,11 @@ int main(int argc, char *argv[])
debug_stacks_init();
DSTACK(__FUNCTION_NAME);
porting::initializePaths();
// Create user data directory
fs::CreateDir(porting::path_userdata);
initializeMaterialProperties();
BEGIN_DEBUG_EXCEPTION_HANDLER
@ -1123,6 +1129,7 @@ int main(int argc, char *argv[])
allowed_options.insert("random-input", ValueSpec(VALUETYPE_FLAG));
allowed_options.insert("disable-unittests", ValueSpec(VALUETYPE_FLAG));
allowed_options.insert("enable-unittests", ValueSpec(VALUETYPE_FLAG));
allowed_options.insert("map-dir", ValueSpec(VALUETYPE_STRING));
Settings cmd_args;
@ -1202,15 +1209,12 @@ int main(int argc, char *argv[])
}
else
{
const char *filenames[2] =
{
"../minetest.conf",
"../../minetest.conf"
};
core::array<std::string> filenames;
filenames.push_back(porting::path_userdata + "/minetest.conf");
for(u32 i=0; i<2; i++)
for(u32 i=0; i<filenames.size(); i++)
{
bool r = g_settings.readConfigFile(filenames[i]);
bool r = g_settings.readConfigFile(filenames[i].c_str());
if(r)
{
configpath = filenames[i];
@ -1274,6 +1278,11 @@ int main(int argc, char *argv[])
std::cout<<"-> "<<port<<std::endl;
}
//Map directory
std::string map_dir = porting::path_userdata+"/map";
if(cmd_args.exists("map-dir"))
map_dir = cmd_args.get("map-dir");
if(cmd_args.getFlag("server"))
{
DSTACK("Dedicated server branch");
@ -1284,7 +1293,7 @@ int main(int argc, char *argv[])
std::cout<<"========================"<<std::endl;
std::cout<<std::endl;
Server server("../map", hm_params, map_params);
Server server(map_dir, hm_params, map_params);
server.start(port);
for(;;)
@ -1422,7 +1431,7 @@ int main(int argc, char *argv[])
guienv = device->getGUIEnvironment();
gui::IGUISkin* skin = guienv->getSkin();
gui::IGUIFont* font = guienv->getFont("../data/fontlucida.png");
gui::IGUIFont* font = guienv->getFont(porting::getDataPath("fontlucida.png").c_str());
if(font)
skin->setFont(font);
@ -1453,6 +1462,8 @@ int main(int argc, char *argv[])
Preload some textures
*/
init_content_inventory_texture_paths();
init_tile_texture_paths();
tile_materials_preload(g_irrlicht);
/*
@ -1468,7 +1479,7 @@ int main(int argc, char *argv[])
*/
SharedPtr<Server> server;
if(hosting){
server = new Server("../map", hm_params, map_params);
server = new Server(map_dir, hm_params, map_params);
server->start(port);
}
@ -1514,12 +1525,12 @@ int main(int argc, char *argv[])
*/
/*scene::ISceneNode* skybox;
skybox = smgr->addSkyBoxSceneNode(
driver->getTexture("../data/skybox2.png"),
driver->getTexture("../data/skybox3.png"),
driver->getTexture("../data/skybox1.png"),
driver->getTexture("../data/skybox1.png"),
driver->getTexture("../data/skybox1.png"),
driver->getTexture("../data/skybox1.png"));*/
driver->getTexture(porting::getDataPath("skybox2.png").c_str()),
driver->getTexture(porting::getDataPath("skybox3.png").c_str()),
driver->getTexture(porting::getDataPath("skybox1.png").c_str()),
driver->getTexture(porting::getDataPath("skybox1.png").c_str()),
driver->getTexture(porting::getDataPath("skybox1.png").c_str()),
driver->getTexture(porting::getDataPath("skybox1.png").c_str()));*/
/*
Create the camera node

View file

@ -757,17 +757,17 @@ void MapBlock::updateMesh(u32 daynight_ratio)
= video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF;
if(dir == v3s16(0,-1,0))
buf->getMaterial().setTexture(0,
g_irrlicht->getTexture("../data/torch_on_floor.png"));
g_irrlicht->getTexture(porting::getDataPath("torch_on_floor.png").c_str()));
else if(dir == v3s16(0,1,0))
buf->getMaterial().setTexture(0,
g_irrlicht->getTexture("../data/torch_on_ceiling.png"));
g_irrlicht->getTexture(porting::getDataPath("torch_on_ceiling.png").c_str()));
// For backwards compatibility
else if(dir == v3s16(0,0,0))
buf->getMaterial().setTexture(0,
g_irrlicht->getTexture("../data/torch_on_floor.png"));
g_irrlicht->getTexture(porting::getDataPath("torch_on_floor.png").c_str()));
else
buf->getMaterial().setTexture(0,
g_irrlicht->getTexture("../data/torch.png"));
g_irrlicht->getTexture(porting::getDataPath("torch.png").c_str()));
// Add to mesh
mesh_new->addMeshBuffer(buf);

View file

@ -282,7 +282,7 @@ void RatObject::addToScene(scene::ISceneManager *smgr)
buf->getMaterial().setFlag(video::EMF_LIGHTING, false);
buf->getMaterial().setFlag(video::EMF_BACK_FACE_CULLING, false);
buf->getMaterial().setTexture
(0, driver->getTexture("../data/rat.png"));
(0, driver->getTexture(porting::getDataPath("rat.png").c_str()));
buf->getMaterial().setFlag(video::EMF_BILINEAR_FILTER, false);
buf->getMaterial().setFlag(video::EMF_FOG_ENABLE, true);
buf->getMaterial().MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
@ -360,7 +360,7 @@ video::ITexture * ItemObject::getItemImage()
if(item)
texture = item->getImage();
/*else
texture = g_irrlicht->getTexture("../data/cloud.png");*/
texture = g_irrlicht->getTexture(porting::getDataPath("cloud.png").c_str());*/
if(item)
delete item;
return texture;
@ -414,7 +414,7 @@ void PlayerObject::addToScene(scene::ISceneManager *smgr)
// Set material
buf->getMaterial().setFlag(video::EMF_LIGHTING, false);
//buf->getMaterial().setFlag(video::EMF_BACK_FACE_CULLING, false);
buf->getMaterial().setTexture(0, driver->getTexture("../data/player.png"));
buf->getMaterial().setTexture(0, driver->getTexture(porting::getDataPath("player.png").c_str()));
buf->getMaterial().setFlag(video::EMF_BILINEAR_FILTER, false);
buf->getMaterial().setFlag(video::EMF_FOG_ENABLE, true);
//buf->getMaterial().MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
@ -438,7 +438,7 @@ void PlayerObject::addToScene(scene::ISceneManager *smgr)
// Set material
buf->getMaterial().setFlag(video::EMF_LIGHTING, false);
//buf->getMaterial().setFlag(video::EMF_BACK_FACE_CULLING, false);
buf->getMaterial().setTexture(0, driver->getTexture("../data/player_back.png"));
buf->getMaterial().setTexture(0, driver->getTexture(porting::getDataPath("player_back.png").c_str()));
buf->getMaterial().setFlag(video::EMF_BILINEAR_FILTER, false);
buf->getMaterial().setFlag(video::EMF_FOG_ENABLE, true);
buf->getMaterial().MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF;

View file

@ -430,7 +430,7 @@ public:
buf->getMaterial().setFlag(video::EMF_LIGHTING, false);
//buf->getMaterial().setFlag(video::EMF_BACK_FACE_CULLING, false);
buf->getMaterial().setTexture
(0, driver->getTexture("../data/sign.png"));
(0, driver->getTexture(porting::getDataPath("sign.png").c_str()));
buf->getMaterial().setFlag(video::EMF_BILINEAR_FILTER, false);
buf->getMaterial().setFlag(video::EMF_FOG_ENABLE, true);
buf->getMaterial().MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF;
@ -454,7 +454,7 @@ public:
buf->getMaterial().setFlag(video::EMF_LIGHTING, false);
//buf->getMaterial().setFlag(video::EMF_BACK_FACE_CULLING, false);
buf->getMaterial().setTexture
(0, driver->getTexture("../data/sign_back.png"));
(0, driver->getTexture(porting::getDataPath("sign_back.png").c_str()));
buf->getMaterial().setFlag(video::EMF_BILINEAR_FILTER, false);
buf->getMaterial().setFlag(video::EMF_FOG_ENABLE, true);
buf->getMaterial().MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF;

View file

@ -19,6 +19,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "mapnode.h"
#include "tile.h"
#include "porting.h"
#include <string>
/*
Face directions:
@ -46,20 +48,33 @@ u16 g_content_tiles[USEFUL_CONTENT_COUNT][6] =
{TILE_WOOD,TILE_WOOD,TILE_WOOD,TILE_WOOD,TILE_WOOD,TILE_WOOD},
};
const char * g_content_inventory_textures[USEFUL_CONTENT_COUNT] =
std::string g_content_inventory_texture_strings[USEFUL_CONTENT_COUNT];
// Pointers to c_str()s of the above
const char * g_content_inventory_texture_paths[USEFUL_CONTENT_COUNT] = {0};
const char * g_content_inventory_texture_paths_base[USEFUL_CONTENT_COUNT] =
{
"../data/stone.png",
"../data/grass.png",
"../data/water.png",
"../data/torch_on_floor.png",
"../data/tree_top.png",
"../data/leaves.png",
"../data/grass_footsteps.png",
"../data/mese.png",
"../data/mud.png",
"../data/water.png",
"../data/cloud.png",
"../data/coalstone.png",
"../data/wood.png",
"stone.png",
"grass.png",
"water.png",
"torch_on_floor.png",
"tree_top.png",
"leaves.png",
"grass_footsteps.png",
"mese.png",
"mud.png",
"water.png",
"cloud.png",
"coalstone.png",
"wood.png",
};
void init_content_inventory_texture_paths()
{
for(u16 i=0; i<USEFUL_CONTENT_COUNT; i++)
{
g_content_inventory_texture_strings[i] = porting::getDataPath(g_content_inventory_texture_paths_base[i]);
g_content_inventory_texture_paths[i] = g_content_inventory_texture_strings[i].c_str();
}
}

View file

@ -84,7 +84,9 @@ enum Content
};
extern u16 g_content_tiles[USEFUL_CONTENT_COUNT][6];
extern const char * g_content_inventory_textures[USEFUL_CONTENT_COUNT];
extern const char * g_content_inventory_texture_paths[USEFUL_CONTENT_COUNT];
// Initializes g_content_inventory_texture_paths
void init_content_inventory_texture_paths();
/*
If true, the material allows light propagation and brightness is stored

View file

@ -110,7 +110,7 @@ RemotePlayer::RemotePlayer(
// Set material
buf->getMaterial().setFlag(video::EMF_LIGHTING, false);
//buf->getMaterial().setFlag(video::EMF_BACK_FACE_CULLING, false);
buf->getMaterial().setTexture(0, driver->getTexture("../data/player.png"));
buf->getMaterial().setTexture(0, driver->getTexture(porting::getDataPath("player.png").c_str()));
buf->getMaterial().setFlag(video::EMF_BILINEAR_FILTER, false);
buf->getMaterial().setFlag(video::EMF_FOG_ENABLE, true);
//buf->getMaterial().MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
@ -134,7 +134,7 @@ RemotePlayer::RemotePlayer(
// Set material
buf->getMaterial().setFlag(video::EMF_LIGHTING, false);
//buf->getMaterial().setFlag(video::EMF_BACK_FACE_CULLING, false);
buf->getMaterial().setTexture(0, driver->getTexture("../data/player_back.png"));
buf->getMaterial().setTexture(0, driver->getTexture(porting::getDataPath("player_back.png").c_str()));
buf->getMaterial().setFlag(video::EMF_BILINEAR_FILTER, false);
buf->getMaterial().setFlag(video::EMF_FOG_ENABLE, true);
buf->getMaterial().MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF;

160
src/porting.cpp Normal file
View file

@ -0,0 +1,160 @@
/*
Minetest-c55
Copyright (C) 2010 celeron55, Perttu Ahola <celeron55@gmail.com>
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.
*/
/*
Random portability stuff
See comments in porting.h
*/
#include "porting.h"
namespace porting
{
std::string path_data = "../data";
std::string path_userdata = "../";
void pathRemoveFile(char *path, char delim)
{
// Remove filename and path delimiter
int i;
for(i = strlen(path)-1; i>=0; i--)
{
if(path[i] == delim)
break;
}
path[i] = 0;
}
void initializePaths()
{
#ifdef RUN_IN_PLACE
/*
Use relative paths if RUN_IN_PLACE
*/
dstream<<"Using relative paths (RUN_IN_PLACE)"<<std::endl;
/*
Windows
*/
#if defined(_WIN32)
#include <windows.h>
const DWORD buflen = 1000;
char buf[buflen];
DWORD len;
// Find path of executable and set path_data relative to it
len = GetModuleFileName(GetModuleHandle(NULL), buf, buflen);
assert(len < buflen);
pathRemoveFile(buf, '\\');
// Use "./bin/../data"
path_data = std::string(buf) + "/../data";
// Use "./bin/../"
path_userdata = std::string(buf) + "/../";
/*
Linux
*/
#elif defined(linux)
#include <unistd.h>
char buf[BUFSIZ];
// Get path to executable
readlink("/proc/self/exe", buf, BUFSIZ);
pathRemoveFile(buf, '/');
// Use "./bin/../data"
path_data = std::string(buf) + "/../data";
// Use "./bin/../"
path_userdata = std::string(buf) + "/../";
/*
OS X
*/
#elif defined(__APPLE__)
//TODO: Get path of executable. This assumes working directory is bin/
dstream<<"WARNING: Relative path not properly supported on OS X"
<<std::endl;
path_data = std::string("../data");
path_userdata = std::string("../");
#endif
#else
/*
Use platform-specific paths otherwise
*/
dstream<<"Using system-wide paths (NOT RUN_IN_PLACE)"<<std::endl;
/*
Windows
*/
#if defined(_WIN32)
#include <windows.h>
const DWORD buflen = 1000;
char buf[buflen];
DWORD len;
// Find path of executable and set path_data relative to it
len = GetModuleFileName(GetModuleHandle(NULL), buf, buflen);
assert(len < buflen);
pathRemoveFile(buf, '\\');
// Use "./bin/../data"
path_data = std::string(buf) + "/../data";
// Use "C:\Documents and Settings\user\Application Data\<APPNAME>"
len = GetEnvironmentVariable("APPDATA", buf, buflen);
assert(len < buflen);
path_userdata = std::string(buf) + "/" + APPNAME;
/*
Linux
*/
#elif defined(linux)
path_userdata = std::string("~/.") + APPNAME;
path_data = std::string("/usr/share/") + APPNAME;
/*
OS X
*/
#elif defined(__APPLE__)
path_userdata = std::string("~/Library/Application Support/") + APPNAME;
path_data = std::string("minetest-mac.app/Contents/Resources/data/");
#endif
#endif
dstream<<"path_data = "<<path_data<<std::endl;
dstream<<"path_userdata = "<<path_userdata<<std::endl;
}
} //namespace porting

View file

@ -24,8 +24,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#ifndef PORTING_HEADER
#define PORTING_HEADER
#include <string>
// Included for u64 and such
#include "common_irrlicht.h"
#include "debug.h"
#include "constants.h"
#ifdef _WIN32
#define SWPRINTF_CHARSTRING L"%S"
@ -44,6 +47,33 @@ with this program; if not, write to the Free Software Foundation, Inc.,
namespace porting
{
/*
Path of static data directory.
*/
extern std::string path_data;
/*
Directory for storing user data. Examples:
Windows: "C:\Documents and Settings\user\Application Data\<APPNAME>"
Linux: "~/.<APPNAME>"
Mac: "~/Library/Application Support/<APPNAME>"
*/
extern std::string path_userdata;
/*
Get full path of stuff in data directory.
Example: "stone.png" -> "../data/stone.png"
*/
inline std::string getDataPath(const char *subpath)
{
return path_data + "/" + subpath;
}
/*
Initialize path_data and path_userdata.
*/
void initializePaths();
/*
Resolution is 10-20ms.
Remember to check for overflows.
@ -67,5 +97,5 @@ namespace porting
} // namespace porting
#endif
#endif // PORTING_HEADER

View file

@ -471,7 +471,7 @@ private:
float m_time_counter;
float m_time_of_day_send_timer;
MutexedVariable<float> m_uptime;
MutexedVariable<double> m_uptime;
enum PeerChangeType
{

View file

@ -123,6 +123,8 @@ int main(int argc, char *argv[])
DSTACK(__FUNCTION_NAME);
porting.initializePaths();
initializeMaterialProperties();
BEGIN_DEBUG_EXCEPTION_HANDLER
@ -222,15 +224,12 @@ int main(int argc, char *argv[])
}
else
{
const char *filenames[2] =
{
"../minetest.conf",
"../../minetest.conf"
};
core::array<std::string> filenames;
filenames.push_back(porting::path_userdata + "/minetest.conf");
for(u32 i=0; i<2; i++)
for(u32 i=0; i<filenames.size(); i++)
{
bool r = g_settings.readConfigFile(filenames[i]);
bool r = g_settings.readConfigFile(filenames[i].c_str());
if(r)
{
configpath = filenames[i];
@ -306,7 +305,7 @@ int main(int argc, char *argv[])
std::cout<<std::endl;
// Figure out path to map
std::string map_dir = "../map";
std::string map_dir = porting::path_userdata+"/map";
if(cmd_args.exists("map-dir"))
map_dir = cmd_args.get("map-dir");

View file

@ -18,27 +18,50 @@ with this program; if not, write to the Free Software Foundation, Inc.,
*/
#include "tile.h"
#include "porting.h"
// For IrrlichtWrapper
#include "main.h"
#include <string>
// A mapping from tiles to paths of textures
const char * g_tile_texture_paths[TILES_COUNT] =
const char * g_tile_texture_filenames[TILES_COUNT] =
{
NULL,
"../data/stone.png",
"../data/water.png",
"../data/grass.png",
"../data/tree.png",
"../data/leaves.png",
"../data/grass_footsteps.png",
"../data/mese.png",
"../data/mud.png",
"../data/tree_top.png",
"../data/mud_with_grass.png",
"../data/cloud.png",
"../data/coalstone.png",
"../data/wood.png",
"stone.png",
"water.png",
"grass.png",
"tree.png",
"leaves.png",
"grass_footsteps.png",
"mese.png",
"mud.png",
"tree_top.png",
"mud_with_grass.png",
"cloud.png",
"coalstone.png",
"wood.png",
};
std::string g_tile_texture_path_strings[TILES_COUNT];
const char * g_tile_texture_paths[TILES_COUNT] = {0};
void init_tile_texture_paths()
{
for(s32 i=0; i<TILES_COUNT; i++)
{
const char *filename = g_tile_texture_filenames[i];
if(filename != NULL)
{
g_tile_texture_path_strings[i] =
porting::getDataPath(filename);
g_tile_texture_paths[i] =
g_tile_texture_path_strings[i].c_str();
}
}
}
const char * tile_texture_path_get(u32 i)
{
assert(i < TILES_COUNT);
@ -54,7 +77,7 @@ void tile_materials_preload(IrrlichtWrapper *irrlicht)
{
for(s32 i=0; i<TILES_COUNT; i++)
{
const char *path = g_tile_texture_paths[i];
const char *path = tile_texture_path_get(i);
video::ITexture *t = NULL;

View file

@ -95,13 +95,12 @@ struct TileSpec
} param;
};
/*extern const char * g_tile_texture_paths[TILES_COUNT];
extern video::SMaterial g_tile_materials[TILES_COUNT];*/
/*
Functions
*/
void init_tile_texture_paths();
const char * tile_texture_path_get(u32 i);
// Initializes g_tile_materials