public void Spawn(NetIncomingMessage msg, byte hostId, int objectId, string prefabName, Vector3 pos, Quaternion rot)
    {
        var game_object = (GameObject)GameObject.Instantiate(Resources.Load(prefabName), pos, rot);
        var net_actor   = game_object.GetComponent <NetworkActor>();

        net_actor.host_id     = hostId;
        net_actor.actor_id    = objectId;
        net_actor.is_owner    = NetworkPeer.instance.host_id == hostId;
        net_actor.prefab_name = prefabName;

        NetworkRemoteCall.CallOnServer("RequestObjectRegistration", net_actor.actor_id);
        NetworkActorRegistry.RegisterActor(net_actor);
    }
    protected override void OnStatusChanged(NetIncomingMessage msg)
    {
        switch (msg.SenderConnection.Status)
        {
        case NetConnectionStatus.Connected:
            var new_client = GetClientInfo(msg);
            connected_clients.Add(new_client);
            NetworkRemoteCall.CallOnClient(new_client, "Hello", new_client.host_id);
            break;

        case NetConnectionStatus.Disconnecting:
        case NetConnectionStatus.Disconnected:
            connected_clients.Remove(GetClientInfo(msg));
            break;
        }
    }
    public void RequestObjects(NetIncomingMessage msg)
    {
        var client = GetClientInfo(msg);

        foreach (var obj in NetworkActorRegistry.Objects)
        {
            if (obj != null)
            {
                NetworkRemoteCall.CallOnClient(
                    client, "Spawn",
                    obj.host_id, obj.actor_id, obj.prefab_name,
                    obj.transform.position, obj.transform.rotation
                    );
            }
        }
    }
    public void RequestSpawn(NetIncomingMessage msg, string prefab_name, Vector3 pos, Quaternion rot)
    {
        var client_info = GetClientInfo(msg);
        var game_object = (GameObject)GameObject.Instantiate(Resources.Load(prefab_name), pos, rot);
        var obj         = game_object.GetComponent <NetworkActor>();

        obj.host_id     = client_info.host_id;
        obj.actor_id    = actor_id_counter++;
        obj.is_owner    = false;
        obj.owner       = client_info;
        obj.prefab_name = prefab_name;

        client_info.has_spawned = true;

        NetworkRemoteCall.CallOnAllClients(
            "Spawn",
            obj.host_id, obj.actor_id, obj.prefab_name,
            obj.transform.position, obj.transform.rotation
            );
    }
 public void Hello(NetIncomingMessage msg, byte host_id)
 {
     this.host_id = host_id;
     NetworkRemoteCall.CallOnServer("RequestObjects");
 }
Beispiel #6
0
    void OnGUI()
    {
        if (SystemInfo.graphicsDeviceID == 0)
        {
            srv.enabled = true;
        }

        if (!srv.is_running && !clt.is_running)
        {
            if (GUI.Button(new Rect(10, 10, 100, 25), "Start Server"))
            {
                srv.enabled = true;
            }

            if (GUI.Button(new Rect(10, 45, 100, 25), "Start Client"))
            {
                clt.enabled = true;
            }
        }
        else
        {
            GUI.TextArea(new Rect(300, 10, 150, 45), "Gametime: " + NetworkTime.gameTime);
        }

        if (srv.is_running)
        {
            GUI.TextArea(new Rect(10, 10, 125, 25), "Running As Server");
            GUI.TextArea(new Rect(10, 45, 125, 25), "Clients: " + srv.server.connected_clients.Count);
        }

        if (clt.is_running)
        {
            GUI.TextArea(new Rect(10, 10, 225, 25), "Running As Client (ping: " + Mathf.Round(clt.client.rtt * 1000.0f) + "ms)");
            GUI.TextArea(new Rect(10, 45, 225, 25), "Client Id: " + clt.client.host_id);

            if (!has_spawned && GUI.Button(new Rect(10, 80, 125, 25), "Spawn"))
            {
                has_spawned = true;
                var respawn = GameObject.FindGameObjectWithTag("Respawn");
                NetworkRemoteCall.CallOnServer("RequestSpawn", "Player", respawn.transform.position, Quaternion.identity);
            }

            if (has_spawned)
            {
                // Auto turn left
                if (GUI.Button(new Rect(10, 80, 25, 25), "Q"))
                {
                    UserInput.auto_keys = (byte)(UserInput.auto_keys ^ UserInput.TURNLEFT);
                }

                // Auto walk forward
                if (GUI.Button(new Rect(40, 80, 25, 25), "W"))
                {
                    UserInput.auto_keys = (byte)(UserInput.auto_keys ^ UserInput.FORWARD);
                }

                // Auto turn right
                if (GUI.Button(new Rect(70, 80, 25, 25), "E"))
                {
                    UserInput.auto_keys = (byte)(UserInput.auto_keys ^ UserInput.TURNRIGHT);
                }

                // Auto walk backward
                if (GUI.Button(new Rect(40, 110, 25, 25), "S"))
                {
                    UserInput.auto_keys = (byte)(UserInput.auto_keys ^ UserInput.BACKWARD);
                }

                // Auto walk left
                if (GUI.Button(new Rect(10, 110, 25, 25), "A"))
                {
                    UserInput.auto_keys = (byte)(UserInput.auto_keys ^ UserInput.LEFT);
                }

                // Auto walk right
                if (GUI.Button(new Rect(70, 110, 25, 25), "D"))
                {
                    UserInput.auto_keys = (byte)(UserInput.auto_keys ^ UserInput.RIGHT);
                }

                // Auto action 1
                if (GUI.Button(new Rect(10, 140, 25, 25), "1"))
                {
                    UserInput.auto_actions = (byte)(UserInput.auto_actions ^ UserInput.ACTION1);
                }

                // Auto action 2
                if (GUI.Button(new Rect(40, 140, 25, 25), "2"))
                {
                    UserInput.auto_actions = (byte)(UserInput.auto_actions ^ UserInput.ACTION2);
                }

                // Auto action 3
                if (GUI.Button(new Rect(70, 140, 25, 25), "3"))
                {
                    UserInput.auto_actions = (byte)(UserInput.auto_actions ^ UserInput.ACTION3);
                }

                // Auto action 4
                if (GUI.Button(new Rect(100, 140, 25, 25), "4"))
                {
                    UserInput.auto_actions = (byte)(UserInput.auto_actions ^ UserInput.ACTION4);
                }
            }
        }
    }