private bool OnExplosionOnTile(Bomb bomb, Vector2Int coords, int contentIgnoreFlags) { var canPropagate = true; var tile = _tiles[coords.x, coords.y]; Vector3 position = GetTileCenter(tile); var explosion = Instantiate(ScriptableObjectsDatabase.PlayerSettings.ExplosionPrefab, position, Quaternion.identity, _groundMesh.transform); Destroy(explosion, 1); //Debug.Log("spawning explosion at : " + position); if (!tile.IsEmpty(contentIgnoreFlags)) { if (tile.IsWall) { canPropagate = false; } else if (tile.IsDestructibleBlock) { var block = tile.DestructibleBlock; tile.Content.Remove(block); Destroy(block.gameObject); // TODO: Spawn bonus canPropagate = false; // TODO: Depends on the player's bonus (spiked bomb?) } else { // TODO: determine if the explosion propagates when it hits a player or a bomb. // For the moment, let's say yes var tileBomb = tile.Bomb; if (tileBomb) { tileBomb.Explode(); } // Handle players hit by the bomb var players = tile.Players; if (players != null) { var battleModels = ApplicationModels.GetModel <BattleModel>().Players; for (int i = 0, count = players.Count; i < count; ++i) { var player = players[i]; player.transform.position = OFF_SCREEN_POSITION; player.Status = PlayerController.InputStatus.Blocked; tile.Content.Remove(player); var victim = battleModels.Find(p => p.PlayerModel == player.Owner); victim.IsSpawned = false; var attacker = battleModels.Find(p => p.PlayerModel == bomb.Owner); _gameMode.OnPlayerHit(victim, attacker); } } } } return(canPropagate); }