Exemplo n.º 1
0
        private IEnumerator RunConversation(string conversationReference)
        {
            SetPromptVisible(false);
            IsInConversation = true;
            ConversationStarted.InvokeSafe(_currentFragment, _owner);

            while (_currentFragment != null)
            {
                if (_currentFragment.IsPlayer)
                {
                    yield return(ShowPlayerSpeech(_currentFragment.ToSay[0], _currentFragment.ToSay[1]));
                }
                else
                {
                    yield return(ShowSpeech(_currentFragment.ToSay[0], false));
                }
            }

            _talkingTo       = null;
            IsInConversation = false;

            if (ConversationFunctionLibrary.ShouldRerun(App.AIBlackboard.GetConversation(conversationReference).ShouldRerun, _owner))
            {
                _availableConversations.Insert(0, conversationReference);
            }

            ConversationEnded.InvokeSafe(_owner);

            if (_conversationTrigger.bounds.Contains(App.AIBlackboard.Player.transform.position))
            {
                SetPromptVisible(true);
            }

            _conversation = null;
        }
Exemplo n.º 2
0
        //Starts specific conversation
        private void StartConversation(string conversationReference, BaseCharacterController listener)
        {
            _currentFragment = App.AIBlackboard.GetConversation(conversationReference);
            _talkingTo       = listener;

            _conversation = StartCoroutine(RunConversation(conversationReference));
        }
Exemplo n.º 3
0
        public static void RunFunction(ConversationOutput toRun, Data parameters, BaseCharacterController speaker, BaseCharacterController listener)
        {
            switch (toRun)
            {
            case ConversationOutput.None:
                break;

            case ConversationOutput.TransferMoney:
                TransferMoney(speaker, listener, parameters.iVal);
                break;

            case ConversationOutput.Heal:
                HealListener(listener, parameters.iVal);
                break;

            case ConversationOutput.GiveAbility:
                GiveAbility(listener, parameters.sVal);
                break;

            case ConversationOutput.BuyAbility:
                GiveAbility(listener, parameters.sVal);
                TransferMoney(speaker, listener, parameters.iVal);
                break;
            }
        }
Exemplo n.º 4
0
 private static void HealListener(BaseCharacterController listener, int healBy)
 {
     if (healBy == 0)
     {
         listener.Health.FullHeal();
     }
     else
     {
         listener.Health.Heal((uint)healBy);
     }
 }
Exemplo n.º 5
0
 private static void TransferMoney(BaseCharacterController speaker, BaseCharacterController listener, int amount)
 {
     if (amount > 0)
     {
         speaker.Inventory.TransferCurrencyTo(listener.Inventory, amount);
     }
     else
     {
         listener.Inventory.TransferCurrencyTo(speaker.Inventory, -amount);
     }
 }
Exemplo n.º 6
0
        //Starts next conversation off stack
        private void TryStartConversation(BaseCharacterController other)
        {
            int availableConversation = IsConversationAvailable();

            if (availableConversation == -1 || IsInConversation || !_conversationTrigger.bounds.Contains(other.transform.position))
            {
                return;
            }

            StartConversation(_availableConversations[availableConversation], other);
            _availableConversations.RemoveAt(availableConversation);
        }
Exemplo n.º 7
0
        private static void GiveAbility(BaseCharacterController listener, string ability)
        {
            switch (ability)
            {
            case "DoubleJump":
            {
                if (listener.MaxJumps < 2)
                {
                    listener.MaxJumps = 2;
                }

                break;
            }

            case "Melee":
            {
                PlayerController player = listener as PlayerController;
                if (player != null)
                {
                    player.UnlockAbility(Inventory.Ability.Square);
                }

                break;
            }

            case "Dash":
            {
                PlayerController player = listener as PlayerController;
                if (player != null)
                {
                    player.UnlockAbility(Inventory.Ability.Circle);
                }

                break;
            }

            case "Shoot":
            {
                PlayerController player = listener as PlayerController;
                if (player != null)
                {
                    player.UnlockAbility(Inventory.Ability.Triangle);
                }

                break;
            }

            default:
                UnityEngine.Debug.LogErrorFormat("Can't unlock ability '{0}'", ability);
                break;
            }
        }
