Example #1
0
 /// <summary>
 /// Initializes a new instance of the <see cref="CityBase"/> class.
 /// </summary>
 public CityBase()
 {
     this.population         = 1;
     this.happyPeople        = 1;
     this.sizeClass          = CitySizeClass.Town;
     this.buildableItems     = new NamedObjectCollection <BuildableItem>();
     this.availableResources = new NamedObjectCollection <Resource>();
     this.improvements       = new NamedObjectCollection <Improvement>();
     this.usedCells          = new Collection <Point>();
 }
Example #2
0
        /// <summary>
        /// Gets the <see cref="CityTile"/> for the specified Era, Civilization, and City size.
        /// </summary>
        /// <param name="era"></param>
        /// <param name="civilization"></param>
        /// <param name="sizeClass"></param>
        public CityTile GetTile(Era era, Civilization civilization, CitySizeClass sizeClass)
        {
            foreach (CityTile tile in this.Items)
            {
                if (tile.Civilization == civilization &&
                    tile.Era == era &&
                    tile.SizeClass == sizeClass)
                {
                    return(tile);
                }
            }

            return(null);
        }
Example #3
0
        /// <summary>
        /// Paints the city onto the screen.
        /// </summary>
        public override void Paint()
        {
            if (this.GridCell.City == null)
            {
                return;
            }
            City          city         = this.GridCell.City;
            CountryBase   country      = city.ParentCountry;
            Era           era          = country.Era;
            Civilization  civilization = country.Civilization;
            CitySizeClass sizeClass    = city.SizeClass;
            CityTile      tile         = this.tileset.CityTiles.GetTile(era, civilization, sizeClass);

            this.Graphics.DrawImage(tile.Image, this.Bounds);
        }
Example #4
0
        private CityTile GetCityTile(CityBase city)
        {
            CitySizeClass sizeClass = city.SizeClass;
            Civilization  civ       = city.ParentCountry.Civilization;
            Era           era       = city.ParentCountry.Era;

            foreach (CityTile tile in this.Items)
            {
                if (tile.Civilization == civ && tile.Era == era && tile.SizeClass == sizeClass)
                {
                    return(tile);
                }
            }

            return(null);
        }
        /// <summary>
        /// Gets a string representation of the size of city described by
        /// the <i>sizeClass</i> parameter.
        /// </summary>
        /// <param name="sizeClass"></param>
        /// <returns></returns>
        public static string GetCitySizeString(CitySizeClass sizeClass)
        {
            string sizeString = string.Empty;

            switch (sizeClass)
            {
            case CitySizeClass.City:
                sizeString = GetString("citySize_city");
                break;

            case CitySizeClass.Metropolis:
                sizeString = GetString("citySize_metropolis");
                break;

            case CitySizeClass.Town:
                sizeString = GetString("citySize_town");
                break;
            }

            return(sizeString);
        }
Example #6
0
        /// <summary>
        /// Initializes a new instance of the <see cref="CityTile"/> class.
        /// </summary>
        /// <param name="tileRow"></param>
        public CityTile(DataRow tileRow)
        {
            //City tile names contain information regarding the civilization
            //the image belongs to, the size class,  and also the era the tile belongs to.
            //we parse this apart with underscore characters "_".  So, for
            //example, a city tile for America in industrial times for a metropolis-sized
            //city would look like "america_industrial_metropolis".  Note that these
            //are case-insensitive.

            if (tileRow == null)
            {
                throw new ArgumentNullException("tileRow");
            }

            //here is the full, unsplit version of the tilename.
            string unsplit = Convert.ToString(tileRow["CityTileName"], CultureInfo.InvariantCulture);

            string[] split = unsplit.Split("_".ToCharArray());

            if (split.Length != 3)
            {
                string error = ClientResources.GetExceptionString("error_invalidCityTileName");
                error = string.Format(CultureInfo.CurrentCulture, error, unsplit);
                throw new ArgumentException(error, "tileRow");
            }

            string civ           = split[0];
            string eraName       = split[1];
            string sizeClassName = split[2];

            Ruleset rs = ClientApplication.Instance.ServerInstance.Ruleset;

            foreach (Civilization c in rs.Civilizations)
            {
                if (string.Compare(c.Name, civ, true, CultureInfo.InvariantCulture) == 0)
                {
                    this.civilization = c;
                    break;
                }
            }

            if (this.civilization == null)
            {
                throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, ClientResources.GetExceptionString("error_invalidCivilization"), civ), "tileRow");
            }


            foreach (Era e in rs.Eras)
            {
                if (string.Compare(e.Name, eraName, true, CultureInfo.InvariantCulture) == 0)
                {
                    this.era = e;
                    break;
                }
            }

            if (this.era == null)
            {
                throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, ClientResources.GetExceptionString("error_invalidEra"), eraName), "tileRow");
            }

            try
            {
                this.sizeClass = (CitySizeClass)Enum.Parse(typeof(CitySizeClass), sizeClassName, true);
            }
            catch (System.Exception ex)
            {
                throw new ArgumentException(sizeClassName + string.Format(CultureInfo.InvariantCulture, ClientResources.GetExceptionString("error_invalidCitySize"), sizeClassName), "tileRow", ex);
            }

            string path = string.Empty;

            path       = Convert.ToString(tileRow["TilePath"], CultureInfo.InvariantCulture);
            this.image = Image.FromFile(path);
        }