Example #1
0
    public bool FindRunAwayTarget(PassengerSM ps)
    {
        _passengers.RemoveAll(item => item == null);
        foreach (var passenger in _passengers)
        {
            if (passenger != ps)
            {
                float dist = ((Vector2)passenger.transform.position - (Vector2)ps.transform.position).sqrMagnitude;
                if (dist < ps.AttackMaxDistance)
                {
                    if (ps.TryRunAwayFromMovable(passenger))
                    {
                        return(true);
                    }
                }
            }
        }
        ConductorSM hero          = MonobehaviorHandler.GetMonobeharior().GetObject <Floor>("Floor").GetHero();
        float       conductorDist = ((Vector2)hero.transform.position - (Vector2)ps.transform.position).sqrMagnitude;

        if (conductorDist < ps.AttackMaxDistance)
        {
            if (ps.TryRunAwayFromMovable(hero))
            {
                return(true);
            }
        }
        return(false);
    }
Example #2
0
    public void CalculateMagnet()
    {
        if (_isMagnetActivated)
        {
            if (_hasTicket && _isVisibleToHero)
            {
                _isMagnetActivated = false;
                _isMagnetTurnedOn  = false;
            }
        }
        ConductorSM hero         = MonobehaviorHandler.GetMonobeharior().GetObject <Floor>("Floor").GetHero();
        Vector2     heroPosition = hero.transform.position;
        float       heroDist     = ((Vector2)transform.position - heroPosition).sqrMagnitude;

        if (heroDist < _magnetDistance || _isMagnetActivated)
        {
            _isMagnetActivated = true;
            if (heroDist < 0.1f)
            {
                return;
            }
            if (!GetTarget().Equals(heroPosition))
            {
                SetTarget(hero.transform.position);
            }
        }
    }
Example #3
0
    protected override void Update()
    {
        base.Update();
        ConductorSM hero = MonobehaviorHandler.GetMonobeharior().GetObject <Floor>("Floor").GetHero();

        if (hero == null)
        {
            return;
        }
        CalculateIndicator();
        if (!hero.IsDragging())
        {
            StopDrag(false);
        }
        if (AttackTarget != null)
        {
            if (AttackTarget.CanNotInteract())
            {
                AttackTarget = null;
            }
        }
        _attackingDenyPeriod -= Time.deltaTime;
        if (_attackingDenyPeriod <= 0)
        {
            IsAttackingAllowed = true;
        }
        if (AttackTarget != null)
        {
            float dist = AttackTargetDistance();
            if (dist > AttackMaxDistance)
            {
                AttackTarget = null;
            }
        }
    }
Example #4
0
    void OnTriggerStay2D(Collider2D other)
    {
        if (!_isCheckPossible && _checkStateEnabled)
        {
            return;
        }
        _isCheckPossible         = false;
        _timeAfterPassengerCheck = 0;
        PassengerCollisionDetector passengerCD = other.GetComponent <PassengerCollisionDetector>();

        if (passengerCD != null)
        {
            PassengerSM passenger = (PassengerSM)passengerCD.Character;
            TryHaveSetPassenger(passenger);
            return;
        }
        ConductorCollisionDetector conductorCD = other.GetComponentInParent <ConductorCollisionDetector>();

        if (conductorCD != null)
        {
            ConductorSM conductor = (ConductorSM)conductorCD.Character;
            if (conductor.IsDragging())
            {
                PassengerSM draggedPassenger = conductor.GetDragTarget();
                TryHaveSetPassenger(draggedPassenger);
            }
        }
    }
Example #5
0
 public override void Deactivate()
 {
     base.Deactivate();
     GameController.GetInstance().BonusEffectToPassengers(this, false);
     if (IsConductorAffected)
     {
         ConductorSM conductor = MonobehaviorHandler.GetMonobeharior().GetObject <Floor>("Floor").GetHero();
         RemoveEffectFromConductor(conductor);
     }
 }
Example #6
0
 protected override void OnStart()
 {
     _timeSinceStateChanged = 0;
     if (_hero == null)
     {
         _hero = MonobehaviorHandler.GetMonobeharior().GetObject<Floor>("Floor").GetHero();
     }
     if (_floor == null)
     {
         _floor = MonobehaviorHandler.GetMonobeharior().GetObject<Floor>("Floor");
     }
 }
Example #7
0
 protected override void OnStart()
 {
     _timeSinceStateChanged = 0;
     if (_hero == null)
     {
         _hero = MonobehaviorHandler.GetMonobeharior().GetObject <Floor>("Floor").GetHero();
     }
     if (_floor == null)
     {
         _floor = MonobehaviorHandler.GetMonobeharior().GetObject <Floor>("Floor");
     }
 }
