示例#1
0
    public void Awake()
    {
        FileSystem.iface = new FileSystem_AssetBundles(@"C:\Program Files (x86)\Steam\steamapps\common\RustStaging\Bundles\Bundles");

        Transform prefabsParent = GameObject.FindGameObjectWithTag("Prefabs").transform;

        foreach (PrefabDataHolder pdh in GameObject.FindObjectsOfType <PrefabDataHolder>())
        {
            if (!pdh.spawnOnPlay)
            {
                continue;
            }

            Debug.Log(StringPool.Get((pdh.prefabData.id)));

            GameObject g = FileSystem.Load <GameObject>(StringPool.Get((pdh.prefabData.id)));

            GameObject newObject = spawnPrefab(g, pdh.prefabData, prefabsParent);

            PrefabDataHolder prefabData = newObject.GetComponent <PrefabDataHolder>();
            if (prefabData == null)
            {
                prefabData = newObject.AddComponent <PrefabDataHolder>();
            }

            prefabData.prefabData = pdh.prefabData;

            Destroy(pdh.gameObject);
        }
    }
示例#2
0
    public void Load(WorldSerialization blob)
    {
        var terrainSize     = new Vector3(blob.world.size, 1000, blob.world.size);
        var terrainPosition = 0.5f * terrainSize;

        Terrain land  = GameObject.FindGameObjectWithTag("Land").GetComponent <Terrain>();
        Terrain water = GameObject.FindGameObjectWithTag("Water").GetComponent <Terrain>();

        WorldConverter.MapInfo terrains = WorldConverter.worldToTerrain(blob);

        land.terrainData.heightmapResolution = terrains.resolution;
        land.terrainData.size = terrains.size;

        water.terrainData.heightmapResolution = terrains.resolution;
        water.terrainData.size = terrains.size;

        land.terrainData.SetHeights(0, 0, terrains.land.heights);
        water.terrainData.SetHeights(0, 0, terrains.water.heights);


        land.terrainData.alphamapResolution = terrains.resolution;
        land.terrainData.size            = terrains.size;
        land.terrainData.splatPrototypes = getTextures();
        land.terrainData.SetAlphamaps(0, 0, terrains.splatMap);

        GameObject defaultObj = Resources.Load <GameObject>("Prefabs/DefaultPrefab");

        for (int i = 0; i < terrains.prefabData.Length; i++)
        {
            Vector3    pos      = new Vector3(terrains.prefabData[i].position.x, terrains.prefabData[i].position.y, terrains.prefabData[i].position.z);
            Vector3    scale    = new Vector3(terrains.prefabData[i].scale.x, terrains.prefabData[i].scale.y, terrains.prefabData[i].scale.z);
            Quaternion rotation = Quaternion.Euler(new Vector3(terrains.prefabData[i].rotation.x, terrains.prefabData[i].rotation.y, terrains.prefabData[i].rotation.z));

            GameObject g = FileSystem.Load <GameObject>(StringPool.Get((blob.world.prefabs[i].id)));

            GameObject newObject = Instantiate(g, pos + terrainPosition, rotation);
            newObject.transform.localScale = scale;
            PrefabDataHolder pdh = newObject.GetComponent <PrefabDataHolder>();
            if (pdh == null)
            {
                newObject.AddComponent <PrefabDataHolder>();
            }
            pdh.prefabData = terrains.prefabData[i];
        }

        GameObject pathObj = Resources.Load <GameObject>("Paths/Path");

        for (int i = 0; i < terrains.pathData.Length; i++)
        {
            Vector3 averageLocation = Vector3.zero;
            for (int j = 0; j < terrains.pathData[i].nodes.Length; j++)
            {
                averageLocation += terrains.pathData[i].nodes[j];
            }
            averageLocation /= terrains.pathData[i].nodes.Length;
            GameObject newObject = Instantiate(pathObj, averageLocation + terrainPosition, Quaternion.identity);
            newObject.GetComponent <PathDataHolder>().pathData = terrains.pathData[i];
            newObject.GetComponent <PathDataHolder>().offset   = terrainPosition;
        }
    }
示例#3
0
 public static void PrefabID(PrefabDataHolder target)
 {
     Elements.BeginToolbarHorizontal();
     Elements.ToolbarLabel(ToolTips.prefabID);
     target.prefabData.id = uint.Parse(Elements.ToolbarDelayedTextField(target.prefabData.id.ToString()));
     Elements.EndToolbarHorizontal();
 }
示例#4
0
 public static void PrefabCategory(PrefabDataHolder target)
 {
     Elements.BeginToolbarHorizontal();
     Elements.ToolbarLabel(ToolTips.prefabCategory);
     target.prefabData.category = Elements.ToolbarTextField(target.prefabData.category);
     Elements.EndToolbarHorizontal();
 }
