Ejemplo n.º 1
0
    public IObservable <Unit> SpawnBotsAndWaitThemDie()
    {
        var plr = GameController.CurrentPlayer;
        var dir = endTr.position - startTr.position;

        OccupiedHideouts.Clear();

        var res = GameController.Instance.mobsSpawnsParent
                  .ChildsEnumerated()
                  .Select(x => x.item.position)
                  .Where(x => Vector3.Dot(dir, x - plr.transform.position) > 0)       //точки находящиеся по направлению движения
                  .ToList();

        res = res.Where(x => (x - plr.transform.position).magnitude < 70)       //и недалеко от игрока
              .OrderBy(_ => Random.value)
              .Take(Random.Range(4, 6 + 1))
              .ToList();

        return(res.Select(sp =>
        {
            return GameController.Instance.mobPrefabs
            .OrderBy(_ => Random.value)
            .First()
            .InstantiateMe(sp, Quaternion.identity);                             //спавним моба в точке и передаем его дальше
        })
               .ToObservable()
               .Do(GameController.Instance.AddHpSliderFor)                             //добавляем отображение хп для моба
               .SelectMany(mob => mob.IsDead.Where(x => x).AsUnitObservable().Take(1)) //ожидаем пока моб отъедет
               .Last());                                                               //когда последний моб отъехал
    }
Ejemplo n.º 2
0
    public IObservable <Unit> SpawnBossAndWaitHimDie()
    {
        OccupiedHideouts.Clear();

        var baws = GameController.Instance.bossesPrefabs
                   .OrderBy(_ => Random.value)
                   .First()
                   .InstantiateMe(endTr.position, Quaternion.identity);      //спавним босса в точке

        GameController.Instance.AddHpSliderFor(baws);

        return(baws.IsDead.Where(x => x).AsUnitObservable().Take(1));
    }