public void addBiggerImage(ImageFile im, string archiveDir)
{
ImageSize biggerImageSizeOnList = privateimgList.Max(image => image.imgSize);
// check if replacing image is supported
ImageFile imgFile = im;
ImageEngineFormat imgFileFormat = Textures.Methods.ParseFormat(imgFile.format);
if (texFormat != imgFileFormat)
throw new FormatException("Different image format, original is " + texFormat + ", new is " + imgFile.subtype());
// check if image to add is valid
if (biggerImageSizeOnList.width * 2 != imgFile.imgSize.width || biggerImageSizeOnList.height * 2 != imgFile.imgSize.height)
throw new FormatException("image size " + imgFile.imgSize + " isn't valid, must be " + new ImageSize(biggerImageSizeOnList.width * 2, biggerImageSizeOnList.height * 2));
if (privateimgList.Count <= 1)
throw new Exception("Unable to add image, texture must have more than one image present");
// !!! warning, this method breaks consistency between imgList and imageData[] !!!
ImageInfo newImgInfo = new ImageInfo();
newImgInfo.storageType = privateimgList.Find(img => img.storageType != storage.empty && img.storageType != storage.pccSto).storageType;
// for additional mipmaps keep them in external archive but only when
// texture allready have such property
if (properties.ContainsKey("TextureFileCacheName"))
newImgInfo.storageType = storage.arcCpr;
newImgInfo.imgSize = imgFile.imgSize;
newImgInfo.uncSize = imgFile.resize().Length;
newImgInfo.cprSize = 0x00; // not yet filled
newImgInfo.offset = 0x00; // not yet filled
privateimgList.Insert(0, newImgInfo); // insert new image on top of the list
//now I let believe the program that I'm doing an image replace, saving lot of code ;)
replaceImage(newImgInfo.imgSize.ToString(), im, archiveDir);
//updating num of images
numMipMaps++;
// update MipTailBaseIdx
int propVal = properties["MipTailBaseIdx"].Value.IntValue;
propVal++;
properties["MipTailBaseIdx"].Value.IntValue = propVal;
// update Sizes
properties["SizeX"].Value.IntValue = (int)newImgInfo.imgSize.width;
properties["SizeY"].Value.IntValue = (int)newImgInfo.imgSize.height;
}