示例#5
0
    /// <summary>Sets up the prefabs loaded from the bundle file for use in the editor.</summary>
    /// <param name="go">GameObject to process, should be from one of the asset bundles.</param>
    /// <param name="filePath">Asset filepath of the gameobject, used to get and set the PrefabID.</param>
    public static GameObject Process(GameObject go, string filePath)
    {
        go.SetLayerRecursively(8);
        go.SetTagRecursively("Untagged");
        go.RemoveNameUnderscore();
        foreach (var item in go.GetComponentsInChildren <MeshCollider>())
        {
            item.cookingOptions = MeshColliderCookingOptions.None;
            item.enabled        = false;
            item.isTrigger      = false;
            item.convex         = false;
        }
        foreach (var item in go.GetComponentsInChildren <Animator>())
        {
            item.enabled = false;
            item.runtimeAnimatorController = null;
        }
        foreach (var item in go.GetComponentsInChildren <Light>())
        {
            item.enabled = false;
        }

        PrefabDataHolder prefabDataHolder = go.AddComponent <PrefabDataHolder>();

        prefabDataHolder.prefabData = new PrefabData()
        {
            id = AssetManager.ToID(filePath)
        };
        prefabDataHolder.Setup();
        return(go);
    }
示例#6
0
 public static void BreakPrefab(PrefabDataHolder target)
 {
     Elements.BeginToolbarHorizontal();
     if (Elements.ToolbarButton(ToolTips.breakPrefab))
     {
         target.BreakPrefab();
     }
     Elements.EndToolbarHorizontal();
 }
示例#7
0
 public static void ToggleLights(PrefabDataHolder target)
 {
     Elements.BeginToolbarHorizontal();
     if (Elements.ToolbarButton(ToolTips.toggleLights))
     {
         target.ToggleLights();
     }
     Elements.EndToolbarHorizontal();
 }
示例#8
0
 public static void SnapToGround(PrefabDataHolder target)
 {
     Elements.BeginToolbarHorizontal();
     if (Elements.ToolbarButton(ToolTips.snapToGround))
     {
         target.SnapToGround();
     }
     Elements.EndToolbarHorizontal();
 }
        public static PrefabDataHolder[] PrefabDataFromSelection(PrefabHierarchyTreeView treeView)
        {
            var selection = treeView.GetSelection();
            var treeList  = treeView.treeModel.m_Data.ToList();

            PrefabDataHolder[] prefabDataList = new PrefabDataHolder[selection.Count];
            Parallel.For(0, selection.Count, i =>
            {
                prefabDataList[i] = treeList.Find(x => x.id == selection.ElementAt(i)).prefabDataHolder;
            });
            return(prefabDataList);
        }
示例#10
0
    public override void OnInspectorGUI()
    {
        PrefabDataHolder myTarget = (PrefabDataHolder)target;

        if (myTarget.prefabData == null)
        {
            return;
        }

        EditorGUILayout.LabelField("Category", myTarget.prefabData.category);
        EditorGUILayout.LabelField("Id", myTarget.prefabData.id + "");
    }
示例#11
0
    public override void OnInspectorGUI()
    {
        PrefabDataHolder script = (PrefabDataHolder)target;

        if (script.prefabData == null)
        {
            return;
        }

        Functions.PrefabCategory(script);
        Functions.PrefabID(script);
        Functions.SnapToGround(script);
        Functions.ToggleLights(script);
    }
示例#12
0
    public override void OnInspectorGUI()
    {
        PrefabDataHolder myTarget = (PrefabDataHolder)target;

        if (myTarget.prefabData == null)
        {
            return;
        }

        EditorGUILayout.LabelField("Category", myTarget.prefabData.category);
        EditorGUILayout.LabelField("Id", myTarget.prefabData.id + "");
        showBtn = EditorGUILayout.Toggle("Spawn Prefab on Play", myTarget.spawnOnPlay);
        if (showBtn)
        {
            myTarget.spawnOnPlay = showBtn;
        }
    }
示例#13
0
    void OnApplicationQuit()
    {
        Transform prefabsParent = GameObject.FindGameObjectWithTag("Prefabs").transform;

        foreach (PrefabDataHolder pdh in GameObject.FindObjectsOfType <PrefabDataHolder>())
        {
            GameObject defaultObj = Resources.Load <GameObject>("Prefabs/DefaultPrefab");
            GameObject newObject  = spawnPrefab(defaultObj, pdh.prefabData, prefabsParent);


            PrefabDataHolder prefabData = newObject.GetComponent <PrefabDataHolder>();
            if (prefabData == null)
            {
                newObject.AddComponent <PrefabDataHolder>();
            }
            prefabData.prefabData = pdh.prefabData;

            Destroy(pdh.gameObject);
        }
    }