Beispiel #1
0
        public void PerformRayCast()
        {
            Response = new ResponseQuery();
            RaycastHit hit;

            if (Physics.Raycast(transform.position, transform.TransformDirection(Vector3.forward), out hit, ViewDistance, layer))
            {
                Debug.DrawRay(transform.position, transform.TransformDirection(Vector3.forward) * hit.distance, Color.green);

                Response.Add("What", hit.transform.tag);
                Response.Add("Distance", ((int)hit.distance).ToString());
                TextBox.text = Qc.Speak(Response);
            }
        }
Beispiel #2
0
        public string Speak(ResponseQuery response)
        {
            /*
             * used to run query after being built.
             * Gather all relevent info on current gameobject
             * create queryobj
             * add facts to query
             * compare facts of query object to list of facts from every rule object
             * return ruleobject with closest match to given fact list
             * access  ruleobject response string
             */
            RankedRule closestmatch = Rules[0];
            bool       Worked       = false;

            for (int i = 0; i < Rules.Count(); i++)
            {
                foreach (var fact in response.GetFacts().Keys)
                {
                    IFact rulelis     = Rules[i].GetRule().GetFacts()[fact];
                    var   obersvation = response.GetFacts()[fact];
                    Worked = ParseRangeString(obersvation, rulelis);
                    if (Worked || rulelis.VarientValue == obersvation)
                    {
                        Rules[i].RankUp();
                    }
                }
            }

            for (int i = 0; i < Rules.Count; i++)
            {
                if (Rules[i].GetRank() > closestmatch.GetRank())
                {
                    closestmatch = Rules[i];
                }
            }

            for (int i = 0; i < Rules.Count; i++)
            {
                Rules[i].ResetRank();
            }



            string dialogue = closestmatch.GetRule().Response;

            return(dialogue);
        }