Example #8
0
 public override void Activate()
 {
     base.Activate();
     if (IsPassengersAffected)
     {
         GameController.GetInstance().BonusEffectToPassengers(this, true);
     }
     if (IsConductorAffected)
     {
         ConductorSM conductor = MonobehaviorHandler.GetMonobeharior().GetObject <Floor>("Floor").GetHero();
         AddEffectToConductor(conductor);
     }
 }
Example #9
0
    public override void HandleDoubleClick()
    {
        ConductorSM hero = MonobehaviorHandler.GetMonobeharior().GetObject <Floor>("Floor").GetHero();

        if (hero.CanKick(this))
        {
            if (_isFlyAwayDenied)
            {
                return;
            }
            hero.Kick(this);
            return;
        }
        hero.StartDrag(this);
    }
Example #10
0
    public override void HandleClick()
    {
        if (_isTrainingEnabled)
        {
            ShowNextTrainingMessage();
            _isTrainingEnabled = false;
        }
        ConductorSM hero = MonobehaviorHandler.GetMonobeharior().GetObject <Floor>("Floor").GetHero();

        if (!_isVisibleToHero)
        {
            if (IsStick())
            {
                StartUnstick(hero);
            }
            else
            {
                _isVisibleToHero = true;
                GameController.GetInstance().UpdatePassenger(this);
                if (!_hasTicket)
                {
                    if (!_isConductorAttackDenied)
                    {
                        AttackTarget = hero;
                        CalculateAttackReaction();
                    }
                }
                else
                {
                    MonobehaviorHandler.GetMonobeharior().GetObject <AudioPlayer>("AudioPlayer").PlayAudioById("coins");
                }
            }
            return;
        }
        if (IsStick())
        {
            StartUnstick(hero);
            return;
        }
        hero.StartDrag(this);
    }
Example #11
0
    public bool TryAttackMovable(MovableCharacterSM movable)
    {
        if (_attackDenyedByTraining)
        {
            return(false);
        }
        float currentAttackProbability = GetAttackProbabilityForClass(movable.GetClassName());
        var   sm = movable as PassengerSM;

        if (sm != null)
        {
            if (_isPassengerAttackDenied)
            {
                return(false);
            }
            PassengerSM passenger = sm;
            if (passenger.IsOnTheBench())
            {
                currentAttackProbability *=
                    ConfigReader.GetConfig().GetField("tram").GetField("SitAggressionIncrement").n;
            }
        }
        if (Randomizer.GetPercentageBasedBoolean((int)currentAttackProbability))
        {
            if (_isConductorAttackDenied)
            {
                ConductorSM conductor = movable as ConductorSM;
                if (conductor != null)
                {
                    return(false);
                }
            }
            AttackTarget = movable;
            AttackIfPossible();
            return(true);
        }
        MakeIdle();
        return(false);
    }
Example #12
0
 public override void Activate()
 {
     _isActive = true;
     if (IsPassengersAffected)
     {
         List <PassengerSM> passengersNear = GameController.GetInstance().AllPassengersInDist(Position, Dist);
         foreach (var passengerSm in passengersNear)
         {
             AddEffectToPassenger(passengerSm);
         }
     }
     if (IsConductorAffected)
     {
         ConductorSM hero = MonobehaviorHandler.GetMonobeharior().GetObject <Floor>("Floor").GetHero();
         float       dist =
             ((Vector2)hero.transform.position -
              Position).sqrMagnitude;
         if (dist <= Dist)
         {
             AddEffectToConductor(hero);
         }
     }
     Deactivate();
 }
Example #13
0
    public void StopDrag(bool attack)
    {
        if (GetActiveState() != (int)MovableCharacterStates.Dragged)
        {
            return;
        }
        Floor floor = MonobehaviorHandler.GetMonobeharior().GetObject <Floor>("Floor");

        floor.OnMouseUp();
        ConductorSM conductor = floor.GetHero();

        if (conductor.CanKick(this))
        {
            if (!HasTicket())
            {
                BeginEscape(conductor);
            }
        }
        else
        {
            if (attack)
            {
                if (_isConductorAttackDenied)
                {
                    MakeIdle();
                    return;
                }
                AttackTarget = conductor;
                AttackIfPossible();
            }
            else
            {
                MakeIdle();
            }
        }
    }
