Пример #1
0
 //-------------------------------------------------------------------
 void ReadyCountChanged(VirtualNetworkController ctrl)
 {
     if (null != ConnectionReadyText)
     {
         ConnectionReadyText.text = "Ready: " + HopperNetwork.GetReadyCount();
     }
 }
Пример #2
0
    //---------------------------------------------------------------------
    void UpdateKnib(Vector2 pos)
    {
        Vector2 localPos;

        if (!RectTransformUtility.ScreenPointToLocalPointInRectangle((RectTransform)transform, pos, Camera.main, out localPos))
        {
            return;
        }

        Vector2 offset = localPos - new Vector2(Origin.transform.localPosition.x, Origin.transform.localPosition.y);
        float   length = offset.magnitude;
        Vector2 dir    = Vector2.zero;

        if (length > .1f)
        {
            dir    = offset / length;
            length = Mathf.Clamp(length, 0.0f, MaxRadius);
            offset = dir * length;
        }

        Knib.transform.localPosition = Origin.localPosition + new Vector3(offset.x, offset.y, 0.0f);

        VirtualNetworkController controller = HopperNetwork.GetMyController();

        if (controller != null)
        {
            Vector2 movement = dir * (length / MaxRadius);
            UpdateMovementKnib(movement);
            controller.SetMovement(movement);
        }
    }
Пример #3
0
    //---------------------------------------------------------------------
    void ProcessTouch(Touch touch)
    {
        if (ActiveFingerID == touch.fingerId)
        {
            if ((touch.phase == TouchPhase.Ended) || (touch.phase == TouchPhase.Canceled))
            {
                ActiveFingerID = -1;
                VirtualNetworkController controller = HopperNetwork.GetMyController();
                if (controller != null)
                {
                    controller.SetMovement(Vector2.zero);
                }
                Knib.transform.localPosition = Origin.transform.localPosition;
            }
            else if (touch.phase == TouchPhase.Moved)
            {
                UpdateKnib(touch.position);
            }
            return;
        }

        if (touch.phase == TouchPhase.Began)
        {
            if ((ActiveFingerID == -1) && InMoveArea(touch.position))
            {
                // Okay, starting a touch;
                ActiveFingerID = touch.fingerId;
                UpdateKnib(touch.position);
            }
            else if (InActionArea(touch.position))
            {
                UpdateAction(touch);
            }
        }
    }
 //----------------------------------------------------------------------
 public void SetMovement(Vector2 v)
 {
     Movement = v;
     if (HopperNetwork.IsClient())
     {
         CmdMovement(v);
     }
 }
 //----------------------------------------------------------------------
 public void DoAction()
 {
     ++ActionCount;
     if (HopperNetwork.IsClient())
     {
         CmdAction();
     }
 }
 //----------------------------------------------------------------------
 public void SetReady(bool ready)
 {
     SetReadyInternal(ready);
     if (HopperNetwork.IsClient())
     {
         CmdSetReady(ready);
     }
 }
Пример #7
0
    //---------------------------------------------------------------------
    void UpdateAction(Touch touch)
    {
        VirtualNetworkController controller = HopperNetwork.GetMyController();

        if (controller != null)
        {
            DoAction();
        }
    }
Пример #8
0
    //-------------------------------------------------------------------------------------------------
    // Unity
    //-------------------------------------------------------------------------------------------------
    private void Start()
    {
        m_rigidbody          = GetComponent <Rigidbody2D>();
        m_animator           = m_visualReference.GetComponent <Animator>();
        m_attackAreaCollider = m_attackAreaReference.GetComponent <CircleCollider2D>();
        m_attackAreaFilter   = new ContactFilter2D();
        m_attackAreaFilter.NoFilter();

        int count = HopperNetwork.GetPlayerCount();

        m_gameDigestSpeed = m_foodDigestSpeed + (float)count * m_foodDigestSpeedPerBunny;
    }
Пример #9
0
    //-------------------------------------------------------------------
    public void UpdateDiscovery()
    {
        var state = HopperNetwork.GetState();

        if (state == HopperNetwork.eState.CLIENT_READY)
        {
            Controller = HopperNetwork.GetMyController();
            SetState(eClientState.LOBBY);
        }
        else if (!HopperNetwork.Instance.isNetworkActive)
        {
            JoinUI.SetActive(true);
        }
    }
Пример #10
0
 //------------------------------------------------------
 public void Discover()
 {
     Initialize();
     FoundAddress = false;
     if (HopperNetwork.IsHost())
     {
         Debug.Log("Broadcast as Server");
         StartAsServer();
     }
     else
     {
         StartAsClient();
     }
 }
