コード例 #1
0
 private void General2Inform(IGeneral general1, IGeneral general2)
 {
     if (general1.knowenListeringDevices().Count != 0)
     {
         general2.Informed(general1.knowenListeringDevices());
     }
     general1.Informed(general2.knowenListeringDevices());
 }
コード例 #2
0
        public Dictionary <IGeneral, string> ConversationGenerator(IGeneral general1, IGeneral general2)
        {
            Dictionary <IGeneral, string> conversation             = new Dictionary <IGeneral, string>();
            GeneralConversationData       general1ConversationData = InitialiseConversationData(general1);
            GeneralConversationData       general2ConversationData = InitialiseConversationData(general2);

            //checks if the generals know they are in a room with a Listening Device
            General1InRoomWithLD = isGeneralInRoomWithListeningDevice(general1);
            General2InRoomWithLD = isGeneralInRoomWithListeningDevice(general2);

            //decises what type of conversation to have
            if (General1InRoomWithLD == false)
            {
                if (general1.knowenListeringDevices().Count != 0)
                {
                    int inform = _randomNumber.Next(0, 1);      //the second number is used to chagne the chance of informing, (1 is 50%, 2 is 33% and so on)
                    if (inform == 0)
                    {
                        return(InformConversation(general1, general2, conversation, general1ConversationData, general2ConversationData));
                    }
                }
            }

            //need a if statment for the convo type
            return(ObjectiveConversation(general1, general2, conversation, general1ConversationData, general2ConversationData));
        }
コード例 #3
0
        //Conversation where they openly inform one and other about Listening Devices
        private Dictionary <IGeneral, string> InformConversation(IGeneral general1, IGeneral general2, Dictionary <IGeneral, string> conversation,
                                                                 GeneralConversationData general1ConversationData, GeneralConversationData general2ConversationData)
        {
            if (_textStatmentInform.Count != 0)
            {
                conversation.Add(general1, TextFill(_textStatmentInform.ElementAt(_randomNumber.Next(_textStatmentInform.Count)), general1ConversationData));
            }
            else
            {
                conversation.Add(general1, "Error: Load didn't work");
            }

            general2.Informed(general1.knowenListeringDevices());
            if (general2.knowenListeringDevices().Count == 0)
            {
                if (_textRespondInform.Count != 0)
                {
                    conversation.Add(general2, TextFill(_textRespondInform.ElementAt(_randomNumber.Next(_textRespondInform.Count)), general2ConversationData));
                }
                else
                {
                    conversation.Add(general2, "Error: Load didn't work");
                }
            }
            else
            {
                if (_textStatmentInform.Count != 0)
                {
                    conversation.Add(general2, TextFill(_textStatmentInform.ElementAt(_randomNumber.Next(_textStatmentInform.Count)), general2ConversationData));
                }
                else
                {
                    conversation.Add(general2, "Error: Load didn't work");
                }

                general1.Informed(general2.knowenListeringDevices());
            }

            return(conversation);
        }
コード例 #4
0
        private bool isGeneralInRoomWithListeningDevice(IGeneral general)
        {
            Room room = general.GetCharacter().CurrentRoom;

            List <GameObject> LD = general.knowenListeringDevices();

            for (int i = 0; i < LD.Count; ++i)
            {
                if (LD[i].GetComponent <ListeningDevice>().CurrentRoom == room)
                {
                    return(true);
                }
            }

            return(false);
        }
