private KMSelectable.OnInteractHandler clickTile(int i) { return(delegate { if (_selectedTile == i) { Audio.PlaySoundAtTransform("Selection", _layout.Tiles[i].Transform); _layout.Tiles[i].SetNormal(); _selectedTile = null; } else if (!_layout.IsTileAvailable(i, _taken)) { Debug.LogFormat(@"[Mahjong #{0}] You received a strike because you selected a tile ({1}) that was not available.", _moduleId, _layout.Tiles[i].Name); Module.HandleStrike(); } else if (_selectedTile == null) { Audio.PlaySoundAtTransform("Selection", _layout.Tiles[i].Transform); _layout.Tiles[i].SetHighlighted(); _selectedTile = i; } else if (i == _layout.Tiles[_selectedTile.Value].PairedWith) { // Valid pair! Eliminate Audio.PlaySoundAtTransform("Elimination", _layout.Tiles[i].Transform); Smoke1.transform.localPosition = _layout.Tiles[i].Transform.localPosition; Smoke1.Play(); Smoke2.transform.localPosition = _layout.Tiles[_selectedTile.Value].Transform.localPosition; Smoke2.Play(); Debug.LogFormat(@"[Mahjong #{0}] {1} and {2} correctly eliminated.", _moduleId, _layout.Tiles[_selectedTile.Value].Name, _layout.Tiles[i].Name); _layout.Tiles[i].GameObject.SetActive(false); _layout.Tiles[_selectedTile.Value].GameObject.SetActive(false); _taken[i] = true; _taken[_selectedTile.Value] = true; _selectedTile = null; if (_taken.All(t => t)) { Debug.LogFormat(@"[Mahjong #{0}] Module passed.", _moduleId); Module.HandlePass(); } } else { // Invalid pair. Strike. Debug.LogFormat(@"[Mahjong #{0}] {1} and {2} are not a valid pair. Strike.", _moduleId, _layout.Tiles[_selectedTile.Value].Name, _layout.Tiles[i].Name); Module.HandleStrike(); _layout.Tiles[_selectedTile.Value].SetNormal(); _selectedTile = null; } return false; }); }