private void GenerateTopLine()
        {
            bool   active       = false;
            Entity refillEntity = Entity.Null;

            Entities.ForEach((Entity entity, ref GenerateLineRequest request) =>
            {
                if (request.Status == RequestStatus.New)
                {
                    refillEntity   = entity;
                    active         = true;
                    request.Status = RequestStatus.Processing;
                }
            });

            if (!active)
            {
                return;
            }

            var           process   = new ProcessGroup <TimerComponent, GenerateCellData>(EntityManager, Entities);
            GameFieldSize fieldSize = _helper.GetSize();

            Color[]  colors = _helper.GetColors();
            CellsMap map    = new CellsMap(EntityManager);
            float    delay  = 0;
            int      y      = _helper.Gravity == GravityDirection.Down ? fieldSize.Height - 1 : 0;

            for (int i = 0; i < fieldSize.Width; i++)
            {
                if (!map.GetCell(i, y, out var cell))
                {
                    delay += GenerateTimeout;
                    process.Add(new TimerComponent(delay), new GenerateCellData {
                        x = i, y = y, Color = colors.GetRandom()
                    });
                }
            }

            process.OnItemCompleted += (Entity entity, ref TimerComponent completable, ref GenerateCellData marker) =>
            {
                AddCellAt(marker.x, marker.y, marker.Color);
            };
            process.OnCompleted += group =>
            {
                EntityManager.SetComponentData(refillEntity, new GenerateLineRequest {
                    Status = RequestStatus.Completed
                });
                DestroyEntityAfterFrame(refillEntity, 2);
            };
            HoldProcess(process);
        }
        private void GenerateAll()
        {
            Entities.ForEach((Entity entity, ref GenerateAllCellsRequest request) =>
            {
                if (request.Status != RequestStatus.New)
                {
                    return;
                }

                GameFieldSize size = _helper.GetSize();
                Color[] colors     = _helper.GetColors();
                CellsMap map       = new CellsMap(EntityManager);

                for (int i = 0; i < size.Width; i++)
                {
                    for (int j = 0; j < size.Height; j++)
                    {
                        AddCellAt(i, j, colors.GetRandom());
                    }
                }

                request.Status = RequestStatus.Completed;
            });
        }
Exemplo n.º 3
0
 public WorldPositionConverter(GameFieldSize fieldSize)
 {
     _offset = new Vector2(fieldSize.Width / 2, fieldSize.Height / 2);
 }