view RollcallRaceParser.cs @ 6:0509ed2e686a

Re #16 - File loading * Refactor race detail parsing and unit type parsing in to their own classes Re #17 - Unit detail loading * Add a couple of extra attributes to those loaded
author IBBoard <dev@ibboard.co.uk>
date Mon, 26 Jan 2009 20:31:05 +0000
parents
children 35bc86f8c283
line wrap: on
line source

// This file (RollcallRaceParser.cs) is a part of IBBoard.WarFoundry.Plugin.Rollcall library and is copyright 2009 IBBoard.
//
// The file and the library/program it is in are licensed under the GNU LGPL license. Please see COPYING.LGPL for more information and the full license.

using System;
using IBBoard.CustomMath;
using IBBoard.Ini;
using IBBoard.Logging;
using IBBoard.WarFoundry.API.Objects;

namespace IBBoard.WarFoundry.Plugin.Rollcall
{
	/// <summary>
	/// A helper class to construct a base Race object from an INI file
	/// </summary>
	public class RollcallRaceParser
	{
		public static Race ReadRaceDetails(IniFile file)
		{
			string id = null, name = null;
			id = "Rollcall" + file["Army"]["BitCodeID"].Value;
			name = file["Army"]["Name"].Value;
			LogNotifier.Debug(typeof(RollcallRaceParser), "Loading Rollcall race ID "+id);
			Race race = new Race(id, name, "Rollcall", RollcallFactory.GetFactory());
			race.GameSystem = RollcallFactory.GetFactory().RollcallSystem;
			return race;
		}
		
		public static void ReadCategories(IniFile file, Race race)
		{
			IniSection section = file["Category"];

			foreach (string key in section.Keys)
			{
				string valueString = section[key].Value;
				string[] values = valueString.Split(',');

				if (values.Length == 3)
				{
					LogNotifier.Debug(typeof(RollcallRaceParser), "Loading category " + values[0]);
					Category category = new Category(key, values[0]);
					int minPercent = NumberParser.ParseAsInt(values[1], 0);
					int maxPercent = NumberParser.ParseAsInt(values[2], 100);
					maxPercent = Math.Max(0, Math.Min(100, Math.Max(minPercent, maxPercent)));
					minPercent = Math.Max(0, Math.Min(100, minPercent));
					category.MaximumPercentage = maxPercent;
					category.MinimumPercentage = minPercent;
					race.AddCategory(category);
					
				}
				//Special cases (allies and aliases) need to be handled later					                              
			}
		}

		public static void ReadUnitTypeAndEquipmentSections(IniFile file, Race race)
		{
			foreach (IniSection section in file)
			{
				string sectionName = section.Name;
				
				if (sectionName == "Army" || sectionName == "Category")
				{
					continue;
				}
				else if (sectionName.StartsWith("Unit"))
				{
					RollcallUnitTypeParser.ReadUnitTypeSection(file, section, race);
				}
				else
				{
					RollcallUnitTypeParser.ReadEquipmentSection(file, section, race);
				}	
			}
		}
	}
}