// Write function
bool trpgTextureEnv::Write(trpgWriteBuffer &buf)
{
    if (!isValid())
	return false;

    buf.Begin(TRPGMAT_TEXENV);

    buf.Begin(TRPGMAT_TXENV_MODE);
    buf.Add(envMode);
    buf.End();

    buf.Begin(TRPGMAT_TXENV_FILTER);
    buf.Add(minFilter);
    buf.Add(magFilter);
    buf.End();

    buf.Begin(TRPGMAT_TXENV_WRAP);
    buf.Add(wrapS);
    buf.Add(wrapT);
    buf.End();

    buf.Begin(TRPGMAT_TXENV_BORDER);
    buf.Add(borderCol);
    buf.End();

    buf.End();

    return true;
}
Example #2
0
// Write tile table
bool trpgTileTable::Write(trpgWriteBuffer &buf)
{
	if (!isValid())
		return false;

	buf.Begin(TRPGTILETABLE2);
	
	// Write the mode
	buf.Add(mode);

	// Depending on the mode we'll have a lot or a little data
	if (mode == Local || mode == ExternalSaved) {
		// The lod sizing is redundant, but it's convenient here
		int numLod = lodInfo.size();
		buf.Add(numLod);

		// Write each terrain LOD set
		for (int i=0;i<numLod;i++) {
			LodInfo &li = lodInfo[i];
			if(localBlock) {
				// only one x and one y in a local archive
				buf.Add(1);
				buf.Add(1);
				// local blocks always use index 0
				trpgwAppAddress &ref = li.addr[0];
				buf.Add((int32)ref.file);
				buf.Add((int32)ref.offset);

				buf.Add(li.elev_min[0]);
				buf.Add(li.elev_max[0]);
			}
			else {
				buf.Add(li.numX);
				buf.Add(li.numY);
				// Now for the interesting stuff
				unsigned int j;
				for (j=0;j<li.addr.size();j++) {
					trpgwAppAddress &ref = li.addr[j];
					buf.Add((int32)ref.file);
					buf.Add((int32)ref.offset);
				}
				for (j=0;j<li.elev_min.size();j++) {
					buf.Add(li.elev_min[j]);
					buf.Add(li.elev_max[j]);
				}
			}
		}
	}

	buf.End();

	return true;
}
Example #3
0
bool trpgTexture1_0::Write(trpgWriteBuffer &buf)
{
    // Can only deal with external textures in 1.0
    if (mode != External)
        return false;

    // Write the name and use count
    buf.Add(name);
    buf.Add(useCount);

    return true;
}
Example #4
0
// Write method
bool trpgSupportStyle::Write(trpgWriteBuffer &buf)
{
    buf.Begin(TRPG_SUPPORT_STYLE);

    buf.Begin(TRPG_SUPPORT_STYLE_BASIC);
    buf.Add(type);
    buf.Add(matId);
    buf.End();

    buf.End();

    return true;
}
Example #5
0
// Write model reference
bool trpgModelRef::Write(trpgWriteBuffer &buf)
{
    if (!isValid())
	return false;
	
    buf.Begin(TRPG_MODELREF);
    buf.Add(modelRef);
    for (int i=0;i<4;i++)
	for (int j=0;j<4;j++)
	    buf.Add(m[i][j]);
    buf.End();

    return true;
}
Example #6
0
// Write method
bool trpgLabelProperty::Write(trpgWriteBuffer &buf)
{
    buf.Begin(TRPG_LABEL_PROPERTY);

    buf.Begin(TRPG_LABEL_PROPERTY_BASIC);
    buf.Add(fontId);
    buf.Add(supportId);
    buf.Add(type);
    buf.End();

    buf.End();

    return true;
}
Example #7
0
// Write it
bool trpgLayer::Write(trpgWriteBuffer &buf)
{
    if (!isValid())
	return false;

    buf.Begin(TRPG_LAYER);
    buf.Add(numChild);
    buf.Add(id);

    if ( name && strlen(name) ) {
	buf.Add(name);
    }

    buf.End();	

    return true;
}
Example #8
0
// Write Attach node
bool trpgChildRef::Write(trpgWriteBuffer &buf)
{
    if (!isValid()) return false;

    buf.Begin(TRPG_CHILDREF);

    buf.Add(lod);
    buf.Add(x);
    buf.Add(y);
    buf.Add(addr.file);
    buf.Add(addr.offset);
    buf.Add(zmin);
    buf.Add(zmax);

    buf.End();

    return true;
}
Example #9
0
// Writes this class to a write buffer
bool trpgLight::Write(trpgWriteBuffer &buf)
{
    int numVertices = lightPoints.size();

    if (!isValid())
        return false;

    buf.Begin(TRPGLIGHT);

    buf.Add(index);
    buf.Add(numVertices);
    for (unsigned int i=0;i<lightPoints.size();i++)
        buf.Add(lightPoints[i]);

    buf.End();

    return true;
}
Example #10
0
// Write Attach node
bool trpgAttach::Write(trpgWriteBuffer &buf)
{
    if (!isValid()) return false;

    buf.Begin(TRPG_ATTACH);
    buf.Add(numChild);
    buf.Add(id);
    buf.Add(parentID);
    buf.Add(childPos);

    if ( name && strlen(name) ) {
	buf.Add(name);
    }

    buf.End();

    return true;
}
Example #11
0
// Write transform
bool trpgTransform::Write(trpgWriteBuffer &buf)
{
    if (!isValid())
	return false;

    buf.Begin(TRPG_TRANSFORM);
    buf.Add(numChild);
    buf.Add(id);
    for (int i=0;i<4;i++)
	for (int j=0;j<4;j++)
	    buf.Add(m[i][j]);

    if ( name && strlen(name) ) {
	buf.Add(name);
    }
    buf.End();

    return true;
}
// Write out material table
bool trpgMatTable::Write(trpgWriteBuffer &buf)
{
	if (!isValid())
		return false;

	buf.Begin(TRPGMATTABLE);

	// Total number of materials
	buf.Add((int32)numTable);
	buf.Add((int32)numMat);

	// Write the materials
	MaterialMapType::const_iterator itr = materialMap.begin();
	for (  ; itr != materialMap.end( ); itr++) {
		((trpgMaterial)(*itr).second).Write(buf);
	}
	buf.End();

	return true;
}
Example #13
0
// Write a model reference out
bool trpgModel::Write(trpgWriteBuffer &buf)
{
    if (!isValid())
        return false;

    // We will use two different tokens to track the
    // format used in terrapage 2.2, and older versions
    int tok = TRPGMODELREF;
    if (writeHandle)
        tok = TRPGMODELREF2;

// Nick messed up the model entries when checking into txv4; now we're
// a bit stuck because U3 dbs don't have models in the U2 viewer.
// This will force the old behavior.
#ifdef OLDMODELSTYLE
    buf.Begin(tok);
    buf.Add(type);
    // writeHandle is only set for terrapage 2.2, and we use the different token.
    if (writeHandle)
    {
        buf.Add((int)handle);
    }

    if (name)
        buf.Add(name);
    else
        buf.Add(diskRef);

    buf.Add(useCount);

#else
    buf.Begin(tok);
    if (writeHandle)
    {
        buf.Add((int)handle);
    }

    buf.Add(type);
    buf.Add(name);
    buf.Add(diskRef);
    buf.Add(useCount);
#endif
    buf.End();

    return true;
}
Example #14
0
// Write to a buffer
bool trpgTileHeader::Write(trpgWriteBuffer &buf)
{
	unsigned int i;

	if (!isValid())
		return false;
	for (i=0;i<locMats.size();i++)
	    if (!locMats[i].isValid())
		return false;

	buf.Begin(TRPGTILEHEADER);

	buf.Begin(TRPG_TILE_MATLIST);
	buf.Add((int32)matList.size());
	for (i=0;i<matList.size();i++)
		buf.Add(matList[i]);
	buf.End();
	buf.Begin(TRPG_TILE_MODELLIST);
	buf.Add((int32)modelList.size());
	for (i=0;i<modelList.size();i++)
		buf.Add(modelList[i]);
	buf.End();
	buf.Begin(TRPG_TILE_DATE);
	buf.Add(date);
	buf.End();
	buf.Begin(TRPG_TILE_LOCMATLIST);
	buf.Add((int32)locMats.size());
	for (i=0;i<locMats.size();i++)
		locMats[i].Write(buf);
	buf.End();

	buf.End();

	return true;
}
Example #15
0
bool trpgTileTable1_0::Write(trpgWriteBuffer &buf)
{
    try {
        buf.Begin(TRPGTILETABLE);
        buf.Add("");
        buf.End();
    }
    catch (...) {
        return false;
    }

    return true;
}
Example #16
0
// Write out the model table
bool trpgModelTable::Write(trpgWriteBuffer &buf)
{
    if (!isValid())
        return false;

    buf.Begin(TRPGMODELTABLE);
    buf.Add((int32)modelsMap.size());
    ModelMapType::iterator itr = modelsMap.begin();
    for (  ; itr != modelsMap.end( ); itr++) {
        itr->second.Write(buf);
    }
    buf.End();

    return true;
}
Example #17
0
bool trpgRangeTable::Write(trpgWriteBuffer &buf)
{
	if (!isValid())
		return false;

	buf.Begin(TRPGRANGETABLE);
	buf.Add((int32)rangeMap.size());

	RangeMapType::iterator itr = rangeMap.begin();
	for (  ; itr != rangeMap.end( ); itr++) {
		trpgRange &range = itr->second;
		range.Write(buf);
	}

	buf.End();

	return true;
}
// Write Texture table
bool trpgTexTable::Write(trpgWriteBuffer &buf)
{
    int32 numTex;

    if (!isValid())
	return false;

    buf.Begin(TRPGTEXTABLE2);
    numTex = textureMap.size();
    buf.Add(numTex);
    TextureMapType::iterator itr = textureMap.begin();
    for (  ; itr != textureMap.end( ); itr++) {
	itr->second.Write(buf);
    }
    buf.End();

    return true;
}
Example #19
0
// Write Light table
bool trpgLightTable::Write(trpgWriteBuffer &buf)
{
    int32 numLights;

    if (!isValid())
        return false;

    buf.Begin(TRPGLIGHTTABLE);
    numLights = lightMap.size();
    buf.Add(numLights);
    LightMapType::iterator itr = lightMap.begin();
    for (  ; itr != lightMap.end( ); itr++)
        itr->second.Write(buf);
    //for (unsigned int i=0;i<lightList.size();i++)
    //    lightList[i].Write(buf);
    buf.End();

    return true;
}
Example #20
0
bool trpgSupportStyleTable::Write(trpgWriteBuffer &buf)
{
    if (!isValid())
        return false;

    buf.Begin(TRPG_SUPPORT_STYLE_TABLE);

    // Number of styles
    int numStyle = supportStyleMap.size();
    buf.Add((int32)numStyle);

    // Write the styles
    SupportStyleMapType::iterator itr = supportStyleMap.begin();
    for (  ; itr != supportStyleMap.end( ); itr++)
        itr->second.Write(buf);

    buf.End();

    return true;
}
Example #21
0
bool trpgRange::Write(trpgWriteBuffer &buf)
{
	buf.Begin(TRPG_RANGE);
	buf.Add(inLod);
	buf.Add(outLod);
	buf.Add(priority);
	buf.Add((category ? category : ""));
	buf.Add((subCategory ? subCategory : ""));
	if(writeHandle) {
		buf.Add((int32)handle);
	}
	buf.End();

	return true;
}
// Write function
bool trpgTexture::Write(trpgWriteBuffer &buf)
{
    if (!isValid()) return false;

    buf.Begin(TRPGTEXTURE);

    buf.Add(name);
    buf.Add(useCount);
    // New in 2.0 from here down
    buf.Add((unsigned char)mode);
    buf.Add((unsigned char)type);
    buf.Add(sizeX);
    buf.Add(sizeY);
    buf.Add(addr.file);
    buf.Add(addr.offset);
    buf.Add((int32)isMipmap);
    if(writeHandle) {
	buf.Add((int32)handle);
    }
    buf.End();

    return true;
}
Example #23
0
// Write out LOD
bool trpgLod::Write(trpgWriteBuffer &buf)
{
    if (!isValid())
	return false;

    buf.Begin(TRPG_LOD);
    buf.Add(id);
    buf.Add(numRange);
    buf.Add(center);
    buf.Add(switchIn);
    buf.Add(switchOut);
    buf.Add(width);

    if ( name && strlen(name) ) {
	buf.Add(name);
    } else
	buf.Add("");


    buf.End();

    return true;
}
Example #24
0
bool trpgLabelPropertyTable::Write(trpgWriteBuffer &buf)
{
    if (!isValid())
        return false;

    buf.Begin(TRPG_LABEL_PROPERTY_TABLE);

    // Number of styles
    int numProperty = labelPropertyMap.size();
    buf.Add((int32)numProperty);

    // Write the properties
    LabelPropertyMapType::iterator itr = labelPropertyMap.begin();
    for (  ; itr != labelPropertyMap.end( ); itr++)
    {
        itr->second.Write(buf);
    }

    buf.End();

    return true;
}
Example #25
0
bool trpgTextStyle::Write(trpgWriteBuffer &buf)
{
    buf.Begin(TRPG_TEXT_STYLE);

    buf.Begin(TRPG_TEXT_STYLE_BASIC);
    buf.Add(font);
    buf.Add((int32)bold);
    buf.Add((int32)italic);
    buf.Add((int32)underline);
    buf.Add(characterSize);
    buf.Add(matId);
    buf.End();

    buf.End();

    return true;
}
Example #26
0
// Write billboard
bool trpgBillboard::Write(trpgWriteBuffer &buf)
{
    if (!isValid())
	return false;

    buf.Begin(TRPG_BILLBOARD);
    buf.Add(numChild);
    buf.Add(id);
    buf.Add((uint8)type);
    buf.Add((uint8)mode);
    buf.Add(center);
    buf.Add(axis);

    if ( name && strlen(name) ) {
	buf.Add(name);
    }
    buf.End();

    return true;
}
Example #27
0
bool trpgLabel::Write(trpgWriteBuffer &buf)
{
    unsigned int i;

    buf.Begin(TRPG_LABEL);
    buf.Add(propertyId);
    buf.Add(text);
    buf.Add(alignment);
    buf.Add(tabSize);
    buf.Add(scale);
    buf.Add(thickness);
    buf.Add(desc);
    buf.Add(url);
    buf.Add(location);
    buf.Add((int)supports.size());
    for (i=0;i<supports.size();i++)
        buf.Add(supports[i]);
    buf.End();

    return true;
}
Example #28
0
// Write geometry fields.
// Order doesn't matter very much for this
bool trpgGeometry::Write(trpgWriteBuffer &buf)
{
	unsigned int i,j;

	if (!isValid())
		return false;

	buf.Begin(TRPG_GEOMETRY);
	/* Primitive info
		Primitive Type
 		Number of primitives
		Primitive array lengths
		*/
	buf.Begin(TRPG_GEOM_PRIM);
 	buf.Add(primType);
	buf.Add(numPrim);
	if (primLength.size() != 0) {
		buf.Add((uint8)1);
		for (i=0;i<(unsigned int)numPrim;i++)
			buf.Add(primLength[i]);
	} else
		buf.Add((uint8)0);
	buf.End();

	/* Material info
		Num materials
		Material indicies
		*/
	if (materials.size() > 0) {
		buf.Begin(TRPG_GEOM_MATERIAL);
		buf.Add((int32)materials.size());
		for (i=0;i<materials.size();i++)
			buf.Add(materials[i]);
		buf.End();
	}

	/* Vertices
		Float and Double should never both be here
		Num vertex
		Vertex data
		*/
	if (vertDataFloat.size() > 0) {
		buf.Begin(TRPG_GEOM_VERT32);
		int32 num = vertDataFloat.size()/3;
		buf.Add(num);
        for (i=0;i<(unsigned int)3*num;i++)
			buf.Add(vertDataFloat[i]);
		buf.End();
	}
	if (vertDataDouble.size() > 0) {
		buf.Begin(TRPG_GEOM_VERT64);
		int32 num = vertDataDouble.size()/3;
		buf.Add(num);
        for (i=0;i<(unsigned int)3*num;i++)
			buf.Add(vertDataDouble[i]);
		buf.End();
	}

	/* Normals
		Normal binding
		Num normals
		Normal data
		*/
	if (normDataFloat.size() > 0) {
		buf.Begin(TRPG_GEOM_NORM32);
		buf.Add((int32)normBind);
		int32 num = normDataFloat.size()/3;
		buf.Add(num);
        for (i=0;i<(unsigned int)3*num;i++)
			buf.Add(normDataFloat[i]);
		buf.End();
	}
	if (normDataDouble.size() > 0) {
		buf.Begin(TRPG_GEOM_NORM64);
		buf.Add((int32)normBind);
		int32 num = normDataDouble.size()/3;
		buf.Add(num);
        for (i=0;i<(unsigned int)3*num;i++)
			buf.Add(normDataDouble[i]);
		buf.End();
	}

	/* Colors
		Color binding
		Num colors
		Colors
		   */
	if (colors.size() > 0) {
		for (i=0;i<colors.size();i++) {
			trpgColorInfo &ci = colors[i];
			if (ci.data.size()) {
				buf.Begin(TRPG_GEOM_COLOR);
				buf.Add((int32)ci.type);
				buf.Add((int32)ci.bind);
				buf.Add((int32)ci.data.size());
				for (j=0;j<ci.data.size();j++)
					buf.Add(ci.data[j]);
				buf.End();
			}
		}
	}

	/* Texture coordinates
		Binding
		Num coords
		Texture coords
		*/
	for (i=0;i<texData.size();i++) {
		trpgTexData &td = texData[i];
		if (td.floatData.size()) {
			buf.Begin(TRPG_GEOM_TEX32);
			buf.Add((int32)td.bind);
			int32 num = td.floatData.size()/2;
			buf.Add(num);
            for (j=0;j<(unsigned int)num*2;j++)
				buf.Add(td.floatData[j]);
			buf.End();
		}
		if (td.doubleData.size()) {
			buf.Begin(TRPG_GEOM_TEX64);
			buf.Add((int32)td.bind);
			int32 num = td.doubleData.size()/2;
			buf.Add(num);
            for (j=0;j<(unsigned int)num*2;j++)
				buf.Add(td.doubleData[j]);
			buf.End();

			float u;
            for (j=0;j<(unsigned int)num*2;j++)
				u = (float)td.doubleData[j];
		}
	}

	// Edge flags (for triangle strips, etc..)
	if (edgeFlags.size() > 0) {
		buf.Begin(TRPG_GEOM_EFLAG);
		buf.Add((int32)edgeFlags.size());
		for (i=0;i<edgeFlags.size();i++)
			buf.Add(edgeFlags[i]);
		buf.End();
	}

	buf.End();

	return true;
}
Example #29
0
// Writes this class to a write buffer
bool trpgLightAttr::Write(trpgWriteBuffer &buf)
{
    buf.Begin(TRPGLIGHTATTR);

    buf.Begin(TRPGLIGHTATTR_BASIC);
    buf.Add((int)data.type);
    buf.Add((int)data.directionality);
    buf.Add(data.frontColor);
    buf.Add(data.frontIntensity);
    buf.Add(data.backColor);
    buf.Add(data.backIntensity);
    buf.Add(data.normal);
    buf.Add(data.smc);
    buf.Add(data.fid);
    buf.Add(data.flags);
    buf.Add(data.horizontalLobeAngle);
    buf.Add(data.verticalLobeAngle);
    buf.Add(data.lobeRollAngle);
    buf.Add(data.lobeFalloff);
    buf.Add(data.ambientIntensity);
    buf.Add((int)data.quality);
    buf.Add((int)data.randomIntensity);
    buf.End();

    buf.Begin(TRPGLIGHTATTR_RASCAL);
    buf.Add(data.rascalSignificance);
    buf.End();

    buf.Begin(TRPGLIGHTATTR_CALLIGRAPHIC);
    buf.Add(data.calligraphicAttr.drawOrder);
    buf.Add(data.calligraphicAttr.minDefocus);
    buf.Add(data.calligraphicAttr.maxDefocus);
    buf.End();

    buf.Begin(TRPGLIGHTATTR_PERFORMER);
    buf.Add(data.performerAttr.actualSize);
    buf.Add(data.performerAttr.fogScale);
    buf.Add(data.performerAttr.minPixelSize);
    buf.Add(data.performerAttr.maxPixelSize);
    buf.Add(data.performerAttr.transparentClamp);
    buf.Add(data.performerAttr.transparentFallofExp);
    buf.Add(data.performerAttr.transparentPixelSize);
    buf.Add(data.performerAttr.transparentScale);
    buf.End();

    buf.Begin(TRPGLIGHTATTR_ANIMATION);
    buf.Add(data.animationAttr.period);
    buf.Add(data.animationAttr.phaseDelay);
    buf.Add(data.animationAttr.timeOn);
    buf.Add(data.animationAttr.vector);
    buf.End();

    if (data.commentStr) {
        buf.Begin(TRPGLIGHTATTR_COMMENT);
        buf.Add(data.commentStr);
        buf.End();
    }

    if(writeHandle) {
        buf.Begin(TRPGLIGHTATTR_HANDLE);
        buf.Add((int)handle);
        buf.End();
    }
    buf.End();

    return true;
}
// Write out to a buffer
bool trpgHeader::Write(trpgWriteBuffer &buf)
{

    if (!isValid())
        return false;

    buf.Begin(TRPGHEADER);
    buf.Add((int32)verMajor);
    buf.Add((int32)verMinor);
    buf.Add((int32)dbVerMajor);
    buf.Add((int32)dbVerMinor);
    buf.Add(origin);
    buf.Add(sw);
    buf.Add(ne);
    buf.Add((uint8)tileType);

    buf.Add((int32)numLods);

    buf.Begin(TRPGHEAD_LODINFO);
    for (int i=0;i<numLods;i++) {
        buf.Add(lodSizes[i]);
        buf.Add(lodRanges[i]);
        buf.Add(tileSize[i]);
    }
    buf.End();

    buf.Add(maxGroupID);

    if((verMajor >= TRPG_NOMERGE_VERSION_MAJOR) && (verMinor >=TRPG_NOMERGE_VERSION_MINOR)) {
        buf.Add(flags);
        buf.Add(rows);
        buf.Add(cols);
    }

    buf.End();

    return true;
}