/// <summary> /// Handles an infinite repeat /// </summary> public ReiterateType(pReiterateType r) : base("", r.Start) { object performer; this.Range = null; if (null != r.EngramRange) { this.Range = new EngramRange(r.EngramRange); } for (int reiterate = 0; reiterate < r.ReiterateList.Count; reiterate++) { performer = r.ReiterateList[reiterate]; switch (performer.GetType().Name.ToString()) { case "pMoveType": this.reiterateList.Add(new Move_EventType((pMoveType)performer)); /* * this is not needed because in ScenarioEvent constructor(?) if (!this.AllUnits.Contains(((pMoveType)performer).UnitID)) { this.AllUnits.Add(((pMoveType)performer).UnitID); } */ break; default: Coordinator.debugLogger.LogError("Scenario reader", "Unknown or incorrect reiteration event type for " + performer.ToString()); break; } } }
/// <summary> /// Reads/returns a Reiterate event directive(one that /// specifies a sequence of (Move) events that are queued one after the other. /// /// </summary> public override pReiterateType pGetReiterate() { //Note -- only actions allowed are those for which there is an upcoming trigger (like MoveComplete) int start = 0; pReiterateType returnValue; object eventToPerform; try { reader.Read(); start = pGetInt(); pEngramRange engramRange = null; if ("EngramRange" == reader.Name) { engramRange = pGetEngramRange(); } returnValue = new pReiterateType(start, engramRange); reader.Read(); // bypass the ReiterateThis tag while (reader.IsStartElement()) { switch (reader.Name) { case "Move_Event": eventToPerform = pGetMove(); break; default: eventToPerform = null; break; } if (null != eventToPerform) { returnValue.AddAction(eventToPerform); } } reader.ReadEndElement(); //Pass the </ReiterateThis> reader.ReadEndElement(); // Pass the </Reiterate> } catch (System.Exception e) { string message; if (0 == start) { message = " with unknown or invalid start time "; } else { message = " with start time = " + start.ToString(); } throw new ApplicationException("Error reading Reiterate command" + message + ": ", e); } return returnValue; }