Esempio n. 1
0
    //need to be able to load level content
    public void LoadLevelContent()
    {
        //get the template's level root
        var existingLevelRoot = GameObject.Find("Level");

        Destroy(existingLevelRoot);
        GameObject levelRoot = new GameObject("Level");//clean house prior to load
        //get the level info
        var levelFileJsonContent = File.ReadAllText(selectedLevel);
        var levelData            = JsonUtility.FromJson <LevelDataRepresentation>(levelFileJsonContent);

        //loop through the items
        foreach (var li in levelData.levelsItems)
        {
            var levelResource = Resources.Load("Prefabs/" + li.prefabName);
            if (levelResource == null)
            {
                Debug.Log("Could not find prefab: " + li.prefabName);
            }
            GameObject levelObj = (GameObject)Instantiate(levelResource, li.position, Quaternion.identity);
            //get the sprite
            var objSprite = levelObj.GetComponent <SpriteRenderer>();
            if (objSprite != null)
            {
                objSprite.sortingOrder     = li.spriteOrder;
                objSprite.sortingLayerName = li.spriteLayer;
                objSprite.color            = li.spriteColor;
            }
            //set the levelroot as parent
            levelObj.transform.SetParent(transform.parent, false);
            levelObj.transform.position   = li.position;
            levelObj.transform.rotation   = Quaternion.Euler(li.rotation.x, li.rotation.y, li.rotation.z);
            levelObj.transform.localScale = li.scale;
        }
        //set soyboys position
        GameObject soyBoy = GameObject.Find("SoyBoy");

        soyBoy.transform.position = levelData.playerStartLocation;
        //set camera position
        Camera.main.transform.position = new Vector3(soyBoy.transform.position.x,
                                                     soyBoy.transform.position.y, Camera.main.transform.position.z);
        CameraLerpToTransform cameraSettings = FindObjectOfType <CameraLerpToTransform>();

        if (cameraSettings != null)
        {
            cameraSettings.minX          = levelData.cameraSettings.minX;
            cameraSettings.maxX          = levelData.cameraSettings.maxX;
            cameraSettings.minY          = levelData.cameraSettings.minY;
            cameraSettings.maxY          = levelData.cameraSettings.maxY;
            cameraSettings.trackingSpeed = levelData.cameraSettings.trackingSpeed;
            cameraSettings.cameraZDepth  = levelData.cameraSettings.cameraZDepth;
            cameraSettings.camTarget     = GameObject.Find(levelData.cameraSettings.camTarget).transform;
        }
    }
