Beispiel #1
0
    public static void UnserializeInbound(CNetworkPlayer _cNetworkPlayer, CNetworkStream _cStream)
    {
        GameObject cPlayerActor = CGamePlayers.GetPlayerActor(_cNetworkPlayer.PlayerId);

        if (cPlayerActor != null)
        {
            CPlayerAirMotor cAirMotor = cPlayerActor.GetComponent <CPlayerAirMotor>();

            while (_cStream.HasUnreadData)
            {
                ENetworkAction eNetworkAction = (ENetworkAction)_cStream.ReadByte();

                switch (eNetworkAction)
                {
                case ENetworkAction.UpdateStates:
                    cAirMotor.m_usMovementStates = _cStream.ReadUInt();
                    break;

                default:
                    Debug.LogError(string.Format("Unknown network action ({0})", (int)eNetworkAction));
                    break;
                }
            }
        }
    }
    void OnRecievedPlayerMicrophoneAudio(CNetworkPlayer _cPlayer, CNetworkStream _cAudioDataStream)
    {
        GameObject     playerActor  = CGamePlayers.GetPlayerActor(_cPlayer.PlayerId);
        CNetworkViewId playerViewID = playerActor.GetComponent <CNetworkView>().ViewId;

        _cAudioDataStream.SetReadOffset(0);
        byte[] streamData = _cAudioDataStream.ReadBytes(_cAudioDataStream.NumUnreadBytes);

        CNetworkStream dataStream = new CNetworkStream();

        dataStream.Write(streamData);
        dataStream.Write(playerViewID);

        Dictionary <ulong, CNetworkPlayer> players = CNetwork.Server.FindNetworkPlayers();

        foreach (ulong playerID in players.Keys)
        {
            if (m_bReturnToSender)
            {
                CNetwork.Server.TransmitMicrophoneAudio(playerID, dataStream);
            }
            else
            {
                if (_cPlayer.PlayerId != playerID)
                {
                    CNetwork.Server.TransmitMicrophoneAudio(playerID, dataStream);
                }
            }
        }
    }
    private void HandlePlayerOxygenRefill(ulong _ulPlayerId)
    {
        //being broken may be done here, seeing as it is the server.
        GameObject cPlayerActor = CGamePlayers.GetPlayerActor(_ulPlayerId);

        cPlayerActor.GetComponent <CPlayerSuit>().AddOxygen(20.0f);
    }
Beispiel #4
0
    public static void UnserializeInbound(CNetworkPlayer _cNetworkPlayer, CNetworkStream _cStream)
    {
        GameObject      cPlayerObject   = CGamePlayers.GetPlayerActor(_cNetworkPlayer.PlayerId);
        CPlayerBackPack cPlayerBackPack = cPlayerObject.GetComponent <CPlayerBackPack>();

        // Process stream data
        while (_cStream.HasUnreadData)
        {
            // Extract action
            ENetworkAction eAction = (ENetworkAction)_cStream.ReadByte();

            // Handle action
            switch (eAction)
            {
            case ENetworkAction.PickupModule:
                CNetworkViewId cModuleViewId = _cStream.ReadNetworkViewId();
                cPlayerBackPack.PickupModule(_cNetworkPlayer.PlayerId, cModuleViewId);

                break;

            case ENetworkAction.DropModule:
                cPlayerBackPack.DropModule();
                break;

            case ENetworkAction.InsertCell:
                CNetworkViewId cCellSlotViewId = _cStream.ReadNetworkViewId();
                cPlayerBackPack.InsertCell(_cNetworkPlayer.PlayerId, cCellSlotViewId);
                break;
            }
        }
    }
