/// <summary>
        /// Setup constructor
        /// </summary>
        /// <param name="projectType">Project type that created this project</param>
        /// <param name="name">Project name</param>
        /// <param name="modelFactory">Factory used for creating environment models from templates</param>
        /// <param name="renderFactory">Factory used for creating environment renderers from models</param>
        /// <param name="template">ProjectType to use</param>
        /// <param name="planet">Planet to use</param>
        protected PlanetProject( ProjectType projectType, string name, IPlanetEnvironmentModelFactory modelFactory, IPlanetEnvironmentRendererFactory renderFactory, IPlanetModelTemplate template, IPlanet planet )
            : base(projectType, name, null, null)
        {
            Arguments.CheckNotNull( template, "template" );
            Arguments.CheckNotNull( modelFactory, "modelFactory" );
            Arguments.CheckNotNull( renderFactory, "renderFactory" );
            Arguments.CheckNotNull( planet, "planet" );

            new PlanetTemplateWatcher( template, planet, modelFactory, renderFactory );

            m_Planet = planet;
            m_PlanetTemplate = template;
            template.CreateModelInstance( planet.Model, modelFactory, InstanceContext );
        }
 /// <summary>
 /// Removes the specified project type
 /// </summary>
 /// <param name="template">ProjectType to remove</param>
 public void RemoveTemplate( ProjectType template )
 {
     Arguments.CheckNotNull( template, "template" );
     m_Templates.Remove( template );
 }
 /// <summary>
 /// Adds a new template to the group
 /// </summary>
 /// <param name="template">ProjectType to add</param>
 /// <exception cref="ArgumentNullException">Thrown if template is null</exception>
 public void AddTemplate( ProjectType template )
 {
     Arguments.CheckNotNull( template, "template" );
     m_Templates.Add( template );
 }