using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TcgEngine.Client;
using TcgEngine;
namespace TcgEngine.UI
{
///
/// Chat area in the UI,
/// its where you can write chat msg and will display chat message received from the server
///
public class ChatUI : MonoBehaviour
{
public bool is_opponent;
[Header("Display Box")]
public ChatBubble chat_bubble;
public AudioClip chat_audio;
[Header("Write Box")]
public UIPanel chat_field_area;
public InputField chat_field;
private string chat_msg;
private float chat_timer = 0f;
private static List ui_list = new List();
private void Awake()
{
ui_list.Add(this);
}
private void OnDestroy()
{
ui_list.Remove(this);
}
void Start()
{
GameClient.Get().onChatMsg += OnChat;
RefreshChat();
}
void Update()
{
if (!GameClient.Get().IsReady())
return;
int player_id = is_opponent ? GameClient.Get().GetOpponentPlayerID() : GameClient.Get().GetPlayerID();
Game data = GameClient.Get().GetGameData();
Player player = data.GetPlayer(player_id);
if (player != null)
{
//Chat
if (chat_field_area != null && !is_opponent && Input.GetKeyDown(KeyCode.Return))
{
if (chat_field_area.IsVisible())
{
if (!string.IsNullOrWhiteSpace(chat_field.text))
SendChat(chat_field.text);
chat_field.text = "";
chat_field_area.Hide();
GUI.FocusControl(null);
}
else
{
chat_field_area.Show();
}
chat_field.ActivateInputField();
chat_field.Select();
}
//Chat remove
chat_timer += Time.deltaTime;
if (chat_timer > 5f)
chat_msg = null;
}
}
private void SendChat(string msg)
{
GameClient.Get().SendChatMsg(msg);
}
private void RefreshChat()
{
chat_bubble.Hide();
if(!string.IsNullOrWhiteSpace(chat_msg))
chat_bubble.SetLine(chat_msg, 5f);
}
private void OnChat(int chat_player_id, string msg)
{
int player_id = is_opponent ? GameClient.Get().GetOpponentPlayerID() : GameClient.Get().GetPlayerID();
if (player_id == chat_player_id)
{
chat_msg = msg;
chat_timer = 0f;
AudioTool.Get().PlaySFX("chat", chat_audio);
RefreshChat();
}
}
public void OnClickSend()
{
if (chat_field_area != null && !string.IsNullOrWhiteSpace(chat_field.text))
{
SendChat(chat_field.text);
chat_field.text = "";
chat_field_area.Hide();
GUI.FocusControl(null);
}
}
public static ChatUI Get(bool opponent)
{
foreach (ChatUI ui in ui_list)
{
if (ui.is_opponent == opponent)
return ui;
}
return null;
}
}
}