private void Update()
    {
        FPS.FPSUpdate();
        if (IN_GAME_MAIN_CAMERA.GameType != GameType.Single)
        {
            Labels.NetworkStatus = PhotonNetwork.connectionStateDetailed +
                                   (PhotonNetwork.connected ? " ping: " + PhotonNetwork.GetPing() : "");
        }

        if (!gameStart)
        {
            return;
        }

        bool cameraUpdate = false;
        int  i;

        for (i = 0; i < hooks.Count; i++)
        {
            hooks[i].update();
        }
        for (i = 0; i < heroes.Count; i++)
        {
            HERO hero = heroes[i];
            hero.update();
            if (hero.IsLocal)
            {
                mainCamera?.update();
                cameraUpdate = true;
            }
        }
        if (IN_GAME_MAIN_CAMERA.GameType == GameType.Single || PhotonNetwork.IsMasterClient)
        {
            for (i = 0; i < titans.Count; i++)
            {
                titans[i].update();
            }
        }
        else if (IN_GAME_MAIN_CAMERA.GameType == GameType.MultiPlayer && PhotonNetwork.player.IsTitan)
        {
            for (i = 0; i < titans.Count; i++)
            {
                if (titans[i].IsLocal)
                {
                    titans[i].update();
                    mainCamera?.update();
                    cameraUpdate = true;
                }
            }
        }
        if (mainCamera != null)
        {
            if (!cameraUpdate)
            {
                mainCamera.update();
            }
            mainCamera.snapShotUpdate();
        }

        logic.OnUpdate();
    }