Beispiel #1
0
        /// <summary>
        /// 子要素が削除されたときに呼ばれます。
        /// </summary>
        internal void RemovedFromParent(EntityObject parent)
        {
            if (Parent == null)
            {
                throw new InvalidOperationException(
                    "EntityObjectに親が設定されていません。");
            }

            Parent = null;
            parent.ModelGroup.Children.Remove(ModelGroup);

            // 終了処理を行います。
            Terminate();
        }
Beispiel #2
0
        /// <summary>
        /// 子要素が追加されたときに呼ばれます。
        /// </summary>
        internal void AddedToParent(EntityObject parent)
        {
            if (Parent != null)
            {
                throw new InvalidOperationException(
                    "EntityObjectにはすでに親が設定されています。");
            }

            Parent = parent;

            // 描画用モデルと子要素のリスト、両方に追加します。
            parent.ModelGroup.Children.Add(ModelGroup);

            Initialize();
        }
        /// <summary>
        /// エフェクトを追加します。
        /// </summary>
        public void AddEffect(EntityObject effect)
        {
            if (effect == null)
            {
                return;
            }

            if (this.effectObjectRoot != null)
            {
                this.effectObjectRoot.Children.Add(effect);
            }
        }
        /// <summary>
        /// エフェクトを削除します。
        /// </summary>
        public void RemoveEffect(EntityObject effect)
        {
            if (effect == null)
            {
                return;
            }

            if (this.effectObjectRoot != null)
            {
                this.effectObjectRoot.Children.Remove(effect);
            }
        }
        /// <summary>
        /// コントロールをアンロードします。
        /// </summary>
        /// <remarks>
        /// Unloededイベントがないので、手動でアンロードします。
        /// </remarks>
        public void Unload()
        {
            EndMove();
            StopAutoPlay();

            // エフェクトマネージャへの参照と、マネージャが持つ
            // このオブジェクトへの参照を初期化します。
            EffectManager = null;

            // Boardには駒が変化したときのハンドラを設定しているため
            // 最後に必ずそのハンドラを削除する必要があります。
            // しかしながら、ここで値をnullに設定してしまうと、
            // Board依存プロパティに設定されたデータの方もnullクリア
            // されてしまうため、ただ単にイベントを外すだけにします。
            if (Board != null)
            {
                Board.BoardChanged -= OnBoardPieceChanged;
            }

            if (this.banEffectObjectRoot != null)
            {
                this.banEffectObjectRoot.Terminate();
                this.banEffectObjectRoot = null;
            }

            if (this.effectObjectRoot != null)
            {
                this.effectObjectRoot.Terminate();
                this.effectObjectRoot = null;
            }

            if (this.pieceObjectList != null)
            {
                this.pieceObjectList.ToArray()
                    .ForEach(_ => _.Terminate());
                this.pieceObjectList.Clear();
            }

            foreach (var capturedPieceList in this.capturedPieceObjectList)
            {
                if (capturedPieceList != null)
                {
                    capturedPieceList.ToArray()
                        .ForEach(_ => _.Terminate());
                    capturedPieceList.Clear();
                }
            }
        }