private ITempNetObject CreateLocalNetObject(int prefabID, TempObjID tempObjID, Vector3 pos, Quaternion rot)
    {
        // verify prefab id
        if (prefabID < 0 || prefabID >= prefabs.Length)
        {
            GameLog.Err("invalid prefab id for temp object");
            // log an error
            return(null);
        }
        GameObject obj = null;

        if (NetworkCore.isServer)
        {
            obj = Instantiate(prefabs[prefabID].serverPrefab, pos, rot);
        }
        else if (NetworkCore.isClient)
        {
            obj = Instantiate(prefabs[prefabID].clientPrefab, pos, rot);
        }

        if (obj == null)
        {
            GameLog.Err("instantiated temp object is null!");
            return(null);
        }

        ITempNetObject tempObj = obj.GetComponent <ITempNetObject>();

        tempObj.SetID(tempObjID);
        return(tempObj);
    }
    public void RemoveTempNetObject(ITempNetObject obj)
    {
        TempObjID tempId = obj.GetID();

        RemoveLocalNetObject(tempId);
        // remove from queue
        NetworkManager.RemoveBufferedMessage(obj.GetNetMessage());
        NetWriter writer = NetworkManager.StartNetworkMessage("destroy_temp_obj", thisNetworkID);

        tempId.WriteBytes(writer);
        NetworkManager.SendMessageToOtherClients(writer, NetworkCore.ReliableSequencedMsg, false);
    }
 private void RemoveLocalNetObject(TempObjID objID)
 {
     // lookup the object
     if (mapping.ContainsKey(objID))
     {
         ITempNetObject obj = mapping[objID];
         obj.ObjectRemoved();
         mapping.Remove(objID);
     }
     else
     {
         GameLog.Err("Can't remove temp object.");
     }
 }
    void CL_CreateNetObject(NetReader reader)
    {
        TempObjID tempObjId = TempObjID.GetDataFromBytes(reader);

        Vector3    pos = reader.ReadVector3();
        Quaternion rot = Quaternion.Euler(reader.ReadVector3());

        Debug.Log("Creating object of type " + tempObjId.PrefabID);
        ITempNetObject obj = CreateLocalNetObject(tempObjId.PrefabID, tempObjId, pos, rot);

        if (obj != null)
        {
            mapping.Add(tempObjId, obj);
            obj.ReadInitialBytes(reader);
        }
    }
    public ITempNetObject SpawnNewTempNetObject(int prefabID, Vector3 pos, Quaternion rot)
    {
        TempObjID newID = new TempObjID(nextNum, prefabID);

        nextNum++;
        ITempNetObject comp = CreateLocalNetObject(prefabID, newID, pos, rot);

        // send the creation message
        NetWriter writer = NetworkManager.StartNetworkMessage("create_temp_obj", thisNetworkID);

        newID.WriteBytes(writer);
        writer.WriteVector3(comp.GetPosition());
        writer.WriteVector3(comp.GetEulerAngles());
        comp.WriteInitialBytes(writer);
        BufferedMessage msg = NetworkManager.SendMessageToOtherClients(writer, NetworkCore.ReliableSequencedMsg, true);

        comp.SetNetMessage(msg);
        mapping.Add(newID, comp);
        return(comp);
    }