From f9158592e1478b2013afc7041d9ed041cf2d2f4a Mon Sep 17 00:00:00 2001 From: David Walter Seikel Date: Mon, 13 Jan 2014 19:47:58 +1000 Subject: Update Irrlicht to 1.8.1. Include actual change markers this time. lol --- .../irrlicht-1.8.1/source/Irrlicht/dmfsupport.h | 732 +++++++++++++++++++++ 1 file changed, 732 insertions(+) create mode 100644 libraries/irrlicht-1.8.1/source/Irrlicht/dmfsupport.h (limited to 'libraries/irrlicht-1.8.1/source/Irrlicht/dmfsupport.h') diff --git a/libraries/irrlicht-1.8.1/source/Irrlicht/dmfsupport.h b/libraries/irrlicht-1.8.1/source/Irrlicht/dmfsupport.h new file mode 100644 index 0000000..efa85b4 --- /dev/null +++ b/libraries/irrlicht-1.8.1/source/Irrlicht/dmfsupport.h @@ -0,0 +1,732 @@ +// Copyright (C) 2002-2012 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h +// +// This file was originally written by Salvatore Russo. +// I (Nikolaus Gebhardt) did some minor modifications changes to it and integrated +// it into Irrlicht: +// - removed STL dependency +// - removed log file and replaced it with irrlicht logging +// - adapted code formatting a bit to Irrlicht style +// - removed memory leaks +// Thanks a lot to Salvatore for his work on this and that he gave me +// his permission to add it into Irrlicht. + +// This support library has been made by Salvatore Russo and is released under GNU public license for general uses. +// For uses in Irrlicht core and only for Irrlicht related uses I release this library under zlib license. + +#ifndef __DMF_SUPPORT_H_INCLUDED__ +#define __DMF_SUPPORT_H_INCLUDED__ + +#include "irrString.h" +#include "fast_atof.h" + +namespace irr +{ +namespace scene +{ +namespace +{ + +/** A structure representing some DeleD infos. +This structure contains data about DeleD level file like: version, ambient color, number of objects etc...*/ +struct dmfHeader +{ + //main file header + core::stringc dmfName; //! tileNum;//! StringList; + +//Loads a stringlist from a file +//note that each String added to StringList +//is separated by a \\n character and it's present +//at the end of line. +/** Loads a StringList from a file. +This function loads a StringList from a file where each string is divided by a \\n char.*/ +void LoadFromFile(io::IReadFile* file, StringList& strlist) +{ + const long sz = file->getSize(); + char* buf = new char[sz+1]; + file->read(buf, sz); + buf[sz] = 0; + char* p = buf; + char* start = p; + + while(*p) + { + if (*p == '\n') + { + core::stringc str(start, (u32)(p - start - 1)); + str.trim(); + strlist.push_back(str); + start = p+1; + } + + ++p; + } + + if (p - start > 1) + { + core::stringc str(start, (u32)(p - start - 1)); + str.trim(); + strlist.push_back(str); + } + + delete [] buf; +}; + +//This function subdivides a string in a list of strings +/** This function subdivides strings divided by divider in a list of strings. +\return A StringList made of all strings divided by divider.*/ +StringList SubdivideString(const core::stringc& str, const core::stringc& divider) +{ + StringList strings; //returned StringList + strings.clear(); //clear returned stringlist + + int c=0; + int l=str.size(); + + //process entire string + while(c& materials, + int num_material) +{ + // offset for already handled lines + const int offs=4; + + StringList temp; + StringList temp1; + + // The number of materials is predetermined + materials.reallocate(num_material); + for(int i=0; i=9) + { + temp1=SubdivideString(temp[temp.size() - 1],","); + materials[i].lightmapFlag=atoi(temp1[0].c_str()); + materials[i].lightmapName=temp1[1]; + materials[i].lightmapName.replace('\\','/'); + materials[i].lightmapBlend = atoi(temp1[2].c_str()); + } + else + { + materials[i].lightmapFlag=1; + materials[i].lightmapName=""; + } + } + return true; +} + + +/**This function extract an array of dmfMaterial from a DMF file considering 1st an 2nd layer for water plains. +You must give in input a StringList representing a DMF file loaded with LoadFromFile. +\return true if function succeed or false on fail.*/ +bool GetDMFWaterMaterials(const StringList& RawFile /**& materials/**= 0.91 + temp=SubdivideString(RawFile[0],";");//file info + + if ( temp[0] != "DeleD Map File" ) + return false;//not a deled file + + temp.clear(); + temp=SubdivideString(RawFile[1]," ");//get version + temp1=SubdivideString(temp[1],";"); + + if (atof(temp1[0].c_str()) < 0.91) + return false;//not correct version + + //end checking + temp.clear(); + temp1.clear(); + + for(int i=0;i pos; + const u32 posCount = core::strtoul10(RawFile[offs].c_str()); + ++offs; + pos.reallocate(posCount); + for (u32 i=0; i= 0.91 + temp=SubdivideString(RawFile[0],";");//file info + + if ( temp[0] != "DeleD Map File" ) + return false;//not a deled file + + temp.clear(); + temp=SubdivideString(RawFile[1]," ");//get version + temp1=SubdivideString(temp[1],";"); + + if (atof(temp1[0].c_str()) < 0.91) + return false;//not correct version + + //end checking + + temp.clear(); + temp1.clear(); + offs=offs + atoi(RawFile[offs].c_str()); + offs++; + s32 objs = atoi(RawFile[offs].c_str()); + s32 lit=0; + s32 d_lit=0; + offs++; + + //let's get position of lights in file + int i; + for(i=0;i= 0.91 + temp=SubdivideString(RawFile[0],";");//file info + + if ( temp[0] != "DeleD Map File" ) + return false;//not a deled file + + temp.clear(); + temp=SubdivideString(RawFile[1]," ");//get version + temp1=SubdivideString(temp[1],";"); + + if (atof(temp1[0].c_str()) < 0.91) + return false;//not correct version + + //end checking + + temp.clear(); + temp1.clear(); + offs=offs+atoi(RawFile[offs].c_str()); + offs++; + s32 objs=atoi(RawFile[offs].c_str()); + s32 fac=0,vert=0,tmp_sz=0,vert_cnt=0,face_cnt=0,wat_id=0; + core::dimension2d tilenum(40,40); + f32 waveheight=3.0f; + f32 wavespeed=300.0f; + f32 wavelength=80.0f; + offs++; + + for(int i=0;i