Пример #11
0
    // Update is called once per frame
    void Update()
    {
        if (NetworkManager.singleton.isNetworkActive)
        {
            AddressText.gameObject.SetActive(true);
            AddressText.text = HopperNetwork.Instance.networkAddress + ":" + HopperNetwork.Instance.networkPort;
        }
        else
        {
            AddressText.gameObject.SetActive(false);
        }

        HopperNetwork.eState state = HopperNetwork.GetState();
        switch (state)
        {
        case HopperNetwork.eState.DISCONNECTED:
            StatusText.text = "DISCONNECTED";
            break;

        case HopperNetwork.eState.CLIENT_JOINED:
            StatusText.text = "JOINING: " + HopperNetwork.Instance.networkAddress;
            break;

        case HopperNetwork.eState.CLIENT_LOOKING:
            StatusText.text = "SEARCHING...";
            break;

        case HopperNetwork.eState.CLIENT_READY:
            VirtualNetworkController me = HopperNetwork.GetMyController();
            if (me.ClientIsReady)
            {
                StatusText.text = "READY";
            }
            else
            {
                StatusText.text = "NOT READY";
            }
            break;

        default:
            StatusText.text = "UNKNOWN: " + state;
            break;
        }
    }
Пример #12
0
    //-------------------------------------------------------------------
    public void UpdateInGame()
    {
        VirtualNetworkController controller = HopperNetwork.GetMyController();

        if (!controller.IsInGame())
        {
            SetState(eClientState.LOBBY);
            return;
        }

        if (controller.IsWolf)
        {
            ActionImage.sprite = WolfAction;
        }
        else
        {
            ActionImage.sprite = BunnyAction;
        }
    }
Пример #13
0
    //-------------------------------------------------------------------
    public static eState GetState()
    {
        HopperNetwork net = (HopperNetwork)NetworkManager.singleton;

        if (!net.isNetworkActive)
        {
            if (net.Discovery.IsRunning())
            {
                return(eState.CLIENT_LOOKING);
            }
            else
            {
                return(eState.DISCONNECTED);
            }
        }

        if (IsHost())
        {
            return(eState.HOSTING);
        }

        NetworkConnection conn = GetMyConnection();

        if (conn == null)
        {
            return(eState.CLIENT_LOOKING);
        }
        else
        {
            if (conn.playerControllers.Count > 0)
            {
                return(eState.CLIENT_READY);
            }
            else
            {
                return(eState.CLIENT_JOINED);
            }
        }
    }
Пример #14
0
    //---------------------------------------------------------------------
    void DoAction()
    {
        ActionAnimator.SetTrigger("DoAction");

        VirtualNetworkController controller = HopperNetwork.GetMyController();

        if (controller != null)
        {
            controller.DoAction();
            if (controller.IsInGame())
            {
                if (controller.IsWolf)
                {
                    AudioManager.Play(eSoundType.FOX_BITE);
                }
                else
                {
                    AudioManager.Play(eSoundType.BUNNY_LAUGH);
                }
            }
        }
    }
Пример #15
0
    //-------------------------------------------------------------------------------------------------
    private void RemovePlayer(VirtualNetworkController controller)
    {
        //Find controller if it was a prey
        GameObject[] preys = GameObject.FindGameObjectsWithTag(TAG_PREY);
        for (int preyIndex = 0; preyIndex < preys.Length; ++preyIndex)
        {
            PreyController prey = preys[preyIndex].GetComponent <PreyController>();
            if (prey != null)
            {
                if (prey.m_netController == controller)
                {
                    // C4 - ghosts were multiplying really fast
                    GameObject.Destroy(prey.gameObject);
                }
            }

            if (m_firstGame && (HopperNetwork.GetPlayerCount() == 0))
            {
                m_UIJoin.SetActive(true);
                m_UIInstructions.SetActive(false);
            }
        }

        //Find controller if it was a predator
        GameObject[] predators = GameObject.FindGameObjectsWithTag(TAG_PREDATOR);
        for (int predatorIndex = 0; predatorIndex < predators.Length; ++predatorIndex)
        {
            PredatorController predator = predators[predatorIndex].GetComponent <PredatorController>();
            if (predator != null)
            {
                if (predator.m_netController == controller)
                {
                    Destroy(predator);
                    return;
                }
            }
        }
    }
Пример #16
0
    // Update is called once per frame
    void Update()
    {
        if (NetworkManager.singleton == null)
        {
            SetStateText(false, false);
        }
        else
        {
            NetworkManager mgr      = NetworkManager.singleton;
            bool           isActive = mgr.isNetworkActive;
            bool           isServer = HopperNetwork.IsHost();
            SetStateText(isActive, isServer);

            SetHostText(mgr.networkAddress.ToString(), mgr.networkPort);
            SetBroadcasting(Discoverer.isServer || Discoverer.isClient);
        }

        if (Discoverer.FoundAddress)
        {
            Discoverer.Stop();
            NetworkManager.singleton.StartClient();
        }
    }
