Beispiel #1
0
        /// <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;
                }
            }
        }
Beispiel #2
0
        /// <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;
        }