AppSettings.cs 3.09 KB
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.Networking;

public class AppSettings : Singleton<AppSettings>
{
    public CanvasGroup splash;
    [Header("Settings")]
    public CanvasGroup settings;
    public InputField serverIp;
    public Toggle isServer;

    void Awake ()
    {
        splash.alpha = 1;
	}

    void Start()
    {
        settings.blocksRaycasts = false;

        if (!PlayerPrefs.HasKey("isServer"))
        {
            ShowSettings();
        }
        else
        {
            bool server = PlayerPrefs.GetString("isServer").ToLower() == "true" ? true : false;
            string ip = string.Empty;

            if (!server && !PlayerPrefs.HasKey("serverIp"))
            {
                ShowSettings();
            }
            else if (!server)
            {
                ip = PlayerPrefs.GetString("serverIp");
                Finalize(server, ip);
            }
            else
                Finalize(server, ip);
        }

        Invoke("HideSplash", 3);
    }

    private void HideSplash()
    {
        AppManager.Instance.TweenCanvasGroup(splash, 0, 1);
        splash.blocksRaycasts = false;
    }

    public void SaveSettings()
    {
        bool server = isServer.isOn;
        string ip = serverIp.text;

        PlayerPrefs.SetString("serverIp", ip);
        PlayerPrefs.SetString("isServer", server.ToString());

        Finalize(server, ip);
    }

    private void Finalize(bool server, string ip)
    {
        if (server)
        {
            NetworkManager.singleton.StartServer();
            AppManager.Instance.SpawnServerCanvas();
        }
        else
        {
            NetworkManager.singleton.networkAddress = ip;
            NetworkManager.singleton.StartClient();
        }

        settings.blocksRaycasts = false;
        AppManager.Instance.TweenCanvasGroup(settings, 0, 1);

        _inSettings = false;
    }

    private bool _inSettings = false;

    public void ShowSettings()
    {
        if (_inSettings) return;

        bool server = false;
        string ip = string.Empty;

        if (PlayerPrefs.HasKey("isServer"))
            server = PlayerPrefs.GetString("isServer").ToLower() == "true" ? true : false;
        if (PlayerPrefs.HasKey("serverIp"))
            ip = PlayerPrefs.GetString("serverIp");

        serverIp.text = ip;
        isServer.isOn = server;

        _inSettings = true;
        settings.blocksRaycasts = true;
        settings.alpha = 1;
    }

    public void SettingsTap()
    {
        if (_inSettings) return;

        _didTap = true;
        _tapCount++;
    }

    private bool _didTap;
    private int _tapCount;
    private float _tapTimer;

    void Update()
    {
        if (_didTap)
        {
            _tapTimer += Time.deltaTime;

            if (_tapCount > 5)
            {
                ShowSettings();
                _tapCount = 0;
                _didTap = false;
                _tapTimer = 0;
            }

            if (_tapTimer > 1)
            {
                _tapCount = 0;
                _didTap = false;
                _tapTimer = 0;
            }
        }
    }
}