/// <summary> /// Faz um teste de colisão do Turista com a área Visitável de um Ponto de Interesse. /// A Área Visitável é apenas a área de colisão um pouco maior (*2) /// /// Quando existe uma colisão com um Ponto de Interesse Visitável é mostrada a informação acerca /// das características da atracção. /// /// Da mesma forma quando não existe nenhuma colisão e estava a ser mostrada informação sobre o ponto de interesse /// esta é eliminada /// </summary> /// <param name="list">Lista com os pontos de interesse presentes na simulaçao</param> /// <returns>Indica se foi visitado ou não um qualquer ponto de interesse que ainda não tenha sido visitado</returns> public bool visitedPointOfInterest(List<PointOfInterest> list) { bool visitedSomething = false; foreach (PointOfInterest poi in list) { if ((this.Position.Px <= poi.Position.Px + poi.ColisionArea.Adjustment.Px + poi.ColisionArea.Dimensions.Px * 2 && this.Position.Px >= poi.Position.Px + poi.ColisionArea.Adjustment.Px - poi.ColisionArea.Dimensions.Px * 2) && (this.Position.Pz <= poi.Position.Pz + poi.ColisionArea.Adjustment.Pz + poi.ColisionArea.Dimensions.Pz * 2 && this.Position.Pz >= poi.Position.Pz + poi.ColisionArea.Adjustment.Pz - poi.ColisionArea.Dimensions.Pz * 2)) { if (poi.ToVisit && poi != this.LastVisited) { this.LastVisited = poi; Messaging.Instance.addCharacteristics(poi); } if (!poi.Visited && poi.ToVisit) { Messaging.Instance.Information.Enqueue("Acabaste de visitar: " + poi.Nome); Messaging.Instance.Permanent.Add("- " + poi.Nome + " (visitado)"); Messaging.Instance.Permanent.Remove("- " + poi.Nome); poi.Visited = true; } visitedSomething = true; break; } } if (!visitedSomething) { this.LastVisited = null; Messaging.Instance.removeCharacteristics(); } return visitedSomething; }
/// <summary> /// /// </summary> /// <param name="p"></param> public void addCharacteristics(PointOfInterest p) { Messaging.Instance.PoiInfo.Add(AppState.Instance.ResourceManager.GetString("AttractionFeatures") + ":"); foreach (String c in p.Features) { Messaging.Instance.PoiInfo.Add(c); } }
public void loadCartography(ref Cartography cartography, int cityID) { WebService.Cartography c = this.Ws.CityCartographyFull(cityID); Intersection itr; foreach (WebService.Intersection i in c.intersections) { itr = new Intersection(i.id); itr.Position.set(i.position.x, i.position.y, i.position.z); cartography.intersections.Add(itr); } RoadSegment rs; foreach (WebService.RoadSegment r in c.roadSegments) { rs = new RoadSegment(cartography.getIntersectionWithID(r.idIntersectionBegin), cartography.getIntersectionWithID(r.idIntersectionEnd)); rs.SegmentName = r.name; cartography.segments.Add(rs); } PointOfInterest poi; foreach (WebService.PointOfInterest p in c.pointsOfInterest) { poi = new PointOfInterest(new Vector3D(p.position.x, p.position.y, p.position.z)); poi.ID = p.id; poi.ModelName = p.model; /// TODO: Alterar para "Nome" poi.Nome = p.description; poi.Description = p.description; poi.Facing = p.facing; for (int i = 0; i < p.features.Length; i++) { poi.Features.Add(p.features[i]); } //adjustment = new String[0]; //dimensions = new String[0]; //NameValueConfigurationCollection nvc = ModelSettings.Default.Properties; //Console.WriteLine(ConfigurationSettings.AppSettings.AllKeys.); //if (poi.ModelName == "Castelo") //{ // //if (ModelSettings.Default.PropertyValues..Contains(poi.ModelName + "Adjustment")) // //{ // adjustment = ModelSettings.Default[poi.ModelName + "Adjustment"].ToString().Split('|'); // //} // //if (ModelSettings.Default.SettingsKey.Contains(poi.ModelName + "Dimensions")) // //{ // dimensions = ModelSettings.Default[poi.ModelName + "Dimensions"].ToString().Split('|'); // //} // //if (ModelSettings.Default.SettingsKey.Contains(poi.ModelName + "SoundName")) // //{ // poi.SoundName = ModelSettings.Default[poi.ModelName + "SoundName"].ToString(); // //} // if (adjustment.Length > 0) // { // poi.ColisionArea.Adjustment.set(Double.Parse(adjustment[0]), Double.Parse(adjustment[1]), Double.Parse(adjustment[2])); // } // if (dimensions.Length > 0) // { // poi.ColisionArea.Dimensions.set(Double.Parse(dimensions[0]), Double.Parse(dimensions[1]), Double.Parse(dimensions[2])); // } // poi.ColisionArea.Visible = true; //} poi.ColisionArea.Visible = true; poi.ColisionArea.Adjustment.set(0, 0, -1.5); poi.ColisionArea.Dimensions.set(3, 1, 2); cartography.pointsOfInterest.Add(poi); } GenericObject go; foreach (WebService.GenericObject g in c.genericObjects) { go = GenericObjectFactory.getGenericObject(g.type); go.Position.set(g.position.x, g.position.y, g.position.z); cartography.genericObjects.Add(go); } }