Ejemplo n.º 1
0
    public static void ReparentObjects()                                           //Used to reparent all objects, used when server has sent over all game objects
    {
        GameObject[] allGameobjects = GameObject.FindObjectsOfType <GameObject>(); //Get all gameobjs
        EditorUtility.DisplayProgressBar("Reparenting Objects", "", 0);

        for (int i = 0; i < allGameobjects.Length; ++i)
        {
            MarkerFlag currentFlag = allGameobjects[i].GetComponent <MarkerFlag>();
            if (currentFlag.parentID != null && currentFlag.parentID != "__")
            {
                int        parentHash = genHashCode(currentFlag.parentID);
                int        xParent    = parentHash % 10;
                int        yParent    = parentHash % 100;
                MarkerFlag parentFlag = findInList(currentFlag.parentID, xParent, yParent);
                if (parentFlag != null)
                {
                    allGameobjects[i].transform.SetParent(parentFlag.gameObject.transform, false); //Parent the object

                    allGameobjects[i].transform.position   = currentFlag.ogPos;                    //Reapply the local values because they have changed with the parent
                    allGameobjects[i].transform.localScale = currentFlag.ogScale;
                    allGameobjects[i].transform.rotation   = currentFlag.ogRot;
                }
                else
                {
                    allGameobjects[i].transform.SetParent(null);
                }
            }


            EditorUtility.DisplayProgressBar("Getting Level Data", allGameobjects[i].name, (float)i / allGameobjects.Length);
        }
        Lightmapping.giWorkflowMode = Lightmapping.GIWorkflowMode.Iterative;
        EditorUtility.ClearProgressBar();
    }
Ejemplo n.º 2
0
    //Functions to return various types of information for interpreting the given string information
    public static MarkerFlag deserializeMarkerFlag(ref string ser)
    {
        MarkerFlag markerFlag = new MarkerFlag();

        markerFlag.id       = deserializeString(ref ser);
        markerFlag.parentID = deserializeString(ref ser);
        markerFlag.isLocked = deserializeBool(ref ser);
        return(markerFlag);
    }
Ejemplo n.º 3
0
    public static void addToMap(MarkerFlag flag)
    {
        int hashCode = genHashCode(flag.id);
        int xLoc     = hashCode % 10;
        int yLoc     = hashCode % 100;

        if (!objectMap[xLoc, yLoc].Contains(flag)) //The flag doesn't exsist in the map anywhere
        {
            objectMap[xLoc, yLoc].Add(flag);
        }
        //Otherwise, don't bother adding it
    }
    static void editMode()
    {
        GameObject[]      allGameobjects  = GameObject.FindObjectsOfType <GameObject>();
        List <GameObject> selectedObjects = new List <GameObject>(Selection.gameObjects);

        if (selectedObjects.Count > 0)
        {
            List <GameObject> approvedObjects = new List <GameObject>();

            for (int i = 0; i < selectedObjects.Count; ++i)
            {
                MarkerFlag selectedObjFlags = selectedObjects[i].GetComponent <MarkerFlag>();
                if (selectedObjFlags == null)    //If an object doesn't have the marker flag script on it
                {
                    //it will be added
                    selectedObjFlags    = selectedObjects[i].AddComponent <MarkerFlag>();
                    selectedObjFlags.id = objectId + objCounter.ToString();
                    objCounter++;
                }
                else
                {
                    if (!selectedObjFlags.isLocked)
                    {
                        selectedObjFlags.isModified = true;
                        selectedObjFlags.isHeld     = true;
                        approvedObjects.Add(selectedObjects[i]);
                    }
                }
            }
            Selection.objects = approvedObjects.ToArray();
        }

        for (int i = 0; i < allGameobjects.Length; ++i)
        {
            MarkerFlag pMarkerFlag = allGameobjects[i].GetComponent <MarkerFlag>();
            if (pMarkerFlag.isHeld)                               //If the object is marked as is held
            {
                if (!selectedObjects.Contains(allGameobjects[i])) //If the object isn't still selected
                {
                    pMarkerFlag.isHeld = false;
                    UnlockObject(pMarkerFlag);
                }
            }
        }

        //If the system is running AND the sync interval is 0 or if the current time is greater than the last sync time + the sync interval
        if (mConnected && (syncInterval == 0 || DateTime.Now.Minute * 60 + DateTime.Now.Second >=
                           (lastSyncTime.Second + syncInterval + lastSyncTime.Minute * 60)))
        {
            Sync(Selection.gameObjects);
            lastSyncTime = DateTime.Now;
        }
    }
    public static void startupServer(int portNum, int maxClients)
    {
        Serializer.init();
        EditorUtility.DisplayProgressBar("Setting up", "", 0);
        objectId = "Server ";
        //Runs through entire scene and setups marker flags
        objCounter = 0;
        allGOs     = GameObject.FindObjectsOfType <GameObject>(); //Get all gameobjs
        for (int i = 0; i < allGOs.Length; ++i)
        {
            MarkerFlag objectFlag = allGOs[i].GetComponent <MarkerFlag>();
            if (objectFlag == null)
            {
                objectFlag = allGOs[i].AddComponent <MarkerFlag>();
            }

            objectFlag.id = objectId + objCounter;

            Serializer.addToMap(objectFlag);

            objCounter++;
            EditorUtility.DisplayProgressBar("Setting up", allGOs[i].name, (float)i / (allGOs.Length - 1));
        }

        // get server ip address
        string      hostName = System.Net.Dns.GetHostName();
        IPHostEntry ipEntry  = System.Net.Dns.GetHostEntry(hostName);

        IPAddress[] addr = ipEntry.AddressList;

        //int index = 0;
        //foreach (IPAddress i in addr)
        //    index++;
        //serverIP = addr[3].ToString();
        //Debug.Log(serverIP);

        //Calls plugin function to start server
        StartServer("", portNum, maxClients);

        mIsServer  = true;
        mConnected = true;

        EditorUtility.ClearProgressBar();

        ServerUtil.saveToNewScene();
        if (MultiuserEditor.limitAutosave)
        {
            ServerUtil.checkTooManyScenes();
        }
    }