Example #14
0
    private void ShowTrainingStep(int step)
    {
        switch (step)
        {
        case 0:
            if (IsTrainingFinished())
            {
                gameObject.SetActive(false);
                return;
            }
            _benches = GameObject.Find("benches");
            _benches.SetActive(false);
            _isBonusDropEnabled = false;
            _doorsTimer.SetActive(false);
            _ticketsCounter.SetActive(false);
            _haresCounter.SetActive(false);
            _killedCounter.SetActive(false);
            _lifes.SetActive(false);
            _bonusSelectWindow.SetActive(false);
            _isPassengerClickAllowed = false;
            _centralWayout.SetActive(false);
            _centralWayoutSprite.SetActive(false);
            _bonusesUI.SetActive(false);
            _megabonusUI.SetActive(false);
            _bonusButton.SetVisible(false);
            Time.timeScale = 0;
            _doorsTimerController.SetMoveAndStopDuration(3, 1);
            _doorsTimerController.SetMovementLocked(true);
            _fullConductorWindow.DisplayText(StringResources.GetLocalizedString("Training1"), false);
            break;

        case 1:
            _fullConductorWindow.DisplayTextWithImage(StringResources.GetLocalizedString("Training2"), Resources.Load <Sprite>("Sprites/training/training1"), false);
            break;

        case 2:
            _fullConductorWindow.DisplayText(StringResources.GetLocalizedString("Training3"), true);
            break;

        case 3:
            Time.timeScale = 1;
            SpawnPassengerFromRandomDoor("gnome", Spawner.TicketAdditionMode.WithTicket);
            StartCoroutine(WaitAndMoveNext(2));
            break;

        case 4:
            Time.timeScale = 0;
            _shortConductorWindow.DisplayText(StringResources.GetLocalizedString("Training4"), true);
            GameObject gnomeObject = GameObject.Find("gnome(Clone)");
            _gnomePassenger = gnomeObject.GetComponent <Gnome>();
            _gnomePassenger.SetAttackEnabled(false);
            _gnomePassenger.SetFlyAwayDenied(true);
            _gnomePassenger.SetDragDenied(true);
            DisplayArrowForPassenger(_gnomePassenger);
            _isPassengerClickAllowed = true;
            break;

        case 5:
            Time.timeScale = 1;
            _ticketsCounter.SetActive(true);
            break;

        case 6:
            Time.timeScale = 0;
            Destroy(_activeArrow);
            _doorsTimer.SetActive(true);
            _shortConductorWindow.DisplayText(StringResources.GetLocalizedString("Training5"), true);
            break;

        case 7:
            Time.timeScale = 1;
            _doorsTimerController.SetMovementLocked(false);
            StartCoroutine(WaitAndMoveNext(2));
            break;

        case 8:
            SpawnPassengerFromRandomDoor("bird", Spawner.TicketAdditionMode.WithoutTicket);
            GameObject bird = GameObject.Find("bird(Clone)");
            _birdPassenger = bird.GetComponent <Bird>();
            _birdPassenger.SetFlyAwayDenied(true);
            _birdPassenger.SetAttackEnabled(false);
            _birdPassenger.SetRunawayDenied(true);
            DisplayArrowForPassenger(_birdPassenger);
            _doorsTimerController.SetMovementLocked(true);
            break;

        case 9:
            Time.timeScale = 0;
            Destroy(_activeArrow);
            _doorsTimer.SetActive(true);
            _shortConductorWindow.DisplayText(StringResources.GetLocalizedString("Training6"), true);
            break;

        case 10:
            _centralWayout.SetActive(true);
            _centralWayoutSprite.SetActive(true);
            DisplayArrow(_centralWayout);
            Time.timeScale = 1;
            _floor.AddDragCenterListner(_birdPassenger.name);
            break;

        case 11:
            Time.timeScale = 0;
            Destroy(_activeArrow);
            _shortConductorWindow.DisplayText(StringResources.GetLocalizedString("Training7"), true);
            break;

        case 12:
            Time.timeScale = 1;
            _birdPassenger.SetRunawayDenied(false);
            _birdPassenger.SetFlyAwayDenied(false);
            _birdPassenger.ActivateFlyAwayListener();
            _haresCounter.SetActive(true);
            break;

        case 13:
            Time.timeScale = 0;
            _shortConductorWindow.DisplayText(StringResources.GetLocalizedString("Training8"), true);
            break;

        case 14:
            _doorsTimerController.SetMoveAndStopDuration(3, 5);
            Time.timeScale = 1;
            _doorsTimerController.SetMovementLocked(false);
            _goAwayDoorIndex = Randomizer.GetInRange(0, _doors.Length);
            _gnomePassenger.SetAlwaysStickForTraining();
            _gnomePassenger.StartGoAway();
            StartCoroutine(WaitAndMoveNext(2.9f));
            break;

        case 15:
            _doors[(_goAwayDoorIndex)].Open(false);
            break;

        case 16:
            Time.timeScale = 0;
            _shortConductorWindow.DisplayText(StringResources.GetLocalizedString("Training9"), true);
            break;

        case 17:
            Time.timeScale = 1;
            break;

        case 18:
            Time.timeScale = 0;
            _shortConductorWindow.DisplayText(StringResources.GetLocalizedString(_isGnomeSurvived ? "Training10" : "Training11"), true);
            break;

        case 19:
            Time.timeScale = 1;
            _doors[(_goAwayDoorIndex)].Close();
            _doorsTimerController.Unstick();
            StartCoroutine(WaitAndMoveNext(_doorsTimerController.GetCurrentRemainingTime() + 3));
            break;

        case 20:
            _goAwayDoorIndex = Randomizer.GetInRange(0, _doors.Length);
            _doorsTimerController.OpenDoors();

            int index = Randomizer.GetInRange(0, _doors.Length);
            _doors[index].OpenAndSpawnByName("granny", Spawner.TicketAdditionMode.WithTicket);
            index = Randomizer.GetInRange(0, _doors.Length);
            _doors[index].OpenAndSpawnByName("cat", Spawner.TicketAdditionMode.WithoutTicket);
            StartCoroutine(WaitAndMoveNext(0.1f));
            break;

        case 21:
            _doorsTimerController.SetMovementLocked(true);
            GameObject grannyObject = GameObject.Find("granny(Clone)");
            _grannyPassenger = grannyObject.GetComponent <Granny>();
            GameObject catObject = GameObject.Find("cat(Clone)");

            _catPassenger = catObject.GetComponent <Cat>();
            _catPassenger.SetMaximumAttackProbabilityForTraining();
            _grannyPassenger.SetMaximumAttackProbabilityForTraining();
            _grannyPassenger.SetConductorAttackDenied(true);
            _catPassenger.SetConductorAttackDenied(true);
            _catPassenger.SetFlyAwayDenied(true);
            _grannyPassenger.SetFlyAwayDenied(true);
            _catPassenger.SetHalfImmortal(true);
            _grannyPassenger.SetHalfImmortal(true);
            _hero = GameObject.Find("hero").GetComponent <ConductorSM>();
            _hero.SetHalfImmortal(true);
            break;

        case 22:
            _grannyPassenger.DisableAttackListener();
            _catPassenger.DisableAttackListener();
            if (_attackedPassenger != null)
            {
                DisplayArrowForPassenger((PassengerSM)_attackedPassenger);
            }
            break;

        case 23:
            Time.timeScale = 0;
            Destroy(_activeArrow);
            _shortConductorWindow.DisplayText(StringResources.GetLocalizedString("Training12"), false);
            break;

        case 24:
            _shortConductorWindow.DisplayText(StringResources.GetLocalizedString("Training13"), false);
            break;

        case 25:
            _grannyPassenger.SetDragListenerEnabled(true);
            _catPassenger.SetDragListenerEnabled(true);
            _killedCounter.SetActive(true);
            _shortConductorWindow.DisplayText(StringResources.GetLocalizedString("Training14"), true);
            break;

        case 26:
            Time.timeScale             = 1;
            _catPassenger.AttackTarget = _grannyPassenger;
            break;

        case 27:
            _grannyPassenger.SetDragListenerEnabled(false);
            _grannyPassenger.SetCounterAttackProbability(0);
            _catPassenger.SetDragListenerEnabled(false);
            _catPassenger.SetConductorAttackDenied(false);
            _catPassenger.SetPassengerAttackDenied(true);
            _hero.SetAttackListenerActivated();
            _catPassenger.AttackTarget = _hero;
            break;

        case 28:
            StartCoroutine(WaitAndMoveNext(1));
            break;

        case 29:
            Time.timeScale = 0;
            _lifes.SetActive(true);
            _shortConductorWindow.DisplayText(StringResources.GetLocalizedString("Training15"), true);
            _catPassenger.SetFlyAwayDenied(false);
            _isBonusDropEnabled = true;
            _catPassenger.IncreaseBonusProbability();
            break;

        case 30:
            DisplayArrowForPassenger(_catPassenger);
            Time.timeScale = 1;
            break;

        case 31:
            Destroy(_activeArrow);
            _bonusTimer.ActivateDropListener();
            break;

        case 32:
            StartCoroutine(WaitAndMoveNext(1));
            break;

        case 33:
            Time.timeScale = 0;
            _shortConductorWindow.DisplayText(StringResources.GetLocalizedString("Training16"), true);
            break;

        case 34:
            Time.timeScale = 1;
            _bonusTimer.ActivateDropListener();
            break;

        case 35:
            Time.timeScale = 0;
            _bonusesUI.SetActive(true);
            _megabonusUI.SetActive(true);
            _shortConductorWindow.DisplayText(StringResources.GetLocalizedString("Training17"), false);
            break;

        case 36:
            _shortConductorWindow.DisplayText(StringResources.GetLocalizedString("Training18"), true);
            break;

        case 37:
            Time.timeScale = 1;
            _doorsTimerController.SetMoveAndStopDuration(3, 7);
            _doorsTimerController.OpenDoors();
            _doorsTimerController.SetMovementLocked(false);
            _grannyPassenger.SetStickProbability(0);
            _grannyPassenger.StartGoAway();
            _grannyPassenger.IncreaseGoAwayVelocity();
            _grannyPassenger.SetDragDenied(true);
            _goAwayDoorIndex = Randomizer.GetInRange(0, _doors.Length);
            _doors[(_goAwayDoorIndex)].Open(false);
            _grannyPassenger.IncrementStationCount();
            StartCoroutine(WaitAndMoveNext(_doorsTimerController.GetCurrentRemainingTime() + 3));
            break;

        case 38:
            _doorsTimerController.OpenDoors();
            SpawnPassengerFromRandomDoor("alien", Spawner.TicketAdditionMode.WithTicket);
            SpawnPassengerFromRandomDoor("alien", Spawner.TicketAdditionMode.WithTicket);
            StartCoroutine(WaitAndMoveNext(1));
            break;

        case 39:
            _doorsTimerController.SetMovementLocked(true);
            Time.timeScale = 0;
            _benches.SetActive(true);
            DisplayArrow(_benches);
            _shortConductorWindow.DisplayText(StringResources.GetLocalizedString("Training19"), true);
            break;

        case 40:
            Destroy(_activeArrow);
            Time.timeScale = 1;
            _benchArray    = FindObjectsOfType <Bench>();
            foreach (var bench in _benchArray)
            {
                bench.SetCheckState(false);
            }
            _aliens = FindObjectsOfType <Alien>();
            foreach (var alien in _aliens)
            {
                alien.SetFlyAwayDenied(true);
                alien.SetSitListenerActivated(true);
            }
            break;

        case 41:
            foreach (var alien in _aliens)
            {
                alien.SetSitListenerActivated(false);
            }
            _hero.SetHalfImmortal(false);
            Time.timeScale = 0;
            _shortConductorWindow.DisplayText(StringResources.GetLocalizedString("Training20"), true);
            foreach (var bench in _benchArray)
            {
                bench.SetCheckState(true);
            }
            break;

        case 42:
            Time.timeScale = 1;
            _doorsTimerController.SetStationCountListener(3);
            _doorsTimerController.SetMovementLocked(false);
            _doorsTimerController.DisableTrainingMode();
            break;

        case 43:
            PassengerSM[] passengers = FindObjectsOfType <PassengerSM>();
            foreach (var passengerSm in passengers)
            {
                passengerSm.StartGoAway();
                passengerSm.IncreaseGoAwayVelocity();
            }
            _doorsTimerController.DisableSpawn();
            _doorsTimerController.SetStationCountListener(2);
            break;

        case 44:
            _shortConductorWindow.ForceHide();
            Time.timeScale = 0;
            _fullConductorWindow.DisplayTextWithImage(StringResources.GetLocalizedString("Training21"), Resources.Load <Sprite>("Sprites/training/training2"), false, true);
            break;

        case 45:
            PlayerPrefs.SetString(TrainingKey, TrainingKey);
            SceneManager.LoadSceneAsync("MainMenu");
            break;
        }
        _isRefreshInProgress = false;
    }
