224 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			224 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Collections;
 | 
						|
using UnityEngine;
 | 
						|
 | 
						|
[Serializable]
 | 
						|
public enum chatOrigins
 | 
						|
{
 | 
						|
    Local,
 | 
						|
    Remote,
 | 
						|
    Server
 | 
						|
}
 | 
						|
 | 
						|
[Serializable]
 | 
						|
public class ChatEntry
 | 
						|
{
 | 
						|
	public string text = "";
 | 
						|
	public chatOrigins origin;
 | 
						|
}
 | 
						|
 | 
						|
[Serializable]
 | 
						|
public class Messaging : MonoBehaviour
 | 
						|
{
 | 
						|
	public bool chatting;
 | 
						|
	public int showChat = -1;
 | 
						|
	[HideInInspector]
 | 
						|
	public Vector2 scrollPosition;
 | 
						|
	[HideInInspector]
 | 
						|
	public ArrayList entries;
 | 
						|
	private string inputField = "";
 | 
						|
	// /*UNUSED*/ private bool display = true;
 | 
						|
	private Rect windowRect;
 | 
						|
 | 
						|
	public Messaging()
 | 
						|
	{
 | 
						|
		entries = new ArrayList();
 | 
						|
	}
 | 
						|
 | 
						|
	public void OnGUI()
 | 
						|
	{
 | 
						|
		if (Game.Settings.simplified)
 | 
						|
		{
 | 
						|
			return;
 | 
						|
		}
 | 
						|
		GUI.skin = Game.Skin;
 | 
						|
 | 
						|
		Color guicol = GUI.color;
 | 
						|
		guicol.a = Game.GUIAlpha;
 | 
						|
		GUI.color = guicol;
 | 
						|
 | 
						|
        if (Game.Controller.loadingWorld) return;
 | 
						|
 | 
						|
		if (showChat == 1 || showChat < 0)
 | 
						|
		{
 | 
						|
			windowRect = new Rect(
 | 
						|
                10f,
 | 
						|
                40f,
 | 
						|
                Mathf.Min(Mathf.Max(170, Screen.width / 4), 250),
 | 
						|
                (!Game.Settings.minimapAllowed || !Game.Settings.useMinimap) ?
 | 
						|
                    ((float)(Screen.height - 55)) :
 | 
						|
                    ((float)Screen.height * 0.75f - 60f));
 | 
						|
			GUI.Window(11, windowRect, ChatWindow, "Messaging Console");
 | 
						|
		}
 | 
						|
		else if (GUI.Button(new Rect(
 | 
						|
            10f,
 | 
						|
            40f,
 | 
						|
            Mathf.Min(Mathf.Max(170, Screen.width / 4), 250),
 | 
						|
            25f), "Messaging Console"))
 | 
						|
		{
 | 
						|
			showChat = 1;
 | 
						|
			GUI.FocusControl("Chat input field");
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	public void ChatWindow(int id)
 | 
						|
	{
 | 
						|
		GUIStyle closeButtonStyle = GUI.skin.GetStyle("close_button");
 | 
						|
		if (GUI.Button(
 | 
						|
            new Rect(
 | 
						|
                closeButtonStyle.padding.left,
 | 
						|
                closeButtonStyle.padding.top,
 | 
						|
                closeButtonStyle.normal.background.width,
 | 
						|
                closeButtonStyle.normal.background.height),
 | 
						|
            string.Empty,
 | 
						|
            "close_button"))
 | 
						|
		{
 | 
						|
			showChat = 0;
 | 
						|
		}
 | 
						|
 | 
						|
		scrollPosition = GUILayout.BeginScrollView(scrollPosition);
 | 
						|
 | 
						|
        foreach (ChatEntry entry in entries)
 | 
						|
        {
 | 
						|
            GUILayout.BeginHorizontal();
 | 
						|
            switch (entry.origin)
 | 
						|
            { 
 | 
						|
                case chatOrigins.Remote:
 | 
						|
                    GUILayout.FlexibleSpace();
 | 
						|
                    GUILayout.Label(entry.text, "chatRemote");
 | 
						|
                    break;
 | 
						|
                case chatOrigins.Local:
 | 
						|
                    GUILayout.Label(entry.text, "chatLocal");
 | 
						|
                    GUILayout.FlexibleSpace();
 | 
						|
                    break;
 | 
						|
                default:
 | 
						|
                    GUILayout.FlexibleSpace();
 | 
						|
                    GUILayout.Label(entry.text, "chatServer");
 | 
						|
                    GUILayout.FlexibleSpace();
 | 
						|
                    break;
 | 
						|
            }
 | 
						|
 | 
						|
            GUILayout.EndHorizontal();
 | 
						|
            GUILayout.Space(3f);
 | 
						|
        }
 | 
						|
		GUILayout.EndScrollView();
 | 
						|
 | 
						|
		GUILayout.FlexibleSpace();
 | 
						|
 | 
						|
		if (Event.current.type == EventType.keyDown &&
 | 
						|
            Event.current.character == '\n' &&
 | 
						|
            inputField.Length > 0)
 | 
						|
		{
 | 
						|
			if (inputField == "x" ||
 | 
						|
                inputField == "/x" ||
 | 
						|
                inputField == "/X")
 | 
						|
			{
 | 
						|
				if (Game.Settings.zorbSpeed != 0f)
 | 
						|
				{
 | 
						|
					Game.Player.networkView.RPC(
 | 
						|
                        "sZ",
 | 
						|
                        RPCMode.All,
 | 
						|
                        !Game.PlayerVeh.zorbBall);
 | 
						|
					Game.Controller.msg(
 | 
						|
                        "XORB " + ((!Game.PlayerVeh.zorbBall) ?
 | 
						|
                            "Deactivated" :
 | 
						|
                            "Activated"),
 | 
						|
                        2);
 | 
						|
				}
 | 
						|
				else
 | 
						|
				{
 | 
						|
					Game.Controller.msg("XORBs Unavailable", (int)chatOrigins.Server);
 | 
						|
				}
 | 
						|
			}
 | 
						|
			else if (
 | 
						|
                inputField == "r" ||
 | 
						|
                inputField == "/r" ||
 | 
						|
                inputField == "/R")
 | 
						|
			{
 | 
						|
				Game.Settings.resetTime = Time.time;
 | 
						|
				Game.Player.rigidbody.isKinematic = true;
 | 
						|
				broadcast(Game.Player.name + " Resetting in 10 seconds...");
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				inputField = Game.LanguageFilter(inputField);
 | 
						|
				Game.Controller.msg(inputField, (int)chatOrigins.Local);
 | 
						|
				Game.Controller.networkView.RPC(
 | 
						|
                    "msg",
 | 
						|
                    RPCMode.Others, inputField + " - " + GameData.userName,
 | 
						|
                    (int)chatOrigins.Remote);
 | 
						|
 | 
						|
			}
 | 
						|
			inputField = "";
 | 
						|
			chatting = false;
 | 
						|
			GUI.UnfocusWindow();
 | 
						|
		}
 | 
						|
 | 
						|
		GUI.SetNextControlName("Chat input field");
 | 
						|
		inputField = GUILayout.TextField(inputField, 300);
 | 
						|
 | 
						|
		if (chatting && inputField == "")
 | 
						|
		{
 | 
						|
			GUILayout.Label("(Press \"Tab\" to Cancel)");
 | 
						|
		}
 | 
						|
		else if (chatting)
 | 
						|
		{
 | 
						|
			GUILayout.Label("(Press \"Enter\" to Send)");
 | 
						|
		}
 | 
						|
		else
 | 
						|
		{
 | 
						|
			GUILayout.Label("(Press \"Tab\" to Message)");
 | 
						|
		}
 | 
						|
 | 
						|
		if (chatting)
 | 
						|
		{
 | 
						|
			GUI.FocusControl("Chat input field");
 | 
						|
			GUI.FocusWindow(id);
 | 
						|
		}
 | 
						|
 | 
						|
		if (showChat < 0 && showChat > -5)
 | 
						|
		{
 | 
						|
			showChat--;
 | 
						|
		}
 | 
						|
        else if (showChat < 0 || (
 | 
						|
            (Input.GetKeyDown(KeyCode.Tab) ||
 | 
						|
                Input.GetKeyDown(KeyCode.Mouse0)) &&
 | 
						|
            Time.time > Game.Controller.kpTime))
 | 
						|
        {
 | 
						|
            Game.Controller.kpTime = Time.time + Game.Controller.kpDur;
 | 
						|
            if (
 | 
						|
                (chatting == false && !Input.GetKeyDown(KeyCode.Mouse0)) ||
 | 
						|
                (windowRect.Contains(Input.mousePosition) &&
 | 
						|
                    Input.GetKeyDown(KeyCode.Mouse0)))
 | 
						|
            {
 | 
						|
                if (showChat == 1) chatting = true;
 | 
						|
                showChat = 1;
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                chatting = false;
 | 
						|
                if (Input.GetKeyDown(KeyCode.Tab)) GUI.UnfocusWindow();
 | 
						|
            }
 | 
						|
        }
 | 
						|
	}
 | 
						|
 | 
						|
	public void broadcast(string str)
 | 
						|
	{
 | 
						|
		Game.Controller.networkView.RPC(
 | 
						|
            "msg",
 | 
						|
            RPCMode.All,
 | 
						|
            str,
 | 
						|
            (int)chatOrigins.Server);
 | 
						|
	}
 | 
						|
}
 |