public static LTexture CreateShadowTexture(LTexture texture, float alpha, float scale, float angle) { int width = texture.Width; int height = texture.Height; LPixmap image = new LPixmap(texture); int centerX = width / 2; int centerY = height / 2; int offsetX = (int)((width - image.Width) / 2); int offsetY = (int)((height - image.Height) / 2); Loon.Core.Geom.Matrix.Transform2i t = new Loon.Core.Geom.Matrix.Transform2i(); t.Rotate(angle, centerX, centerY); t.Zoom(scale, centerX, centerY); LPixmap shadowProcess = new LPixmap(width, height, image.IsAlpha()); shadowProcess.DrawPixmap(image, offsetX, offsetY); shadowProcess.Transparency(); shadowProcess.Mul(255, 0, 0, 0); shadowProcess.Mul((int)(alpha * 255), 255, 255, 255); shadowProcess.Convolve(LPixmap.GaussianBlurKernel()); shadowProcess.Transform(t); if (image != null) { image.Dispose(); image = null; } return(shadowProcess.Texture); }
public static LTexture FilterLimitColor(string res, LColor start, LColor end) { int sred = start.R; int sgreen = start.G; int sblue = start.B; int ered = end.R; int egreen = end.G; int eblue = end.B; LPixmap tmp = new LPixmap(res); LPixmap image = new LPixmap(tmp.Width, tmp.Height, true); image.DrawPixmap(tmp, 0, 0); if (tmp != null) { tmp.Dispose(); tmp = null; } Color[] pixels = image.GetData(); int size = pixels.Length; for (int i = 0; i < size; i++) { Color pixel = pixels[i]; if ((pixel.R >= sred && pixel.G >= sgreen && pixel.B >= sblue) && (pixel.R <= ered && pixel.G <= egreen && pixel.B <= eblue)) { pixels[i].PackedValue = transparent; } } return(image.Texture); }
public static LTexture FilterColor(string res, uint[] colors) { LPixmap tmp = new LPixmap(res); LPixmap image = new LPixmap(tmp.Width, tmp.Height, true); image.DrawPixmap(tmp, 0, 0); if (tmp != null) { tmp.Dispose(); tmp = null; } Color[] pixels = image.GetData(); int size = pixels.Length; for (int i = 0; i < size; i++) { for (int j = 0; j < colors.Length; j++) { if (pixels[i].PackedValue == colors[j]) { pixels[i].PackedValue = transparent; } } } image.SetData(pixels); return(image.Texture); }
public void Dispose() { this.isClose = true; if (buffer != null) { buffer.Dispose(); buffer = null; } }
public void Dispose() { if (drawTexWidth != null) { drawTexWidth.Destroy(); } if (drawTexHeight != null) { drawTexHeight.Destroy(); } if (drawImgWidth != null) { drawImgWidth.Dispose(); } if (drawImgWidth != null) { drawImgWidth.Dispose(); } }
private void InitDesktop() { if (desktop != null && sprites != null) { return; } this.desktop = new Desktop(this, GetWidth(), GetHeight()); this.sprites = new Sprites(GetWidth(), GetHeight()); if (dialog == null) { LPixmap g = new LPixmap(GetWidth() - 20, GetHeight() / 2 - 20, true); g.SetAlphaValue(0, 0, 0, 125); g.FillRect(0, 0, g.GetWidth(), g.GetHeight()); g.Dispose(); dialog = g.Texture; g = null; } this.message = new LMessage(dialog, 0, 0); this.message.SetFontColor(LColor.white); int size = message.GetWidth() / (message.GetMessageFont().GetSize()); if (LSystem.scaleWidth != 1 || LSystem.scaleHeight != 1) { if (size % 2 != 0) { size = size + 2; } else { size = size + 3; } } else { if (size % 2 != 0) { size = size - 3; } else { size = size - 4; } } this.message.SetMessageLength(size); this.message.SetLocation((GetWidth() - message.GetWidth()) / 2, GetHeight() - message.GetHeight() - 10); this.message.SetVisible(false); this.select = new LSelect(dialog, 0, 0); this.select.SetLocation(message.X(), message.Y()); this.scrCG = new AVGCG(); this.desktop.Add(message); this.desktop.Add(select); this.select.SetVisible(false); }
public void Dispose() { this.isClose = true; this.EndUsePixelThread(); this.finalDrawPixels = null; this.nowDrawPixels = null; if (image != null) { image.Dispose(); image = null; } }
public void SetField2DBackground(Field2D field, Dictionary <object, object> pathMap, String fileName) { SetField2D(field); LPixmap background = null; if (fileName != null) { LPixmap tmp = new LPixmap(fileName); background = SetTileBackground(tmp, true); if (tmp != null) { tmp.Dispose(); tmp = null; } } else { background = new LPixmap(GetWidth(), GetHeight(), false); } for (int i = 0; i < field.GetWidth(); i++) { for (int j = 0; j < field.GetHeight(); j++) { int index = field.GetType(j, i); Object o = CollectionUtils.Get(pathMap, index); if (o != null) { if (o is LPixmap) { background.DrawPixmap(((LPixmap)o), field.TilesToWidthPixels(i), field.TilesToHeightPixels(j)); } else if (o is Actor) { AddObject(((Actor)o), field.TilesToWidthPixels(i), field.TilesToHeightPixels(j)); } } } } SetBackground(background.Texture); if (background != null) { background.Dispose(); background = null; } }
/// <summary> /// ˳ÐòΪ±³¾°£¬Ç°¾°£¬Öо° /// </summary> /// /// <param name="c1"></param> /// <param name="c2"></param> /// <param name="c3"></param> /// <returns></returns> public LTexture LoadBarColor(Color c1, Color c2, Color c3) { if (colors.Count > 10) { lock (colors) { foreach (LTexture tex2d in colors.Values) { if (tex2d != null) { tex2d.Destroy(); } } colors.Clear(); } } int hash = 1; hash = LSystem.Unite(hash, c1.PackedValue); hash = LSystem.Unite(hash, c2.PackedValue); hash = LSystem.Unite(hash, c3.PackedValue); LTexture texture_0 = null; lock (colors) { texture_0 = (LTexture)CollectionUtils.Get(colors, hash); } if (texture_0 == null) { LPixmap image = new LPixmap(8, 8, true); image.SetColor(c1); image.FillRect(0, 0, 4, 4); image.SetColor(c2); image.FillRect(4, 0, 4, 4); image.SetColor(c3); image.FillRect(0, 4, 4, 4); image.Dispose(); texture_0 = image.Texture; CollectionUtils.Put(colors, hash, texture_0); } return(this.texture = texture_0); }
public static LTexture GetRMXPloadBuoyage(LPixmap rmxpImage, int width, int height) { if (lazyImages == null) { lazyImages = new Dictionary <string, LTexture>(10); } string keyName = ("buoyage" + width + "|" + height); LTexture lazy = (LTexture)CollectionUtils.Get(lazyImages, keyName); if (lazy == null) { LPixmap lazyImage; LPixmap image, left, right, center, up, down = null; int objWidth = 32; int objHeight = 32; int x1 = 128; int x2 = 160; int y1 = 64; int y2 = 96; int k = 1; try { image = GraphicsUtils.DrawClipImage(rmxpImage, objWidth, objHeight, x1, y1, x2, y2); lazyImage = new LPixmap(width, height, true); left = GraphicsUtils.DrawClipImage(image, k, height, 0, 0, k, objHeight); right = GraphicsUtils.DrawClipImage(image, k, height, objWidth - k, 0, objWidth, objHeight); center = GraphicsUtils.DrawClipImage(image, width, height, k, k, objWidth - k, objHeight - k); up = GraphicsUtils.DrawClipImage(image, width, k, 0, 0, objWidth, k); down = GraphicsUtils.DrawClipImage(image, width, k, 0, objHeight - k, objWidth, objHeight); lazyImage.DrawPixmap(center, 0, 0); lazyImage.DrawPixmap(left, 0, 0); lazyImage.DrawPixmap(right, width - k, 0); lazyImage.DrawPixmap(up, 0, 0); lazyImage.DrawPixmap(down, 0, height - k); lazy = lazyImage.Texture; if (lazyImage != null) { lazyImage.Dispose(); lazyImage = null; } lazyImages.Add(keyName, lazy); } catch { return(null); } finally { left = null; right = null; center = null; up = null; down = null; image = null; } } return(lazy); }
public static LTexture GetRMXPloadBuoyage(LPixmap rmxpImage, int width, int height) { if (lazyImages == null) { lazyImages = new Dictionary<string, LTexture>(10); } string keyName = ("buoyage" + width + "|" + height); LTexture lazy = (LTexture)CollectionUtils.Get(lazyImages, keyName); if (lazy == null) { LPixmap lazyImage; LPixmap image, left, right, center, up, down = null; int objWidth = 32; int objHeight = 32; int x1 = 128; int x2 = 160; int y1 = 64; int y2 = 96; int k = 1; try { image = GraphicsUtils.DrawClipImage(rmxpImage, objWidth, objHeight, x1, y1, x2, y2); lazyImage = new LPixmap(width, height, true); left = GraphicsUtils.DrawClipImage(image, k, height, 0, 0, k, objHeight); right = GraphicsUtils.DrawClipImage(image, k, height, objWidth - k, 0, objWidth, objHeight); center = GraphicsUtils.DrawClipImage(image, width, height, k, k, objWidth - k, objHeight - k); up = GraphicsUtils.DrawClipImage(image, width, k, 0, 0, objWidth, k); down = GraphicsUtils.DrawClipImage(image, width, k, 0, objHeight - k, objWidth, objHeight); lazyImage.DrawPixmap(center, 0, 0); lazyImage.DrawPixmap(left, 0, 0); lazyImage.DrawPixmap(right, width - k, 0); lazyImage.DrawPixmap(up, 0, 0); lazyImage.DrawPixmap(down, 0, height - k); lazy = lazyImage.Texture; if (lazyImage != null) { lazyImage.Dispose(); lazyImage = null; } lazyImages.Add(keyName, lazy); } catch { return null; } finally { left = null; right = null; center = null; up = null; down = null; image = null; } } return lazy; }
public static LTexture CreateShadowTexture(LTexture texture, float alpha, float scale, float angle) { int width = texture.Width; int height = texture.Height; LPixmap image = new LPixmap(texture); int centerX = width / 2; int centerY = height / 2; int offsetX = (int)((width - image.Width) / 2); int offsetY = (int)((height - image.Height) / 2); Loon.Core.Geom.Matrix.Transform2i t = new Loon.Core.Geom.Matrix.Transform2i(); t.Rotate(angle, centerX, centerY); t.Zoom(scale, centerX, centerY); LPixmap shadowProcess = new LPixmap(width, height, image.IsAlpha()); shadowProcess.DrawPixmap(image, offsetX, offsetY); shadowProcess.Transparency(); shadowProcess.Mul(255, 0, 0, 0); shadowProcess.Mul((int)(alpha * 255), 255, 255, 255); shadowProcess.Convolve(LPixmap.GaussianBlurKernel()); shadowProcess.Transform(t); if (image != null) { image.Dispose(); image = null; } return shadowProcess.Texture; }
public static LTexture FilterLimitColor(string res, LColor start, LColor end) { int sred = start.R; int sgreen = start.G; int sblue = start.B; int ered = end.R; int egreen = end.G; int eblue = end.B; LPixmap tmp = new LPixmap(res); LPixmap image = new LPixmap(tmp.Width, tmp.Height, true); image.DrawPixmap(tmp, 0, 0); if (tmp != null) { tmp.Dispose(); tmp = null; } Color[] pixels = image.GetData(); int size = pixels.Length; for (int i = 0; i < size; i++) { Color pixel = pixels[i]; if ((pixel.R >= sred && pixel.G >= sgreen && pixel.B >= sblue) && (pixel.R <= ered && pixel.G <= egreen && pixel.B <= eblue)) { pixels[i].PackedValue = transparent; } } return image.Texture; }
public static LTexture FilterColor(string res, uint[] colors) { LPixmap tmp = new LPixmap(res); LPixmap image = new LPixmap(tmp.Width, tmp.Height, true); image.DrawPixmap(tmp, 0, 0); if (tmp != null) { tmp.Dispose(); tmp = null; } Color[] pixels = image.GetData(); int size = pixels.Length; for (int i = 0; i < size; i++) { for (int j = 0; j < colors.Length; j++) { if (pixels[i].PackedValue == colors[j]) { pixels[i].PackedValue = transparent; } } } image.SetData(pixels); return image.Texture; }
private void Init(LTexture tex2d, float limit, bool remove, float scale) { this.isVisible = true; this.expandLimit = limit; this.width = tex2d.GetWidth(); this.height = tex2d.GetHeight(); this.scaleWidth = (int)(width * scale); this.scaleHeight = (int)(height * scale); this.loopMaxCount = (MathUtils.Max(scaleWidth, scaleHeight) / 2) + 1; this.fractions = new float[(scaleWidth * scaleHeight) * maxElements]; this.exWidth = (int)(scaleWidth * expandLimit); this.exHeigth = (int)(scaleHeight * expandLimit); LPixmap image = tex2d.GetImage().ScaledInstance(scaleWidth, scaleHeight); Color[] pixels = image.GetData(); if (image != null) { image.Dispose(); image = null; } this.size = pixels.Length; this.pixmap = new LPixmapData(exWidth, exHeigth, true); int no = 0, idx = 0; int length = fractions.Length; float angle = 0; float speed = 0; System.Random random = LSystem.random; for (int y = 0; y < scaleHeight; y++) { for (int x = 0; x < scaleWidth; x++) { if (idx + maxElements < length) { no = y * scaleWidth + x; angle = random.Next(360); speed = 10f / random.Next(30); fractions[idx + 0] = x; fractions[idx + 1] = y; fractions[idx + 2] = (MathUtils.Cos(angle * MathUtils.PI / 180) * speed); fractions[idx + 3] = (MathUtils.Sin(angle * MathUtils.PI / 180) * speed); fractions[idx + 4] = (pixels[no].PackedValue == 0xff00 ? 0xffffff : pixels[no].PackedValue); fractions[idx + 5] = x / 6 + random.Next(10); idx += maxElements; } } } if (remove) { if (tex2d != null) { tex2d.Destroy(); tex2d = null; } } this.tmp = tex2d; this.StartUsePixelThread(); }
public PShadowEffect(LPixmap img, LPixmap back, int x, int y, int w, int h) { if (deasilTrans == null || widdershinTrans == null) { deasilTrans = new Color[max_pixel]; for (int i = 0; i < max_pixel; i++) { deasilTrans[i] = new Color(i, i, i); } int count = 0; widdershinTrans = new Color[max_pixel]; for (int i = 0; i < max_pixel; i++) { widdershinTrans[count++] = deasilTrans[i]; } } this.SetLocation(x, y); this.width = w; this.height = h; this.visible = true; LPixmap temp = null; if (back == null) { this.scaleWidth = width / 2; this.scaleHeight = height / 2; temp = GraphicsUtils.GetResize(img, scaleWidth, scaleHeight); this.image = new LPixmap(scaleWidth, scaleHeight, true); this.finalDrawPixels = temp.GetData(); this.nowDrawPixels = (Color[])CollectionUtils.CopyOf(finalDrawPixels); if (temp != null) { temp.Dispose(); temp = null; } } else { this.scaleWidth = width / 2; this.scaleHeight = height / 2; temp = GraphicsUtils.GetResize(img, scaleWidth, scaleHeight); this.image = new LPixmap(scaleWidth, scaleHeight, true); if (back.GetWidth() == scaleWidth && back.GetHeight() == scaleHeight) { this.finalBackgroundPixels = back.GetData(); this.backgroundPixels = (Color[])CollectionUtils .CopyOf(finalBackgroundPixels); } else { LPixmap tmp = GraphicsUtils.GetResize(back, scaleWidth, scaleHeight); this.finalBackgroundPixels = tmp.GetData(); if (tmp != null) { tmp.Dispose(); tmp = null; } this.backgroundPixels = (Color[])CollectionUtils .CopyOf(finalBackgroundPixels); } this.finalDrawPixels = temp.GetData(); this.nowDrawPixels = (Color[])CollectionUtils.CopyOf(finalDrawPixels); } this.SetBlackToWhite(flag); if (temp != null) { temp.Dispose(); temp = null; } if (img != null) { img.Dispose(); img = null; } if (back != null) { back.Dispose(); back = null; } }
public PShadowEffect(LPixmap img, LPixmap back, int x, int y, int w, int h) { if (deasilTrans == null || widdershinTrans == null) { deasilTrans = new Color[max_pixel]; for (int i = 0; i < max_pixel; i++) { deasilTrans[i] = new Color(i, i, i); } int count = 0; widdershinTrans = new Color[max_pixel]; for (int i = 0; i < max_pixel; i++) { widdershinTrans[count++] = deasilTrans[i]; } } this.SetLocation(x, y); this.width = w; this.height = h; this.visible = true; LPixmap temp = null; if (back == null) { this.scaleWidth = width / 2; this.scaleHeight = height / 2; temp = GraphicsUtils.GetResize(img, scaleWidth, scaleHeight); this.image = new LPixmap(scaleWidth, scaleHeight, true); this.finalDrawPixels = temp.GetData(); this.nowDrawPixels = (Color[])CollectionUtils.CopyOf(finalDrawPixels); if (temp != null) { temp.Dispose(); temp = null; } } else { this.scaleWidth = width / 2; this.scaleHeight = height / 2; temp = GraphicsUtils.GetResize(img, scaleWidth, scaleHeight); this.image = new LPixmap(scaleWidth, scaleHeight, true); if (back.GetWidth() == scaleWidth && back.GetHeight() == scaleHeight) { this.finalBackgroundPixels = back.GetData(); this.backgroundPixels = (Color[])CollectionUtils .CopyOf(finalBackgroundPixels); } else { LPixmap tmp = GraphicsUtils.GetResize(back, scaleWidth, scaleHeight); this.finalBackgroundPixels = tmp.GetData(); if (tmp != null) { tmp.Dispose(); tmp = null; } this.backgroundPixels = (Color[])CollectionUtils .CopyOf(finalBackgroundPixels); } this.finalDrawPixels = temp.GetData(); this.nowDrawPixels = (Color[])CollectionUtils.CopyOf(finalDrawPixels); } this.SetBlackToWhite(flag); if (temp != null) { temp.Dispose(); temp = null; } if (img != null) { img.Dispose(); img = null; } if (back != null) { back.Dispose(); back = null; } }
private static LTexture GetRMXPDialog(LPixmap rmxpImage, int width, int height, int size, int offset) { if (lazyImages == null) { lazyImages = new Dictionary <string, LTexture>(10); } string keyName = "dialog" + width + "|" + height; LTexture lazy = (LTexture)CollectionUtils.Get(lazyImages, keyName); if (lazy == null) { try { int objWidth = 64; int objHeight = 64; int x1 = 128; int x2 = 192; int y1 = 0; int y2 = 64; int center_size = objHeight - size * 2; LPixmap lazyImage = null; LPixmap image = null; LPixmap messageImage = null; image = GraphicsUtils.DrawClipImage(rmxpImage, objWidth, objHeight, x1, y1, x2, y2); LPixmap centerTop = GraphicsUtils.DrawClipImage(image, center_size, size, size, 0); LPixmap centerDown = GraphicsUtils.DrawClipImage(image, center_size, size, size, objHeight - size); LPixmap leftTop = GraphicsUtils.DrawClipImage(image, size, size, 0, 0); LPixmap leftCenter = GraphicsUtils.DrawClipImage(image, size, center_size, 0, size); LPixmap leftDown = GraphicsUtils.DrawClipImage(image, size, size, 0, objHeight - size); LPixmap rightTop = GraphicsUtils.DrawClipImage(image, size, size, objWidth - size, 0); LPixmap rightCenter = GraphicsUtils.DrawClipImage(image, size, center_size, objWidth - size, size); LPixmap rightDown = GraphicsUtils.DrawClipImage(image, size, size, objWidth - size, objHeight - size); lazyImage = centerTop; lazyImage = new LPixmap(width, height, true); messageImage = GraphicsUtils.DrawClipImage(rmxpImage, 128, 128, 0, 0, 128, 128); messageImage = GraphicsUtils.GetResize(messageImage, width - offset + 1, height - offset + 1); messageImage.UpdateAlpha(125); lazyImage.DrawPixmap(messageImage, (lazyImage.Width - messageImage.Width) / 2, (lazyImage.Height - messageImage .Height) / 2); LPixmap tmp = GraphicsUtils.GetResize(centerTop, width - (size * 2), size); lazyImage.DrawPixmap(tmp, size, 0); if (tmp != null) { tmp.Dispose(); tmp = null; } tmp = GraphicsUtils.GetResize(centerDown, width - (size * 2), size); lazyImage.DrawPixmap(tmp, size, height - size); if (tmp != null) { tmp.Dispose(); tmp = null; } lazyImage.DrawPixmap(leftTop, 0, 0); tmp = GraphicsUtils.GetResize(leftCenter, leftCenter.GetWidth(), width - (size * 2)); lazyImage.DrawPixmap(tmp, 0, size); if (tmp != null) { tmp.Dispose(); tmp = null; } lazyImage.DrawPixmap(leftDown, 0, height - size); int right = width - size; lazyImage.DrawPixmap(rightTop, right, 0); tmp = GraphicsUtils.GetResize(rightCenter, leftCenter .Width, width - (size * 2)); lazyImage.DrawPixmap(tmp, right, size); if (tmp != null) { tmp.Dispose(); tmp = null; } lazyImage.DrawPixmap(rightDown, right, height - size); lazy = lazyImage.Texture; lazy.isExt = true; lazyImages.Add(keyName, lazy); image.Dispose(); messageImage.Dispose(); centerTop.Dispose(); centerDown.Dispose(); leftTop.Dispose(); leftCenter.Dispose(); leftDown.Dispose(); rightTop.Dispose(); rightCenter.Dispose(); rightDown.Dispose(); image = null; messageImage = null; centerTop = null; centerDown = null; leftTop = null; leftCenter = null; leftDown = null; rightTop = null; rightCenter = null; rightDown = null; } catch { } } return(lazy); }
private void InitDesktop() { if (desktop != null && sprites != null) { return; } this.desktop = new Desktop(this, GetWidth(), GetHeight()); this.sprites = new Sprites(GetWidth(), GetHeight()); if (dialog == null) { LPixmap g = new LPixmap(GetWidth() - 20, GetHeight() / 2 - 20, true); g.SetAlphaValue(0, 0, 0, 125); g.FillRect(0, 0, g.GetWidth(), g.GetHeight()); g.Dispose(); dialog = g.Texture; g = null; } this.message = new LMessage(dialog, 0, 0); this.message.SetFontColor(LColor.white); int size = message.GetWidth() / (message.GetMessageFont().GetSize()); if (LSystem.scaleWidth != 1 || LSystem.scaleHeight != 1) { if (size % 2 != 0) { size = size + 2; } else { size = size + 3; } } else { if (size % 2 != 0) { size = size - 3; } else { size = size - 4; } } this.message.SetMessageLength(size); this.message.SetLocation((GetWidth() - message.GetWidth()) / 2, GetHeight() - message.GetHeight() - 10); this.message.SetVisible(false); this.select = new LSelect(dialog, 0, 0); this.select.SetLocation(message.X(), message.Y()); this.scrCG = new AVGCG(); this.desktop.Add(message); this.desktop.Add(select); this.select.SetVisible(false); }
public void SetField2DBackground(Field2D field, Dictionary<object, object> pathMap, String fileName) { SetField2D(field); LPixmap background = null; if (fileName != null) { LPixmap tmp = new LPixmap(fileName); background = SetTileBackground(tmp, true); if (tmp != null) { tmp.Dispose(); tmp = null; } } else { background = new LPixmap(GetWidth(), GetHeight(), false); } for (int i = 0; i < field.GetWidth(); i++) { for (int j = 0; j < field.GetHeight(); j++) { int index = field.GetType(j, i); Object o = CollectionUtils.Get(pathMap, index); if (o != null) { if (o is LPixmap) { background.DrawPixmap(((LPixmap)o), field.TilesToWidthPixels(i), field.TilesToHeightPixels(j)); } else if (o is Actor) { AddObject(((Actor)o), field.TilesToWidthPixels(i), field.TilesToHeightPixels(j)); } } } } SetBackground(background.Texture); if (background != null) { background.Dispose(); background = null; } }
/// <summary> /// ˳��Ϊ������ǰ�����о� /// </summary> /// /// <param name="c1"></param> /// <param name="c2"></param> /// <param name="c3"></param> /// <returns></returns> public LTexture LoadBarColor(Color c1, Color c2, Color c3) { if (colors.Count > 10) { lock (colors) { foreach (LTexture tex2d in colors.Values) { if (tex2d != null) { tex2d.Destroy(); } } colors.Clear(); } } int hash = 1; hash = LSystem.Unite(hash, c1.PackedValue); hash = LSystem.Unite(hash, c2.PackedValue); hash = LSystem.Unite(hash, c3.PackedValue); LTexture texture_0 = null; lock (colors) { texture_0 = (LTexture)CollectionUtils.Get(colors, hash); } if (texture_0 == null) { LPixmap image = new LPixmap(8, 8, true); image.SetColor(c1); image.FillRect(0, 0, 4, 4); image.SetColor(c2); image.FillRect(4, 0, 4, 4); image.SetColor(c3); image.FillRect(0, 4, 4, 4); image.Dispose(); texture_0 = image.Texture; CollectionUtils.Put(colors, hash, texture_0); } return (this.texture = texture_0); }