/// <summary> /// Validates the node. /// Overloaded in child classes to validate that each type of node follows the correct business logic. /// This checks stuff that isn't validated by the XML validation /// </summary> public override void ValidateNode() { //Get our parent repeat node if we have one ParentRepeatNode = FindParentRepeatNode(); //do any base class validation base.ValidateNode(); }
/// <summary> /// Initializes a new instance of the <see cref="BulletMLLib.BulletMLTask"/> class. /// </summary> /// <param name="node">Node.</param> /// <param name="owner">Owner.</param> public RepeatTask(RepeatNode node, BulletMLTask owner) : base(node, owner) { Debug.Assert(null != Node); Debug.Assert(null != Owner); }
/// <summary> /// Parse a specified node and bullet into this task /// </summary> /// <param name="myNode">the node for this dude</param> /// <param name="bullet">the bullet this dude is controlling</param> public virtual void ParseChildNode(BulletMLNode childNode, Bullet bullet) { Debug.Assert(null != childNode); Debug.Assert(null != bullet); //construct the correct type of node switch (childNode.Name) { case ENodeName.repeat: { //convert the node to an repeatnode RepeatNode myRepeatNode = childNode as RepeatNode; //create a placeholder bulletmltask for the repeat node RepeatTask repeatTask = new RepeatTask(myRepeatNode, this); //parse the child nodes into the repeat task repeatTask.ParseTasks(bullet); //store the task ChildTasks.Add(repeatTask); } break; case ENodeName.action: { //convert the node to an ActionNode ActionNode myActionNode = childNode as ActionNode; //create the action task ActionTask actionTask = new ActionTask(myActionNode, this); //parse the children of the action node into the task actionTask.ParseTasks(bullet); //store the task ChildTasks.Add(actionTask); } break; case ENodeName.actionRef: { //convert the node to an ActionNode ActionRefNode myActionNode = childNode as ActionRefNode; //create the action task ActionTask actionTask = new ActionTask(myActionNode, this); //add the params to the action task for (int i = 0; i < childNode.ChildNodes.Count; i++) { actionTask.ParamList.Add(childNode.ChildNodes[i].GetValue(this, bullet)); } //parse the children of the action node into the task actionTask.ParseTasks(bullet); //store the task ChildTasks.Add(actionTask); } break; case ENodeName.changeSpeed: { ChildTasks.Add(new ChangeSpeedTask(childNode as ChangeSpeedNode, this)); } break; case ENodeName.changeDirection: { ChildTasks.Add(new ChangeDirectionTask(childNode as ChangeDirectionNode, this)); } break; case ENodeName.fire: { //convert the node to a fire node FireNode myFireNode = childNode as FireNode; //create the fire task FireTask fireTask = new FireTask(myFireNode, this); //parse the children of the fire node into the task fireTask.ParseTasks(bullet); //store the task ChildTasks.Add(fireTask); } break; case ENodeName.fireRef: { //convert the node to a fireref node FireRefNode myFireNode = childNode as FireRefNode; //create the fire task FireTask fireTask = new FireTask(myFireNode.ReferencedFireNode, this); //add the params to the fire task for (int i = 0; i < childNode.ChildNodes.Count; i++) { fireTask.ParamList.Add(childNode.ChildNodes[i].GetValue(this, bullet)); } //parse the children of the action node into the task fireTask.ParseTasks(bullet); //store the task ChildTasks.Add(fireTask); } break; case ENodeName.wait: { ChildTasks.Add(new WaitTask(childNode as WaitNode, this)); } break; case ENodeName.vanish: { ChildTasks.Add(new VanishTask(childNode as VanishNode, this)); } break; case ENodeName.accel: { ChildTasks.Add(new AccelTask(childNode as AccelNode, this)); } break; } }
/// <summary> /// Initializes a new instance of the <see cref="BulletMLLib.BulletMLTask"/> class. /// </summary> /// <param name="node">Node.</param> /// <param name="owner">Owner.</param> public RepeatTask(RepeatNode node, BulletMLTask owner) : base(node, owner) { System.Diagnostics.Debug.Assert(null != Node); System.Diagnostics.Debug.Assert(null != Owner); }