//Methods
 //---------------------------------------------
 public LevelNodeController()
 {
     Previous         = null;
     _step            = null;
     _length          = 0;
     _levelNode       = World.Instance.Level.CreateLevelNode <DefaultNode>(this);
     OnLengthChanged += _levelNode.OnPreviousNodeChangedLength;
 }
        public LevelNodeController(LevelNodeController previous, Scenario.IScenarioStep step)
        {
            Previous = previous;
            _step    = step;
            _length  = step.DefaultLength;

            //instantiate the corresponding LevelNode for the step by calling Level's templated method via reflection
            Type type = ScenarioStepToLevelNodeTypeDictionary[step.GetType()];

            Debug.Assert(type.IsSubclassOf(typeof(LevelNode)));
            // ReSharper disable once PossibleNullReferenceException
            var genericMethod = typeof(View.Level.Level).GetMethod("CreateLevelNode").MakeGenericMethod(type);

            _levelNode       = (LevelNode)genericMethod.Invoke(World.Instance.Level, new object[] { this });
            OnLengthChanged += _levelNode.OnPreviousNodeChangedLength;
        }