Ejemplo n.º 6
0
    public static void deleteGO(string info) //Function used to delete a gameobject
    {
        string gOId = deserializeString(ref info);

        int hashLoc = genHashCode(gOId);

        int xLoc = hashLoc % 10;
        int yLoc = hashLoc % 100;

        MarkerFlag thisFlag = null;

        thisFlag = findInList(gOId, xLoc, yLoc);

        if (thisFlag != null)
        {
            MonoBehaviour.DestroyImmediate(thisFlag.gameObject);
        }
    }
 public static void DeleteObject(MarkerFlag target)
 {
     if (mConnected)
     {
         string targetID = target.id + "|";
         if (!mIsServer)
         {
             SendData((int)Serializer.Message.GO_DELETE, targetID, targetID.Length, "");
         }
         else
         {
             for (int j = 0; j < mConnectedClients.Count; ++j)
             {
                 if (mConnectedClients[j].IP != "")
                 {
                     SendData((int)Serializer.Message.GO_DELETE, targetID, targetID.Length, mConnectedClients[j].IP);
                 }
             }
         }
     }
 }
 public static void UnlockObject(MarkerFlag target)
 {
     if (mConnected)
     {
         string targetID = Serializer.serialize(target.gameObject);
         if (!mIsServer)
         {
             SendData((int)Serializer.Message.GO_UPDATE, targetID, targetID.Length, "");
         }
         else
         {
             for (int j = 0; j < mConnectedClients.Count; ++j)
             {
                 if (mConnectedClients[j].IP != "")
                 {
                     SendData((int)Serializer.Message.GO_UPDATE, targetID, targetID.Length, mConnectedClients[j].IP);
                 }
             }
         }
     }
 }
    public static void Sync(GameObject[] gOsToSend)                           //Sends out the data of the "modified" objects
    {
        for (int i = 0; i < gOsToSend.Length; ++i)                            //Checks All objects in scene and
        {
            MarkerFlag objectFlag = gOsToSend[i].GetComponent <MarkerFlag>(); //TODO: Potentially expensive might change

            if (objectFlag == null)                                           //If an object doesn't have the marker flag script on it
            {                                                                 //it will be added. This happens when a new object has been made
                objectFlag      = gOsToSend[i].AddComponent <MarkerFlag>();
                objectFlag.name = objectId + objCounter;                      //Make a uniquie name for the client so that other objects can't get confused by it
                objCounter++;
            }

            if (objectFlag.isModified)    //If this object's marker flag has been modified
            {
                string serializedObj = Serializer.serialize(gOsToSend[i]);

                if (!mIsServer)
                {
                    SendData((int)Serializer.Message.GO_UPDATE, serializedObj, serializedObj.Length, serverIP);
                }
                else
                {
                    for (int j = 0; j < mConnectedClients.Count; ++j)
                    {
                        if (mConnectedClients[j].IP != "")
                        {
                            SendData((int)Serializer.Message.GO_UPDATE, serializedObj, serializedObj.Length, mConnectedClients[j].IP);
                        }
                    }
                }

                objectFlag.isModified = false;
            }
        }
    }