Example #15
0
 public void StartUnstick(ConductorSM hero)
 {
     TimeSincePreviousClickMade = MaxClickDuration;
     hero.SetTarget(transform.position);
     hero.StartSaveStickPassenger(this);
 }
Example #16
0
 public override void AddEffectToConductor(ConductorSM conductor)
 {
     conductor.AddDamageValue(-conductor.GetInitialLifes());
 }
Example #17
0
 public virtual void AddEffectToConductor(ConductorSM conductor)
 {
 }
 void Awake()
 {
     _conductor = (ConductorSM)Character;
 }
Example #19
0
    public virtual void RemoveEffectFromConductor(ConductorSM conductor)
    {

    }
Example #20
0
    public virtual void AddEffectToConductor(ConductorSM conductor)
    {

    }
Example #21
0
 public virtual void RemoveEffectFromConductor(ConductorSM conductor)
 {
 }
Example #22
0
 public void StartUnstick(ConductorSM hero)
 {
     TimeSincePreviousClickMade = MaxClickDuration;
     hero.SetTarget(transform.position);
     hero.StartSaveStickPassenger(this);
 }
Example #23
0
 public ConductorMoveState(StateMachine parent) : base(parent)
 {
     _conductor = (ConductorSM)parent;
 }
Example #24
0
 public override void AddEffectToConductor(ConductorSM conductor)
 {
     conductor.AddDamageValue(-conductor.GetInitialLifes());
 }