Exemplo n.º 8
0
        public void Initialise(BaseCharacterController owner, InventoryContents initialContents, bool dropped = false)
        {
            Contents.Add(initialContents);
            Owner    = owner;
            OnGround = dropped;

            Debug.Assert(Contents != null);

            if (!OnGround)
            {
                Owner.Health.OnDied += OnDie;
            }
        }
Exemplo n.º 9
0
        private void Start()
        {
            if (_spawnerType == CharacterFaction.Player && !_primaryPlayerSpawnPoint)
            {
                return;
            }

            BaseCharacterController spawned = Instantiate(_config.GetPrefab(_spawnerType), transform.position, Quaternion.identity).GetComponent <BaseCharacterController>();

            spawned.OnSpawn(this, _characterConfig);

            OnSpawn.InvokeSafe(spawned);
            OnSpawnNonStatic.InvokeSafe(spawned);
        }
Exemplo n.º 10
0
        public void Setup(BaseCharacterController owner, int damage, Vector3 velocity, PrefabPool owningPool, float lifetime = 5.0f)
        {
            base.Setup(owner, damage);

            _image.localRotation = Quaternion.identity;

            Debug.Assert(owningPool != null);
            _owningPool = owningPool;
            _velocity   = velocity;

            _destructionTime = Time.time + lifetime;
            _active          = true;

            _spinMultiplier = _velocity.x > 0.0f ? -1.0f : 1.0f;
        }
Exemplo n.º 11
0
        private void PickUp(BaseCharacterController picker)
        {
            picker.Inventory.Add(Contents);
            _prompt.SetActive(false);

            if (Owner != null && picker != Owner)
            {
                App.AIBlackboard.AddCriminal(picker);
            }

            if (_refillTime != 0.0f)
            {
                StartCoroutine(RefillContainer());
            }
        }
Exemplo n.º 12
0
        private IEnumerator TryPickUp(BaseCharacterController picker)
        {
            if (OnGround)
            {
                float stayDuration = 0.0f;
                while (stayDuration < _pickDuration)
                {
                    stayDuration            = (Time.time - _pickerEnterTime);
                    _progressbar.fillAmount = (stayDuration / _pickDuration);
                    yield return(null);
                }

                PickUp(picker);
                Destroy(gameObject);
            }
        }
Exemplo n.º 13
0
        private void OnTriggerExit2D(Collider2D collision)
        {
            if (IsConversationAvailable() != -1)
            {
                BaseCharacterController character = collision.gameObject.GetComponent <BaseCharacterController>();

                if (character != null)
                {
                    if (character.GetType() == typeof(PlayerController))
                    {
                        SetPromptVisible(false);
                    }

                    _potentialParticipants.Remove(character);
                }
            }
        }
Exemplo n.º 14
0
        private void OnOwnerDie(BaseCharacterController obj)
        {
            _prompt.SetVisible(false);

            if (_conversation != null)
            {
                StopCoroutine(_conversation);
                _conversation = null;

                if (_currentDialogue != null)
                {
                    HUD.Instance.DestroyMenu(_currentDialogue);
                }

                if (_currentBubble != null)
                {
                    HUD.Instance.DestroyMenu(_currentBubble);
                }
            }
        }
Exemplo n.º 15
0
        protected virtual void OnTriggerEnter2D(Collider2D collision)
        {
            if (CollisionIsOwner(collision))
            {
                return;
            }

            BaseCharacterController characterHit = collision.gameObject.GetComponent <BaseCharacterController>();

            if (characterHit != null)
            {
                OnHit.InvokeSafe(characterHit);
                characterHit.Health.Damage(this);
            }

            Wall wall = collision.gameObject.GetComponent <Wall>();

            if (wall != null)
            {
                wall.Damage(this);
            }
        }
Exemplo n.º 16
0
        private void OnTriggerEnter2D(Collider2D collision)
        {
            if (OnGround && !Contents.IsEmpty())
            {
                BaseCharacterController controller = collision.gameObject.GetComponent <BaseCharacterController>();
                if (controller != null && !_pickers.Contains(controller))
                {
                    _pickers.Add(controller);
                    _pickerEnterTime = Time.time;

                    if (controller is Player.PlayerController)
                    {
                        _prompt.SetActive(true);
                    }

                    if (_pickDuration != 0)
                    {
                        _pickUp = StartCoroutine(TryPickUp(controller));
                    }
                }
            }
        }
