Beispiel #1
0
    private IEnumerator ChangeCharacter(Character newCharacter)
    {
        if (CharacterState == CharacterState.Idle)
        {
            if (_currentDocuments.Count > 0)
            {
                // Wipe the documents
                _currentDocuments.ForEach(d => Destroy(d));
                _currentDocuments.Clear();
            }

            if (_currentCharacter != null)
            {
                // Play removal animation
                _characterAnimation.Play("CharacterLeave");
                CharacterState = CharacterState.Animation;
            }

            // Wait for the character to leave
            yield return(WaitForAnimation(_characterAnimation));

            CharacterState = CharacterState.Idle;

            // Set the new character
            _currentCharacter = newCharacter;

            // Change the sprite
            var spriteRenderer = _characterGameObject.GetComponent <SpriteRenderer>();
            spriteRenderer.sprite = newCharacter.Preset.Sprite;

            // Make new character enter
            _sceneryAnimation.Play("SceneryStop");
            yield return(WaitForAnimation(_sceneryAnimation));

            _backgroundAnimation.Play("DoorsOpen");
            yield return(WaitForAnimation(_backgroundAnimation));

            _characterAnimation.Play("CharacterEntry");
            CharacterState = CharacterState.Animation;
            yield return(WaitForAnimation(_characterAnimation));

            _backgroundAnimation.Play("DoorsClose");
            _sceneryAnimation.Play("SceneryStart");
            yield return(WaitForAnimation(_sceneryAnimation));

            CharacterState = CharacterState.Idle;

            // Create new documents
            var documentPrefab    = _documentsService.GenerateDocument();
            var document          = Instantiate(documentPrefab);
            var documentComponent = document.GetComponent <DocumentController>();
            documentComponent.SetPerson(_currentCharacter.Person);
            _currentDocuments.Add(document);

            // Create a ticket
            var ticketIndex = _random.Next(0, 10);
            if (ticketIndex <= 7)
            {
                var ticket          = Instantiate(_ticketPrefab);
                var ticketComponent = ticket.GetComponent <TicketController>();
                _currentDocuments.Add(ticket);
                _currentWithTicket = true;
            }
            else
            {
                _currentWithTicket = false;
            }
        }
    }