public override void InitializeLayer(IObject2DFactory factory)
        {
            base.InitializeLayer(factory);

            this.LevelTurnPhase = TurnPhase.VOID;

            BoardBannerLayer boardBannerLayer = this.parentLayer as BoardBannerLayer;

            this.headerEntity2D     = new HeaderEntity2D(this, boardBannerLayer.Player, boardBannerLayer.Opponent);
            this.scoreDomainLabel2D = new ScoreDomainLabel2D(this, boardBannerLayer.Player, boardBannerLayer.Opponent);

            this.turnBanner2D.ResetTurn(boardBannerLayer.MaxTurnCount);
            this.cardsToPlaceBanner2D.ResetTurn();

            this.domainToolTip.HideToolTip();

            this.cardFocused        = null;
            this.domainLayerFocused = null;

            this.cardFocusedLayers.Clear();
            this.domainsLayers.Clear();
            this.scoreLayers.Clear();
            if (this.world2D.TryGetTarget(out World2D world2D))
            {
                foreach (ALayer2D layer in world2D.LayersList)
                {
                    ICardFocusedLayer cardFocusedLayer = layer as ICardFocusedLayer;

                    if (cardFocusedLayer != null)
                    {
                        this.cardFocusedLayers.Add(cardFocusedLayer);
                    }

                    IDomainsLayer domainLayer = layer as IDomainsLayer;
                    if (domainLayer != null)
                    {
                        this.domainsLayers.Add(domainLayer);

                        domainLayer.StartDomainEvaluated += OnStartDomainsEvaluated;
                        domainLayer.DomainEvaluated      += OnDomainEvaluated;
                        domainLayer.EndDomainEvaluated   += OnEndDomainsEvaluated;

                        domainLayer.DomainFocusedChanged += OnDomainFocusedChanged;

                        domainLayer.NbCardsToPlaceChanged += OnNbCardsToPlaceChanged;
                    }

                    IScoreLayer scoreLayer = layer as IScoreLayer;
                    if (scoreLayer != null)
                    {
                        this.scoreLayers.Add(scoreLayer.PlayerName, scoreLayer);
                    }
                }
            }
        }
        private void UpdateFocusedEntity(Time deltaTime)
        {
            ICardFocusedLayer firstCardLayerFocused = this.cardFocusedLayers.FirstOrDefault(pElem => pElem.CardFocused != null);
            ALayer2D          layer2D = firstCardLayerFocused as ALayer2D;

            if (firstCardLayerFocused != null)
            {
                CardEntity2D cardFocused = firstCardLayerFocused.CardFocused;
                if (this.cardFocused != cardFocused)
                {
                    CardEntity cardEntity = layer2D.GetEntityFromEntity2D(cardFocused) as CardEntity;

                    this.cardToolTip.DisplayToolTip(cardEntity.Card, cardFocused);

                    this.cardFocused = cardFocused;
                }

                if (this.cardToolTip.IsActive)
                {
                    Vector2f cardFocusedPosition = this.cardFocused.Position;

                    Vector2f cardPositionInWindow = layer2D.GetPositionInWindow(cardFocusedPosition);

                    if (cardPositionInWindow.Y > this.defaultViewSize.Y / 2)
                    {
                        cardFocusedPosition.Y -= this.cardFocused.Canevas.Height / 2;

                        cardFocusedPosition = this.GetPositionInScene(layer2D.GetPositionInWindow(cardFocusedPosition));

                        cardFocusedPosition.X -= this.cardToolTip.Canevas.Width / 2;
                        cardFocusedPosition.Y -= this.cardToolTip.Canevas.Height;
                    }
                    else
                    {
                        cardFocusedPosition.Y += this.cardFocused.Canevas.Height / 2;

                        cardFocusedPosition = this.GetPositionInScene(layer2D.GetPositionInWindow(cardFocusedPosition));

                        cardFocusedPosition.X -= this.cardToolTip.Canevas.Width / 2;
                    }

                    this.cardToolTip.Position = cardFocusedPosition;
                }
            }
            else
            {
                this.cardToolTip.HideToolTip();

                this.cardFocused = null;
            }

            if (this.domainToolTip.IsActive)
            {
                Vector2f mousePositionInWindow = this.domainLayerFocused.GetPositionInWindow(new Vector2f(this.domainLayerFocused.MousePosition.X, this.domainLayerFocused.MousePosition.Y));
                Vector2f domainTooltipPosition = this.GetPositionInScene(mousePositionInWindow);

                if (mousePositionInWindow.Y > this.defaultViewSize.Y / 2)
                {
                    domainTooltipPosition.Y -= this.domainToolTip.Canevas.Height;
                }
                //domainTooltipPosition.X -= this.domainToolTip.Canevas.Width / 2;

                this.domainToolTip.Position = domainTooltipPosition;

                this.domainToolTip.UpdateGraphics(deltaTime);
            }
        }