/// <summary>
        /// Post-construct gets called after the form is added to a multiform
        /// (i.e. Parent != null).
        /// </summary>
        public override void PostConstruct()
        {
            base.PostConstruct();

            Board = Parent.GetForm<BoardForm>(LevelMultiform.BoardFormName);
            Inventory = Parent.GetForm<InventoryForm>(LevelMultiform.InventoryFormName);

            TOP_MESSAGE_Y_VALUE = (float)Board.BoardCollider.Y / 2f;

            // Set up the various sequential updaters.

            var Updater_001          = new DefaultUpdater();
            Updater_001.form         = this;
            Updater_001.InitialFrame = 70;
            Updater_001.Predicate    = () => Board.TileAdded;
            Updater_001.Messages     = new List<MessageInfo>() {
                new MessageInfo {
                    Frame    = 70,
                    Message  = "Click on one of the <<Image | 1>>'s to place a refractor.",
                    Position = new Vector2(DisplayManager.WindowWidth / 2f, TOP_MESSAGE_Y_VALUE),
                    Font     = Assets.Level.Fonts.TutorialMessage_Large,
                    Sprites  = new List<Sprite>() { new Sprite(Assets.Level.Images.EmptyTile) },
                }
            };

            var Updater_002          = new DefaultUpdater();
            Updater_002.form         = this;
            Updater_002.InitialFrame = 20;
            Updater_002.Predicate = () => Board.TileRemoved;
            Updater_002.Messages     = new List<MessageInfo>() {
                new MessageInfo {
                    Frame    = 20,
                    Message  = "You can right click to remove a refractor.",
                    Position = new Vector2(DisplayManager.WindowWidth / 2f, TOP_MESSAGE_Y_VALUE),
                    Font     = Assets.Level.Fonts.TutorialMessage_Large,
                    Sprites  = null
                }
            };

            var Updater_003          = new DefaultUpdater();
            Updater_003.form         = this;
            Updater_003.InitialFrame = 20;
            Updater_003.Predicate = () => Inventory.SelectionChanged;
            var y                    = ((RectCollider)Inventory.InventoryButtons[TileType.RF_UxR_UR].Collider).Center.Y;
            Updater_003.Messages     = new List<MessageInfo>() {
                new MessageInfo {
                    Frame    = 20,
                    Message  = "Select a different refractor.",
                    Position = new Vector2(DisplayManager.WindowWidth - 170, y),
                    Font     = Assets.Level.Fonts.TutorialMessage_Small,
                    Sprites  = null
                }
            };

            var Updater_004          = new DefaultUpdater();
            Updater_004.form         = this;
            Updater_004.InitialFrame = 20;
            Updater_004.Predicate    = () => Board.IsReceiverActivated(LaserColours.Red);
            var red_receiver         = new Sprite(Assets.Level.Images.Receiver);
            red_receiver.Tint        = LaserColours.Red.Color;
            Updater_004.Messages     = new List<MessageInfo>() {
                new MessageInfo {
                    Frame    = 20,
                    Message  = "Light up <<Image | 1>>",
                    Position = new Vector2(DisplayManager.WindowWidth / 2f, TOP_MESSAGE_Y_VALUE),
                    Font     = Assets.Level.Fonts.TutorialMessage_Large,
                    Sprites  = new List<Sprite>() { red_receiver }
                }
            };

            var Updater_005          = new DefaultUpdater();
            Updater_005.form         = this;
            Updater_005.InitialFrame = 20;
            Updater_005.Predicate    = () => Board.IsReceiverActivated(LaserColours.Blue);
            var blue_receiver        = new Sprite(Assets.Level.Images.Receiver);
            blue_receiver.Tint       = LaserColours.Blue.Color;
            Updater_005.Messages     = new List<MessageInfo>() {
                new MessageInfo {
                    Frame    = 20,
                    Message  = "Good! Now light up <<Image | 1>>",
                    Position = new Vector2(DisplayManager.WindowWidth / 2f, (float)Board.BoardCollider.Y / 3f),
                    Font     = Assets.Level.Fonts.TutorialMessage_Large,
                    Sprites  = new List<Sprite>() { blue_receiver }
                },
                new MessageInfo {
                    Frame    = 300,
                    Message  = "(Hint: Use a different refractor)",
                    Position = new Vector2(DisplayManager.WindowWidth / 2f, (float)Board.BoardCollider.Y / 3f * 2f),
                    Font     = Assets.Level.Fonts.TutorialMessage_Small,
                    Sprites  = null
                }
            };

            Updater_001.NextUpdater = Updater_002;
            Updater_002.NextUpdater = Updater_003;
            Updater_003.NextUpdater = Updater_004;
            Updater_004.NextUpdater = Updater_005;
            Updater_005.NextUpdaterAction = () => { };

            CurrentUpdater = Updater_001.Update;
        }