public void Draw(SpriteBatch spriteBatch) { //calculate the offset for texture to the position origin //calculate amount of movement as a fraction of elapsed time spriteBatch.Draw(Data.Texture, Data.Position, null, Color.White, Data.FacingAngle, Data.Texture.Origin(), 1.0f, SpriteEffects.None, Data.Height); foreach (var comp in Data.Components) { //If the component hasn't a facing direction set, then just point forward //comp.Data.FacingAngle = comp.Data.Destination.Count > 0 ? // comp.Data.Destination[0].Angle() : Data.FacingAngle; //Calculate where to draw the component, in relation to the unit if (comp.Data.Texture != null) { var compPosition = Data.Position + comp.Data.Position.Rotate(Data.FacingAngle); spriteBatch.Draw(comp.Data.Texture, compPosition, null, Color.White, comp.Data.FacingAngle, comp.Data.Texture.Origin(), 1.0f, SpriteEffects.None, comp.Data.Height); } if ((comp.Data.UnitName == UnitsEnum.DEFAULT) && (comp.Data.Timer.ElapsedMilliseconds > comp.Data.Timeout)) { var t = UnitFactory.New(UnitsEnum.MISSILE, new UnitData { Position = Data.Position + comp.Data.Position.Rotate(Data.FacingAngle), MovementMode = MovementMode.INTERCEPT, Timeout = 2000, Timer = new System.Diagnostics.Stopwatch(), }); t.Data.Timer.Start(); comp.Data.Timer.Restart(); Game1.AddUnit(t); } } //if (Destination.Count > 0) //{ // spriteBatch.DrawLine(_pixel, Position, Destination[0], Game1.SelectColor); // spriteBatch.DrawLine(_pixel, Position, Steering, Color.Blue); // spriteBatch.DrawLine(_pixel, Position, Velocity, Color.Red); //} }