Beispiel #5
0
    void HandleLeaveCockpit(ulong _ulPlayerId)
    {
        // Allow player to leave cockpit
        if (MountedPlayerId == _ulPlayerId)
        {
            // Teleport player back to entered position
            GameObject cPlayerActor = CGamePlayers.GetPlayerActor(_ulPlayerId);

            if (cPlayerActor != null)
            {
                // UnParent the player to the cockpit seat
                cPlayerActor.GetComponent <CNetworkView>().SetParent(null);

                // Move player back to positions when entered
                cPlayerActor.GetComponent <CNetworkView>().SetPosition(m_vEnterPosition);
                cPlayerActor.GetComponent <CNetworkView>().SetRotation(m_EnterRotation);

                // Turn of kinematic
                cPlayerActor.rigidbody.isKinematic = false;
            }

            m_cMountedPlayerId.Set(0);

            // Notify observers
            if (EventPlayerLeave != null)
            {
                EventPlayerLeave(m_cMountedPlayerId.GetPrevious());
            }

            //Debug.Log(string.Format("Player ({0}) left cockpit", _ulPlayerId));
        }
    }
Beispiel #6
0
    private void AddPlayer(ulong _PlayerId)
    {
        // Add this player if they dont exist yet
        GameObject listItem = null;

        if (!m_PlayersList.ContainsKey(_PlayerId))
        {
            listItem = (GameObject)GameObject.Instantiate(m_ListItemTemplate);
            listItem.SetActive(true);
            listItem.name                      += m_PlayersList.Count;
            listItem.transform.parent           = m_PlayersGridList.transform;
            listItem.transform.localPosition    = Vector3.one;
            listItem.transform.localEulerAngles = Vector3.zero;
            listItem.transform.localScale       = Vector3.one;

            m_PlayersList.Add(_PlayerId, listItem);
        }
        else
        {
            listItem = m_PlayersList[_PlayerId];
        }

        // Update the player name
        string  playerName = CGamePlayers.GetPlayerName(_PlayerId);
        UILabel nameLabel  = listItem.GetComponentInChildren <UILabel>();

        nameLabel.text = playerName;

        // Reorganize the list
        m_PlayersGridList.Reposition();
    }
Beispiel #7
0
    void HandleEnterCockpit(ulong _ulPlayerId)
    {
        GameObject cPlayerActor = CGamePlayers.GetPlayerActor(_ulPlayerId);

        if (cPlayerActor != null && !IsMounted)
        {
            CNetworkViewId cPlayerActorViewId = cPlayerActor.GetComponent <CNetworkView>().ViewId;

            // Save position on player when entering
            m_vEnterPosition = cPlayerActor.transform.position;
            m_EnterRotation  = cPlayerActor.transform.rotation;

            // Parent the player to the cockpit seat
            cPlayerActor.GetComponent <CNetworkView>().SetParent(m_cSeat.GetComponent <CNetworkView>().ViewId);

            // Teleport player in cockpit
            cPlayerActor.GetComponent <CNetworkView>().SetPosition(m_cSeat.transform.position);
            cPlayerActor.GetComponent <CNetworkView>().SetRotation(m_cSeat.transform.rotation);

            // Set the player kinematic
            cPlayerActor.rigidbody.isKinematic = true;

            m_cMountedPlayerId.Set(_ulPlayerId);

            // Notify observers
            if (EventPlayerEnter != null)
            {
                EventPlayerEnter(m_cMountedPlayerId.Get());
            }
        }
    }
Beispiel #8
0
    public static void UnserializePlayerState(CNetworkPlayer _cNetworkPlayer, CNetworkStream _cStream)
    {
        // Retrieve player actors head
        CPlayerHead cMyActorHead = CGamePlayers.GetPlayerActor(_cNetworkPlayer.PlayerId).GetComponent <CPlayerHead>();

        // Write my head's x-rotation
        float fRotationX = _cStream.ReadFloat();

        cMyActorHead.m_fHeadEulerX.Set(fRotationX);
    }
