class TCTextMessageGUI { string MessageID; string chat_avatar_icon; string chat_balloon; string chat_name_text; string chat_time_text; string chat_message_text; int StartHeight_La; int StartHeight_Po; public bool Load(string LayerName, TCMessageCore Data, int Order, list DataList, bool IsTextChatTab) { string BaseUserParam = Data.MessageData.UserCode + ":" + Data.MessageData.UserType; // UserCode・フレーム経過時間・Timestampの組み合わせをキーとして一意のMessageIDを決定する MessageID = BaseUserParam + ":" + "%d" % hsSystemGetTime() + ":" + Data.MessageData.Timestamp + ":" + "%d" % hsMathRandom(999999); chat_avatar_icon = "chat_avatar_icon" + ":" + MessageID; // アイコンからのプロフィール検索で使用するので必ず『chat_avatar_icon:UserCode:UserType』の順番になっている必要がある。 chat_balloon = "chat_balloon" + "_" + MessageID; chat_name_text = "chat_name_text" + "_" + MessageID; chat_time_text = "chat_time_text" + "_" + MessageID; chat_message_text = "chat_message_text" + "_" + MessageID; // テキストチャットメッセージの出現開始位置 StartHeight_La = 0; StartHeight_Po = 0; if(IsTextChatTab) { StartHeight_La = 90; StartHeight_Po = 0; // po未実装 } else { StartHeight_La = 210; StartHeight_Po = 0; // po未実装 } if(!_Load(LayerName, Data, Order, DataList, false, -90, IsTextChatTab)) return false; if(!_Load(LayerName, Data, Order, DataList, true, -220, IsTextChatTab)) return false; if(g_TextChatIsXShare) _Resize(LayerName, false, IsTextChatTab); return true; } public void Release(string LayerName, bool IsTextChatTab) { _Release(LayerName, false, IsTextChatTab); _Release(LayerName, true, IsTextChatTab); } void _Release(string LayerName, bool IsPortrait, bool IsTextChatTab) { system.Canvas_ReleaseGUI(LayerName, IsPortrait, chat_avatar_icon); system.Canvas_ReleaseGUI(LayerName, IsPortrait, chat_balloon); system.Canvas_ReleaseGUI(LayerName, IsPortrait, chat_name_text); system.Canvas_ReleaseGUI(LayerName, IsPortrait, chat_time_text); system.Canvas_ReleaseGUI(LayerName, IsPortrait, chat_message_text); } public void UpdateGUIPos(string LayerName, int Order, list DataList, bool IsTextChatTab) { _UpdateGUIPos(LayerName, Order, DataList, false, -90, IsTextChatTab); _UpdateGUIPos(LayerName, Order, DataList, true, -220, IsTextChatTab); } public int GetOffset() { int val = 0; return val; } bool _Load(string LayerName, TCMessageCore Data, int Order, list DataList, bool IsPortrait, int YOffset, bool IsTextChatTab) { int StartHeight = (IsPortrait)? StartHeight_Po : StartHeight_La; if(IsPortrait) { // if(Data.MessageData.IsMine) // { // } // else { // 後ほど位置をChatBalloからの相対座標で書き換える if(IsTextChatTab) { hsAddGUIButton( LayerName, IsPortrait, chat_avatar_icon, "", "", "", true, 1, -555, 250 + Order * YOffset, 120, 120, 0.5, 0.5, "CM", true, 0.0, Data.MessageData.IconURL, "", "", "", 0, 0, 300, 32, 0, 0, 0, 0, 0, 0, 0, 0 ); hsAddGUIButton( LayerName, IsPortrait, chat_balloon, "", "", "", true, 1, 30, 300 + Order * YOffset, 1200, 250, 0.5, 0.5, "CM", true, 0.0, "gui2024/chat/chat_balloon.png", "", "", "", 0, 0, 300, 32, 0, 0, 0, 0, 0, 0, 0, 0 ); hsAddGUIText( LayerName, IsPortrait, chat_name_text, true, 1, -160, 200 + Order * YOffset, 560, 64, 0.5, 0.5, "CM", true, 0.0, Data.MessageData.Name, "", 35, 1.0, 1.0, 1.0, 1.0, "LM", 0, 0, false, false, 1.0, 1.0, 1.0, 1.0 ); hsAddGUIText( LayerName, IsPortrait, chat_time_text, true, 1, 480, 200 + Order * YOffset, 150, 72, 0.5, 0.5, "CM", true, 0.0, _ClampTimestamp(Data.MessageData.Timestamp), "", 40, 1.0, 1.0, 1.0, 1.0, "LM", 0, 0, false, false, 1.0, 1.0, 1.0, 1.0 ); hsAddGUIText( LayerName, IsPortrait, chat_message_text, true, 2, 55, 300 + Order * YOffset, 975, 85, 0.5, 0.5, "CM", true, 0.0, Data.MessageData.Message, "", 30, 0.0, 0.0, 0.0, 1.0, "LT", 0, 0, true, true, 0.14, 0.38, 0.82, 1.0 ); } else { hsAddGUIButton( LayerName, IsPortrait, chat_balloon, "", "", "", true, 1, -20, 400 + Order * YOffset, 2200, 275, 0.5, 0.5, "CM", true, 0.0, "gui2024/chat/chat_system_base.png", "", "", "", 0, 0, 300, 32, 0, 0, 0, 0, 0, 0, 0, 0 ); hsAddGUIText( LayerName, IsPortrait, chat_time_text, true, 1, -540, 300 + Order * YOffset, 150, 72, 0.5, 0.5, "CM", true, 0.0, _ClampTimestamp(Data.MessageData.Timestamp), "", 40, 1.0, 1.0, 1.0, 1.0, "LM", 0, 0, false, false, 1.0, 1.0, 1.0, 1.0 ); hsAddGUIText( LayerName, IsPortrait, chat_message_text, true, 2, -20, 410 + Order * YOffset, 1100, 120, 0.5, 0.5, "CM", true, 0.0, Data.MessageData.Message, "", 30, 0.0, 0.0, 0.0, 1.0, "LT", 0, 0, true, true, 0.14, 0.38, 0.82, 1.0 ); } } } else { // if(Data.MessageData.IsMine) // { // } // else { string Ancor = "RM"; if(hsSystemIsVRMode()) Ancor = "CM"; if(IsTextChatTab) { hsAddGUIButton( LayerName, IsPortrait, chat_avatar_icon, "", "", "", true, 2, -400 * g_TextChatMessageExpandRate + g_TextChatMessageOffsetX, ((StartHeight - 30) + Order * YOffset) * g_TextChatMessageExpandRate, 50, 50, 0.5, 0.5, Ancor, true, 0.0, Data.MessageData.IconURL, "", "", "", 0, 0, 300, 32, 0, 0, 0, 0, 0, 0, 0, 0 ); hsAddGUIButton( LayerName, IsPortrait, chat_balloon, "", "", "", true, 2, -240 * g_TextChatMessageExpandRate + g_TextChatMessageOffsetX, ((StartHeight) + Order * YOffset) * g_TextChatMessageExpandRate, 305, 110, 0.5, 0.5, Ancor, true, 0.0, "gui2024/chat/chat_balloon.png", "", "", "", 0, 0, 300, 32, 0, 0, 0, 0, 0, 0, 0, 0 ); hsAddGUIText( LayerName, IsPortrait, chat_name_text, true, 2, -290 * g_TextChatMessageExpandRate + g_TextChatMessageOffsetX, ((StartHeight - 38) + Order * YOffset) * g_TextChatMessageExpandRate, 140 * g_TextChatMessageExpandRate, 16 * g_TextChatMessageExpandRate, 0.5, 0.5, Ancor, true, 0.0, Data.MessageData.Name, "BIZUDPGothic", 15 * g_TextChatMessageExpandRate, 1.0, 1.0, 1.0, 1.0, "LM", 0, 0, false, false, 1.0, 1.0, 1.0, 1.0 ); hsAddGUIText( LayerName, IsPortrait, chat_time_text, true, 2, -125 * g_TextChatMessageExpandRate + g_TextChatMessageOffsetX, ((StartHeight - 38) + Order * YOffset) * g_TextChatMessageExpandRate, 75 * g_TextChatMessageExpandRate, 18 * g_TextChatMessageExpandRate, 0.5, 0.5, Ancor, true, 0.0, _ClampTimestamp(Data.MessageData.Timestamp), "BIZUDPGothic", 15 * g_TextChatMessageExpandRate, 1.0, 1.0, 1.0, 1.0, "LM", 0, 0, false, false, 1.0, 1.0, 1.0, 1.0 ); hsAddGUIText( LayerName, IsPortrait, chat_message_text, true, 5, -235 * g_TextChatMessageExpandRate + g_TextChatMessageOffsetX, ((StartHeight) + Order * YOffset) * g_TextChatMessageExpandRate, 235 * g_TextChatMessageExpandRate, 50 * g_TextChatMessageExpandRate, 0.5, 0.5, Ancor, true, 0.0, Data.MessageData.Message, "BIZUDPGothic", 15 * g_TextChatMessageExpandRate, 0.0, 0.0, 0.0, 1.0, "LT", 0, 0, true, true, 0.14, 0.38, 0.82, 1.0 ); } else { hsAddGUIButton( LayerName, IsPortrait, chat_balloon, "", "", "", true, 2, -275 * g_TextChatMessageExpandRate + g_TextChatMessageOffsetX, (StartHeight + Order * YOffset) * g_TextChatMessageExpandRate, 480, 100, 0.5, 0.5, Ancor, true, 0.0, "gui2024/chat/chat_system_base.png", "", "", "", 0, 0, 300, 32, 0, 0, 0, 0, 0, 0, 0, 0 ); hsAddGUIText( LayerName, IsPortrait, chat_time_text, true, 2, -380 * g_TextChatMessageExpandRate + g_TextChatMessageOffsetX, ((StartHeight - 35) + Order * YOffset) * g_TextChatMessageExpandRate, 38 * g_TextChatMessageExpandRate, 18 * g_TextChatMessageExpandRate, 0.5, 0.5, Ancor, true, 0.0, _ClampTimestamp(Data.MessageData.Timestamp), "", 10 * g_TextChatMessageExpandRate, 1.0, 1.0, 1.0, 1.0, "LM", 0, 0, false, false, 1.0, 1.0, 1.0, 1.0 ); hsAddGUIText( LayerName, IsPortrait, chat_message_text, true, 5, -275 * g_TextChatMessageExpandRate + g_TextChatMessageOffsetX, ((StartHeight + 5) + Order * YOffset) * g_TextChatMessageExpandRate, 240 * g_TextChatMessageExpandRate, 50 * g_TextChatMessageExpandRate, 0.5, 0.5, Ancor, true, 0.0, Data.MessageData.Message, "", 10 * g_TextChatMessageExpandRate, 0.0, 0.0, 0.0, 1.0, "LT", 0, 0, true, true, 0.14, 0.38, 0.82, 1.0 ); } } } return true; } void _Resize(string LayerName, bool IsPortrait, bool IsTextChatTab) { hsCommonResizeGUI(LayerName, IsPortrait, chat_avatar_icon, g_TextChatMessageExpandRate); hsCommonResizeGUI(LayerName, IsPortrait, chat_balloon, g_TextChatMessageExpandRate); // TextTextureは生成時しかサイズ指定ができない? // hsCommonResizeGUI(LayerName, IsPortrait, chat_name_text, g_TextChatMessageExpandRate); // hsCommonResizeGUI(LayerName, IsPortrait, chat_time_text, g_TextChatMessageExpandRate); // hsCommonResizeGUI(LayerName, IsPortrait, chat_message_text, g_TextChatMessageExpandRate); hsCommonSetGUIOffset(LayerName, IsPortrait, chat_avatar_icon, g_TextChatMessageOffsetX, 0.0); hsCommonSetGUIOffset(LayerName, IsPortrait, chat_balloon, g_TextChatMessageOffsetX, 0.0); hsCommonSetGUIOffset(LayerName, IsPortrait, chat_name_text, g_TextChatMessageOffsetX, 0.0); hsCommonSetGUIOffset(LayerName, IsPortrait, chat_time_text, g_TextChatMessageOffsetX, 0.0); hsCommonSetGUIOffset(LayerName, IsPortrait, chat_message_text, g_TextChatMessageOffsetX, 0.0); } void _UpdateGUIPos(string LayerName, int Order, list DataList, bool IsPortrait, int YOffset, bool IsTextChatTab) { int StartHeight = (IsPortrait)? StartHeight_Po : StartHeight_La; if(IsPortrait) { // if(Data.MessageData.IsMine) // { // } // else { // 後ほど位置をChatBalloからの相対座標で書き換える if(IsTextChatTab) { hsCanvasSetGUIPos(LayerName, IsPortrait, chat_avatar_icon, -555, 250 + Order * YOffset); hsCanvasSetGUIPos(LayerName, IsPortrait, chat_balloon, 30, 300 + Order * YOffset); hsCanvasSetGUIPos(LayerName, IsPortrait, chat_name_text, -160, 200 + Order * YOffset); hsCanvasSetGUIPos(LayerName, IsPortrait, chat_time_text, 480, 200 + Order * YOffset); hsCanvasSetGUIPos(LayerName, IsPortrait, chat_message_text, 55, 300 + Order * YOffset); } else { hsCanvasSetGUIPos(LayerName, IsPortrait, chat_balloon, -20, 400 + Order * YOffset); hsCanvasSetGUIPos(LayerName, IsPortrait, chat_time_text, -540, 300 + Order * YOffset); hsCanvasSetGUIPos(LayerName, IsPortrait, chat_message_text, -20, 410 + Order * YOffset); } } } else { // if(Data.MessageData.IsMine) // { // } // else { if(IsTextChatTab) { hsCanvasSetGUIPos(LayerName, IsPortrait, chat_avatar_icon, -400 * g_TextChatMessageExpandRate + g_TextChatMessageOffsetX, ((StartHeight - 30) + Order * YOffset) * g_TextChatMessageExpandRate); hsCanvasSetGUIPos(LayerName, IsPortrait, chat_balloon, -240 * g_TextChatMessageExpandRate + g_TextChatMessageOffsetX, ((StartHeight) + Order * YOffset) * g_TextChatMessageExpandRate); hsCanvasSetGUIPos(LayerName, IsPortrait, chat_name_text, -290 * g_TextChatMessageExpandRate + g_TextChatMessageOffsetX, ((StartHeight - 38) + Order * YOffset) * g_TextChatMessageExpandRate); hsCanvasSetGUIPos(LayerName, IsPortrait, chat_time_text, -125 * g_TextChatMessageExpandRate + g_TextChatMessageOffsetX, ((StartHeight - 38) + Order * YOffset) * g_TextChatMessageExpandRate); hsCanvasSetGUIPos(LayerName, IsPortrait, chat_message_text, -235 * g_TextChatMessageExpandRate + g_TextChatMessageOffsetX, ((StartHeight) + Order * YOffset) * g_TextChatMessageExpandRate); } else { hsCanvasSetGUIPos(LayerName, IsPortrait, chat_balloon, -275 * g_TextChatMessageExpandRate + g_TextChatMessageOffsetX, (StartHeight + Order * YOffset) * g_TextChatMessageExpandRate); hsCanvasSetGUIPos(LayerName, IsPortrait, chat_time_text, -380 * g_TextChatMessageExpandRate + g_TextChatMessageOffsetX, ((StartHeight - 35) + Order * YOffset) * g_TextChatMessageExpandRate); hsCanvasSetGUIPos(LayerName, IsPortrait, chat_message_text, -275 * g_TextChatMessageExpandRate + g_TextChatMessageOffsetX, ((StartHeight + 5) + Order * YOffset) * g_TextChatMessageExpandRate); } } } } string _ClampTimestamp(string src) { if(src.IsEmpty()) return src; // 年 string year = src.SubString(0, 4); // 月 string month = src.SubString(5, 2); // 日 string day = src.SubString(8, 2); // 時 string hour = src.SubString(11, 2); // 取得データとの時差が9時間あるようなのでそちらを考慮する int hour_integer = hour.ToInt(); hour_integer += 9; hour = "%d" % hour_integer; // 分 string minutes = src.SubString(14, 2); // 日時テキストを作成 // string dst = year + "/" + month + "/" + day + " " + hour + ":" + minutes; // レイアウトやデザインが変わるのでひとまず時間だけ表示しておく string dst = hour + ":" + minutes; return dst; } }