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;
        });
    }
Beispiel #2
0
        public void ReturnImage(Bitmap b)
        {
            using (var g = Graphics.FromImage(b))
            {
                g.Clear(Color.Transparent);
            }

            pool?.Return(b);
        }
Beispiel #3
0
 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);
        }
Beispiel #6
0
 public override void Dispose()
 {
     _current = null;
     GenericPool <PickRandomLocationExecutable> .Return(this);
 }
Beispiel #7
0
 public override void Dispose()
 {
     GenericPool <RotateToExecutable> .Return(this);
 }
 public override void Dispose() => GenericPool <WaitExecutable> .Return(this);