// ----------------------------------------------- public void Draw_AsExitUsr(BanCtrl_GUI ctrl_GUI) { if (m_GUI == ctrl_GUI) { return; } m_GUI = ctrl_GUI; m_GUI.m_Btn_AI_talk.Enabled = false; m_GUI.m_Btn_AI_talk.Text = "---"; Button btn_ban = m_GUI.m_Btn_ban; btn_ban.Text = m_exit_unames; TextBox tbox_info = m_GUI.m_TBox_info; tbox_info.Text = $"[{m_exit_unames}] / {m_encip}"; tbox_info.Visible = true; if (mb_Rgst_ban) { btn_ban.Enabled = false; tbox_info.BackColor = Color.LightPink; } else { btn_ban.Enabled = true; tbox_info.BackColor = Color.Gainsboro; } }
// ----------------------------------------------- public void Draw_AsRoomUsr(BanCtrl_GUI ctrl_GUI) { if (m_GUI == ctrl_GUI) { return; } m_GUI = ctrl_GUI; m_GUI.m_Btn_AI_talk.Enabled = true; m_GUI.m_Btn_ban.Text = m_uinfo.m_uname; m_GUI.m_Btn_ban.Enabled = true; TextBox tbox_info = m_GUI.m_TBox_info; tbox_info.Text = $"[{string.Join(", ", m_uinfo.m_unames_this_session)}] / {m_uinfo.m_uid.m_str_uid}"; tbox_info.Visible = true; tbox_info.BackColor = Color.White; if (mb_AI_talk) { m_GUI.m_Btn_AI_talk.Text = "AI対応"; tbox_info.BackColor = Color.Orange; } else { m_GUI.m_Btn_AI_talk.Text = "---"; } if (mb_Rgst_ban) { tbox_info.BackColor = Color.HotPink; } }
// ------------------------------------------------------------------------------------ void Create_BanCtrls_GUI() { int top_btn = TOP_Btn_BAN; Size size_ai_talk = new Size(WIDTH_Btn_delayBAN, HEIGHT_Btn_BAN); Size size_tbox = new Size(WIDTH_TBox_BAN, HEIGHT_Btn_BAN); Size size_btn = new Size(WIDTH_Btn_BAN, HEIGHT_Btn_BAN); for (int idx = 0; idx < NUM_Btn_BAN; top_btn += HEIGHT_Line, idx++) { BanCtrl_GUI btn_ctrl_GUI = new BanCtrl_GUI(); msa_BanCtrl_GUIs[idx] = btn_ctrl_GUI; // --------------------------- Button btn_ai_talk = new Button(); btn_ai_talk.Font = MainForm.ms_meiryo_Ke_P_8pt; btn_ai_talk.Location = new Point(LEFT_Btn_delayBAN, top_btn); btn_ai_talk.Size = size_ai_talk; btn_ai_talk.Text = "---"; btn_ai_talk.Enabled = false; btn_ai_talk.UseVisualStyleBackColor = true; btn_ai_talk.Click += btn_ctrl_GUI.OnClk_Btn_AI_talk; splitContainer1.Panel1.Controls.Add(btn_ai_talk); msa_BanCtrl_GUIs[idx].m_Btn_AI_talk = btn_ai_talk; // --------------------------- Button btn = new Button(); btn.Font = MainForm.ms_meiryo_Ke_P_9pt; btn.Location = new Point(LEFT_Btn_BAN, top_btn); btn.Size = size_btn; btn.Text = " ---"; btn.Enabled = false; btn.UseVisualStyleBackColor = true; btn.TextAlign = ContentAlignment.MiddleLeft; btn.Click += btn_ctrl_GUI.OnClk_Btn_BAN; splitContainer1.Panel1.Controls.Add(btn); msa_BanCtrl_GUIs[idx].m_Btn_ban = btn; // --------------------------- TextBox tbox = new TextBox(); tbox.Font = MainForm.ms_meiryo_Ke_P_9pt; tbox.Location = new Point(LEFT_TBox_BAN, top_btn); tbox.Size = size_tbox; tbox.Visible = false; splitContainer1.Panel1.Controls.Add(tbox); msa_BanCtrl_GUIs[idx].m_TBox_info = tbox; } }
// ----------------------------------------------- public void Set_NewUInfo(int id_this_session, BanCtrl_GUI ctrl_GUI, UInfo uinfo) { m_id_this_session = id_this_session; m_GUI = null; // Draw_AsRoomUsr() で設定 & 描画を行う m_uinfo = uinfo; m_exit_unames = null; m_encip = uinfo.m_encip.m_str_encip; mb_Rgst_ban = uinfo.mb_to_ban_onAttend; mb_Exec_Ban = false; mb_AI_talk = false; this.Draw_AsRoomUsr(ctrl_GUI); }
// ----------------------------------------------- public void Set_NewExitUsr(int id_this_session, BanCtrl_GUI ctrl_GUI, int idx_eusr) { m_id_this_session = id_this_session; m_GUI = null; // Draw_AsExitUsr() で設定 & 描画を行う m_uinfo = null; m_exit_unames = string.Join(", ", ExitEip_onTalks.msa_unames_on_talks[idx_eusr]); m_encip = ExitEip_onTalks.msa_encip_on_talks[idx_eusr]; if ((ExitEip_onTalks.msa_flags[idx_eusr] & ExitEip_onTalks.ExitUsr_Stt.EN_Regist_BAN) == 0) { mb_Rgst_ban = false; } else { mb_Rgst_ban = true; } mb_Exec_Ban = false; mb_AI_talk = false; this.Draw_AsExitUsr(ctrl_GUI); }
// ban_ctrl に変更を行うときにコールされる関数 // 戻り値: 実際に登録された BanCtrl public static BanCtrl Update_RoomUsr(BanCtrl pos_ctrl, int id_this_session, BanCtrl_GUI ctrl_GUI, UInfo uinfo) { BanCtrl ctrl = pos_ctrl; if (ctrl == ms_BanCtrl_bottom) { ctrl.Set_NewUInfo(id_this_session, ctrl_GUI, uinfo); } else { while (true) { int ctrl_id_this_session = ctrl.m_id_this_session; if (ctrl_id_this_session == id_this_session) { // ユーザ情報はそのままでよい ctrl.Draw_AsRoomUsr(ctrl_GUI); break; } if (ctrl_id_this_session == 0) { ctrl.Set_NewUInfo(id_this_session, ctrl_GUI, uinfo); break; } if (ctrl_id_this_session < 0) { ctrl = InsertFromLast(ctrl); ctrl.Set_NewUInfo(id_this_session, ctrl_GUI, uinfo); break; } if (ctrl_id_this_session > id_this_session) { throw new Exception( "!!! エラー検出: ctrl_id__this_session > id_this_session in BanCtrls_Ctrlr.Update_onRoomUsr()"); } ctrl = MoveToLast(ctrl); } } // GUI の表示を update する // ctrl.Draw_AsRoomUsr(); return(ctrl); }
// GetJSON() の後にコールされる void Update_BanCtrls() { int c_num_on_room = Math.Min(NUM_Btn_BAN, UInfo_onRoom.msa_uinfo.Count); BanCtrl ban_ctrl = BanCtrls_Ctrlr.ms_BanCtrl_top; for (int idx = 0; idx < c_num_on_room; idx++) { UInfo uinfo = UInfo_onRoom.msa_uinfo[idx]; BanCtrl_GUI ban_ctrl_GUI = msa_BanCtrl_GUIs[idx]; // uinfo、ban_ctrl、ban_ctrl_GUI の3つを lead_id_this_session を軸として結びつけていく int lead_id_this_session = uinfo.m_id_this_session; if (ban_ctrl_GUI.m_id_this_session != lead_id_this_session) { ban_ctrl = BanCtrls_Ctrlr.Update_RoomUsr(ban_ctrl, lead_id_this_session, ban_ctrl_GUI, uinfo); ban_ctrl_GUI.m_id_this_session = lead_id_this_session; ban_ctrl_GUI.m_ban_ctrl = ban_ctrl; } if (ban_ctrl.mb_Rgst_ban && ban_ctrl.mb_Exec_Ban == false) { ma_btn_idx_to_ban[m_tmnt_btn_idx_to_ban] = idx; m_tmnt_btn_idx_to_ban++; } ban_ctrl = ban_ctrl.m_next; } int idx_tmnt; { int idx_eusr = ExitEip_onTalks.msa_encip_on_talks.Count; idx_tmnt = Math.Min(NUM_Btn_BAN, c_num_on_room + idx_eusr); idx_eusr--; // eusr は、後方から処理をしていく(時間的順序を考慮) for (int idx_GUI = c_num_on_room; idx_GUI < idx_tmnt; idx_eusr--, idx_GUI++) { BanCtrl_GUI ban_ctrl_GUI = msa_BanCtrl_GUIs[idx_GUI]; // exit_user、ban_ctrl、ban_ctrl_GUI の3つを lead_id_this_session を軸として結びつけていく int lead_id_this_session = ExitEip_onTalks.msa_id_this_session[idx_eusr]; if (ban_ctrl_GUI.m_id_this_session != lead_id_this_session) { ban_ctrl = BanCtrls_Ctrlr.Update_ExitUsr(ban_ctrl, lead_id_this_session, ban_ctrl_GUI, idx_eusr); ban_ctrl_GUI.m_id_this_session = lead_id_this_session; ban_ctrl_GUI.m_ban_ctrl = ban_ctrl; } ban_ctrl = ban_ctrl.m_next; } } // 非使用の ban_ctrl_GUI の id_this_session をクリア for (int idx_GUI = idx_tmnt; idx_GUI < NUM_Btn_BAN; idx_GUI++) { BanCtrl_GUI ban_ctrl_GUI = msa_BanCtrl_GUIs[idx_GUI]; if (ban_ctrl_GUI.m_id_this_session == 0) { break; } ban_ctrl_GUI.m_Btn_AI_talk.Text = "---"; ban_ctrl_GUI.m_Btn_AI_talk.Enabled = false; ban_ctrl_GUI.m_Btn_ban.Text = " ---"; ban_ctrl_GUI.m_Btn_ban.Enabled = false; ban_ctrl_GUI.m_TBox_info.Visible = false; ban_ctrl_GUI.m_id_this_session = 0; } // 非使用の ban_ctrl の id_this_session をクリア while (ban_ctrl != null) { if (ban_ctrl.m_id_this_session == 0) { break; } ban_ctrl.m_id_this_session = 0; ban_ctrl = ban_ctrl.m_next; } // BanCtrl の表示更新を終えたタイミングで、即時 BAN 対象者がいたら BAN を実行する for (int i = 0; i < m_tmnt_btn_idx_to_ban; i++) { msa_BanCtrl_GUIs[ma_btn_idx_to_ban[i]].m_ban_ctrl.OnClk_Btn_BAN(); } m_tmnt_btn_idx_to_ban = 0; // AI_talk 対応ユーザがいたら、AI_talk に対応させる if (DB_cur.msb_to_appear_AI_talk) { AI_talk.Talk_toTgt(); DB_cur.msb_to_appear_AI_talk = false; } }