protected override void ExecuteTick() { if (_swappingStones.EntitiesCount < 2) { return; } var s1 = _swappingStones.Components1[0]; var s2 = _swappingStones.Components1[1]; if (s1 == null || s2 == null) { return; } var field = State.StoneField; if (!field.Swap(s1.position, s2.position)) { return; } if (HasActiveCombo(field)) { State.TickProcessed = true; _eventsReceiver.StoneMoved(new StoneMoveEvent(s1)); _eventsReceiver.StoneMoved(new StoneMoveEvent(s2)); } else { field.Swap(s1.position, s2.position); } }
protected override void ExecuteTick() { var field = State.StoneField; var(w, h) = field; for (int x = 0; x < w; ++x) { for (int y = 0; y < h; ++y) { if (field[x, y] != null) { continue; } var pos = new int2(x, y); var above = FindStoneAbove(field, pos); if (above == null) { break; } field.Swap(pos, above.position); State.TickProcessed = true; _eventsReceiver.StoneMoved(new StoneMoveEvent(above)); } } }