Exemplo n.º 1
0
    // for Network sending
    public void sendAvatarMove()
    {
        Vector3 position = players [avatarId].transform.position;
        Vector3 rotation = players [avatarId].transform.eulerAngles;

        PacketPosition packetPosition = new PacketPosition {         // only last 4 digis after decimal part
            X = (float)System.Math.Round((double)position.x, 2),
            Y = (float)System.Math.Round((double)position.y, 2),
            Z = (float)System.Math.Round((double)position.z, 2)
        };
        PacketRotation packetRotation = new PacketRotation {
            Pitch = (float)System.Math.Round((double)rotation.x, 2),
            Yaw   = (float)System.Math.Round((double)rotation.y, 2)
        };

        PacketTransform packetTransform = new PacketTransform {
            Position = packetPosition, Rotation = packetRotation
        };
        PacketAvatar packetAvatar = new PacketAvatar {
            AvatarId = this.avatarId, Transform = packetTransform
        };
        PacketAvatarMove packetAvatarMove = new PacketAvatarMove {
            Avatar = packetAvatar
        };

        Byte[] packetAvatarMoveBA = packetAvatarMove.ToByteArray();
        sendPacket((int)Cmd.CmdAvatarMove, packetAvatarMoveBA);
    }
Exemplo n.º 2
0
    // вызывается из потока событий unity
    static private PacketTransformReady transform(PacketHeader packet)
    {
        PacketTransform transform = UnityEngine.JsonUtility.FromJson <PacketTransform>(packet.json_data);

        if (!idnames.ContainsKey(transform.idname))
        {
            return(new PacketTransformReady(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
        }

        int id = idnames[transform.idname];

        if (things.ContainsKey(id))
        {
            thing thing = (thing)things[id];
            List <UnityEngine.Vector3> pos = thing.GetPos();
            return(new PacketTransformReady(1, pos[0].x, pos[0].y, pos[0].z, pos[1].x, pos[1].y, pos[1].z, pos[2].x, pos[2].y, pos[2].z, pos[3].x));
        }

        if (tables.ContainsKey(id))
        {
            table table = (table)tables[id];
            List <UnityEngine.Vector3> pos = table.GetPos();
            return(new PacketTransformReady(1, pos[0].x, pos[0].y, pos[0].z, pos[1].x, pos[1].y, pos[1].z, pos[2].x, pos[2].y, pos[2].z, pos[3].x));
        }

        return(new PacketTransformReady(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0));
    }
Exemplo n.º 3
0
 protected override void OnStart()
 {
     base.OnStart();
     if (Client.Instance.ID == id)
     {
         PacketTransform pac = new PacketTransform();
         pac.id       = id;
         pac.position = transform.position;
         pac.rotation = transform.eulerAngles;
     }
 }
Exemplo n.º 4
0
    private IEnumerator IBegin(float tick)
    {
        WaitForSeconds wait = new WaitForSeconds(tick);

        while (true)
        {
            PacketTransform pac = new PacketTransform();
            pac.id       = m_my.ID;
            pac.position = m_my.transform.position;
            pac.rotation = m_my.transform.eulerAngles;
            Client.Instance.Send(pac);

            if (tick > 0f)
            {
                yield return(wait);
            }
            else
            {
                yield return(null);
            }
        }
    }
Exemplo n.º 5
0
    public static void Process(Queue <Packet> queue, Client client)
    {
        while (queue.Count > 0)
        {
            Packet item = queue.Dequeue();

            if (item is PacketMessage)
            {
                PacketMessage packet = (PacketMessage)item;
            }
            if (item is PacketString)
            {
                PacketString packet = (PacketString)item;
                if (packet.key == "your id")
                {
                    Control con = (Control)PoolingManage.Pooling.Create("Control", Vector3.zero);
                    client.SetID(packet.value);
                    con.id = client.ID;
                }
                if (packet.key == "other id")
                {
                    if (packet.value == client.ID || GlobalData.Instance.m_list.Find(rhs => rhs.id == packet.value) != null)
                    {
                        continue;
                    }

                    Control con = (Control)PoolingManage.Pooling.Create("Control", Vector3.zero);
                    con.id = packet.value;
                    GlobalData.Instance.m_list.Add(con);
                }
                if (packet.key == "other ex")
                {
                    Control con = GlobalData.Instance.m_list.Find(rhs => rhs.id == packet.value);
                    GlobalData.Instance.m_list.Remove(con);
                    con.Remove();
                }
                if (packet.key == "ping")
                {
                    UIPing[] ping = PoolingManage.UIHud.GetList <UIPing>();
                    if (ping.Length > 0)
                    {
                        ping[0].Check();
                    }
                    Client.Instance.Send(packet);
                }
            }
            if (item is PacketTransform)
            {
                PacketTransform packet = (PacketTransform)item;
                if (packet.id == client.ID)
                {
                    continue;
                }

                Control con = GlobalData.Instance.m_list.Find(rhs => rhs.id == packet.id);
                if (con != null)
                {
                    con.transform.position    = packet.position;
                    con.transform.eulerAngles = packet.rotation;
                }
            }
            if (item is PacketMove)
            {
                PacketMove packet = (PacketMove)item;
                if (packet.id == client.ID)
                {
                    continue;
                }
                Control con = GlobalData.Instance.m_list.Find(rhs => rhs.id == packet.id);
                if (con != null)
                {
                    con.BeforeForward = packet.forward;
                }
            }
        }
    }
Exemplo n.º 6
0
    IEnumerator MainCycle()
    {
        while (true)
        {
            if (msgQueue.Count < 1)
            {
                // haven't any packets
                yield return(new WaitForSeconds(0.01f));
            }
            else
            {
                PacketMSG receivedPacket = (PacketMSG)msgQueue.Dequeue();
                int       packetId       = receivedPacket.Cmd;
                Cmd       cmd            = (Cmd)packetId;
                switch (cmd)
                {
                case Cmd.CmdPing:
                    break;

                case Cmd.CmdLogin:
                    break;

                case Cmd.CmdLoginSuccess:
                    break;

                case Cmd.CmdLoginFailed:
                    break;

                case Cmd.CmdSetFamilyRequest:
                    managerUI.SetStateSetFamily();
                    break;

                case Cmd.CmdSetFamily:
                    break;

                case Cmd.CmdSetFamilySuccess:
                    break;

                case Cmd.CmdSetFamilyFailed:
                    break;

                case Cmd.CmdPreviewAvatar:
                    break;

                case Cmd.CmdPreviewAvatars:

                    // очень грязный хак
                    chooseCharacterWindow.ClearSubs();
                    // </>

                    PacketPreviewAvatars packetPreviewAvatars = PacketPreviewAvatars.Parser.ParseFrom(receivedPacket.Data);
                    foreach (PacketPreviewAvatar packetPreviewAvatar in packetPreviewAvatars.Avatars)
                    {
                        chooseCharacterWindow.AddCharacter(packetPreviewAvatar.AvatarId, packetPreviewAvatar.Name, packetPreviewAvatar.Level);
                    }
                    int startArrayId = (packetPreviewAvatars.Avatars.Count == 0) ? 1 : packetPreviewAvatars.Avatars.Count;
                    for (int avatarArrayId = startArrayId; avatarArrayId <= packetPreviewAvatars.MaxAvatars; avatarArrayId++)
                    {
                        if (avatarArrayId <= packetPreviewAvatars.AvailableAvatars)
                        {
                            chooseCharacterWindow.AddAvailable();
                        }
                        else
                        {
                            chooseCharacterWindow.AddDisable();
                        }
                    }

                    managerUI.SetStateChooseAvatar();
                    break;

                case Cmd.CmdSetNewAvatar:
                    managerUI.SetStateSetNewAvatar();
                    break;

                case Cmd.CmdSetNewAvatarSuccess:
                    break;

                case Cmd.CmdSetNewAvatarFailed:
                    break;

                case Cmd.CmdJoinToChannel:
                    break;

                case Cmd.CmdAvatar:
                    break;

                case Cmd.CmdAvatars:
                    // action
                    PacketAvatars packetAvatars = PacketAvatars.Parser.ParseFrom(receivedPacket.Data);

                    foreach (PacketAvatar packetAvatar in packetAvatars.Avatars)
                    {
                        handlePacketAvatar(packetAvatar, respawn: false);
                    }
                    break;

                case Cmd.CmdJoinedAvatar:
                    if (players.Count == 0)
                    {
                        managerUI.SetStateGameplay();
                    }

                    PacketJoinedAvatar packetJoinedAvatar = PacketJoinedAvatar.Parser.ParseFrom(receivedPacket.Data);
                    PacketAvatar       packetAvatarJA     = packetJoinedAvatar.Avatar;
                    PacketTransform    packetTransformJA  = packetAvatarJA.Transform;
                    Vector3            receivedPositionJA = new Vector3(packetAvatarJA.Transform.Position.X, packetAvatarJA.Transform.Position.Y, packetAvatarJA.Transform.Position.Z);
                    Vector3            receivedRotationJA = new Vector3(0f, packetAvatarJA.Transform.Rotation.Yaw, 0f);

                    GameObject newPlayer;

                    if (packetAvatarJA.AvatarId == this.avatarId)                       // if it's our player, we spawn prefab with input controller
                    {
                        newPlayer = (GameObject)Instantiate(playerPrefab, receivedPositionJA, Quaternion.identity);
                        CameraFollow cameraScript = gameplayCamera.AddComponent <CameraFollow> ();
                        cameraScript.OnAwake(newPlayer.transform);
                    }
                    else                         // otherwise prebaf enemy without input controller
                    {
                        newPlayer = (GameObject)Instantiate(enemyPrefab, receivedPositionJA, Quaternion.identity);
                    }

                    newPlayer.name = packetAvatarJA.Name;
                    newPlayer.transform.position    = receivedPositionJA;
                    newPlayer.transform.eulerAngles = receivedRotationJA;

                    // add health Avatar script to avatar
                    Avatar avatarScript = newPlayer.GetComponent <Avatar> ();
                    if (packetAvatarJA.AvatarId == this.avatarId)                       // if it's our player
                    {
                        avatarScript.isMine = true;
                    }
                    avatarScript.AvatarId   = packetAvatarJA.AvatarId;
                    avatarScript.AvatarName = packetAvatarJA.Name;
                    avatarScript.FamilyId   = packetAvatarJA.FamilyId;
                    avatarScript.FamilyName = packetAvatarJA.FamilyName;
                    avatarScript.Level      = packetAvatarJA.Level;
                    avatarScript.AnimState  = packetAvatarJA.AnimState;

                    ///////////////////////////////////////////////////////////////////////// HEALTH
                    // add Health script to avatar
                    Health health = newPlayer.GetComponent <Health> ();

                    ///////////////////////////////////////////////////////////////////////// MANNA
                    // add manna script to avatar
                    Manna manna = newPlayer.GetComponent <Manna> ();

                    // gameplay UI
                    HealthView globalHealthView = null;
                    MannaView  globalMannaView  = null;

                    if (packetAvatarJA.AvatarId == this.avatarId)                       // if it's our player, we spawn prefab with input controller
                    // find avatar bars
                    {
                        GameObject avatarBars = GameObject.FindGameObjectWithTag("AvatarBars");

                        // add health UI
                        GameObject globalHealthUI = (GameObject)Instantiate(healthUIPrefab, Vector3.zero, Quaternion.identity);
                        globalHealthUI.transform.SetParent(avatarBars.transform, false);
                        globalHealthView = globalHealthUI.GetComponent <HealthView> ();
                        health.AddGlobalHealthView(globalHealthView);

                        // add manna UI
                        GameObject globalMannaUI = (GameObject)Instantiate(mannaUIPrefab, Vector3.zero, Quaternion.identity);
                        globalMannaUI.transform.SetParent(avatarBars.transform, false);
                        globalMannaView = globalMannaUI.GetComponent <MannaView> ();
                        manna.AddGlobalMannaView(globalMannaView);
                    }

                    avatarScript.Health = health;
                    health.Maximum      = packetAvatarJA.Health.Maximum;
                    health.Current      = packetAvatarJA.Health.Current;

                    avatarScript.Manna = manna;
                    manna.Maximum      = packetAvatarJA.Manna.Maximum;
                    manna.Current      = packetAvatarJA.Manna.Current;
                    CapsuleCollider capsuleCollider = newPlayer.GetComponent <CapsuleCollider> ();
                    capsuleCollider.enabled = true;
                    players.Add(packetAvatarJA.AvatarId, newPlayer);

                    break;

                case Cmd.CmdShootToAvatar:
                    break;

                case Cmd.CmdShootSuccess:
                    PacketShootSuccess packetShootSuccess = PacketShootSuccess.Parser.ParseFrom(receivedPacket.Data);
                    PacketAvatar       senderAvatarOne    = packetShootSuccess.SenderAvatar;
                    PacketPosition     packetPosition     = packetShootSuccess.ShootEndPosition;
                    Vector3            shootEndPosition   = new Vector3(packetPosition.X, packetPosition.Y, packetPosition.Z);

                    ShootSync shootSyncOne = players [senderAvatarOne.AvatarId].GetComponentInChildren <ShootSync> ();
                    shootSyncOne.ShootOn(shootEndPosition);
                    break;

                case Cmd.CmdShootToAvatarSuccess:
                    PacketShootToAvatarSuccess packetShootToAvatarSuccess = PacketShootToAvatarSuccess.Parser.ParseFrom(receivedPacket.Data);
                    int senderShootAvatarId   = packetShootToAvatarSuccess.SenderShootAvatarId;
                    int receiverShootAvatarId = packetShootToAvatarSuccess.ReceiverShootAvatarId;

                    ShootSync shootSyncTwo = players [senderShootAvatarId].GetComponentInChildren <ShootSync> ();
                    shootSyncTwo.ShootOn(players [receiverShootAvatarId].transform.position);
                    break;

                case Cmd.CmdShootFailed:
                    Debug.Log("Shoot failed");
                    break;

                case Cmd.CmdKilledBy:
                    Debug.Log("CmdKilledBy");
                    PacketKilledBy packetKilledBy = PacketKilledBy.Parser.ParseFrom(receivedPacket.Data);
                    int            killerAvatarId = packetKilledBy.KillerAvatarId;
                    int            victimAvatarId = packetKilledBy.VictimAvatarId;

                    if (victimAvatarId == this.avatarId)
                    {
                        gameplayWindow.KilledByCoroutineOn(string.Format("You were killed by {0}", players [killerAvatarId].name));
                    }
                    else
                    {
                        gameplayWindow.KilledByCoroutineOn(string.Format("{0} is killed by {1}", players [victimAvatarId].name, players [killerAvatarId].name));
                    }

                    break;

                case Cmd.CmdRespawn:
                    PacketRespawn packetRespawn = PacketRespawn.Parser.ParseFrom(receivedPacket.Data);
                    handlePacketAvatar(packetRespawn.Avatar, respawn: true);
                    break;

                case Cmd.CmdAvatarLeft:
                    PacketAvatarLeft packetAvatarLeft = PacketAvatarLeft.Parser.ParseFrom(receivedPacket.Data);
                    GameObject       link             = players [packetAvatarLeft.AvatarId];
                    players.Remove(packetAvatarLeft.AvatarId);
                    DestroyImmediate(link);
                    break;

                case Cmd.CmdBanned:
                    break;

                case Cmd.CmdDisconnect:
                    break;

                default:
                    break;
                }         // end switch
            }             // end else
            yield return(new WaitForSeconds(0.01f));
        }
    }
Exemplo n.º 7
0
    private void Receive(DataClient client)
    {
        Console.WriteLine(client.id + " connect");

        client.stream = new NetworkStream(client.socket);

        {
            PacketString packet = new PacketString();
            packet.key   = "your id";
            packet.value = client.id;
            Send(packet, client.id);
        }
        {
            PacketString packet = new PacketString();
            packet.key = "ping";
            Send(packet, client.id);
        }

        for (int i = 0; i < m_clientList.Count; ++i)
        {
            PacketString packet = new PacketString();
            packet.key   = "other id";
            packet.value = m_clientList[i].id;
            SendBroad(packet);
        }

        byte[] buff = new byte[BUFF_SIZ];

        while (true)
        {
            try
            {
                int length = client.stream.Read(buff, 0, buff.Length);
                if (length <= 0)
                {
                    ExitClient(client);
                    break;
                }

                int begin = 0;

                while (begin < length)
                {
                    Packet pac = PacketManager.GetPacket(PacketManager.GetPacketType(buff, begin), buff, begin);
                    begin += Marshal.SizeOf(pac);

                    if (pac is PacketTransform)
                    {
                        PacketTransform packet = (PacketTransform)pac;
                        SendBroad(packet, client);
                    }
                    if (pac is PacketMessage)
                    {
                        PacketMessage packet = (PacketMessage)pac;
                        Console.WriteLine(packet.data);
                    }
                    if (pac is PacketString)
                    {
                        PacketString packet = (PacketString)pac;
                        if (packet.key == "ping")
                        {
                            Send(packet, client.id);
                        }
                    }
                    if (pac is PacketMove)
                    {
                        PacketMove packet = (PacketMove)pac;
                        SendBroad(packet);
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                ExitClient(client);
                break;
            }
        }
    }