Ejemplo n.º 10
0
    public static void componentSerialize(string ser)
    {
        GameObject gameObject = null;

        MarkerFlag objMarker = deserializeMarkerFlag(ref ser);

        int hashLoc = genHashCode(objMarker.id);

        int xLoc = hashLoc % 10;
        int yLoc = hashLoc % 100;

        MarkerFlag thisFlag = findInList(objMarker.id, xLoc, yLoc);

        if (thisFlag == null) //Make a new game object with given flag if you need to
        {
            gameObject = new GameObject();
            thisFlag   = gameObject.AddComponent <MarkerFlag>();
        }
        else
        {
            gameObject = thisFlag.gameObject;
        }

        thisFlag.id       = objMarker.id;
        thisFlag.parentID = objMarker.parentID;
        thisFlag.isLocked = objMarker.isLocked;
        if (thisFlag.parentID != "_")
        {
            int        parentHash = genHashCode(thisFlag.parentID);
            int        xParent    = parentHash % 10;
            int        yParent    = parentHash % 100;
            MarkerFlag parentFlag = findInList(thisFlag.parentID, xParent, yParent);
            if (parentFlag != null)
            {
                gameObject.transform.SetParent(parentFlag.gameObject.transform);
            }
            else
            {
                gameObject.transform.SetParent(null);
            }
        }
        else
        {
            gameObject.transform.SetParent(null);
        }

        gameObject.name     = deserializeString(ref ser);
        gameObject.tag      = deserializeString(ref ser);
        gameObject.layer    = deserializeInt(ref ser);
        gameObject.isStatic = deserializeBool(ref ser);
        while (ser.Length > 0)
        {
            string tag = deserializeString(ref ser); //Identifies the component type

            if (tag == "transform")
            {
                UnityEngine.Transform trans = gameObject.transform;
                trans.position   = deserializeVector3(ref ser);
                trans.rotation   = deserializeQuaternion(ref ser);
                trans.localScale = deserializeVector3(ref ser);

                if (expectedObjs > -1)
                {
                    thisFlag.ogPos   = trans.position;
                    thisFlag.ogRot   = trans.rotation;
                    thisFlag.ogScale = trans.localScale;
                }
            }
            else if (tag == "boxCollider")
            {
                UnityEngine.BoxCollider col = gameObject.GetComponent <UnityEngine.BoxCollider>();
                if (col == null)
                {
                    col = gameObject.AddComponent <UnityEngine.BoxCollider>();
                }
                col.center    = deserializeVector3(ref ser);
                col.size      = deserializeVector3(ref ser);
                col.isTrigger = deserializeBool(ref ser);
            }
            else if (tag == "sphereCollider")
            {
                UnityEngine.SphereCollider col = gameObject.GetComponent <UnityEngine.SphereCollider>();
                if (col == null)
                {
                    col = gameObject.AddComponent <UnityEngine.SphereCollider>();
                }
                col.center    = deserializeVector3(ref ser);
                col.radius    = deserializeFloat(ref ser);
                col.isTrigger = deserializeBool(ref ser);
            }
            else if (tag == "capsuleCollider")
            {
                UnityEngine.CapsuleCollider col = gameObject.GetComponent <UnityEngine.CapsuleCollider>();
                if (col == null)
                {
                    col = gameObject.AddComponent <UnityEngine.CapsuleCollider>();
                }
                col.center    = deserializeVector3(ref ser);
                col.radius    = deserializeFloat(ref ser);
                col.height    = deserializeFloat(ref ser);
                col.direction = deserializeInt(ref ser);
                col.isTrigger = deserializeBool(ref ser);
            }
            else if (tag == "rigidbody")
            {
                UnityEngine.Rigidbody col = gameObject.GetComponent <UnityEngine.Rigidbody>();
                if (col == null)
                {
                    col = gameObject.AddComponent <UnityEngine.Rigidbody>();
                }
                col.mass             = deserializeFloat(ref ser);
                col.drag             = deserializeFloat(ref ser);
                col.angularDrag      = deserializeFloat(ref ser);
                col.interpolation    = (RigidbodyInterpolation)deserializeInt(ref ser);
                col.constraints      = (RigidbodyConstraints)deserializeInt(ref ser);
                col.useGravity       = deserializeBool(ref ser);
                col.isKinematic      = deserializeBool(ref ser);
                col.detectCollisions = deserializeBool(ref ser);
            }
            else if (tag == "camera")
            {
                UnityEngine.Camera cam = gameObject.GetComponent <UnityEngine.Camera>();
                if (cam == null)
                {
                    cam = gameObject.AddComponent <UnityEngine.Camera>();
                }
                cam.clearFlags          = (CameraClearFlags)deserializeInt(ref ser);
                cam.backgroundColor     = deserializeColor(ref ser);
                cam.cullingMask         = deserializeInt(ref ser);
                cam.nearClipPlane       = deserializeFloat(ref ser);
                cam.farClipPlane        = deserializeFloat(ref ser);
                cam.rect                = deserializeRect(ref ser);
                cam.renderingPath       = (RenderingPath)deserializeInt(ref ser);
                cam.allowHDR            = deserializeBool(ref ser);
                cam.allowMSAA           = deserializeBool(ref ser);
                cam.useOcclusionCulling = deserializeBool(ref ser);
                cam.depth               = deserializeFloat(ref ser);
                cam.fieldOfView         = deserializeFloat(ref ser);
                cam.targetDisplay       = deserializeInt(ref ser);
            }
            else if (tag == "light")
            {
                UnityEngine.Light li = gameObject.GetComponent <UnityEngine.Light>();
                if (li == null)
                {
                    li = gameObject.AddComponent <UnityEngine.Light>();
                }
                li.type        = (LightType)deserializeInt(ref ser);
                li.shadows     = (LightShadows)deserializeInt(ref ser);
                li.renderMode  = (LightRenderMode)deserializeInt(ref ser);
                li.cullingMask = deserializeInt(ref ser);
                li.color       = deserializeColor(ref ser);
                li.intensity   = deserializeFloat(ref ser);
                li.cookieSize  = deserializeFloat(ref ser);
            }
            else if (tag == "meshfilter")
            {
                UnityEngine.MeshFilter meshFilter = gameObject.GetComponent <UnityEngine.MeshFilter>();
                if (meshFilter == null)
                {
                    meshFilter = gameObject.AddComponent <UnityEngine.MeshFilter>();
                }
                string filePath = deserializeString(ref ser);
                string meshName = deserializeString(ref ser);

                UnityEngine.Object[] assets = AssetDatabase.LoadAllAssetsAtPath(filePath);
                for (int x = 0; x < assets.Length; ++x)
                {
                    if (assets[x].name == meshName)
                    {
                        gameObject.GetComponent <UnityEngine.MeshFilter>().mesh = assets[x] as UnityEngine.Mesh;
                        break;
                    }
                }
            }
            else if (tag == "meshRenderer")
            {
                UnityEngine.MeshRenderer gOMeshRenderer = gameObject.GetComponent <UnityEngine.MeshRenderer>();
                if (gOMeshRenderer == null)
                {
                    gOMeshRenderer = gameObject.AddComponent <UnityEngine.MeshRenderer>();
                }

                gOMeshRenderer.lightProbeUsage            = (UnityEngine.Rendering.LightProbeUsage)deserializeInt(ref ser);
                gOMeshRenderer.reflectionProbeUsage       = (UnityEngine.Rendering.ReflectionProbeUsage)deserializeInt(ref ser);
                gOMeshRenderer.shadowCastingMode          = (UnityEngine.Rendering.ShadowCastingMode)deserializeInt(ref ser);
                gOMeshRenderer.receiveShadows             = deserializeBool(ref ser);
                gOMeshRenderer.motionVectorGenerationMode = (UnityEngine.MotionVectorGenerationMode)deserializeInt(ref ser);
                //Light map static junk
                deserializeBool(ref ser);

                string          materialsList   = deserializeString(ref ser);
                List <Material> renderMaterials = new List <Material>();
                if (materialsList.Length > 1)
                {
                    while (materialsList != "")
                    {
                        int length = materialsList.IndexOf(",");
                        if (length > 0)
                        {
                            string ret = materialsList.Substring(0, length);
                            materialsList = materialsList.Remove(0, length + 1);
                            Material newMat = null;
                            if (ret == "Default-Material" || ret == "" || ret == "Resources/unity_builtin_extra")
                            {
                                newMat = AssetDatabase.GetBuiltinExtraResource <Material>("Default-Diffuse.mat");
                            }
                            else
                            {
                                newMat = (Material)AssetDatabase.LoadAssetAtPath(ret, typeof(Material));
                            }

                            renderMaterials.Add(newMat);
                        }
                    }
                    if (renderMaterials.Count > 0)
                    {
                        gOMeshRenderer.GetComponent <Renderer>().materials = renderMaterials.ToArray();
                    }
                }
            }
            else if (tag == "guilayer")
            {
                UnityEngine.GUILayer gOGuiLayer = gameObject.GetComponent <GUILayer>();
                if (gOGuiLayer == null)
                {
                    gOGuiLayer = gameObject.AddComponent <GUILayer>();
                }
            }
            else if (tag == "flarelayer")
            {
                UnityEngine.FlareLayer gOFlareLayer = gameObject.GetComponent <FlareLayer>();
                if (gOFlareLayer == null)
                {
                    gOFlareLayer = gameObject.AddComponent <FlareLayer>();
                }
            }
            else if (tag == "audiolistener")
            {
                UnityEngine.AudioListener gOAudioListener = gameObject.GetComponent <AudioListener>();
                if (gOAudioListener == null)
                {
                    gOAudioListener = gameObject.AddComponent <AudioListener>();
                }
            }
            else
            {
                Debug.Log("Unkown Componenet Type " + tag);
            }
        }
        addToMap(thisFlag);
    }