// 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; }
// 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; }
// 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; }
// 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; }
bool trpgLocalMaterial::Write(trpgWriteBuffer &buf) { if (!isValid()) return false; buf.Begin(TRPGLOCALMATERIAL); // Write the data buf.Add(baseMatTable); buf.Add(baseMat); buf.Add(sx); buf.Add(sy); buf.Add(ex); buf.Add(ey); buf.Add(destWidth); buf.Add(destHeight); buf.Add(addr[0].file); buf.Add(addr[0].offset); // and in case there's more... int numAddrs=(int)(addr.size()); if (numAddrs>1) { buf.Add(numAddrs-1); // suppressed due to breaking old readers. for (int i=1;i<numAddrs;i++) { buf.Add(addr[i].file); buf.Add(addr[i].offset); } } buf.End(); return true; }
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; }
// 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; }
// 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; }
bool trpgTileTable1_0::Write(trpgWriteBuffer &buf) { try { buf.Begin(TRPGTILETABLE); buf.Add(""); buf.End(); } catch (...) { return false; } return true; }
// 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; }
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 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; }
// 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; }
// 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; }
// 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; }
// 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; }
// 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; }
// 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; }
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 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 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; }
// 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; }
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; }
// 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; }
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; }
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; }
// 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; }
// 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; }
// 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; }
// 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; }