Ejemplo n.º 1
0
         /// <summary>Reads all objects in the file</summary>
         /// <returns></returns>
         /// <exception cref="Logic::FileFormatException">File contains a syntax error</exception>
         /// <exception cref="Logic::IOException">An I/O error occurred</exception>
         TFilePtr  ReadFile(MainType t, GameVersion v)
         {
            // Skip comments
            while (ReadComment())
            {}

            // Parse header
            int  ver   = ReadInt(L"File version");
            int  count = ReadInt(L"Number of objects");

            // TODO: Validate version

            // Create file
            TFile<OBJ>* file = new TFile<OBJ>(count);
            TFilePtr output(file);

            // Parse objects
            for (int i = 0; i < count; ++i)
            {
               OBJ obj(t);

               // Read header/contents/footer
               ReadHeader(obj);
               ReadObject(obj, v);
               ReadFooter(obj);

               // Add to file
               file->Objects.push_back(obj);
            }

            // Return non-generic file
            return output;
         }
Ejemplo n.º 2
0
// Serializable's functions
const bool AreaLight::Read(std::istream &stream)
{
    // Read the base
    if( !ReadHeader( stream, "Light" ) || !Light::Read( stream ) )
        return false;

    Vector<float> vertex1, vertex2, vertex3;
    int numHorizontalSamples, numVerticalSamples;
    if( !ReadVariable( stream, "vertex1", vertex1 )                             ||
        !ReadVariable( stream, "vertex2", vertex2 )                             ||
        !ReadVariable( stream, "vertex3", vertex3 )                             ||
        !ReadVariable( stream, "numHorizontalSamples", numHorizontalSamples )   ||
        !ReadVariable( stream, "numVerticalSamples", numVerticalSamples )       )
        return false;

    SetRectangularArea( vertex1, vertex2, vertex3, numHorizontalSamples, numVerticalSamples );

    if( !ReadFooter( stream, "AreaLight" ) )
        return false;

    return true;
}