public float GetNearResourceCount() { NaturalResource[] resList = battleField.NaturalResources; float result = 0; for (int i = 0; i < resList.Length; i++) { if (resList[i].Type == NaturalResourceType.Wood) { ForestObject forest = (ForestObject)resList[i]; float d = Vector3.Distance(forest.ForestCenter, this.Position); if (d < gatherDistance) { result++; } } else if (resList[i].Type == NaturalResourceType.Oil) { float d = Vector3.Distance(resList[i].Position, this.Position); if (d < gatherDistance) { result++; } } } return(result); }
public override void Update(GameTime time) { float ddt = time.ElapsedGameTimeSeconds; ringRotation += ddt / 4.5f; if (ringRotation > 2 * MathEx.PIf) { ringRotation -= 2 * MathEx.PIf; } if (mouseHoverCity != null) { float s = CitySelScale * City.CityOutterRadius / RingRadius; Matrix scale = Matrix.Scaling(s, 1, s); outter_marker.CurrentAnimation.Clear(); outter_marker.CurrentAnimation.Add(new NoAnimaionPlayer(scale * Matrix.RotationY(-ringRotation) * mouseHoverCity.Transformation)); } if (mouseHoverResource != null) { float s = ResourceRingRadius / RingRadius; Matrix scale = Matrix.Scaling(s, 1, s); outter_marker.CurrentAnimation.Clear(); if (mouseHoverResource.Type == NaturalResourceType.Wood) { ForestObject forest = mouseHoverResource as ForestObject; outter_marker.CurrentAnimation.Add(new NoAnimaionPlayer(Matrix.Translation(0, 5, 0) * scale * Matrix.RotationY(-ringRotation) * forest.ForestTransform)); } else { outter_marker.CurrentAnimation.Add(new NoAnimaionPlayer(Matrix.Translation(0, 5, 0) * scale * Matrix.RotationY(-ringRotation) * mouseHoverResource.Transformation)); } } if (mouseHoverHarv != null) { float s = HarvestRingRadius / RingRadius; Matrix scale = Matrix.Scaling(s, 1, s); outter_marker.CurrentAnimation.Clear(); outter_marker.CurrentAnimation.Add(new NoAnimaionPlayer(Matrix.Translation(0, 5, 0) * scale * Matrix.RotationY(-ringRotation) * mouseHoverHarv.Transformation)); } if (selectedHarv != null) { float s = HarvestRingRadius / RingRadius; Matrix scale = Matrix.Scaling(s, 1, s); inner_marker.CurrentAnimation.Clear(); inner_marker.CurrentAnimation.Add(new NoAnimaionPlayer(Matrix.Translation(0, 5, 0) * scale * selectedHarv.Transformation)); } }
public void FindResources(List <NaturalResource> resList) { nearResource.Clear(); for (int i = 0; i < resList.Count; i++) { if (Type == CityType.Green) { if (resList[i].Type == NaturalResourceType.Wood) { ForestObject forest = (ForestObject)resList[i]; float d = Vector3.Distance(forest.ForestCenter, this.Position); if (d < gatherDistance) { nearResource.Add(resList[i]); } } } else if (Type == CityType.Oil) { if (resList[i].Type == NaturalResourceType.Oil) { float d = Vector3.Distance(resList[i].Position, this.Position); if (d < gatherDistance) { nearResource.Add(resList[i]); } } } } if (Type == CityType.Green) { nearResource.Sort(CamparisionForest); } else { nearResource.Sort(Camparision); } }
/// <summary> /// 初始化自然资源 /// </summary> void InitializeNaturalResource() { FileLocation fl = FileSystem.Instance.Locate("resources.xml", GameFileLocs.Config); GameConfiguration resCon = new GameConfiguration(fl); GameConfiguration.ValueCollection resVals = resCon.Values; List<NaturalResource> resources = new List<NaturalResource>(MaxCities); foreach (GameConfigurationSection sect in resVals) { string type = sect.GetString("Type", string.Empty).ToLowerInvariant(); if (type == "wood") { ForestObject forest = new ForestObject(this); forest.Parse(sect); resources.Add(forest); } else if (type == "petro") { OilFieldObject fld = new OilFieldObject(this); fld.Parse(sect); resources.Add(fld); } } naturalResource = resources.ToArray(); for (int i = 0; i < cities.Length; i++) { if ( cities[i].Type == CityType.Oil || cities[i].Type == CityType.Green) { ((GatherCity)cities[i]).FindResources(resources); } } }