/// <summary> /// Run this task and all subtasks against a bullet /// This is called once a frame during runtime. /// </summary> /// <returns>ERunStatus: whether this task is done, paused, or still running</returns> /// <param name="bullet">The bullet to update this task against.</param> public override ERunStatus Run(Bullet bullet) { //Create the new bullet Bullet newBullet = bullet.MyBulletManager.CreateBullet(bullet, false); if (newBullet == null) { //wtf did you do??? TaskFinished = true; return(ERunStatus.End); } //set the location of the new bullet newBullet.X = bullet.X; newBullet.Y = bullet.Y; //set the direction of the new bullet newBullet.Direction = FireDirection; //set teh speed of the new bullet newBullet.Speed = FireSpeed; //initialize the bullet with the bullet node stored in the Fire node FireNode myFireNode = Node as FireNode; System.Diagnostics.Debug.Assert(null != myFireNode); newBullet.InitNode(myFireNode.BulletDescriptionNode); // Let the bullet handler initialize the bullet ingame data newBullet.InitBullet(); //set the owner of all the top level tasks for the new bullet to this dude foreach (BulletMLTask task in newBullet.Tasks) { task.Owner = this; } TaskFinished = true; return(ERunStatus.End); }