Example #25
0
 public ConductorMoveState(StateMachine parent) : base(parent)
 {
     _conductor = (ConductorSM) parent;
 }
 void Awake()
 {
     _conductor = (ConductorSM) Character;
 }
Example #27
0
    private void ShowTrainingStep(int step)
    {
        switch (step)
        {
            case 0:
                if (IsTrainingFinished())
                {
                    gameObject.SetActive(false);
                    return;
                }
                _benches = GameObject.Find("benches");
                _benches.SetActive(false);
                _isBonusDropEnabled = false;
                _doorsTimer.SetActive(false);
                _ticketsCounter.SetActive(false);
                _haresCounter.SetActive(false);
                _killedCounter.SetActive(false);
                _lifes.SetActive(false);
                _bonusSelectWindow.SetActive(false);
                _isPassengerClickAllowed = false;
                _centralWayout.SetActive(false);
                _centralWayoutSprite.SetActive(false);
                _bonusesUI.SetActive(false);
                _megabonusUI.SetActive(false);
                _bonusButton.SetVisible(false);
                Time.timeScale = 0;
                _doorsTimerController.SetMoveAndStopDuration(3, 1);
                _doorsTimerController.SetMovementLocked(true);
                _fullConductorWindow.DisplayText(StringResources.GetLocalizedString("Training1"), false);
                break;
            case 1:
                _fullConductorWindow.DisplayTextWithImage(StringResources.GetLocalizedString("Training2"), Resources.Load<Sprite>("Sprites/training/training1"), false);
                break;
            case 2:
                _fullConductorWindow.DisplayText(StringResources.GetLocalizedString("Training3"), true);
                break;
            case 3:
                Time.timeScale = 1;
                SpawnPassengerFromRandomDoor("gnome", Spawner.TicketAdditionMode.WithTicket);
                StartCoroutine(WaitAndMoveNext(2));
                break;
            case 4:
                Time.timeScale = 0;
                _shortConductorWindow.DisplayText(StringResources.GetLocalizedString("Training4"), true);
                GameObject gnomeObject = GameObject.Find("gnome(Clone)");
                _gnomePassenger = gnomeObject.GetComponent<Gnome>();
                _gnomePassenger.SetAttackEnabled(false);
                _gnomePassenger.SetFlyAwayDenied(true);
                _gnomePassenger.SetDragDenied(true);
                DisplayArrowForPassenger(_gnomePassenger);
                _isPassengerClickAllowed = true;
                break;
            case 5:
                Time.timeScale = 1;
                _ticketsCounter.SetActive(true);
                break;
            case 6:
                Time.timeScale = 0;
                Destroy(_activeArrow);
                _doorsTimer.SetActive(true);
                _shortConductorWindow.DisplayText(StringResources.GetLocalizedString("Training5"), true);
                break;
            case 7:
                Time.timeScale = 1;
                _doorsTimerController.SetMovementLocked(false);
                StartCoroutine(WaitAndMoveNext(2));
                break;
            case 8:
                SpawnPassengerFromRandomDoor("bird", Spawner.TicketAdditionMode.WithoutTicket);
                GameObject bird = GameObject.Find("bird(Clone)");
                _birdPassenger = bird.GetComponent<Bird>();
                _birdPassenger.SetFlyAwayDenied(true);
                _birdPassenger.SetAttackEnabled(false);
                _birdPassenger.SetRunawayDenied(true);
                DisplayArrowForPassenger(_birdPassenger);
                _doorsTimerController.SetMovementLocked(true);
                break;
            case 9:
                Time.timeScale = 0;
                Destroy(_activeArrow);
                _doorsTimer.SetActive(true);
                _shortConductorWindow.DisplayText(StringResources.GetLocalizedString("Training6"), true);
                break;
            case 10:
                _centralWayout.SetActive(true);
                _centralWayoutSprite.SetActive(true);
                DisplayArrow(_centralWayout);
                Time.timeScale = 1;
                _floor.AddDragCenterListner(_birdPassenger.name);
                break;
            case 11:
                Time.timeScale = 0;
                Destroy(_activeArrow);
                _shortConductorWindow.DisplayText(StringResources.GetLocalizedString("Training7"), true);
                break;
            case 12:
                Time.timeScale = 1;
                _birdPassenger.SetRunawayDenied(false);
                _birdPassenger.SetFlyAwayDenied(false);
                _birdPassenger.ActivateFlyAwayListener();
                _haresCounter.SetActive(true);
                break;
            case 13:
                Time.timeScale = 0;
                _shortConductorWindow.DisplayText(StringResources.GetLocalizedString("Training8"), true);
                break;
            case 14:
                _doorsTimerController.SetMoveAndStopDuration(3, 5);
                Time.timeScale = 1;
                _doorsTimerController.SetMovementLocked(false);
                _goAwayDoorIndex = Randomizer.GetInRange(0, _doors.Length);
                _gnomePassenger.SetAlwaysStickForTraining();
                _gnomePassenger.StartGoAway();
                StartCoroutine(WaitAndMoveNext(2.9f));
                break;
            case 15:
                _doors[(_goAwayDoorIndex)].Open(false);
                break;
            case 16:
                Time.timeScale = 0;
                _shortConductorWindow.DisplayText(StringResources.GetLocalizedString("Training9"), true);
                break;
            case 17:
                Time.timeScale = 1;
                break;
            case 18:
                Time.timeScale = 0;
                _shortConductorWindow.DisplayText(StringResources.GetLocalizedString(_isGnomeSurvived ? "Training10" : "Training11"), true);
                break;
            case 19:
                Time.timeScale = 1;
                _doors[(_goAwayDoorIndex)].Close();
                _doorsTimerController.Unstick();
                StartCoroutine(WaitAndMoveNext(_doorsTimerController.GetCurrentRemainingTime() + 3));
                break;
            case 20:
                _goAwayDoorIndex = Randomizer.GetInRange(0, _doors.Length);
                _doorsTimerController.OpenDoors();

                int index = Randomizer.GetInRange(0, _doors.Length);
                _doors[index].OpenAndSpawnByName("granny", Spawner.TicketAdditionMode.WithTicket);
                index = Randomizer.GetInRange(0, _doors.Length);
                _doors[index].OpenAndSpawnByName("cat", Spawner.TicketAdditionMode.WithoutTicket);
                StartCoroutine(WaitAndMoveNext(0.1f));
                break;
            case 21:
                _doorsTimerController.SetMovementLocked(true);
                GameObject grannyObject = GameObject.Find("granny(Clone)");
                _grannyPassenger = grannyObject.GetComponent<Granny>();
                GameObject catObject = GameObject.Find("cat(Clone)");

                _catPassenger = catObject.GetComponent<Cat>();
                _catPassenger.SetMaximumAttackProbabilityForTraining();
                _grannyPassenger.SetMaximumAttackProbabilityForTraining();
                _grannyPassenger.SetConductorAttackDenied(true);
                _catPassenger.SetConductorAttackDenied(true);
                _catPassenger.SetFlyAwayDenied(true);
                _grannyPassenger.SetFlyAwayDenied(true);
                _catPassenger.SetHalfImmortal(true);
                _grannyPassenger.SetHalfImmortal(true);
                _hero = GameObject.Find("hero").GetComponent<ConductorSM>();
                _hero.SetHalfImmortal(true);
                break;
            case 22:
                _grannyPassenger.DisableAttackListener();
                _catPassenger.DisableAttackListener();
                if (_attackedPassenger != null)
                {
                    DisplayArrowForPassenger((PassengerSM)_attackedPassenger);
                }
                break;
            case 23:
                Time.timeScale = 0;
                Destroy(_activeArrow);
                _shortConductorWindow.DisplayText(StringResources.GetLocalizedString("Training12"), false);
                break;
            case 24:
                _shortConductorWindow.DisplayText(StringResources.GetLocalizedString("Training13"), false);
                break;
            case 25:
                _grannyPassenger.SetDragListenerEnabled(true);
                _catPassenger.SetDragListenerEnabled(true);
                _killedCounter.SetActive(true);
                _shortConductorWindow.DisplayText(StringResources.GetLocalizedString("Training14"), true);
                break;
            case 26:
                Time.timeScale = 1;
                _catPassenger.AttackTarget = _grannyPassenger;
                break;
            case 27:
                _grannyPassenger.SetDragListenerEnabled(false);
                _grannyPassenger.SetCounterAttackProbability(0);
                _catPassenger.SetDragListenerEnabled(false);
                _catPassenger.SetConductorAttackDenied(false);
                _catPassenger.SetPassengerAttackDenied(true);
                _hero.SetAttackListenerActivated();
                _catPassenger.AttackTarget = _hero;
                break;
            case 28:
                StartCoroutine(WaitAndMoveNext(1));
                break;
            case 29:
                Time.timeScale = 0;
                _lifes.SetActive(true);
                _shortConductorWindow.DisplayText(StringResources.GetLocalizedString("Training15"), true);
                _catPassenger.SetFlyAwayDenied(false);
                _isBonusDropEnabled = true;
                _catPassenger.IncreaseBonusProbability();
                break;
            case 30:
                DisplayArrowForPassenger(_catPassenger);
                Time.timeScale = 1;
                break;
            case 31:
                Destroy(_activeArrow);
                _bonusTimer.ActivateDropListener();
                break;
            case 32:
                StartCoroutine(WaitAndMoveNext(1));
                break;
            case 33:
                Time.timeScale = 0;
                _shortConductorWindow.DisplayText(StringResources.GetLocalizedString("Training16"), true);
                break;
            case 34:
                Time.timeScale = 1;
                _bonusTimer.ActivateDropListener();
                break;
            case 35:
                Time.timeScale = 0;
                _bonusesUI.SetActive(true);
                _megabonusUI.SetActive(true);
                _shortConductorWindow.DisplayText(StringResources.GetLocalizedString("Training17"), false);
                break;
            case 36:
                _shortConductorWindow.DisplayText(StringResources.GetLocalizedString("Training18"), true);
                break;
            case 37:
                Time.timeScale = 1;
                _doorsTimerController.SetMoveAndStopDuration(3, 7);
                _doorsTimerController.OpenDoors();
                _doorsTimerController.SetMovementLocked(false);
                _grannyPassenger.SetStickProbability(0);
                _grannyPassenger.StartGoAway();
                _grannyPassenger.IncreaseGoAwayVelocity();
                _grannyPassenger.SetDragDenied(true);
                _goAwayDoorIndex = Randomizer.GetInRange(0, _doors.Length);
                _doors[(_goAwayDoorIndex)].Open(false);
                _grannyPassenger.IncrementStationCount();
                StartCoroutine(WaitAndMoveNext(_doorsTimerController.GetCurrentRemainingTime() + 3));
                break;
            case 38:
                _doorsTimerController.OpenDoors();
                SpawnPassengerFromRandomDoor("alien", Spawner.TicketAdditionMode.WithTicket);
                SpawnPassengerFromRandomDoor("alien", Spawner.TicketAdditionMode.WithTicket);
                StartCoroutine(WaitAndMoveNext(1));
                break;
            case 39:
                _doorsTimerController.SetMovementLocked(true);
                Time.timeScale = 0;
                _benches.SetActive(true);
                DisplayArrow(_benches);
                _shortConductorWindow.DisplayText(StringResources.GetLocalizedString("Training19"), true);
                break;
            case 40:
                Destroy(_activeArrow);
                Time.timeScale = 1;
                _benchArray = FindObjectsOfType<Bench>();
                foreach (var bench in _benchArray)
                {
                    bench.SetCheckState(false);
                }
                _aliens = FindObjectsOfType<Alien>();
                foreach (var alien in _aliens)
                {
                    alien.SetFlyAwayDenied(true);
                    alien.SetSitListenerActivated(true);
                }
                break;
            case 41:
                foreach (var alien in _aliens)
                {
                    alien.SetSitListenerActivated(false);
                }
                _hero.SetHalfImmortal(false);
                Time.timeScale = 0;
                _shortConductorWindow.DisplayText(StringResources.GetLocalizedString("Training20"), true);
                foreach (var bench in _benchArray)
                {
                    bench.SetCheckState(true);
                }
                break;
            case 42:
                Time.timeScale = 1;
                _doorsTimerController.SetStationCountListener(3);
                _doorsTimerController.SetMovementLocked(false);
                _doorsTimerController.DisableTrainingMode();
                break;
            case 43:
                PassengerSM[] passengers = FindObjectsOfType<PassengerSM>();
                foreach (var passengerSm in passengers)
                {
                    passengerSm.StartGoAway();
                    passengerSm.IncreaseGoAwayVelocity();
                }
                _doorsTimerController.DisableSpawn();
                _doorsTimerController.SetStationCountListener(2);
                break;
            case 44:
                _shortConductorWindow.ForceHide();
                Time.timeScale = 0;
                _fullConductorWindow.DisplayTextWithImage(StringResources.GetLocalizedString("Training21"), Resources.Load<Sprite>("Sprites/training/training2"), false, true);
                break;
            case 45:
                PlayerPrefs.SetString(TrainingKey, TrainingKey);
                SceneManager.LoadSceneAsync("MainMenu");
                break;
        }
        _isRefreshInProgress = false;
    }