public void Show()
        {
            if (this.resourcesLoaded)
            {
                try {
                    if (this.configuration.ContainsKey("shim"))
                    {
                        ShimLayer shimLayer = this.gameObject.AddComponent <ShimLayer>();
                        shimLayer.Build(this, this.configuration["shim"] as JSONObject, this.depth);
                    }

                    JSONObject layout = this.configuration["layout"] as JSONObject;
                    object     orientation;
                    if (!layout.TryGetValue("landscape", out orientation) && !layout.TryGetValue("portrait", out orientation))
                    {
                        throw new KeyNotFoundException("Layout missing orientation key.");
                    }

                    BackgroundLayer backgroundLayer = this.gameObject.AddComponent <BackgroundLayer>();
                    backgroundLayer.Build(this, orientation as JSONObject, this.spriteMap.Background, this.depth - 1);

                    ButtonsLayer buttonLayer = this.gameObject.AddComponent <ButtonsLayer>();
                    buttonLayer.Build(this, orientation as JSONObject, this.spriteMap.Buttons, backgroundLayer, this.depth - 2);

                    this.showing = true;
                } catch (KeyNotFoundException exception) {
                    Logger.LogWarning("Failed to show image message, invalid format: " + exception.Message);
                } catch (Exception exception) {
                    Logger.LogWarning("Failed to show image message: " + exception.Message);
                }
            }
        }
        public void Show()
        {
            if (IsReady())
            {
                try{
                    if (spriteMap.Texture == null)
                    {
                        /*
                         * This is a workaround for when we're showing for an
                         * event trigger, as the instance didn't go through the
                         * FetchResources() call to load the texture we need to
                         * do it now.
                         */
                        spriteMap.LoadResource(e => { });
                    }

                    Canvas messageCanvas = gameObject.AddComponent <Canvas>();
                    messageCanvas.renderMode   = RenderMode.ScreenSpaceOverlay;
                    messageCanvas.sortingOrder = 32767;
                    gameObject.AddComponent <GraphicRaycaster>();

                    if (this.configuration.ContainsKey("shim"))
                    {
                        ShimLayer shimLayer = gameObject.AddComponent <ShimLayer>();
                        shimLayer.Build(ddna, gameObject, this, this.configuration["shim"] as JSONObject, this.depth);
                    }

                    JSONObject layout = configuration["layout"] as JSONObject;
                    object     orientation;
                    if (!layout.TryGetValue("landscape", out orientation) &&
                        !layout.TryGetValue("portrait", out orientation))
                    {
                        throw new KeyNotFoundException("Layout missing orientation key.");
                    }

                    BackgroundLayer backgroundLayer = gameObject.AddComponent <BackgroundLayer>();
                    backgroundLayer.Build(ddna, gameObject, this, orientation as JSONObject, spriteMap.Background,
                                          depth - 1);

                    ButtonsLayer buttonLayer = gameObject.AddComponent <ButtonsLayer>();
                    buttonLayer.Build(ddna, gameObject, this, orientation as JSONObject, spriteMap.Buttons,
                                      backgroundLayer, depth - 2);

                    showing = true;
                }
                catch (KeyNotFoundException exception) {
                    Logger.LogWarning("Failed to show image message, invalid format: " + exception.Message);
                }
                catch (Exception exception) {
                    Logger.LogWarning("Failed to show image message: " + exception.Message);
                }
            }
        }