コード例 #5
0
        private int GeneralCompare(GeneralConversationData general1ConversationData, GeneralConversationData general2ConversationData, IGeneral general1, IGeneral general2)
        {
            int    response = -1;
            string tempEvent;
            string tempPlace;

            //string tempTime = "";     //need to be added later

            //bool trueEvent = false;
            //bool truePlace = false;
            //bool trueTime = false;    //need to be added later

            if (general2ConversationData.Truthfulness >= 10)
            {
                tempEvent = Objective.Event;
                tempPlace = Objective.Place;
            }
            else
            {
                tempEvent = general2ConversationData.Event;
                tempPlace = general2ConversationData.Place;
            }

            if (tempEvent.Equals(general1ConversationData.Event))
            {
                TrueEvent = true;
            }
            if (tempPlace.Equals(general1ConversationData.Place))
            {
                TruePlace = true;
            }

            if (isGeneralInRoomWithListeningDevice(general1))
            {
                general1ConversationData.Lying = true;
            }
            else
            {
                switch (general1ConversationData.Truthfulness)
                {
                case 11:
                case 1:
                    general1ConversationData.Lying = true;
                    break;

                case 0:
                case 10:
                    general1ConversationData.Lying = false;
                    break;
                }
            }

            if (isGeneralInRoomWithListeningDevice(general2))
            {
                TrueEvent = !TrueEvent;
                TruePlace = !TruePlace;
                general2ConversationData.Lying = true;
            }
            else
            {
                switch (general2ConversationData.Truthfulness)
                {
                case 11:
                    TrueEvent = !TrueEvent;
                    TruePlace = !TruePlace;
                    general2ConversationData.Lying = true;
                    break;

                case 1:
                    general2ConversationData.Lying = true;
                    break;

                case 0:
                case 10:
                    general2ConversationData.Lying = false;
                    break;
                }
            }

            if (TrueEvent && TruePlace)
            {                 //error where if one is not true then the reponce is positive, need to debug
                response = 0;
            }
            else if (TrueEvent && !TruePlace)
            {
                response = 12;
            }
            else if (!TrueEvent && TruePlace)
            {
                response = 11;
            }
            else if (!TrueEvent && !TruePlace)
            {
                response = 3;
            }

            if (general2ConversationData.Lying == true)
            {
                List <GameObject> general1KnowenDeives = general1.knowenListeringDevices();
                List <GameObject> general2KnowenDeives = general2.knowenListeringDevices();

                bool match = true;

                for (int i = 0; i < general1KnowenDeives.Count; ++i)
                {
                    for (int j = 0; j < general2KnowenDeives.Count; ++j)
                    {
                        if (general1KnowenDeives[i] != general2KnowenDeives[j])
                        {
                            match = false;
                            j    += general2KnowenDeives.Count;
                            i    += general1KnowenDeives.Count;
                        }
                    }
                }

                if (match == false)
                {
                    int num = _randomNumber.Next(10);
                    if (num < 5)
                    {
                        response = 100;
                    }
                }
            }

            return(response);
        }
コード例 #6
0
        //Conversation where they talk objectives, this may include informing about Listening Devices
        private Dictionary <IGeneral, string> ObjectiveConversation(IGeneral general1, IGeneral general2, Dictionary <IGeneral, string> conversation,
                                                                    GeneralConversationData general1ConversationData, GeneralConversationData general2ConversationData)
        {
            //are the generals lieing?
            if (_textStatment.Count != 0)
            {
                conversation.Add(general1, TextFill(_textStatment.ElementAt(_randomNumber.Next(_textStatment.Count)), general1ConversationData));
            }
            else
            {
                conversation.Add(general1, "Error: Load didn't work");
            }

            // TODO: Need new code to generate the response type, may need more types of responses to handle this
            var responseType = GeneralCompare(general1ConversationData, general2ConversationData, general1, general2);

            string tempText = "";

            switch (responseType)
            {
            case 0:
                tempText = _textRespondPositive.ElementAt(_randomNumber.Next(_textRespondPositive.Count));
                break;

            case 3:
                tempText = _textRespondNeutral.ElementAt(_randomNumber.Next(_textRespondNeutral.Count));
                break;

            case 10:
            case 17:                                                                                                        //rand
            case 11:
                tempText = _textRespondNegativeEvent.ElementAt(_randomNumber.Next(_textRespondNegativeEvent.Count));
                break;       //event

            case 12:
                tempText = _textRespondNegativePlace.ElementAt(_randomNumber.Next(_textRespondNegativePlace.Count));
                break;       //place

            case 13:
                tempText = _textRespondNegative.ElementAt(_randomNumber.Next(_textRespondNegative.Count));
                break;               //event\place

            case 20:
            case 27:                                                                                                        //rand
            case 21:                                                                                                        //event
            case 22:                                                                                                        //place
            case 23:
                tempText = _textRespondUnsure.ElementAt(_randomNumber.Next(_textRespondUnsure.Count));
                break;               //event\place

            case 100:
                tempText = _textRespondInform2.ElementAt(_randomNumber.Next(_textRespondInform2.Count));
                General2Inform(general1, general2);
                break;

            default:
                tempText = "ERROR!!";
                break;
            }

            if (responseType != 100)
            {
                if (general2.knowenListeringDevices().Count != 0)
                {
                    int inform = _randomNumber.Next(0, 1);
                    if (inform == 1)
                    {
                        General2Inform(general1, general2);
                    }
                }
            }

            conversation.Add(general2, TextFill(tempText, general2ConversationData));
            return(conversation);
        }