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; }); }
public WorldPositionConverter(GameFieldSize fieldSize) { _offset = new Vector2(fieldSize.Width / 2, fieldSize.Height / 2); }