forked from mirror/openmw-tes3mp
Merge remote-tracking branch 'upstream/master' into newlauncher
This commit is contained in:
commit
7099aeda2e
44 changed files with 203 additions and 102 deletions
|
@ -246,7 +246,7 @@ void OMW::Engine::loadBSA()
|
|||
for (Files::MultiDirCollection::TIter iter (bsa.begin()); iter!=bsa.end(); ++iter)
|
||||
{
|
||||
std::cout << "Adding " << iter->second.string() << std::endl;
|
||||
addBSA (iter->second.string());
|
||||
Bsa::addBSA (iter->second.string());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -338,12 +338,12 @@ void OMW::Engine::go()
|
|||
ogreCfg.insert(0, cfgUserDir);
|
||||
|
||||
//A local plugins.cfg will be used if it exist, otherwise look in the default path
|
||||
if(!isFile(plugCfg.c_str()))
|
||||
if(!Misc::isFile(plugCfg.c_str()))
|
||||
{
|
||||
plugCfg.insert(0, cfgDir);
|
||||
}
|
||||
|
||||
mOgre.configure(!isFile(ogreCfg.c_str()), cfgUserDir, plugCfg, false);
|
||||
mOgre.configure(!Misc::isFile(ogreCfg.c_str()), cfgUserDir, plugCfg, false);
|
||||
|
||||
addResourcesDirectory (mDataDir / "Meshes");
|
||||
addResourcesDirectory (mDataDir / "Textures");
|
||||
|
@ -358,7 +358,7 @@ void OMW::Engine::go()
|
|||
loadBSA();
|
||||
|
||||
// Create physics. shapeLoader is deleted by the physic engine
|
||||
ManualBulletShapeLoader* shapeLoader = new ManualBulletShapeLoader();
|
||||
NifBullet::ManualBulletShapeLoader* shapeLoader = new NifBullet::ManualBulletShapeLoader();
|
||||
mPhysicEngine = new OEngine::Physic::PhysicEngine(shapeLoader);
|
||||
|
||||
// Create the world
|
||||
|
|
|
@ -84,7 +84,7 @@ bool parseOptions (int argc, char**argv, OMW::Engine& engine)
|
|||
//If there is an openmw.cfg in the current path use that as global config
|
||||
//Otherwise try getPath
|
||||
std::string cfgFile = "openmw.cfg";
|
||||
if(!isFile(cfgFile.c_str()))
|
||||
if(!Misc::isFile(cfgFile.c_str()))
|
||||
{
|
||||
cfgFile = Files::getPath (Files::Path_ConfigGlobal, "openmw", "openmw.cfg");
|
||||
}
|
||||
|
|
|
@ -42,7 +42,7 @@ namespace MWClass
|
|||
ItemLevList::registerSelf();
|
||||
Light::registerSelf();
|
||||
Lockpick::registerSelf();
|
||||
Misc::registerSelf();
|
||||
Miscellaneous::registerSelf();
|
||||
Probe::registerSelf();
|
||||
Repair::registerSelf();
|
||||
Static::registerSelf();
|
||||
|
|
|
@ -14,11 +14,11 @@
|
|||
|
||||
namespace MWClass
|
||||
{
|
||||
void Misc::insertObj (const MWWorld::Ptr& ptr, MWRender::CellRenderImp& cellRender,
|
||||
void Miscellaneous::insertObj (const MWWorld::Ptr& ptr, MWRender::CellRenderImp& cellRender,
|
||||
MWWorld::Environment& environment) const
|
||||
{
|
||||
ESMS::LiveCellRef<ESM::Misc, MWWorld::RefData> *ref =
|
||||
ptr.get<ESM::Misc>();
|
||||
ESMS::LiveCellRef<ESM::Miscellaneous, MWWorld::RefData> *ref =
|
||||
ptr.get<ESM::Miscellaneous>();
|
||||
|
||||
assert (ref->base != NULL);
|
||||
const std::string &model = ref->base->model;
|
||||
|
@ -31,39 +31,39 @@ namespace MWClass
|
|||
}
|
||||
}
|
||||
|
||||
std::string Misc::getName (const MWWorld::Ptr& ptr) const
|
||||
std::string Miscellaneous::getName (const MWWorld::Ptr& ptr) const
|
||||
{
|
||||
ESMS::LiveCellRef<ESM::Misc, MWWorld::RefData> *ref =
|
||||
ptr.get<ESM::Misc>();
|
||||
ESMS::LiveCellRef<ESM::Miscellaneous, MWWorld::RefData> *ref =
|
||||
ptr.get<ESM::Miscellaneous>();
|
||||
|
||||
return ref->base->name;
|
||||
}
|
||||
|
||||
boost::shared_ptr<MWWorld::Action> Misc::activate (const MWWorld::Ptr& ptr,
|
||||
boost::shared_ptr<MWWorld::Action> Miscellaneous::activate (const MWWorld::Ptr& ptr,
|
||||
const MWWorld::Ptr& actor, const MWWorld::Environment& environment) const
|
||||
{
|
||||
return boost::shared_ptr<MWWorld::Action> (
|
||||
new MWWorld::ActionTake (ptr));
|
||||
}
|
||||
|
||||
void Misc::insertIntoContainer (const MWWorld::Ptr& ptr,
|
||||
void Miscellaneous::insertIntoContainer (const MWWorld::Ptr& ptr,
|
||||
MWWorld::ContainerStore<MWWorld::RefData>& containerStore) const
|
||||
{
|
||||
insertIntoContainerStore (ptr, containerStore.miscItems);
|
||||
}
|
||||
|
||||
std::string Misc::getScript (const MWWorld::Ptr& ptr) const
|
||||
std::string Miscellaneous::getScript (const MWWorld::Ptr& ptr) const
|
||||
{
|
||||
ESMS::LiveCellRef<ESM::Misc, MWWorld::RefData> *ref =
|
||||
ptr.get<ESM::Misc>();
|
||||
ESMS::LiveCellRef<ESM::Miscellaneous, MWWorld::RefData> *ref =
|
||||
ptr.get<ESM::Miscellaneous>();
|
||||
|
||||
return ref->base->script;
|
||||
}
|
||||
|
||||
void Misc::registerSelf()
|
||||
void Miscellaneous::registerSelf()
|
||||
{
|
||||
boost::shared_ptr<Class> instance (new Misc);
|
||||
boost::shared_ptr<Class> instance (new Miscellaneous);
|
||||
|
||||
registerClass (typeid (ESM::Misc).name(), instance);
|
||||
registerClass (typeid (ESM::Miscellaneous).name(), instance);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
namespace MWClass
|
||||
{
|
||||
class Misc : public MWWorld::Class
|
||||
class Miscellaneous : public MWWorld::Class
|
||||
{
|
||||
public:
|
||||
|
||||
|
|
|
@ -124,7 +124,7 @@ void ExteriorCellRender::insertMesh(const std::string &mesh, Ogre::Vector3 vec,
|
|||
}
|
||||
|
||||
mNpcPart = parent->createChildSceneNode(sceneNodeName);
|
||||
MeshPtr good2 = NIFLoader::load(mesh);
|
||||
MeshPtr good2 = NifOgre::NIFLoader::load(mesh);
|
||||
|
||||
MovableObject *ent = mScene.getMgr()->createEntity(mesh);
|
||||
|
||||
|
@ -213,7 +213,7 @@ void ExteriorCellRender::insertMesh(const std::string &mesh)
|
|||
{
|
||||
assert (mInsert);
|
||||
|
||||
NIFLoader::load(mesh);
|
||||
NifOgre::NIFLoader::load(mesh);
|
||||
Entity *ent = mScene.getMgr()->createEntity(mesh);
|
||||
|
||||
if(!isStatic)
|
||||
|
|
|
@ -106,7 +106,7 @@ void InteriorCellRender::insertMesh(const std::string &mesh, Ogre::Vector3 vec,
|
|||
npcPart = parent->createChildSceneNode(sceneNodeName);
|
||||
//npcPart->showBoundingBox(true);
|
||||
|
||||
MeshPtr good2 = NIFLoader::load(mesh);
|
||||
MeshPtr good2 = NifOgre::NIFLoader::load(mesh);
|
||||
|
||||
MovableObject *ent = scene.getMgr()->createEntity(mesh);
|
||||
//ent->extr
|
||||
|
@ -184,7 +184,7 @@ void InteriorCellRender::insertMesh(const std::string &mesh)
|
|||
{
|
||||
assert (insert);
|
||||
|
||||
NIFLoader::load(mesh);
|
||||
NifOgre::NIFLoader::load(mesh);
|
||||
MovableObject *ent = scene.getMgr()->createEntity(mesh);
|
||||
insert->attachObject(ent);
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ namespace MWWorld
|
|||
ESMS::CellRefList<ESM::Ingredient, D> ingreds;
|
||||
ESMS::CellRefList<ESM::Light, D> lights;
|
||||
ESMS::CellRefList<ESM::Tool, D> lockpicks;
|
||||
ESMS::CellRefList<ESM::Misc, D> miscItems;
|
||||
ESMS::CellRefList<ESM::Miscellaneous, D> miscItems;
|
||||
ESMS::CellRefList<ESM::Probe, D> probes;
|
||||
ESMS::CellRefList<ESM::Repair, D> repairs;
|
||||
ESMS::CellRefList<ESM::Weapon, D> weapons;
|
||||
|
|
|
@ -135,7 +135,7 @@ namespace MWWorld
|
|||
if (ESMS::LiveCellRef<ESM::Tool, RefData> *ref = cell.lockpicks.find (name))
|
||||
return Ptr (ref, &cell);
|
||||
|
||||
if (ESMS::LiveCellRef<ESM::Misc, RefData> *ref = cell.miscItems.find (name))
|
||||
if (ESMS::LiveCellRef<ESM::Miscellaneous, RefData> *ref = cell.miscItems.find (name))
|
||||
return Ptr (ref, &cell);
|
||||
|
||||
if (ESMS::LiveCellRef<ESM::NPC, RefData> *ref = cell.npcs.find (name))
|
||||
|
@ -198,7 +198,7 @@ namespace MWWorld
|
|||
if (ESMS::LiveCellRef<ESM::Tool, RefData> *ref = searchViaHandle (handle, cell.lockpicks))
|
||||
return Ptr (ref, &cell);
|
||||
|
||||
if (ESMS::LiveCellRef<ESM::Misc, RefData> *ref = searchViaHandle (handle, cell.miscItems))
|
||||
if (ESMS::LiveCellRef<ESM::Miscellaneous, RefData> *ref = searchViaHandle (handle, cell.miscItems))
|
||||
return Ptr (ref, &cell);
|
||||
|
||||
if (ESMS::LiveCellRef<ESM::NPC, RefData> *ref = searchViaHandle (handle, cell.npcs))
|
||||
|
|
|
@ -29,8 +29,12 @@
|
|||
#include "bsa_file.hpp"
|
||||
#include <libs/mangle/stream/clients/ogre_datastream.hpp>
|
||||
|
||||
namespace
|
||||
{
|
||||
|
||||
using namespace Ogre;
|
||||
using namespace Mangle::Stream;
|
||||
using namespace Bsa;
|
||||
|
||||
/// An OGRE Archive wrapping a BSAFile archive
|
||||
class BSAArchive : public Archive
|
||||
|
@ -155,6 +159,11 @@ static void insertBSAFactory()
|
|||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
namespace Bsa
|
||||
{
|
||||
|
||||
// The function below is the only publicly exposed part of this file
|
||||
|
||||
void addBSA(const std::string& name, const std::string& group)
|
||||
|
@ -163,3 +172,5 @@ void addBSA(const std::string& name, const std::string& group)
|
|||
ResourceGroupManager::getSingleton().
|
||||
addResourceLocation(name, "BSA", group);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -23,11 +23,16 @@
|
|||
|
||||
#include <string>
|
||||
|
||||
#ifndef _BSA_ARCHIVE_H_
|
||||
#define _BSA_ARCHIVE_H_
|
||||
#ifndef BSA_BSA_ARCHIVE_H
|
||||
#define BSA_BSA_ARCHIVE_H
|
||||
|
||||
namespace Bsa
|
||||
{
|
||||
|
||||
/// Add the given BSA file as an input archive in the Ogre resource
|
||||
/// system.
|
||||
void addBSA(const std::string& file, const std::string& group="General");
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -32,6 +32,7 @@
|
|||
|
||||
using namespace std;
|
||||
using namespace Mangle::Stream;
|
||||
using namespace Bsa;
|
||||
|
||||
/// Error handling
|
||||
void BSAFile::fail(const string &msg)
|
||||
|
|
|
@ -21,8 +21,8 @@
|
|||
|
||||
*/
|
||||
|
||||
#ifndef _BSA_FILE_H_
|
||||
#define _BSA_FILE_H_
|
||||
#ifndef BSA_BSA_FILE_H
|
||||
#define BSA_BSA_FILE_H
|
||||
|
||||
#include <libs/mangle/stream/stream.hpp>
|
||||
#include <libs/platform/stdint.h>
|
||||
|
@ -31,6 +31,9 @@
|
|||
#include <vector>
|
||||
#include <map>
|
||||
|
||||
namespace Bsa
|
||||
{
|
||||
|
||||
/**
|
||||
This class is used to read "Bethesda Archive Files", or BSAs.
|
||||
*/
|
||||
|
@ -131,4 +134,6 @@ class BSAFile
|
|||
{ return files; }
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
#include <iostream>
|
||||
|
||||
using namespace std;
|
||||
using namespace Bsa;
|
||||
|
||||
BSAFile bsa;
|
||||
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
|
||||
using namespace std;
|
||||
using namespace Mangle::Stream;
|
||||
using namespace Bsa;
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
|
|
|
@ -19,7 +19,7 @@ int main()
|
|||
Root *root = new Root("","","");
|
||||
|
||||
// Add the BSA
|
||||
addBSA("../../data/Morrowind.bsa");
|
||||
Bsa::addBSA("../../data/Morrowind.bsa");
|
||||
|
||||
// Pick a sample file
|
||||
String tex = "textures\\tx_natural_cavern_wall13.dds";
|
||||
|
|
|
@ -3,6 +3,8 @@
|
|||
namespace ESM
|
||||
{
|
||||
|
||||
using namespace Misc;
|
||||
|
||||
ESM_Context ESMReader::getContext()
|
||||
{
|
||||
// Update the file position before returning
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
namespace ESM
|
||||
{
|
||||
|
||||
void Misc::load(ESMReader &esm)
|
||||
void Miscellaneous::load(ESMReader &esm)
|
||||
{
|
||||
model = esm.getHNString("MODL");
|
||||
name = esm.getHNOString("FNAM");
|
||||
|
|
|
@ -11,7 +11,7 @@ namespace ESM
|
|||
* carried, bought and sold. It also includes keys.
|
||||
*/
|
||||
|
||||
struct Misc
|
||||
struct Miscellaneous
|
||||
{
|
||||
struct MCDTstruct
|
||||
{
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
|
||||
#include <iostream>
|
||||
#include <stdexcept>
|
||||
#include <algorithm>
|
||||
|
||||
namespace ESMS
|
||||
{
|
||||
|
@ -99,7 +100,7 @@ namespace ESMS
|
|||
CellRefList<ItemLevList, D> itemLists;
|
||||
CellRefList<ESM::Light, D> lights;
|
||||
CellRefList<Tool, D> lockpicks;
|
||||
CellRefList<Misc, D> miscItems;
|
||||
CellRefList<Miscellaneous, D> miscItems;
|
||||
CellRefList<NPC, D> npcs;
|
||||
CellRefList<Probe, D> probes;
|
||||
CellRefList<Repair, D> repairs;
|
||||
|
@ -187,7 +188,14 @@ namespace ESMS
|
|||
// Get each reference in turn
|
||||
while(cell->getNextRef(esm, ref))
|
||||
{
|
||||
int rec = store.find(ref.refID);
|
||||
std::string lowerCase;
|
||||
|
||||
std::transform (ref.refID.begin(), ref.refID.end(), std::back_inserter (lowerCase),
|
||||
(int(*)(int)) std::tolower);
|
||||
|
||||
int rec = store.find(ref.refID);
|
||||
|
||||
ref.refID = lowerCase;
|
||||
|
||||
/* We can optimize this further by storing the pointer to the
|
||||
record itself in store.all, so that we don't need to look it
|
||||
|
|
|
@ -52,7 +52,7 @@ namespace ESMS
|
|||
RecListT<ItemLevList> itemLists;
|
||||
RecListT<Light> lights;
|
||||
RecListT<Tool> lockpicks;
|
||||
RecListT<Misc> miscItems;
|
||||
RecListT<Miscellaneous> miscItems;
|
||||
RecListWithIDT<NPC> npcs;
|
||||
RecListT<LoadNPCC> npcChange;
|
||||
RecListT<Probe> probes;
|
||||
|
|
|
@ -4,9 +4,13 @@
|
|||
|
||||
#include <OgrePrerequisites.h>
|
||||
|
||||
namespace Misc
|
||||
{
|
||||
|
||||
bool isFile(const char *name)
|
||||
{
|
||||
boost::filesystem::path cfg_file_path(name);
|
||||
return boost::filesystem::exists(cfg_file_path);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,8 +1,11 @@
|
|||
#ifndef __FILEOPS_H_
|
||||
#define __FILEOPS_H_
|
||||
#ifndef MISC_FILEOPS_H
|
||||
#define MISC_FILEOPS_H
|
||||
|
||||
#include <string>
|
||||
|
||||
namespace Misc
|
||||
{
|
||||
|
||||
/// Check if a given path is an existing file (not a directory)
|
||||
bool isFile(const char *name);
|
||||
|
||||
|
@ -10,4 +13,6 @@ bool isFile(const char *name);
|
|||
std::string macBundlePath();
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -21,14 +21,17 @@
|
|||
|
||||
*/
|
||||
|
||||
#ifndef _SLICE_ARRAY_H_
|
||||
#define _SLICE_ARRAY_H_
|
||||
#ifndef MISC_SLICE_ARRAY_H
|
||||
#define MISC_SLICE_ARRAY_H
|
||||
|
||||
// A simple array implementation containing a pointer and a
|
||||
// length. Used for holding slices into a data buffer.
|
||||
#include <string.h>
|
||||
#include <string>
|
||||
|
||||
namespace Misc
|
||||
{
|
||||
|
||||
template <class T>
|
||||
struct SliceArray
|
||||
{
|
||||
|
@ -74,4 +77,6 @@ typedef SliceArray<char> SString;
|
|||
typedef SliceArray<int> IntArray;
|
||||
typedef SliceArray<float> FloatArray;
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -3,6 +3,9 @@
|
|||
#include <string.h>
|
||||
#include <libs/platform/strings.h>
|
||||
|
||||
namespace Misc
|
||||
{
|
||||
|
||||
bool begins(const char* str1, const char* str2)
|
||||
{
|
||||
while(*str2)
|
||||
|
@ -57,3 +60,5 @@ bool iends(const char* str1, const char* str2)
|
|||
|
||||
return strcasecmp(str2, str1+len1-len2) == 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
#ifndef __STRINGOPS_H
|
||||
#define __STRINGOPS_H
|
||||
#ifndef MISC_STRINGOPS_H
|
||||
#define MISC_STRINGOPS_H
|
||||
|
||||
namespace Misc
|
||||
{
|
||||
|
||||
/// Returns true if str1 begins with substring str2
|
||||
bool begins(const char* str1, const char* str2);
|
||||
|
@ -13,4 +16,6 @@ bool ibegins(const char* str1, const char* str2);
|
|||
/// Case insensitive, returns true if str1 ends with substring str2
|
||||
bool iends(const char* str1, const char* str2);
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -8,21 +8,21 @@ using namespace std;
|
|||
|
||||
int main()
|
||||
{
|
||||
SString s, t;
|
||||
s = SString("hello");
|
||||
Misc::SString s, t;
|
||||
s = Misc::SString("hello");
|
||||
cout << s.toString() << ", len=" << s.length << endl;
|
||||
cout << (s=="hel") << (s=="hell") << (s=="hello") << endl;
|
||||
t = s;
|
||||
|
||||
s = SString("othello"+2, 4);
|
||||
s = Misc::SString("othello"+2, 4);
|
||||
cout << s.toString() << ", len=" << s.length << endl;
|
||||
cout << (s=="hel") << (s=="hell") << (s=="hello") << endl;
|
||||
|
||||
cout << (s==t) << (SString("hello")==t) << endl;
|
||||
cout << (s==t) << (Misc::SString("hello")==t) << endl;
|
||||
|
||||
const int arr[4] = {1,2,3,4};
|
||||
|
||||
IntArray ia(arr,4);
|
||||
Misc::IntArray ia(arr,4);
|
||||
|
||||
cout << ia.length << " " << ia.ptr[2] << endl;
|
||||
|
||||
|
|
|
@ -4,45 +4,45 @@
|
|||
|
||||
int main()
|
||||
{
|
||||
assert(begins("abc", "a"));
|
||||
assert(begins("abc", "ab"));
|
||||
assert(begins("abc", "abc"));
|
||||
assert(begins("abcd", "abc"));
|
||||
assert(Misc::begins("abc", "a"));
|
||||
assert(Misc::begins("abc", "ab"));
|
||||
assert(Misc::begins("abc", "abc"));
|
||||
assert(Misc::begins("abcd", "abc"));
|
||||
|
||||
assert(!begins("abc", "b"));
|
||||
assert(!begins("abc", "bc"));
|
||||
assert(!begins("abc", "bcd"));
|
||||
assert(!begins("abc", "abcd"));
|
||||
assert(!Misc::begins("abc", "b"));
|
||||
assert(!Misc::begins("abc", "bc"));
|
||||
assert(!Misc::begins("abc", "bcd"));
|
||||
assert(!Misc::begins("abc", "abcd"));
|
||||
|
||||
assert(ibegins("Abc", "a"));
|
||||
assert(ibegins("aBc", "ab"));
|
||||
assert(ibegins("abC", "abc"));
|
||||
assert(ibegins("abcD", "abc"));
|
||||
assert(Misc::ibegins("Abc", "a"));
|
||||
assert(Misc::ibegins("aBc", "ab"));
|
||||
assert(Misc::ibegins("abC", "abc"));
|
||||
assert(Misc::ibegins("abcD", "abc"));
|
||||
|
||||
assert(!ibegins("abc", "b"));
|
||||
assert(!ibegins("abc", "bc"));
|
||||
assert(!ibegins("abc", "bcd"));
|
||||
assert(!ibegins("abc", "abcd"));
|
||||
assert(!Misc::ibegins("abc", "b"));
|
||||
assert(!Misc::ibegins("abc", "bc"));
|
||||
assert(!Misc::ibegins("abc", "bcd"));
|
||||
assert(!Misc::ibegins("abc", "abcd"));
|
||||
|
||||
assert(ends("abc", "c"));
|
||||
assert(ends("abc", "bc"));
|
||||
assert(ends("abc", "abc"));
|
||||
assert(ends("abcd", "abcd"));
|
||||
assert(Misc::ends("abc", "c"));
|
||||
assert(Misc::ends("abc", "bc"));
|
||||
assert(Misc::ends("abc", "abc"));
|
||||
assert(Misc::ends("abcd", "abcd"));
|
||||
|
||||
assert(!ends("abc", "b"));
|
||||
assert(!ends("abc", "ab"));
|
||||
assert(!ends("abc", "bcd"));
|
||||
assert(!ends("abc", "abcd"));
|
||||
assert(!Misc::ends("abc", "b"));
|
||||
assert(!Misc::ends("abc", "ab"));
|
||||
assert(!Misc::ends("abc", "bcd"));
|
||||
assert(!Misc::ends("abc", "abcd"));
|
||||
|
||||
assert(iends("Abc", "c"));
|
||||
assert(iends("aBc", "bc"));
|
||||
assert(iends("abC", "abc"));
|
||||
assert(iends("abcD", "abcd"));
|
||||
assert(Misc::iends("Abc", "c"));
|
||||
assert(Misc::iends("aBc", "bc"));
|
||||
assert(Misc::iends("abC", "abc"));
|
||||
assert(Misc::iends("abcD", "abcd"));
|
||||
|
||||
assert(!iends("abc", "b"));
|
||||
assert(!iends("abc", "ab"));
|
||||
assert(!iends("abc", "bcd"));
|
||||
assert(!iends("abc", "abcd"));
|
||||
assert(!Misc::iends("abc", "b"));
|
||||
assert(!Misc::iends("abc", "ab"));
|
||||
assert(!Misc::iends("abc", "bcd"));
|
||||
assert(!Misc::iends("abc", "abcd"));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -46,7 +46,7 @@ public:
|
|||
class Named : public Controlled
|
||||
{
|
||||
public:
|
||||
SString name;
|
||||
Misc::SString name;
|
||||
|
||||
void read(NIFFile *nif)
|
||||
{
|
||||
|
|
|
@ -37,7 +37,7 @@ public:
|
|||
// internal (data is inside the nif itself) texture?
|
||||
bool external;
|
||||
|
||||
SString filename; // In case of external textures
|
||||
Misc::SString filename; // In case of external textures
|
||||
NiPixelDataPtr data; // In case of internal textures
|
||||
|
||||
/* Pixel layout
|
||||
|
@ -88,7 +88,7 @@ public:
|
|||
class ShapeData : public Record
|
||||
{
|
||||
public:
|
||||
FloatArray vertices, normals, colors, uvlist;
|
||||
Misc::FloatArray vertices, normals, colors, uvlist;
|
||||
const Vector *center;
|
||||
float radius;
|
||||
|
||||
|
@ -123,7 +123,7 @@ class NiTriShapeData : public ShapeData
|
|||
{
|
||||
public:
|
||||
// Triangles, three vertex indices per triangle
|
||||
SliceArray<short> triangles;
|
||||
Misc::SliceArray<short> triangles;
|
||||
|
||||
void read(NIFFile *nif)
|
||||
{
|
||||
|
@ -377,7 +377,7 @@ public:
|
|||
{
|
||||
const BoneTrafo *trafo;
|
||||
const Vector4 *unknown;
|
||||
SliceArray<VertWeight> weights;
|
||||
Misc::SliceArray<VertWeight> weights;
|
||||
};
|
||||
|
||||
const BoneTrafo *trafo;
|
||||
|
|
|
@ -65,7 +65,7 @@ public:
|
|||
struct TextKey
|
||||
{
|
||||
float time;
|
||||
SString text;
|
||||
Misc::SString text;
|
||||
};
|
||||
|
||||
std::vector<TextKey> list;
|
||||
|
@ -93,7 +93,7 @@ public:
|
|||
"MRK" - marker, only visible in the editor, not rendered in-game
|
||||
"NCO" - no collision
|
||||
*/
|
||||
SString string;
|
||||
Misc::SString string;
|
||||
|
||||
void read(NIFFile *nif)
|
||||
{
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
#include <iostream>
|
||||
using namespace std;
|
||||
using namespace Nif;
|
||||
using namespace Misc;
|
||||
|
||||
/* This file implements functions from the NIFFile class. It is also
|
||||
where we stash all the functions we couldn't add as inline
|
||||
|
|
|
@ -128,24 +128,24 @@ class NIFFile
|
|||
char getByte() { return getType<char>(); }
|
||||
|
||||
template<class X>
|
||||
SliceArray<X> getArrayLen(int num)
|
||||
{ return SliceArray<X>((const X*)inp->getPtr(num*sizeof(X)),num); }
|
||||
Misc::SliceArray<X> getArrayLen(int num)
|
||||
{ return Misc::SliceArray<X>((const X*)inp->getPtr(num*sizeof(X)),num); }
|
||||
|
||||
template<class X>
|
||||
SliceArray<X> getArray()
|
||||
Misc::SliceArray<X> getArray()
|
||||
{
|
||||
int len = getInt();
|
||||
return getArrayLen<X>(len);
|
||||
}
|
||||
|
||||
SString getString() { return getArray<char>(); }
|
||||
Misc::SString getString() { return getArray<char>(); }
|
||||
|
||||
const Vector *getVector() { return getPtr<Vector>(); }
|
||||
const Matrix *getMatrix() { return getPtr<Matrix>(); }
|
||||
const Transformation *getTrafo() { return getPtr<Transformation>(); }
|
||||
const Vector4 *getVector4() { return getPtr<Vector4>(); }
|
||||
|
||||
FloatArray getFloatLen(int num)
|
||||
Misc::FloatArray getFloatLen(int num)
|
||||
{ return getArrayLen<float>(num); }
|
||||
|
||||
// For fixed-size strings where you already know the size
|
||||
|
|
|
@ -24,6 +24,8 @@
|
|||
#ifndef _NIF_RECORD_H_
|
||||
#define _NIF_RECORD_H_
|
||||
|
||||
#include <components/misc/slice_array.hpp>
|
||||
|
||||
namespace Nif
|
||||
{
|
||||
|
||||
|
@ -88,7 +90,7 @@ struct Record
|
|||
{
|
||||
// Record type and type name
|
||||
int recType;
|
||||
SString recName;
|
||||
Misc::SString recName;
|
||||
|
||||
Record() : recType(RC_MISSING) {}
|
||||
|
||||
|
|
|
@ -49,7 +49,7 @@ using namespace Ogre;
|
|||
using namespace Nif;
|
||||
using namespace Mangle::VFS;
|
||||
|
||||
|
||||
using namespace NifBullet;
|
||||
|
||||
//====================================================================================================
|
||||
Ogre::Matrix3 ManualBulletShapeLoader::getMatrix(Nif::Transformation* tr)
|
||||
|
|
|
@ -58,6 +58,8 @@ namespace Mangle
|
|||
}
|
||||
}
|
||||
|
||||
namespace NifBullet
|
||||
{
|
||||
|
||||
/**
|
||||
*Load bulletShape from NIF files.
|
||||
|
@ -126,4 +128,6 @@ private:
|
|||
btCompoundShape* currentShape;//the shape curently under construction
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -90,11 +90,11 @@ int main()
|
|||
|
||||
|
||||
//Ressources stuff
|
||||
addBSA("Morrowind.bsa");
|
||||
Bsa::addBSA("Morrowind.bsa");
|
||||
//Ogre::ResourceGroupManager::getSingleton().createResourceGroup("general");
|
||||
|
||||
Ogre::ResourcePtr ptr = BulletShapeManager::getSingleton().getByName(mesh,"General");
|
||||
ManualBulletShapeLoader* ShapeLoader = new ManualBulletShapeLoader();
|
||||
NifBullet::ManualBulletShapeLoader* ShapeLoader = new NifBullet::ManualBulletShapeLoader();
|
||||
|
||||
ShapeLoader->load(mesh,"General");
|
||||
//BulletShapeManager::getSingleton().unload(mesh);
|
||||
|
|
|
@ -50,6 +50,8 @@ using namespace std;
|
|||
using namespace Ogre;
|
||||
using namespace Nif;
|
||||
using namespace Mangle::VFS;
|
||||
using namespace Misc;
|
||||
using namespace NifOgre;
|
||||
|
||||
NIFLoader& NIFLoader::getSingleton()
|
||||
{
|
||||
|
|
|
@ -49,6 +49,9 @@ namespace Mangle
|
|||
}
|
||||
}
|
||||
|
||||
namespace NifOgre
|
||||
{
|
||||
|
||||
/** Manual resource loader for NIF meshes. This is the main class
|
||||
responsible for translating the internal NIF mesh structure into
|
||||
something Ogre can use. Later it will also handle the insertion of
|
||||
|
@ -139,4 +142,6 @@ class NIFLoader : Ogre::ManualResourceLoader
|
|||
Ogre::SkeletonPtr mSkel;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -13,11 +13,11 @@ const char* mesh = "meshes\\f\\ex_ashl_a_banner_r.nif";
|
|||
void C::doTest()
|
||||
{
|
||||
// Add Morrowind.bsa resource location
|
||||
addBSA("../../data/Morrowind.bsa");
|
||||
Bsa::addBSA("../../data/Morrowind.bsa");
|
||||
|
||||
// Insert the mesh
|
||||
NIFLoader::load(mesh);
|
||||
NIFLoader::load(mesh);
|
||||
NifOgre::NIFLoader::load(mesh);
|
||||
NifOgre::NIFLoader::load(mesh);
|
||||
|
||||
/*
|
||||
SceneNode *node = mgr->getRootSceneNode()->createChildSceneNode("node");
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
tables_gen.hpp: gen_iconv
|
||||
gen_iconv > tables_gen.hpp
|
||||
./gen_iconv > tables_gen.hpp
|
||||
|
||||
gen_iconv: gen_iconv.cpp
|
||||
g++ -Wall $^ -o $@
|
||||
|
||||
clean:
|
||||
rm -f ./gen_iconv
|
|
@ -74,13 +74,28 @@ int write_table(const std::string &charset, const std::string &tableName)
|
|||
|
||||
// Finish table
|
||||
cout << "};\n";
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
cout << hex;
|
||||
|
||||
// Write header guard
|
||||
cout << "#ifndef COMPONENTS_TOUTF8_TABLE_GEN_H\n#define COMPONENTS_TOUTF8_TABLE_GEN_H\n\n";
|
||||
|
||||
// Write namespace
|
||||
cout << "namespace ToUTF8\n{\n\n";
|
||||
|
||||
// English
|
||||
write_table("WINDOWS-1252", "windows_1252");
|
||||
|
||||
// Close namespace
|
||||
cout << "\n}\n\n";
|
||||
|
||||
// Close header guard
|
||||
cout << "#endif\n\n";
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
#ifndef COMPONENTS_TOUTF8_TABLE_GEN_H
|
||||
#define COMPONENTS_TOUTF8_TABLE_GEN_H
|
||||
|
||||
namespace ToUTF8
|
||||
{
|
||||
|
||||
static char windows_1252[] =
|
||||
{
|
||||
0x1, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
|
@ -257,3 +263,8 @@ static char windows_1252[] =
|
|||
0x2, 0xc3, 0xbe, 0x0, 0x0, 0x0,
|
||||
0x2, 0xc3, 0xbf, 0x0, 0x0, 0x0
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -131,7 +131,7 @@ std::string ToUTF8::getUtf8(ToUTF8::FromType from)
|
|||
// Pick translation array
|
||||
const char *arr;
|
||||
if(from == ToUTF8::WINDOWS_1252)
|
||||
arr = windows_1252;
|
||||
arr = ToUTF8::windows_1252;
|
||||
else
|
||||
assert(0);
|
||||
|
||||
|
|
Loading…
Reference in a new issue