Beispiel #9
0
    public static void Unserialize(CNetworkPlayer _cNetworkPlayer, CNetworkStream _cStream)
    {
        GameObject     cPlayerActor = CGamePlayers.GetPlayerActor(_cNetworkPlayer.PlayerId);
        CPlayerRagdoll ragdoll      = cPlayerActor.GetComponent <CPlayerRagdoll>();

        while (_cStream.HasUnreadData)
        {
            // Extract action
            ragdoll.m_bRagdollState.Set(_cStream.ReadByte());
        }
    }
Beispiel #10
0
 private void UpdateListInformation()
 {
     foreach (KeyValuePair <ulong, GameObject> listItem in m_PlayersList)
     {
         // Set the alive status
         CPlayerHealth playerActorHealth = CGamePlayers.GetPlayerActor(listItem.Key).GetComponent <CPlayerHealth>();
         if (playerActorHealth.CurrentHealthState == CPlayerHealth.HealthState.ALIVE)
         {
             listItem.Value.transform.FindChild("StatusAlive").gameObject.SetActive(true);
             listItem.Value.transform.FindChild("StatusDead").gameObject.SetActive(false);
         }
         else
         {
             listItem.Value.transform.FindChild("StatusAlive").gameObject.SetActive(false);
             listItem.Value.transform.FindChild("StatusDead").gameObject.SetActive(true);
         }
     }
 }
Beispiel #11
0
    public static void UnserializeBeltState(CNetworkPlayer _cNetworkPlayer, CNetworkStream _cStream)
    {
        while (_cStream.HasUnreadData)
        {
            ENetworkAction eAction     = (ENetworkAction)_cStream.ReadByte();
            CPlayerBelt    cPlayerBelt = CGamePlayers.GetPlayerActor(_cNetworkPlayer.PlayerId).GetComponent <CPlayerBelt>();

            switch (eAction)
            {
            case ENetworkAction.PickupTool:
            {
                CNetworkViewId cToolViewId = _cStream.ReadNetworkViewId();
                cPlayerBelt.PickupTool(cToolViewId.GameObject);
            }
            break;
            }
        }
    }
Beispiel #12
0
    public void Pickup(ulong _ulPlayerId)
    {
        Logger.WriteErrorOn(!CNetwork.IsServer, "Only servers are allow to invoke this method");

        if (!IsHeld)
        {
            // Set owning player
            m_ulOwnerPlayerId = _ulPlayerId;

            // Set owning object view id
            m_cOwnerActorViewId.Set(CGamePlayers.GetPlayerActor(_ulPlayerId).GetComponent <CNetworkView>().ViewId);

            // Notify observers
            if (EventPickedUp != null)
            {
                EventPickedUp();
            }
        }
    }
Beispiel #13
0
    public static void UnserializePlayerState(CNetworkPlayer _cNetworkPlayer, CNetworkStream _cStream)
    {
        GameObject cPlayerActor = CGamePlayers.GetPlayerActor(_cNetworkPlayer.PlayerId);

        if (cPlayerActor != null)
        {
            //while (_cStream.HasUnreadData)
            {
                // Retrieve player actor motor
                CPlayerGroundMotor cPlayerActorMotor = cPlayerActor.GetComponent <CPlayerGroundMotor>();

                ENetworkAction eNetworkAction = (ENetworkAction)_cStream.ReadByte();

                switch (eNetworkAction)
                {
                case ENetworkAction.UpdateStates:
                {
                    cPlayerActorMotor.m_uiMovementStates = _cStream.ReadByte();

                    if (cPlayerActor != CGamePlayers.SelfActor)
                    {
                        cPlayerActor.transform.eulerAngles = new Vector3(0.0f, _cStream.ReadFloat(), 0.0f);
                    }
                    else
                    {
                        _cStream.ReadFloat();
                    }

                    cPlayerActorMotor.m_bStates.Set((byte)cPlayerActorMotor.m_uiMovementStates);
                }
                break;


                default:
                    Debug.LogError(string.Format("Unknown network action ({0})", (byte)eNetworkAction));
                    break;
                }
            }
        }
    }
