private void updateRectangles() { DateTime start = DateTime.Now; const int padding = 1; if (mPacker == null) { mPacker = new RectanglePacker((int)sliderWidth.value, (int)sliderHeight.value, padding); } else { mPacker.reset((int)sliderWidth.value, (int)sliderHeight.value, padding); } for (int i = 0; i < RECTANGLE_COUNT; i++) { mPacker.insertRectangle((int)mRectangles[i].width, (int)mRectangles[i].height, i); } mPacker.packRectangles(); Clear(); DateTime end = DateTime.Now; if (mPacker.rectangleCount > 0) { packingTimeText.text = mPacker.rectangleCount + " rectangles packed in " + (end - start).Milliseconds + "ms"; IntegerRectangle rect = new IntegerRectangle(); for (int j = 0; j < mPacker.rectangleCount; j++) { rect = mPacker.getRectangle(j, rect); int index = mPacker.getRectangleId(j); Texture2D texture = textures[index]; SetTexture(texture, IntegerRectangle2Rect(rect)); } } }
private void updateRectangles() { DateTime start = DateTime.Now; const int padding = 1; if (mPacker == null) { mPacker = new RectanglePacker((int)sliderWidth.value, (int)sliderHeight.value, padding); } else { mPacker.reset((int)sliderWidth.value, (int)sliderHeight.value, padding); } for (int i = 0; i < RECTANGLE_COUNT; i++) { mPacker.insertRectangle((int)mRectangles[i].width, (int)mRectangles[i].height, i); } mPacker.packRectangles(); DateTime end = DateTime.Now; if (mPacker.rectangleCount > 0) { packingTimeText.text = mPacker.rectangleCount + " rectangles packed in " + (end - start).Milliseconds + "ms"; mTexture.SetPixels32(mFillColor); IntegerRectangle rect = new IntegerRectangle(); Color32[] tmpColor; for (int j = 0; j < mPacker.rectangleCount; j++) { rect = mPacker.getRectangle(j, rect); int size = rect.width * rect.height; tmpColor = new Color32[size]; for (int k = 0; k < size; ++k) { tmpColor[k] = Color.black; } mTexture.SetPixels32(rect.x, rect.y, rect.width, rect.height, tmpColor); int index = mPacker.getRectangleId(j); Color color = convertHexToRGBA((uint)(0xFF171703 + (((18 * ((index + 4) % 13)) << 16) + ((31 * ((index * 3) % 8)) << 8) + 63 * (((index + 1) * 3) % 5)))); size -= 4; tmpColor = new Color32[size]; for (int k = 0; k < size; ++k) { tmpColor[k] = color; } mTexture.SetPixels32(rect.x + 1, rect.y + 1, rect.width - 2, rect.height - 2, tmpColor); } mTexture.Apply(); } }
public bool Push(string key, Texture2D texture) { if (string.IsNullOrEmpty(key)) { return(true); } if (texture == null) { return(true); } for (int i = 0; i < m_sprites.Count; i++) { m_sprites[i].index = i; m_sprites[i].color = m_texture.GetPixels((int)m_sprites[i].rect.x, (int)m_sprites[i].rect.y, (int)m_sprites[i].rect.width, (int)m_sprites[i].rect.height); } m_sprites.Add(new DynamicSprite() { key = key, index = -1, rect = new Rect(0, 0, texture.width, texture.height), color = texture.GetPixels(), }); m_packer.reset(width, height, padding); for (int i = 0; i < m_sprites.Count; i++) { m_packer.insertRectangle((int)m_sprites[i].rect.width, (int)m_sprites[i].rect.height, m_sprites[i].index); } int count = m_packer.packRectangles(); enough = m_sprites.Count > count; if (enough) { m_sprites.RemoveAt(m_sprites.FindIndex(x => x.key == key)); for (int i = 0; i < m_sprites.Count; i++) { m_sprites[i].color = null; } return(false); } else { if (texture != null) { texture = null; } if (m_texture.format != TextureFormat.RGBA32) { Object.Destroy(m_texture); m_texture = new Texture2D(width, height, TextureFormat.RGBA32, false); } m_texture.SetPixels32(m_color); IntegerRectangle rect = new IntegerRectangle(); Color32[] color; int index, id, size; for (int i = 0; i < count; i++) { rect = m_packer.getRectangle(i, rect); id = m_packer.getRectangleId(i); index = m_sprites.FindIndex(x => x.index == id); if (index != -1) { m_sprites[index].rect = new Rect(rect.x, rect.y, rect.width, rect.height); color = new Color32[m_sprites[index].color.Length]; for (int j = 0; j < m_sprites[index].color.Length; j++) { color[j] = m_sprites[index].color[j]; } } else { size = rect.width * rect.height; color = new Color32[size]; for (int j = 0; j < size; j++) { color[j] = Color.black; } } m_texture.SetPixels32(rect.x, rect.y, rect.width, rect.height, color); } for (int i = 0; i < m_sprites.Count; i++) { m_sprites[i].color = null; } if (compress) { m_texture.Compress(true); } m_texture.Apply(); return(true); } }