Exemple #1
0
        public void Execute()
        {
            Character2D character = _general.GetComponent <Character2D>();

            character.Tasks.AddToStack(new IdleTask(new IdleData
            {
                General = _general
            }));

            General.General general = _general.GetComponent <General.General>();
            general.SatisfyBiggestNeed();
            SetCompleted();
        }
        public static void LookForConversation(GameObject gameObject, NeedStatus socialNeed)
        {
            General.General generalComponent     = gameObject.GetComponent <General.General>();
            NeedStatus      generalOneSocialNeed = generalComponent.GetNeed(NeedType.SOCIAL);

            var general1ConverseData = new ConverseData
            {
                ReadyToTalk = false,
                General     = generalComponent,
                SocialNeed  = generalOneSocialNeed
            };

            gameObject.GetComponent <Character2D>().Tasks.AddToStack(new ConverseTask(general1ConverseData));
        }
        private bool CheckIfConversationPartnerIsNear()
        {
            float             closestGeneralDistance = float.MaxValue;
            Room              generalRoom            = _converseData.General.GetComponent <Character2D>().CurrentRoom;
            List <GameObject> generals = GameManager.Instance().GeneralList
                                         .Where(general => general != _converseData.General.gameObject &&
                                                general.GetComponent <Character2D>().CurrentRoom == generalRoom &&
                                                general.GetComponent <Character2D>().Tasks.IsConcurrentCurrentTaskActive() == false).ToList();

            if (generals.Count <= 0)
            {
                return(false);
            }

            General.General closestGeneral = generals.Aggregate((general1, general2) =>
            {
                closestGeneralDistance = Math.Abs(general1.transform.position.x - _converseData.General.transform.position.x);
                float generalDistance  = Math.Abs(general2.transform.position.x - _converseData.General.transform.position.x);
                if (closestGeneralDistance > generalDistance)
                {
                    return(general2);
                }
                return(general1);
            })
                                             .GetComponent <General.General>();

            closestGeneralDistance = Math.Abs(closestGeneral.transform.position.x - _converseData.General.transform.position.x);
            if (closestGeneralDistance > 1)
            {
                return(false);
            }

            Debug.Log(_converseData.General.Name.FullName() + " is close to " + closestGeneral.Name.FullName() + " and will try to initiate conversation");
            _converseData.General.GetComponent <Character2D>().Tasks.PauseCurrentTask();
            closestGeneral.GetComponent <Character2D>().Tasks.PauseCurrentTask();
            closestGeneral.GetComponent <Character2D>().Tasks.FlushConcurrentTasks();
            _converseData.ConversationPartnerTaskData = new ConverseData
            {
                ConversationPartnerTaskData = _converseData,
                General     = closestGeneral,
                SocialNeed  = closestGeneral.GetNeed(NeedType.SOCIAL),
                ReadyToTalk = true
            };
            closestGeneral.GetComponent <Character2D>().Tasks.AddToStack(new ConverseTask(_converseData.ConversationPartnerTaskData));

            _converseData.ReadyToTalk = true;
            GenerateConversation();
            return(true);
        }