public void QueueEntityMessage(int msgCode, NetworkGameObject entity, params object[] args)
 {
     foreach (SteamConnection s in connections.Values)
     {
         QueueEntityMessage(s.steamID, msgCode, entity, args);
     }
 }
    public GameObject SpawnPrefabInternal(int prefabId, int networkId, int owner, int controller)
    {
        Debug.Log("SpawnPrefabInternal : " + prefabId + " :" + networkId + " : " + owner + " : " + controller);

        if (GetConnection(owner) == null)
        {
            Debug.Log("SpawnPrefabInternal:: No connection with index: " + owner + ". Ignoring this SpawnPrefabInternal call");
        }

        GameObject        prefab = GetPrefab(prefabId);
        NetworkGameObject ngo    = null;

        if (prefab != null)
        {
            GameObject g = GameObject.Instantiate(prefab);
            ngo            = g.GetComponent <NetworkGameObject>();
            ngo.prefabId   = prefabId;
            ngo.networkId  = networkId;
            ngo.owner      = owner;
            ngo.controller = controller;
            ngo.OnSpawn();
        }

        //add it to the owners entity list
        if (ngo != null)
        {
            SteamConnection c = GetConnection(owner);
            c.entities[networkId] = ngo;
        }

        return(ngo.gameObject);
    }
예제 #3
0
    public static NetworkGameObject GetGameObject(this byte[] data)
    {
        NetworkGameObject gameObject = new NetworkGameObject();

        gameObject.ID = data.Take(4).ToArray().ToInt();
        gameObject.position = data.Skip(4).Take(12).ToArray().ToVector3();
        gameObject.rotation = data.Skip(16).Take(16).ToArray().ToQuaternion();
        // gameObject.gameObject.name = data.Skip(32).ToArray().ByteToString();
        return gameObject;
    }
예제 #4
0
 public static NetworkGameObject NewGameObject(this byte[] data)
 {
     NetworkGameObject gameObject = new NetworkGameObject();
     string name = BToString(data.Skip(32).ToArray());
     gameObject.gameObject = (GameObject)Resources.Load(name);
     gameObject.ID = data.Take(4).ToArray().ToInt();
     gameObject.position = data.Skip(4).Take(12).ToArray().ToVector3();
     gameObject.rotation = data.Skip(16).Take(16).ToArray().ToQuaternion();
     gameObject.gameObject.name = name;
     return gameObject;
 }
    public void QueueEntityMessage(ulong sendTo, int msgCode, NetworkGameObject entity, params object[] args)
    {
        SteamConnection c = GetConnection(sendTo);

        if (c != null)
        {
            NetworkMessage msg = new NetworkMessage(msgCode, args);
            msg.entity      = entity;
            msg.isEntityMsg = true;
            c.messageQueue.Add(msg);
        }
    }
    public GameObject GetPrefab(int prefabId)
    {
        NetworkGameObject n = GetPrefabNetworkGameObject(prefabId);

        if (n != null)
        {
            return(n.gameObject);
        }
        else
        {
            return(null);
        }
    }
        public override void OverrideGameObject(GameObject toOverride)
        {
            NetworkGameObject network = toOverride.GetComponent <NetworkGameObject>();

            if (network == null)
            {
                return;
            }

            network.networkTransform.enabled = networkTransformEnabled;
            network.networkRigidbody.enabled = networkRigidbody;
            network.networkAnimator.enabled  = networkAnimator;
        }
    //prefab stuff
    public int RegisterPrefab(string prefabName, NetworkGameObject prefab)
    {
        if (NetworkPrefabs.Count + 1 > maxPrefabs)
        {
            Debug.LogException(new Exception("Can not register prefab [" + prefabName + "] - Prefab limit has been reached"));
        }
        if (NetworkPrefabNames.Contains(prefabName))
        {
            Debug.LogException(new Exception("Can not register prefab [" + prefabName + "] because a prefab already exists with that name"));
        }
        NetworkPrefabs.Add(prefab);
        NetworkPrefabNames.Add(prefabName);
        int prefabId = NetworkPrefabs.Count - 1;

        Debug.Log("Registered Prefab: " + prefabName + " - id: " + prefabId);

        return(prefabId);
    }
    /// <summary>
    ///called after entity deserialize.  If you do NOT call this, your state will not be applied
    ///This also spawns an object if the object we received state data for doesn't exist.
    /// </summary>
    public void ProcessEntityMessage(int prefabId, int networkId, int owner, int controller, params object[] args)
    {
        NetworkGameObject entity = null;

        entity = GetEntity(owner, networkId);
        if (entity != null)
        {
            entity.OnStateUpdate(args);
        }
        else
        {
            //this entity doesn't exist for some reason. Maybe it has already been destroyed locally
            //anyways, since we already read from the stream, we can just discard whatever we read
            //without issues to the next messages we read.
            //OR we should spawn it, then pass it the data
            entity = Core.net.SpawnPrefabInternal(prefabId, networkId, owner, controller).GetComponent <NetworkGameObject>();
            entity.OnStateUpdate(args);
        }
        //don't need to process, just call onStateUpdate with our new values
        //Core.net.MessageProcessors[msgCode](sender, prefabId, networkId, owner, controller);
    }
 public void QueueEntityMessage(ulong sendTo, string msgCode, NetworkGameObject entity, params object[] args)
 {
     QueueEntityMessage(sendTo, GetMessageCode(msgCode), entity, args);
 }