Exemplo n.º 17
0
        private void OnTriggerExit2D(Collider2D collision)
        {
            if (OnGround)
            {
                BaseCharacterController picker = _pickers.Find(p => p.gameObject == collision.gameObject);
                if (picker != null)
                {
                    _pickers.Remove(picker);

                    if (picker is Player.PlayerController)
                    {
                        _prompt.SetActive(false);
                    }

                    if (_pickUp != null)
                    {
                        StopCoroutine(_pickUp);
                        _pickUp = null;
                    }
                }
            }
        }
Exemplo n.º 18
0
        public static bool ShouldRerun(RerunPredicate predicate, BaseCharacterController speaker)
        {
            switch (predicate)
            {
            case RerunPredicate.Never:
                return(false);

            case RerunPredicate.Always:
                return(true);

            case RerunPredicate.IfPlayerCantDoubleJump:
                return(App.AIBlackboard.Player.MaxJumps == 1);

            case RerunPredicate.IfPlayerDoesntHaveTriangleAbility:
                return(!App.AIBlackboard.Player.FactionUnlocked(CharacterFaction.Triangle));

            case RerunPredicate.IfPlayerDoesntHaveCircleAbility:
                return(!App.AIBlackboard.Player.FactionUnlocked(CharacterFaction.Circle));

            default:
                Debug.LogErrorFormat("RerunPredicate {0} not implemented", predicate);
                return(false);
            }
        }
Exemplo n.º 19
0
        public static bool IsAvailable(ConversationPredicate predicate, BaseCharacterController speaker)
        {
            switch (predicate)
            {
            case ConversationPredicate.PlayerIsHurt:
                return(IsPlayerHurt());

            case ConversationPredicate.NoDoubleJump:
                return(App.AIBlackboard.Player.MaxJumps < 2);

            case ConversationPredicate.PlayerIsSquare:
                return(App.AIBlackboard.Player.CurrentShape == CharacterFaction.Square);

            case ConversationPredicate.PlayerIsCircle:
                return(App.AIBlackboard.Player.CurrentShape == CharacterFaction.Circle);

            case ConversationPredicate.PlayerIsTriangle:
                return(App.AIBlackboard.Player.CurrentShape == CharacterFaction.Triangle);

            case ConversationPredicate.PlayerHasCashAndIsSquare:
                return(App.AIBlackboard.Player.Inventory.Contents.Currency >= 1000 && App.AIBlackboard.Player.CurrentShape == CharacterFaction.Square);

            case ConversationPredicate.PlayerHasCashAndIsTriangle:
                return(App.AIBlackboard.Player.Inventory.Contents.Currency >= 1000 && App.AIBlackboard.Player.CurrentShape == CharacterFaction.Triangle);

            case ConversationPredicate.NOTPlayerHasCashAndIsSquare:
                return(!(App.AIBlackboard.Player.Inventory.Contents.Currency >= 1000 && App.AIBlackboard.Player.CurrentShape == CharacterFaction.Square));

            case ConversationPredicate.NOTPlayerHasCashAndIsTriangle:
                return(!(App.AIBlackboard.Player.Inventory.Contents.Currency >= 1000 && App.AIBlackboard.Player.CurrentShape == CharacterFaction.Triangle));

            case ConversationPredicate.None:
            default:
                return(true);
            }
        }
Exemplo n.º 20
0
 private void OnSpawn(BaseCharacterController spawned)
 {
     Owner = spawned;
 }
Exemplo n.º 21
0
 private void OnDie(BaseCharacterController died)
 {
     _deathLocation = Owner.transform.position;
     DropInventory();
 }
Exemplo n.º 22
0
 public virtual void Setup(BaseCharacterController owner, int damage)
 {
     Owner   = owner;
     _damage = damage;
 }
Exemplo n.º 23
0
 private void Start()
 {
     _character    = GetComponent <BaseCharacterController>();
     CurrentHealth = _character.Config.MaxHealth;
     App.WorldState.SetState(new Narrative.WorldProperty(_character.ID, Narrative.EProperty.IsDead, false));
 }
Exemplo n.º 24
0
 private void OnRangedHit(BaseCharacterController hit)
 {
     Events.OnRangedAttackConnect.InvokeSafe(hit);
 }
Exemplo n.º 25
0
 private void OnDashHit(BaseCharacterController obj)
 {
     Events.OnDashAttackConnect.InvokeSafe(obj);
 }