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); } }
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); }