public void SpawnNumber(int number, Color c) { GameObject damageNumber = pool.GetObject(); ((RectTransform)damageNumber.transform).anchoredPosition = new Vector2(0, 0); TextMeshProUGUI tmpugui = damageNumber.GetComponent <TextMeshProUGUI>(); tmpugui.SetText(number.ToString()); tmpugui.faceColor = c; Color outline = Color.black; UpdateTimer ut = timers.Get(); ut.Start(2, () => { // finish pool.Return(damageNumber); timers.Return(ut); }, (percentComplete) => { // update c.a = 1 - percentComplete; tmpugui.faceColor = c; outline.a = c.a; tmpugui.outlineColor = outline; }); }
public void ReturnImage(Bitmap b) { using (var g = Graphics.FromImage(b)) { g.Clear(Color.Transparent); } pool?.Return(b); }
private void IO_Complete(object sender, SocketAsyncEventArgs e) { try { if (e.LastOperation == SocketAsyncOperation.ReceiveFrom) { EndReceive(e); } if (e.LastOperation == SocketAsyncOperation.SendTo) { EndSend(e); } } finally { socketArgsPool.Return(e); } }
public override void Dispose() { GenericPool <KickExecutable> .Return(this); }
public CreateChunkAndRenderBlock( World world, Dictionary <string, Texture> textureDictionary, string texturePath, RenderSettings renderSettings, IGraphicsApi <TImage> graphics, int chunkSize, int chunksPerDimension, ExecutionDataflowBlockOptions options) { int tileSize = chunksPerDimension * chunkSize; graphics.SetPoolDimensions(tileSize, tileSize); int chunkRenderedCounter = 0; var renderCombiPool = new GenericPool <RendererCombi <TImage> >(() => new RendererCombi <TImage>(textureDictionary, texturePath, renderSettings, graphics)); Block = new TransformBlock <IEnumerable <ChunkData>, ImageInfo <TImage> >(chunkDatas => { RendererCombi <TImage> chunkRenderer = null; try { var b = graphics.GetPooledImage(); // pooled //var b = graphics.CreateEmptyImage(tileSize, tileSize); chunkRenderer = renderCombiPool.Get(); var firstX = -1; var firstZ = -1; var count = 0; var chunkDataList = chunkDatas.ToList(); foreach (var chunkData in chunkDataList) { var chunk = world.GetChunk(chunkData.X, chunkData.Z, chunkData); if (firstX == -1) { firstX = chunkData.X; } if (firstZ == -1) { firstZ = chunkData.Z; } var x = chunk.X % chunksPerDimension; var z = chunk.Z % chunksPerDimension; if (x < 0) { x += chunksPerDimension; } if (z < 0) { z += chunksPerDimension; } chunkRenderer.ChunkRenderer.RenderChunk(b, chunk, x * chunkSize, z * chunkSize); world.ChunkPool?.Return(chunk); count++; } var fx = CoordHelpers.GetGroupedCoordinate(firstX, chunksPerDimension); var fz = CoordHelpers.GetGroupedCoordinate(firstZ, chunksPerDimension); Interlocked.Increment(ref processedCount); Interlocked.Add(ref chunkRenderedCounter, count); if (chunkRenderedCounter >= 128) { var v = chunkRenderedCounter; ChunksRendered?.Invoke(this, new ChunksRenderedEventArgs(v)); Interlocked.Add(ref chunkRenderedCounter, -v); } /*if (r.Next(100) == 0) * { * throw new ArgumentOutOfRangeException("Test Error in CreateChunkAndRender"); * }*/ return(new ImageInfo <TImage>() { Image = b, X = fx, Z = fz, Cd = chunkDataList.SelectMany(x => x.SubChunks) }); } catch (Exception ex) { Console.WriteLine("Error in CreateChunkAndRenderBlock: " + ex.Message); return(null); } finally { if (chunkRenderer != null) { renderCombiPool.Return(chunkRenderer); } } }, options); }
public override void Dispose() { _current = null; GenericPool <PickRandomLocationExecutable> .Return(this); }
public override void Dispose() { GenericPool <RotateToExecutable> .Return(this); }
public override void Dispose() => GenericPool <WaitExecutable> .Return(this);