/// <summary> /// 子要素が削除されたときに呼ばれます。 /// </summary> internal void RemovedFromParent(EntityObject parent) { if (Parent == null) { throw new InvalidOperationException( "EntityObjectに親が設定されていません。"); } Parent = null; parent.ModelGroup.Children.Remove(ModelGroup); // 終了処理を行います。 Terminate(); }
/// <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(); } } }