Esempio n. 2
0
 public override void OnInspectorGUI()
 {
     //change the way the inspectro behaves
     DrawDefaultInspector();
     //add a save level button
     if (GUILayout.Button("Save Level"))
     {
         //get level info, make sure level root is at origin
         Level level = (Level)target;
         level.transform.position = Vector3.zero;
         level.transform.rotation = Quaternion.identity;
         var levelRoot = GameObject.Find("Level"); //get the root
                                                   //setup the structure to save info
         var ldr        = new LevelDataRepresentation();
         var levelItems = new List <LevelItemRepresentation>();
         //loop through the items to get the needed info
         foreach (Transform t in levelRoot.transform)
         {
             //get a reference to sprite renderer
             SpriteRenderer          sr = t.GetComponent <SpriteRenderer>();
             LevelItemRepresentation li = new LevelItemRepresentation()
             {
                 position = t.position,
                 rotation = t.rotation.eulerAngles,
                 scale    = t.localScale
             };
             //get the prefab name, try to hedge for spaces in duplicates
             if (t.name.Contains(" "))
             {
                 //get the name before the space
                 li.prefabName = t.name.Substring(0, t.name.IndexOf(" ", System.StringComparison.CurrentCulture));//very progressive
             }
             else if (t.name.Contains("(Clone)"))
             {
                 //make sure we aren't saving clones
                 li.prefabName = t.name.Substring(0, t.name.IndexOf("(", System.StringComparison.CurrentCulture));
             }
             else
             {
                 //if no spaces just get name
                 li.prefabName = t.name;
             }
             //get the sprite info if there is a sprite renderer
             if (sr != null)
             {
                 li.spriteColor = sr.color;
                 li.spriteLayer = sr.sortingLayerName;
                 li.spriteOrder = sr.sortingOrder;
             }
             //add item to list
             levelItems.Add(li);
         }
         //now we should have all the levelitems, we just need the player position and cam settings
         ldr.levelsItems = levelItems.ToArray();
         //player info
         ldr.playerStartLocation = GameObject.Find("SoyBoy").transform.position;
         //camera settings
         var currentCamSettings = FindObjectOfType <CameraLerpToTransform>();
         if (currentCamSettings != null)
         {
             ldr.cameraSettings = new CameraSettingsRepresentation()
             {
                 minX          = currentCamSettings.minX,
                 maxX          = currentCamSettings.maxX,
                 minY          = currentCamSettings.minY,
                 maxY          = currentCamSettings.maxY,
                 trackingSpeed = currentCamSettings.trackingSpeed,
                 cameraZDepth  = currentCamSettings.cameraZDepth,
                 camTarget     = currentCamSettings.camTarget.name
             };
         }
         //finally save the level to file
         var levelDataToJSON = JsonUtility.ToJson(ldr);
         var savePath        = System.IO.Path.Combine(Application.dataPath, level.levelName + ".json");
         //write out
         System.IO.File.WriteAllText(savePath, levelDataToJSON);
         Debug.Log("Level saved to " + savePath);
     }
     //Add a function to load a previosuly saved level
     if (GUILayout.Button("Load Level"))
     {
         //set the name of the file to load
         Level level = (Level)target;
         //get a string for the file load to reload it in the new Level script
         string loadedLevelName = level.SavedLevelName;
         //since there isnt a game manager in the levl template scene we load manually
         string fileName = Application.dataPath + "/" + level.SavedLevelName + ".json";
         //get the template's level root
         var existingLevelRoot = GameObject.Find("Level");
         DestroyImmediate(existingLevelRoot);
         GameObject levelRoot = new GameObject("Level");//clean house prior to load
         //add level to new levelRoot
         Level newLevel = levelRoot.AddComponent <Level>();
         newLevel.SavedLevelName = loadedLevelName;
         newLevel.levelName      = loadedLevelName;
         //get the level info
         var levelFileJsonContent = File.ReadAllText(fileName);
         var levelData            = JsonUtility.FromJson <LevelDataRepresentation>(levelFileJsonContent);
         //loop through the items
         foreach (var li in levelData.levelsItems)
         {
             //make sure the prefab name doesnt contain (Clone)
             if (li.prefabName.Contains("(Clone)"))
             {
                 li.prefabName = li.prefabName.Substring(0, li.prefabName.IndexOf("(", System.StringComparison.CurrentCulture));
             }
             var levelResource = Resources.Load("Prefabs/" + li.prefabName);
             if (levelResource == null)
             {
                 Debug.Log("Could not find prefab: " + li.prefabName);
             }
             GameObject levelObj = (GameObject)Instantiate(levelResource, li.position, Quaternion.identity);
             //get the sprite
             var objSprite = levelObj.GetComponent <SpriteRenderer>();
             if (objSprite != null)
             {
                 objSprite.sortingOrder     = li.spriteOrder;
                 objSprite.sortingLayerName = li.spriteLayer;
                 objSprite.color            = li.spriteColor;
             }
             //set the levelroot as parent
             levelObj.transform.SetParent(levelRoot.transform, false);
             levelObj.transform.position   = li.position;
             levelObj.transform.rotation   = Quaternion.Euler(li.rotation.x, li.rotation.y, li.rotation.z);
             levelObj.transform.localScale = li.scale;
         }
         //set soyboys position
         GameObject soyBoy = GameObject.Find("SoyBoy");
         soyBoy.transform.position = levelData.playerStartLocation;
         //set camera position
         Camera.main.transform.position = new Vector3(soyBoy.transform.position.x,
                                                      soyBoy.transform.position.y, Camera.main.transform.position.z);
         CameraLerpToTransform cameraSettings = FindObjectOfType <CameraLerpToTransform>();
         if (cameraSettings != null)
         {
             cameraSettings.minX          = levelData.cameraSettings.minX;
             cameraSettings.maxX          = levelData.cameraSettings.maxX;
             cameraSettings.minY          = levelData.cameraSettings.minY;
             cameraSettings.maxY          = levelData.cameraSettings.maxY;
             cameraSettings.trackingSpeed = levelData.cameraSettings.trackingSpeed;
             cameraSettings.cameraZDepth  = levelData.cameraSettings.cameraZDepth;
             cameraSettings.camTarget     = GameObject.Find(levelData.cameraSettings.camTarget).transform;
         }
     }
 }