Beispiel #14
0
    void Start()
    {
        m_ulOwnerPlayerId = CGamePlayers.GetPlayerActorsPlayerId(ThisNetworkView.ViewId);

        if (CNetwork.IsServer)
        {
            CUserInput.SubscribeClientInputChange(CUserInput.EInput.Tool_Reload, OnEventClientInput);
            CUserInput.SubscribeClientInputChange(CUserInput.EInput.Tool_Drop, OnEventClientInput);
            CUserInput.SubscribeClientInputChange(CUserInput.EInput.Tool_SelectSlot1, OnEventClientInput);
            CUserInput.SubscribeClientInputChange(CUserInput.EInput.Tool_SelectSlot2, OnEventClientInput);
            CUserInput.SubscribeClientInputChange(CUserInput.EInput.Tool_SelectSlot3, OnEventClientInput);
            CUserInput.SubscribeClientInputChange(CUserInput.EInput.Tool_SelectSlot4, OnEventClientInput);
        }

        if (gameObject == CGamePlayers.SelfActor)
        {
            gameObject.GetComponent <CPlayerInteractor>().EventUse += OnEventInteractionUse;

            CUserInput.SubscribeInputChange(CUserInput.EInput.Primary, OnEventInput);
            CUserInput.SubscribeInputChange(CUserInput.EInput.Secondary, OnEventInput);
        }

        gameObject.GetComponent <CNetworkView>().EventPreDestory += new CNetworkView.NotiftyPreDestory(OnPreDestroy);
    }
Beispiel #15
0
    public static void UnserializeIKTarget(CNetworkPlayer _cNetworkPlayer, CNetworkStream _cStream)
    {
        GameObject cPlayerActor = CGamePlayers.GetPlayerActor(_cNetworkPlayer.PlayerId);

        if (cPlayerActor != null)
        {
            CPlayerIKController cPlayerIKController = cPlayerActor.GetComponent <CPlayerIKController>();

            ENetworkAction eNetworkAction = (ENetworkAction)_cStream.ReadByte();

            switch (eNetworkAction)
            {
            case ENetworkAction.SetRightTransform:
            {
                Vector3 pos = new Vector3();
                Vector3 rot = new Vector3();

                pos.x = _cStream.ReadFloat();
                pos.y = _cStream.ReadFloat();
                pos.z = _cStream.ReadFloat();

                cPlayerIKController.m_RightHandTarget.position = pos;

                rot.x = _cStream.ReadFloat();
                rot.y = _cStream.ReadFloat();
                rot.z = _cStream.ReadFloat();

                cPlayerIKController.m_RightHandTarget.rotation = Quaternion.Euler(rot);

                cPlayerIKController.m_RightHandNetworkedPos.Set(cPlayerIKController.m_RightHandTarget.position);
                cPlayerIKController.m_RightHandNetworkedRot.Set(cPlayerIKController.m_RightHandTarget.rotation.eulerAngles);
            }
            break;

            case ENetworkAction.SetLeftTransform:
            {
                Vector3 pos = new Vector3();
                Vector3 rot = new Vector3();

                pos.x = _cStream.ReadFloat();
                pos.y = _cStream.ReadFloat();
                pos.z = _cStream.ReadFloat();

                cPlayerIKController.m_LeftHandTarget.position = pos;

                rot.x = _cStream.ReadFloat();
                rot.y = _cStream.ReadFloat();
                rot.z = _cStream.ReadFloat();

                cPlayerIKController.m_LeftHandTarget.rotation = Quaternion.Euler(rot);

                cPlayerIKController.m_RightHandNetworkedPos.Set(cPlayerIKController.m_LeftHandTarget.position);
                cPlayerIKController.m_RightHandNetworkedRot.Set(cPlayerIKController.m_LeftHandTarget.rotation.eulerAngles);
            }
            break;

            default:
                Debug.LogError(string.Format("Unknown network action ({0})", (byte)eNetworkAction));
                break;
            }
        }
    }