/************************************************************************/ /* アクセサ */ /************************************************************************/ /// <summary> /// 参加メンバーを表としてコントロールを生成する /// </summary> /// <param name="iMemberList"></param> public void SetJoinMemberList(List <BattleManager.SBattleJoinInfo> iMemberList) { //まずはコントロールを作成 var control_List = new List <TeamDisplayMember>(); int color_Index = 0; var color_List = new Brush[2] { new SolidColorBrush(SystemUtility.StringToColor("#55000000")), new SolidColorBrush(SystemUtility.StringToColor("#55555555")) }; var margin = new Thickness(); MemberGrid.Children.Clear(); foreach (var iMember in iMemberList) { var control = new TeamDisplayMember(); control.Margin = margin; control.Background = color_List[color_Index % 2]; control.SetJoinMemberInfo(control_List.Count, iMember); control_List.Add(control); MemberGrid.Children.Add(control); margin.Top += control.Height; ++color_Index; } //コントロール分だけ自分のコントロールのサイズを変更 MemberGrid.Width = control_List[0].Width; Width = MemberGrid.Width + 44; MemberGrid.Height = (control_List[0].Height * control_List.Count); Height = MemberGrid.Height + IndexGrid.Height + 44; }
//============================================================================ //! 選択していないメンバーリストの更新 private void _RefreshJoinMemberList() { MemberStackPanel.Children.Clear(); var set_Width = MemberGrid.Width - 44; int color_Index = 0; var color_List = new Brush[2] { new SolidColorBrush(SystemUtility.StringToColor("#55000000")), new SolidColorBrush(SystemUtility.StringToColor("#55555555")) }; //作成 foreach (var iMember in BattleOperatorManager.GetInstance().GetJoinMemberList()) { if (!_IsInTeamJoinMember(iMember.mJoinID)) { var control = new NoTeamMemberControl(); control.Width = set_Width; control.Background = color_List[color_Index % 2]; control.SetJoinMemberInfo(iMember); control.OnSelectionFilter(); control.PreviewMouseLeftButtonDown += _ClickMember; control.Tag = iMember; MemberStackPanel.Children.Add(control); ++color_Index; } } }
/************************************************************************/ /* 内部処理 */ /************************************************************************/ //============================================================================ //! メンバーリストの更新 private void _RefreshMemberList() { //まだ無視 if (NormalDisplayRadioButton == null) { return; } //メンバーリスト作成 var member_List = MemberManager.GetInstance().GetMemberList((MemberManager.ESortKind)SortMemberComboBox.SelectedIndex); //現在のメンバー全てを設定 MemberStackPanel.Children.Clear(); var set_Width = MemberScrollViewer.Width; int index = 0; var color_List = new Brush[2] { new SolidColorBrush(SystemUtility.StringToColor("#55000000")), new SolidColorBrush(SystemUtility.StringToColor("#55555555")) }; //通常表示 if (NormalDisplayRadioButton.IsChecked == true) { foreach (var iMember in member_List) { var control = new MemberListControl(); control.Width = set_Width; control.Background = color_List[index % 2]; control.EditButton.TabIndex = iMember.mID; control.EditButton.Click += _ClickEditMember; control.SetMemberInfo(iMember); MemberStackPanel.Children.Add(control); ++index; } } else { foreach (var iMember in member_List) { var control = new MemberMinListControl(); control.Width = set_Width; control.Background = color_List[index % 2]; control.EditButton.TabIndex = iMember.mID; control.EditButton.Click += _ClickEditMember; control.SetMemberInfo(iMember); MemberStackPanel.Children.Add(control); ++index; } } //追加コントロール var add_Contrl = new MemberAddControl(); add_Contrl.AddButton.Click += _ClickAddMember; MemberStackPanel.Children.Add(add_Contrl); }
//============================================================================ //! チームリストの更新 private void _RefreshTeamList() { TeamStackPanel.Children.Clear(); var set_Width = TeamGrid.Width - 44; var color_Index = 0; var color_List = new Brush[2] { new SolidColorBrush(SystemUtility.StringToColor("#55000000")), new SolidColorBrush(SystemUtility.StringToColor("#55555555")) }; foreach (var iTeam in mTeamList) { var control = new TeamControl(); control.Background = color_List[color_Index % 2]; control.SetTeamInfo(iTeam.mTeamID, iTeam.mTeamName); control.RemoveButton.IsEnabled = mTeamOperateFlg; control.RemoveButton.Click += _ClickRemoveTeam; control.RemoveButton.TabIndex = iTeam.mTeamID; control.EditButton.IsEnabled = mTeamOperateFlg; control.EditButton.Click += _ClickEditTeam; control.EditButton.TabIndex = iTeam.mTeamID; control.OpenCloseButton.Click += _ClickTeamInfoOpenClose; control.TabIndex = iTeam.mTeamID; control.SetOpenClose(iTeam.mCloseFlg); //チームに登録されているメンバーを設定 int join_Index = 0; foreach (var iJoinMemberID in iTeam.mJoinIDList) { //戻ってきたメンバーごとのコントロールの削除ボタンの設定 var in_Control = control.AddJoinMember(iJoinMemberID); in_Control.RemoveButton.Tag = iTeam.mTeamID; in_Control.RemoveButton.TabIndex = join_Index; in_Control.RemoveButton.Click += _ClickRemoveMember; ++join_Index; } control.RefreshControlSize(); //チームスタックに挿入 TeamStackPanel.Children.Add(control); ++color_Index; } //追加ボタンを追加 if (mTeamOperateFlg) { var control = new TeamAddControl(); control.AddButton.Click += _ClickAddTeam; control.Width = set_Width; TeamStackPanel.Children.Add(control); } }
//============================================================================ //! 選択していないメンバーリストの更新 private void _RefreshNonSelectMemberList() { NonSelectMemberStackPanel.Children.Clear(); var set_Width = NonSelectMemberScrollViewer.Width; int color_Index = 0; var color_List = new Brush[2] { new SolidColorBrush(SystemUtility.StringToColor("#55000000")), new SolidColorBrush(SystemUtility.StringToColor("#55555555")) }; //メンバーリスト作成 var member_List = MemberManager.GetInstance().GetMemberList((MemberManager.ESortKind)SortMemberComboBox.SelectedIndex); //検索情報 string search_member_name = ""; int search_character_id = -1; if (IsOpenSearchWindow()) { search_member_name = mSearchWindow.GetSearchMemberName(); search_character_id = mSearchWindow.GetSearchCharacterID(); } //作成 foreach (var iMember in member_List) { if (!_IsJoinMember(iMember.mID)) { //サーチチェック if (search_member_name.Length > 0 && iMember.mName.IndexOf(search_member_name) == -1) { continue; } if (search_character_id != -1 && search_character_id != iMember.mDefaultCharacterID) { continue; } var control = new NonSelectMemberControl(); control.Width = set_Width; control.EntryButton.Tag = iMember; control.EntryButton.Click += _ClickJoin; control.Background = color_List[color_Index % 2]; control.SetMemberInfo(iMember); NonSelectMemberStackPanel.Children.Add(control); ++color_Index; } } }
/// <summary> /// 参加メンバーIDの追加 /// </summary> /// <param name="iJoinIndex">参加メンバーID</param> public InTeamMemberControl AddJoinMember(int iJoinIndex) { //コントロールの設定 var color_List = new Brush[2] { new SolidColorBrush(SystemUtility.StringToColor("#55000000")), new SolidColorBrush(SystemUtility.StringToColor("#55555555")) }; var control = new InTeamMemberControl(); control.Width = Width; control.Background = color_List[mMemberList.Count % 2]; control.TabIndex = mMemberList.Count; var get_Info = new BattleManager.SBattleJoinInfo(); BattleOperatorManager.GetInstance().GetJoinInfo(ref get_Info, iJoinIndex); control.SetJoinMemberInfo(mMemberList.Count, get_Info); MemberStackPanel.Children.Add(control); mMemberList.Add(iJoinIndex); MemberValTextBlock.Text = string.Format("このチームには{0}人所属しています", mMemberList.Count); return(control); }
/************************************************************************/ /* 内部処理 */ /************************************************************************/ //============================================================================ //! キャラクターリストの作成 public void _CreateCharacterList() { var set_Width = SelectCharacterScrollViewer.Width; int color_Index = 0; var color_List = new Brush[2] { new SolidColorBrush(SystemUtility.StringToColor("#55000000")), new SolidColorBrush(SystemUtility.StringToColor("#55555555")) }; //作成 foreach (var iCharacter in PresetManager.GetInstance().GetCharacterList()) { var control = new CharacterSelectListControl(); control.Width = set_Width; control.Background = color_List[color_Index % 2]; control.SetCharacterInfo(iCharacter); control.TabIndex = iCharacter.mIndex; control.PreviewMouseLeftButtonDown += _ClickCharacter; SelectCharacterStackPanel.Children.Add(control); ++color_Index; } }
/************************************************************************/ /* 公開処理 */ /************************************************************************/ /// <summary> /// 設定されているプリセット名からプリセットデータをロードする /// </summary> public void LoadPreset() { try { string preset_Name = (string)DataManager.GetInstance().GetData(SaveManager.GetInstance().PresetInfoKey); string preset_Path = SystemUtility.GetResourcePath() + @"Preset\" + preset_Name + @"\"; var analayzer = new DL.CXmlAnalyzer(); analayzer.AnalyzeXmlFile(preset_Path + "Preset.psx"); //背景画像の取得 var node = analayzer.GetRootNode().GetChildNodeFromPath("Preset/BackGroundImage")[0]; mBackgroundImage = ResourceManager.GetInstance().CreateImage(preset_Path + node.GetNodeInfo().mValue + ".adg"); //キャラクター情報の読み込み node = analayzer.GetRootNode().GetChildNodeFromPath("Preset/Characters")[0]; foreach (var iNode in node.GetChildNode("Character")) { var info = new SCharacterInfo(); info.mIndex = int.Parse(iNode.GetChildNode("Index")[0].GetNodeInfo().mValue); info.mName = iNode.GetChildNode("Name")[0].GetNodeInfo().mValue; info.mIconColorList = new Color[2] { SystemUtility.StringToColor(iNode.GetChildNode("UpBGColor")[0].GetNodeInfo().mValue), SystemUtility.StringToColor(iNode.GetChildNode("DownBGColor")[0].GetNodeInfo().mValue) }; info.mNameColorList = new Color[2] { SystemUtility.StringToColor(iNode.GetChildNode("FontColor")[0].GetNodeInfo().mValue), SystemUtility.StringToColor(iNode.GetChildNode("ShadowFontColor")[0].GetNodeInfo().mValue) }; info.mIconImage = ResourceManager.GetInstance().CreateImage(preset_Path + @"\" + string.Format("CIC{0}.adg", info.mIndex)); mCharacterMap.Add(info.mIndex, info); } mUnknownCharacterIcon = ResourceManager.GetInstance().CreateImage(SystemUtility.GetResourcePath() + @"System\CIC_UKN.adg"); } catch (System.Exception iException) { SystemUtility.DisplayErrorDialog(string.Format("プリセットソースの読み込みに失敗しました\n[{0}]", iException.Message)); System.Environment.Exit(1); } }
/************************************************************************/ /* 基本処理 */ /************************************************************************/ /// <summary> /// コンストラクタ /// </summary> public SimpleTournamentResultControl(int iMemberID, BattleManager.SMemberBattleResult iResult, BattleManager.SBattleInfo iBattleInfo) { InitializeComponent(); //情報登録 bool team_flg = (iBattleInfo.mTeamList.Count != 0); MainGroupBox.Header = "大会No." + iResult.mIndex.ToString() + " - " + iBattleInfo.mName + " -"; TournamentKindTextBlock.Text = "種別:" + (team_flg ? "チーム戦" : "シングル戦"); JoinNumTextBlock.Text = "参加人数:" + iBattleInfo.mJoinList.Count.ToString() + "人"; DateTextBlock.Text = "開催日時 " + iBattleInfo.mDate; JoinTeamNumTextBlock.Text = team_flg ? "参加チーム数:" + iBattleInfo.mTeamList.Count.ToString() + "チーム" : ""; ResultTextBlock.Text = "- "; var obj = (SimpleTournamentObject)iBattleInfo.mBattleObject; var result = obj.GetSimpleTournamentResult(iBattleInfo, iMemberID); if (result.mRank == 1) { ResultTextBlock.Text += "優勝"; } else if (result.mRank == 2) { ResultTextBlock.Text += "準優勝"; ResultTextBlock.Foreground = SystemUtility.CreateLinearGradientBrash(SystemUtility.StringToColor("#FFFFFF00"), SystemUtility.StringToColor("#FFFFFFF55")); } else { ResultTextBlock.Text += ("第" + result.mRank + "位"); ResultTextBlock.Foreground = new SolidColorBrush(SystemUtility.StringToColor("#FF5555FF")); } ResultTextBlock.Text += " -"; BeginVersusNumTextBlock.Text = result.mBeginVersus.ToString() + "回戦からの開始"; var character_Info = PresetManager.GetInstance().GetCharacterInfo(iResult.mUseCharacterID); CharacterIcon.Source = character_Info.mIconImage; UseCharacterTextBlock.Text = "使用キャラ:" + character_Info.mName; }
//============================================================================ //! 選択済みのメンバーリストの更新 private void _RefreshSelectMemberList() { SelectMemberStackPanel.Children.Clear(); var set_Width = SelectMemberScrollViewer.Width; var member_Manager = MemberManager.GetInstance(); var color_Index = 0; var color_List = new Brush[2] { new SolidColorBrush(SystemUtility.StringToColor("#55000000")), new SolidColorBrush(SystemUtility.StringToColor("#55555555")) }; foreach (var iJoinMember in mJoinMemberList) { var control = new SelectMemberControl(); control.Width = set_Width; control.RemoveEntryButton.Tag = iJoinMember; control.RemoveEntryButton.Click += _ClickJoinRemove; control.CollideRectangle.PreviewMouseLeftButtonDown += _ClickJoinMember; control.Background = color_List[color_Index % 2]; control.SetMemberInfo(iJoinMember.mJoinID, member_Manager.GetMemberInfo(iJoinMember.mMemberID).mName, iJoinMember.mUseCharacterID); control.TabIndex = SelectMemberStackPanel.Children.Count; SelectMemberStackPanel.Children.Add(control); ++color_Index; } }
/************************************************************************/ /* コールバック処理 */ /************************************************************************/ //============================================================================ //! テキストが変更された時に呼ばれる private void _ChangeText(object iSender, TextChangedEventArgs iArgs) { var str = TweetTextBox.Text.Trim(); int result = 130 - str.Length; //URL系統のチェック int pos = 0; while (true) { var begin_pos = str.IndexOf("http://", pos); if (begin_pos == -1) { begin_pos = str.IndexOf("https://", pos); } //終了 if (begin_pos == -1) { break; } //URLの文字数取得 var end_pos_list = new int[] { str.IndexOf(" ", begin_pos), str.IndexOf(" ", begin_pos), str.IndexOf("\n", begin_pos), str.IndexOf("\t", begin_pos) }; var end_pos_index = -1; foreach (var iIndex in System.Linq.Enumerable.Range(0, end_pos_list.Length)) { //入れ替え if (end_pos_list[iIndex] != -1 && (end_pos_index == -1 || end_pos_index > end_pos_list[iIndex])) { end_pos_index = iIndex; } } //文字数 var not_found_end = (end_pos_index == -1); var url = not_found_end ? str.Substring(pos) : str.Substring(pos, end_pos_list[end_pos_index] - begin_pos - 1); if (url.Length > 23) { result += (url.Length - 23); } //終了 if (not_found_end) { break; } pos = end_pos_list[end_pos_index]; } //予想ツイート文字数設定 CharaLengthTextBlock.Text = string.Format("残入力可能文字数:{0}", result); var color = (result < 0) ? "#FFFF0000" : "#FF0000FF"; CharaLengthTextBlock.Foreground = new System.Windows.Media.SolidColorBrush(SystemUtility.StringToColor(color)); TweetButton.IsEnabled = (result >= 0); }
//============================================================================ //! ツールウィンドウの更新 private void _RefreshOptionWindow() { //まずは対戦可能な表示から追加 var check_List = new List <int>(); mOptionWindow.VersusDisplayStackPanel.Children.Clear(); int color_Index = 0; var color_List = new Brush[2] { new SolidColorBrush(SystemUtility.StringToColor("#AA000000")), new SolidColorBrush(SystemUtility.StringToColor("#AA555555")) }; foreach (var iIndex in System.Linq.Enumerable.Range(0, mLeafInfoList.Count)) { //既に追加済みの場合は無視 if (check_List.IndexOf(iIndex) != -1) { continue; } check_List.Add(iIndex); //チーム未設定の場合は無視 var leaf = mLeafInfoList[iIndex]; if (!leaf.mLabelControl.IsSettingInfo()) { continue; } //対戦相手の取得 var target_Index = _GetBattleTargetIndex(iIndex); if (target_Index != -1) { //追加 var control = new TournamentWaitControl(); control.WaitNoTextBlock.Text = string.Format("対戦待機No.{0}", mOptionWindow.VersusDisplayStackPanel.Children.Count); control.SetUpWaitInfo(leaf.mLabelControl.GetTopName(), leaf.mLabelControl.GetDisplayImageSource()); var my_Round = leaf.mPointRoot.Count; leaf = mLeafInfoList[target_Index]; control.SetDownWaitInfo(leaf.mLabelControl.GetTopName(), leaf.mLabelControl.GetDisplayImageSource()); var target_Round = leaf.mPointRoot.Count; //次がルートの場合は終わり var next = leaf.mPointRoot[leaf.mPointRoot.Count - 1].GetDestConnectPoint(); if (next != null && next.GetDepth() == 0) { control.SetRoundDepth(-1); } else { control.SetRoundDepth((my_Round > target_Round) ? my_Round : target_Round); } control.MainGrid.Background = color_List[color_Index % 2]; control.TabIndex = iIndex; control.MouseEnter += _MouseEnterWaitLeaf; control.MouseLeave += _MouseLeaveWaitLeaf; control.PreviewMouseLeftButtonDown += _MouseClickWaitLeaf; mOptionWindow.VersusDisplayStackPanel.Children.Add(control); check_List.Add(target_Index); ++color_Index; } } //リザルト追加 mOptionWindow.ResultDisplayStackPanel.Children.Clear(); foreach (var iIndex in System.Linq.Enumerable.Range(0, mResultList.Count)) { //追加 var info = mResultList[iIndex]; var control = new TournamentResultControl(); control.WaitNoTextBlock.Text = string.Format("対戦結果No.{0}", mOptionWindow.ResultDisplayStackPanel.Children.Count); var up_Leaf = mLeafInfoList[info.mLeafIndexList[0]]; var down_Leaf = mLeafInfoList[info.mLeafIndexList[1]]; control.SetUpWaitInfo(up_Leaf.mLabelControl.GetTopName(), up_Leaf.mLabelControl.GetDisplayImageSource()); control.SetDownWaitInfo(down_Leaf.mLabelControl.GetTopName(), down_Leaf.mLabelControl.GetDisplayImageSource()); control.SetRoundDepth(info.mRoundIndex); control.SetWinIndex(info.mWinLeafIndex); control.Background = color_List[0]; //結果解除が出来るかどうかで変更 if (IsRemoveBattleResult(info.mLeafIndexList[0], info.mLeafIndexList[1])) { control.RemoveResultButton.TabIndex = iIndex; control.RemoveResultButton.Click += _ClickRemoveResult; } else { control.RemoveResultButton.IsEnabled = false; } mOptionWindow.ResultDisplayStackPanel.Children.Add(control); ++color_Index; } }
//============================================================================ //! 画面中でマウスの左ボタンが離された private void _ReleaseMouseLeftButton(object iSender, MouseButtonEventArgs iArgs) { if (mDragMember != null) { int member_Index = mDragMember.TabIndex; int current_Team_Index = mOperator.GetMemberJoinTeamIndex(member_Index); try { //パネルに所属させる if (mCurrentCursorPosition != -1) { if (mCurrentCursorPosition == 0) { mOperator.RemoveTeamMember(member_Index); } else { mOperator.AddTeamMember(mCurrentCursorPosition - 1, member_Index); } } //ドラッグ終了 _ClearDrag(); _RefreshDisplay(); //ここで全てのメンバーの所属が決まったら次に進むかを聞いてOKなら進む foreach (var iInfo in mOperator.GetMemberList()) { if (mOperator.GetMemberJoinTeamIndex(iInfo.mMemberID) == -1) { return; } } //1チームしかない場合はエラー if (TeamWrapPanel.Children.Count < 2) { SystemUtility.DisplayErrorDialog("チームが1つ以下です、チームを2チーム以上に分割して下さい"); throw new System.Exception(); } //各チームにメンバーが一人は所属していること foreach (TeamDetailsControl iControl in TeamWrapPanel.Children) { if (iControl.MemberWrapPanel.Children.Count == 0) { SystemUtility.DisplayErrorDialog("一人のメンバーも所属していないチームが存在しています"); throw new System.Exception(); } } //確認 System.Media.SystemSounds.Question.Play(); var result = MessageBox.Show("このチーム編成で先に進みますか?", "確認", MessageBoxButton.YesNo, MessageBoxImage.Exclamation); if (result == MessageBoxResult.Yes) { //予約先へ進む if (mOperator.SetCommitTeam(true)) { SceneManager.GetInstance().AdvanceScene(mNextScene); var stack = TeamWrapPanel.Background; TeamWrapPanel.Background = new SolidColorBrush(SystemUtility.StringToColor("#C8000000")); TeamWrapPanel.UpdateLayout(); mCurrentTeamBitmap = SystemUtility.GetCaptureControlBitmap(TeamWrapPanel); TeamWrapPanel.Background = stack; } } else { throw new System.Exception(); } } catch (System.Exception) { mOperator.RemoveTeamMember(member_Index); _RefreshDisplay(); } } }