SnpM / LockstepFramework

Framework for lockstep RTS, TD, and MOBA games.
MIT License
1.39k stars 348 forks source link

Dessert RTS Photon Networking Helper for PUN2 #173

Open adiiceman opened 5 years ago

adiiceman commented 5 years ago

Hello there, first of all thanks for the asset and for the effort you put into it, I have been using pun2 for a while with other projects, but I just saw that LockstepFramework uses Pun1, I edited the code to make it work but I still cannot match 2 players, only if I use host button with 1 player in room after the second one conected, it works. Here is the edited code:

`using UnityEngine; using System.Collections; using Photon; using System.Linq;

using Photon.Pun; using Photon.Realtime; using Photon; using ExitGames.Client.Photon;

namespace Lockstep.NetworkHelpers { //TODO: Finish PhotonNetworkHelper public class PhotonNetworkHelper : NetworkHelper, IOnEventCallback { [SerializeField] private bool _directMessages = true; public override bool IsConnected { get { return PhotonNetwork.IsConnected && PhotonNetwork.IsMasterClient; } }

    public override int ID
    {
        get
        {
            return PhotonNetwork.LocalPlayer.ActorNumber;
        }
    }

    private bool _isServer;

    public override bool IsServer
    {
        get
        {
            return _isServer;
        }
    }

    public override int PlayerCount
    {
        get
        {
            return PhotonNetwork.PlayerList.Length;
        }
    }

    public void OnEvent(EventData photonEvent)
    {
        HandleData(photonEvent.Code, photonEvent.CustomData, photonEvent.SenderKey);
    }

    void HandleData(byte eventCode, object content, int id)
    {
        base.Receive((MessageType)eventCode, (byte[])content);
    }

    const string Version = "1.1";

    public override void Host(int roomSize)
    {
        PhotonNetwork.GameVersion = Version;
        PhotonNetwork.ConnectUsingSettings();
        _isServer = true;
    }

    public override void Connect(string ip)
    {
        PhotonNetwork.GameVersion = Version;
        PhotonNetwork.ConnectUsingSettings();
        _isServer = false;
    }

    #region Hook up to photon events
    public void OnJoinedLobby()
    {

        RoomOptions roomOptions = new RoomOptions();
        TypedLobby typedLobby = new TypedLobby();
        PhotonNetwork.JoinOrCreateRoom("Test", roomOptions, typedLobby);
    }

    public void OnJoinedRoom()
    {
        if (this._isServer)
        {

            PhotonNetwork.SetMasterClient(PhotonNetwork.LocalPlayer);
        }
    }

    public void OnPhotonJoinedRoomFailed()
    {
        Debug.Log("Failed Joined Room");
    }
    #endregion
    public override void Disconnect()
    {
        PhotonNetwork.Disconnect();
    }

    bool reliable = false;
    protected override void OnSendMessageToAll(MessageType messageType, byte[] data)
    {

        RaiseEventOptions options = RaiseEventOptions.Default;
        if (_directMessages)
        {
            options.Receivers = ReceiverGroup.Others;
            this.Receive(messageType, data);
        }
        else {
            options.Receivers = ReceiverGroup.All;
        }
        SendOptions sendOptions = new SendOptions { Reliability = reliable };
        PhotonNetwork.RaiseEvent((byte)messageType, data, options, sendOptions);

    }

    protected override void OnSendMessageToServer(MessageType messageType, byte[] data)
    {
        if (this.IsServer && this._directMessages)
        {
            this.Receive(messageType,data);
        } else
        {
            Debug.Log(PhotonNetwork.InRoom);

            RaiseEventOptions options = RaiseEventOptions.Default;
            options.Receivers = ReceiverGroup.MasterClient;
            SendOptions sendOptions = new SendOptions { Reliability = reliable };
            Debug.Log((byte)messageType);
            PhotonNetwork.RaiseEvent((byte)messageType, data, options, sendOptions);
        }
    }

    void OnGUI()
    {
        GUILayout.Space(200f);
        GUILayout.Label(PhotonNetwork.NetworkClientState.ToString());
        GUILayout.Label(PhotonNetwork.GetPing().ToString());
    }
}

} `