Exemplo n.º 1
0
    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);
    }