Пример #17
0
    //-------------------------------------------------------------------
    public void UpdateDebugText()
    {
        if (DebugText == null)
        {
            return;
        }

        DebugText.gameObject.SetActive(true);
        VirtualNetworkController controller = HopperNetwork.GetMyController();

        if (controller == null)
        {
            DebugText.text = "No Controller";
            return;
        }

        string str = "";

        str           += "Ready: " + (controller.ClientIsReady ? "Y" : "N") + "\n";
        str           += "Game: " + (controller.IsInGame() ? "Y" : "N") + "\n";
        str           += "Wolf: " + (controller.IsWolf ? "Y" : "N") + "\n";
        DebugText.text = str;
    }
Пример #18
0
    //-------------------------------------------------------------------
    public void UpdateLobby()
    {
        // this state, just wait around until server tells us to move on
        VirtualNetworkController control = HopperNetwork.GetMyController();

        if (control.ConsumeAllActions())
        {
            ToggleReady();
        }

        if (Controller.IsInGame())
        {
            SetState(eClientState.IN_GAME);
        }

        if (Controller.ClientIsReady)
        {
            ActionImage.sprite = ReadyBunny;
        }
        else
        {
            ActionImage.sprite = SleepyBunny;
        }
    }
Пример #19
0
    //---------------------------------------------------------------------
    // Update is called once per frame
    void Update()
    {
        if ((Application.platform == RuntimePlatform.WindowsEditor) || (Application.platform == RuntimePlatform.WindowsEditor))
        {
            VirtualNetworkController controller = HopperNetwork.GetMyController();

            if (controller != null)
            {
                float x      = Input.GetAxis("Horizontal");
                float y      = Input.GetAxis("Vertical");
                bool  action = Input.GetButtonDown("Fire1");

                Vector2 move = new Vector2(x, y);
                if (move.sqrMagnitude > 1.0f)
                {
                    move.Normalize();
                }


                UpdateMovementKnib(move);
                controller.SetMovement(move);

                if (action)
                {
                    DoAction();
                }
            }
        }

        if (!Input.touchSupported)
        {
            // fake touch
            if (Input.GetMouseButton(0) && (!HackActionDown || (ActiveFingerID >= 0)))
            {
                HackActionDown = true;
                Touch touch = new Touch();
                touch.fingerId = 1;
                if (ActiveFingerID == -1)
                {
                    touch.phase = TouchPhase.Began;
                }
                else
                {
                    touch.phase = TouchPhase.Moved;
                }

                touch.position = Input.mousePosition;
                ProcessTouch(touch);
            }
            else if (HackActionDown && !Input.GetMouseButton(0))
            {
                Touch touch = new Touch();
                touch.phase    = TouchPhase.Ended;
                touch.fingerId = ActiveFingerID;
                touch.position = Input.mousePosition;
                ProcessTouch(touch);
                HackActionDown = false;
            }
        }

        if (Input.touches.Length > 0)
        {
            for (int i = 0; i < Input.touches.Length; ++i)
            {
                ProcessTouch(Input.touches[i]);
            }
        }
    }
Пример #20
0
    //-------------------------------------------------------------------------------------------------
    private void UpdateState(eGameState state)
    {
        if (state == eGameState.WAIT_FOR_READY)
        {
            bool isReady         = HopperNetwork.IsEveryoneReady();
            bool isEnoughPlayers = HopperNetwork.GetPlayerCount() >= 3;

            m_UIReadyUp.SetActive(false);
            m_UIPlayersRequired.SetActive(false);


            if (isReady && isEnoughPlayers)
            {
                HopperNetwork.StartGame();
                TransformRandomPrey();
                ChangeState(eGameState.IN_GAME);

                int count = HopperNetwork.GetPlayerCount();
                m_gameDuration = m_gameDurationBase + m_gameDurationAdditionalPerRabbit * (count - 1);
                m_UIInstructions.SetActive(false);
                m_firstGame = false;
            }
            else
            {
                if (m_currentState == eGameState.WAIT_FOR_READY)
                {
                    if (HopperNetwork.GetPlayerCount() < 3)
                    {
                        m_UIPlayersRequired.SetActive(true);
                    }
                    else
                    {
                        m_UIReadyUp.SetActive(true);
                    }
                }
            }
        }

        else if (state == eGameState.IN_GAME)
        {
            m_gameTimer += Time.deltaTime;
            int preyCount = GetHumanPreyAliveCount();

            //No players left wolf wins
            if (preyCount == 0)
            {
                m_preyWins = false;
                ChangeState(eGameState.GAME_OVER);
            }

            //Times up, bunnies win
            if (m_gameTimer >= m_gameDuration)
            {
                m_preyWins = true;
                ChangeState(eGameState.GAME_OVER);
            }
        }

        else if (state == eGameState.GAME_OVER)
        {
            m_gameOverTimer += Time.deltaTime;

            //Game over time expires
            if (m_gameOverTimer >= m_gameOverDuration)
            {
                HopperNetwork.EndGame();
                ReviveAndTransformBack();
                ChangeState(eGameState.WAIT_FOR_READY);
            }
        }
    }