Beispiel #1
0
    private static BSPTexture ResizeTextures(BSPTexture texture, Vector2 size)
    {
        int width  = (int)size.x;
        int height = (int)size.y;

        if (texture.width > width && texture.height > height)
        {
            return(texture);
        }

        byte[] data = new byte[width * height * 4];
        for (int y = 0; y < height; ++y)
        {
            for (int x = 0; x < width; ++x)
            {
                int rx       = x % texture.width;
                int ry       = y % texture.height;
                int srcIndex = 4 * (y * width + x);
                int dstIndex = 4 * (ry * texture.width + rx);
                data[srcIndex]     = texture.data[dstIndex];
                data[srcIndex + 1] = texture.data[dstIndex + 1];
                data[srcIndex + 2] = texture.data[dstIndex + 2];
                data[srcIndex + 3] = texture.data[dstIndex + 3];
            }
        }

        return(new BSPTexture(texture.name, data, width, height));
    }
Beispiel #2
0
    private static BSPTexture[] AdjustTextureSizes(BSPFile bsp)
    {
        var textures = bsp.textures;
        var sizes    = new Vector2[textures.Length];

        foreach (var geometry in bsp.models[0].geometries)
        {
            var g       = geometry.mesh;
            var tex_id  = geometry.tex_id;
            var texture = textures[tex_id];
            for (int i = 0; i < g.vertices.Length; ++i)
            {
                var   uv = g.uvs[i];
                float w  = texture.width * uv.x;
                float h  = texture.height * uv.y;

                if (w > sizes[tex_id].x || h > sizes[tex_id].y)
                {
                    sizes[tex_id] = new Vector2(w, h);
                }
            }
        }

        var result = new BSPTexture[textures.Length];

        for (int i = 0; i < sizes.Length; ++i)
        {
            result[i] = ResizeTextures(textures[i], sizes[i]);
        }
        return(result);
    }
Beispiel #3
0
    void ReadTextures(DataStream ds)
    {
        textures = new BSPTexture[miptex_directory.Length];

        for (int i = 0; i < miptex_directory.Length; ++i)
        {
            var entry      = this.miptex_directory[i];
            var image_data = ImageUtil.getImageData(entry.name, ds, entry);
            var data       = ImageUtil.expandImageData(image_data, PAL.DEFAULT_PALETTE);
            textures[i] = new BSPTexture(entry.name, data, image_data.width, image_data.height);
        }
    }
Beispiel #4
0
    private BSPTexture[] expandSkins(ImageData[] skins)
    {
        var textures = new BSPTexture[skins.Length];

        for (int i = 0; i < skins.Length; ++i)
        {
            var skin = skins[i];
            var data = ImageUtil.expandImageData(skin, PAL.DEFAULT_PALETTE);
            textures[i] = new BSPTexture("skin-" + i, data, skin.width, skin.height);
        }

        return(textures);
    }
Beispiel #5
0
    static Color32[] GetTexturePixels(BSPTexture t)
    {
        Color32[] pixels = new Color32[t.width * t.height];
        for (int i = 0, j = 0; i < pixels.Length; ++i)
        {
            pixels[i] = new Color32(t.data[j++], t.data[j++], t.data[j++], t.data[j++]);
        }

        for (int x = 0; x < t.width; ++x)
        {
            for (int y = 0; y < t.height / 2; ++y)
            {
                int from = y * t.width + x;
                int to   = (t.height - y - 1) * t.width + x;
                var temp = pixels[to];
                pixels[to]   = pixels[from];
                pixels[from] = temp;
            }
        }

        return(pixels);
    }
Beispiel #6
0
 public TextureAtlasEntry(BSPTexture texture, int x, int y)
 {
     this.texture = texture;
     this.x       = x;
     this.y       = y;
 }