/// <summary> /// /// </summary> /// <param name="e"></param> protected virtual void loadSprites(XmlElement e) { IEnumerator ie = e.ChildNodes.GetEnumerator(); ArrayList colors = new ArrayList(); ArrayList spriteNodes = new ArrayList(); while (ie.MoveNext()) { XmlNode child = (XmlNode)ie.Current; if (child.Name.Equals("spriteType")) { colors.Add(child); } else if (child.Name.Equals("colorVariation")) { colors.Add(child); //throw new NotSupportedException("prease use <spriteType> tag."); } else if (child.Name.Equals("picture") || child.Name.Equals("sprite")) { switch (stType) { case SpriteTableType.Unknown: stType = SpriteTableType.Basic; break; case SpriteTableType.Basic: break; default: throw new FormatException("<sprite> tag is not available together with <pictures> or <sprites> tags."); } spriteNodes.Add(child); } else if (child.Name.Equals("pictures") || child.Name.Equals("sprites")) { switch (stType) { case SpriteTableType.Unknown: stType = SpriteTableType.VarHeight; break; case SpriteTableType.VarHeight: break; default: throw new FormatException("<" + child.Name + "> tag is not available together with <sprite> tag."); } spriteNodes.Add(child); } } if (colors.Count == 0) { colors.Add(e.FirstChild.Clone()); } _colorMax = colors.Count; _dirMax = spriteNodes.Count; contribs = new Contribution[_dirMax, _colorMax]; int defaultDir = _dirMax; for (int i = 0; i < _colorMax; i++) { for (int j = 0; j < _dirMax; j++) { e.Attributes["id"].Value = this.Id + "-" + i + ":" + j; XmlNode temp = ((XmlNode)spriteNodes[j]).Clone(); if (parseDirection(temp, j) == 0 && defaultDir > j) { defaultDir = j; } Contribution newContrib = CreatePrimitiveContrib((XmlElement)temp, (XmlNode)colors[i], e); PluginManager.AddContribution(newContrib); contribs[j, i] = newContrib; } } // set unassigned direction table for (int j = 0; j < dirTable.Length; j++) { if (dirTable[j] == -1) { dirTable[j] = defaultDir; } } }