private void CoinAdded(LevelRootViewModel levelRoot, CoinViewModel coin)
 {
     coin.PickUp.Subscribe(_ =>
     {
         levelRoot.Coins.Remove(coin);
     });
 }
    private void NewPlayer(LevelRootViewModel levelRoot, CharacterViewModel player)
    {
        player.IsAliveProperty
            .Where(isAlive => isAlive == false)
            .Subscribe(_ => this.ExecuteCommand(levelRoot.LoseGame))
            .DisposeWhenChanged(levelRoot.PlayerProperty);

        player.FinishReached.Subscribe(_ => this.ExecuteCommand(levelRoot.WinGame));
    }
    public override void InitializeLevelRoot(LevelRootViewModel levelRoot)
    {
        levelRoot._CoinsProperty
            .Where(c => c.Action == NotifyCollectionChangedAction.Add)
            .Select(c => c.NewItems[0] as CoinViewModel)
            .Subscribe(coin => CoinAdded(levelRoot, coin));

        levelRoot.PlayerProperty
            .Where(player => player != null)
            .Subscribe(player => NewPlayer(levelRoot, player));
    }
    public override void FinishCurrentLevel(LevelRootViewModel viewModel)
    {
        base.FinishCurrentLevel(viewModel);

        //Simple scene transition.

        Publish(new UnloadSceneCommand()
        {
            SceneName = viewModel.CurrentLevel.LevelScene
        });
        Publish(new LoadSceneCommand()
        {
            SceneName = "MainMenuScene"
        });
    }
 public override void InitializeLevelRoot(LevelRootViewModel viewModel)
 {
     base.InitializeLevelRoot(viewModel);
 }
 public virtual void FinishCurrentLevel(LevelRootViewModel viewModel) {
 }
 public virtual void InitializeLevelRoot(LevelRootViewModel viewModel) {
     // This is called when a LevelRootViewModel is created
     viewModel.FinishCurrentLevel.Action = this.FinishCurrentLevelHandler;
     LevelRootViewModelManager.Add(viewModel);
 }
 public override void Restart(LevelRootViewModel levelRoot)
 {
     base.Restart(levelRoot);
     GameManager.TransitionLevel<LevelSceneManager>(scenemanager => { }, "Assets");
 }
 public virtual void WinGame(LevelRootViewModel levelRoot)
 {
 }
 public virtual void Restart(LevelRootViewModel levelRoot)
 {
 }
 public virtual void LoseGame(LevelRootViewModel levelRoot)
 {
 }
 public abstract void InitializeLevelRoot(LevelRootViewModel levelRoot);