private void Refresh() { covered.Clear(); cells.Clear(); var fleet = fleets[turn]; int i = plays.Count * 2; var position = camera.ScreenToWorld(Input.mousePosition) / 16; position.x = Mathf.Floor(position.x); position.y = Mathf.Floor(position.y); var test = plays.Concat(new[] { new Play(fleet, shape, position, rotation) }); bool first = true; foreach (Play play in test.Reverse <Play>()) { bool invalid = first && !CanPlay(play); i -= 1; var uncovered = play.cells.Keys.Where(p => !covered.ContainsKey(p)); cells.AddRange(Edges(play, i * 2 + 1, covered).Where(c => !covered.ContainsKey(c.position))); cells.AddRange(uncovered.Select(p => new Cell { position = p, color = invalid ? Color.gray : play.fleet.dark, sprite = square, depth = i * 2, })); foreach (var cell in uncovered) { covered.Add(cell, play.fleet); } first = false; } test_cells.SetActive(cells.Reverse <Cell>(), sort: false); foreach (Fleet fleet_ in fleets) { fleet_.ships = covered.Count(pair => pair.Value == fleet_); } fleetCounts.SetActive(fleets); fleetCounts.MapActive((f, p) => p.Refresh()); }
private void Awake() { lockButton.onClick.AddListener(OnClickedLock); tiles = new MonoBehaviourPooler<byte, TileToggle>(tilePrefab, tileContainer, InitialiseTile); pages = new MonoBehaviourPooler<int, Toggle>(pagePrefab, pageContainer, InitialisePage); pages.SetActive(Enumerable.Range(0, 8)); pages.Get(0).isOn = true; }