示例#1
0
    public void LoadSelectedLevel()
    {
        string dirPath = Path.Combine(Application.persistentDataPath, "Levels");
        string file    = Path.Combine(dirPath, fileToLoad + ".xml");

        if (File.Exists(file))
        {
            LevelXml xml = new LevelXml();
            xml.LoadFromXml(file, FindObjectOfType <Level>());
            width = FindObjectOfType <Level>().width;
            DisplayWidth();
            height = FindObjectOfType <Level>().height;
            DisplayHeight();
            levelNameIF.text = FindObjectOfType <Level>().gameObject.name;

            // Hide the menu and enable interaction on other UI objects
            loadCanvas.enabled       = false;
            levelNameIF.interactable = true;
            foreach (Button button in uiButtons)
            {
                button.interactable = true;
            }
            UpdatePreview();
        }
    }
示例#2
0
        public void GetConstraint_BuildWithQuery_ConstraintBuilt()
        {
            var sutXml = new MembersXml();

            sutXml.ChildrenOf = "memberCaption";
            var item = new LevelXml();

            sutXml.Item           = item;
            item.ConnectionString = "connectionString";
            item.Perspective      = "perspective";
            item.Dimension        = "dimension";
            item.Hierarchy        = "hierarchy";
            item.Caption          = "level";

            var ctrXml = new OrderedXml();
            var query  = new QueryXml();

            query.InlineQuery = "select label from myTable order by sortOrder";
            ctrXml.Query      = query;

            var builder = new MembersOrderedBuilder();

            builder.Setup(sutXml, ctrXml);
            builder.Build();
            var ctr = builder.GetConstraint();

            Assert.That(ctr, Is.InstanceOf <OrderedConstraint>());
        }
示例#3
0
    public void LoadAllLevels()
    {
        string tempPath = Path.Combine(Application.persistentDataPath, "Levels");

        if (!Directory.Exists(tempPath))
        {
            Directory.CreateDirectory(tempPath);
        }
        foreach (string file in Directory.GetFiles(tempPath))
        {
            if (file.EndsWith(".xml"))
            {
                GameObject newLevel = new GameObject();
                newLevel.AddComponent <Level>();
                LevelXml xml = new LevelXml();
                xml.LoadFromXml(Path.Combine(tempPath, file), newLevel.GetComponent <Level>());
                if (FindObjectOfType <DataManager>().transform.Find(newLevel.gameObject.name))
                {
                    Destroy(FindObjectOfType <DataManager>().transform.Find(newLevel.gameObject.name));
                }
                newLevel.transform.parent = FindObjectOfType <DataManager>().transform;
                FindObjectOfType <DataManager>().AddLevel(newLevel);
                maxLevelNumber = FindObjectOfType <DataManager>().levels.Length;
            }
        }
    }
示例#4
0
    public void SaveLevel()
    {
        //Debug.Log(Application.persistentDataPath);
        string levelName = FindObjectOfType <Level>().gameObject.name = levelNameIF.text;

        if (levelName.Equals(""))
        {
            // Display the pop-up warning and disable the interaction on other UI opject
            warningCanvas.transform.Find("WarningText").GetComponent <Text>().text = "Warning!\nYou must put a level name to save the level.\n(The level was not saved)";
            warningCanvas.enabled    = true;
            levelNameIF.interactable = false;
            foreach (Button button in uiButtons)
            {
                button.interactable = false;
            }
            return;
        }

        string tempPath = Path.Combine(Application.persistentDataPath, "Levels");

        if (File.Exists(Path.Combine(tempPath, levelNameIF.text + ".xml")))
        {
            StartCoroutine(WaitingToSave());
            return;
        }
        else
        {
            if (!Directory.Exists(tempPath))
            {
                Directory.CreateDirectory(tempPath);
            }
            LevelXml xml = new LevelXml();
            xml.SaveToXml(FindObjectOfType <Level>(), Path.Combine(tempPath, levelNameIF.text + ".xml"));
        }
    }
示例#5
0
    IEnumerator WaitingToSave()
    {
        // Display the pop-up and disable the interaction on other UI objects
        replaceFileCanvas.enabled = true;
        levelNameIF.interactable  = false;
        foreach (Button button in uiButtons)
        {
            button.interactable = false;
        }

        replaceFileToSave = false; // default, just to be sure

        // Wait for user answer
        while (replaceFileCanvas.enabled)
        {
            yield return(new WaitForSeconds(Time.deltaTime));
        }
        // Allow the interaction on other UY objects after the pop-up was hidden
        levelNameIF.interactable = true;
        foreach (Button button in uiButtons)
        {
            button.interactable = true;
        }
        // Save level if replaceFileToSave is true
        if (replaceFileToSave)
        {
            string   tempPath = Path.Combine(Application.persistentDataPath, "Levels");
            LevelXml xml      = new LevelXml();
            xml.SaveToXml(FindObjectOfType <Level>(), Path.Combine(tempPath, levelNameIF.text + ".xml"));
        }
    }
示例#6
0
    public void LoadFromXml(string path, Level level)
    {
        LevelXml xml        = new LevelXml();
        var      serializer = new XmlSerializer(typeof(LevelXml));

        using (var stream = new FileStream(path, FileMode.Open))
        {
            xml = serializer.Deserialize(stream) as LevelXml;
        }
        level.gameObject.name = xml.Name;
        level.width           = xml.Width;
        level.height          = xml.Height;
        level.blocksPositions = xml.Blocks;
        level.pickUpPositions = xml.PickUpSpawns;
        level.ufoPositions    = xml.UFOSpawns;
    }
示例#7
0
        public void Deserialize_SampleFile_MembersWithLevel()
        {
            int testNr = 0;

            // Create an instance of the XmlSerializer specifying type and namespace.
            TestSuiteXml ts = DeserializeSample();

            // Check the properties of the object.
            Assert.That(ts.Tests[testNr].Systems[0], Is.TypeOf <MembersXml>());
            Assert.That(((MembersXml)ts.Tests[testNr].Systems[0]).Item, Is.TypeOf <LevelXml>());

            LevelXml item = (LevelXml)((MembersXml)ts.Tests[testNr].Systems[0]).Item;

            Assert.That(item.Dimension, Is.EqualTo("dimension"));
            Assert.That(item.Hierarchy, Is.EqualTo("hierarchy"));
            Assert.That(item.Caption, Is.EqualTo("level"));
            Assert.That(item.Perspective, Is.EqualTo("Perspective"));
            Assert.That(item.GetConnectionString(), Is.EqualTo("ConnectionString"));
        }
示例#8
0
        public void GetSystemUnderTest_BuildWithLevel_CorrectCallToDiscoverFactory()
        {
            var sutXml = new MembersXml
            {
                ChildrenOf = "memberCaption"
            };
            var item = new LevelXml();

            sutXml.Item           = item;
            item.ConnectionString = "connectionString";
            item.Perspective      = "perspective";
            item.Dimension        = "dimension";
            item.Hierarchy        = "hierarchy";
            item.Caption          = "level";
            var ctrXml = new ContainXml();

            ctrXml.Items.Add("caption 1");
            ctrXml.Items.Add("caption 2");

            var discoFactoMockFactory = new Mock <DiscoveryRequestFactory>();

            discoFactoMockFactory.Setup(dfs =>
                                        dfs.Build(
                                            It.IsAny <string>(),
                                            It.IsAny <string>(),
                                            It.IsAny <List <string> >(),
                                            It.IsAny <List <PatternValue> >(),
                                            It.IsAny <string>(),
                                            It.IsAny <string>(),
                                            It.IsAny <string>(),
                                            It.IsAny <string>()))
            .Returns(new MembersDiscoveryRequest());
            var discoFactoMock = discoFactoMockFactory.Object;

            var builder = new MembersContainBuilder(discoFactoMock);

            builder.Setup(sutXml, ctrXml);
            builder.Build();
            var sut = builder.GetSystemUnderTest();

            Assert.That(sut, Is.InstanceOf <MembersDiscoveryRequest>());
            discoFactoMockFactory.Verify(dfm => dfm.Build("connectionString", "memberCaption", It.IsAny <List <string> >(), It.IsAny <List <PatternValue> >(), "perspective", "dimension", "hierarchy", "level"));
        }
示例#9
0
    //--------------------------------------------------------------------------------------
    // Methods:
    //--------------------------------------------------------------------------------------

    #region void Create(LevelXml)

    /// <summary>
    /// Create the level inside the current scene.
    /// </summary>
    /// <param name="descriptor">The level descriptor.</param>
    public void Create(LevelXml descriptor)
    {
        // Set the loaded flag to false:
        IsLoaded = false;

        // And then try to load the data in the scene:
        try {
            // Set the size of the world:
            Width  = descriptor.World.Width;
            Height = descriptor.World.Height;

            // Check that the size of the world is correct:
            var data = descriptor.World.Terrain;
            if (data.Length != Width * Height)
            {
                throw new Exception("Invalid size inside the level descriptor for the world.");
            }

            // Load all the sprites from the selected tileset:
            var sprites = CoreManager.Instance.LoadGameSprites(descriptor.Tileset);

            // Get the world node inside the scene:
            var worldObject = GameObject.Find(CoreManager.TERRAIN_GOBJ_NAME);

            // This function creates a new tile game object in the scene:
            Func <uint, GameObject> createTile = id => {
                // Create the object and set the parent:
                var victim = new GameObject(CoreManager.TILE_GOBJ_NAME);
                SceneUtil.SetParent(victim, worldObject);
                // Create the sprite renderer component:
                var spriteRenderer = victim.AddComponent <SpriteRenderer>();
                var sprite         = sprites.Where(x => x.name == descriptor.Tileset + "_" + id)
                                     .FirstOrDefault();
                spriteRenderer.sprite = sprite;
                // Return the object created:
                return(victim);
            };

            // Set some data to calculate the position of the tiles:
            int       widthInPixels  = Width * CoreManager.TILE_WIDTH;
            int       heightInPixels = Height * CoreManager.TILE_HEIGHT;
            const int PIVOT_OFFSET   = 8;
            int       startX         = PIVOT_OFFSET - (widthInPixels / 2);
            int       startY         = (heightInPixels / 2) - PIVOT_OFFSET;

            // For each id inside the terrain array of the world inside the descriptor
            // we're going to create a new tile and add it to the array of cells:
            List <CellData> cellsList = new List <CellData>();

            for (int i = 0, k = 0; i < Height; i++)
            {
                for (int j = 0; j < Width; j++, k++)
                {
                    // Create the tile and change its position:
                    var tile = createTile(data[k]);
                    SceneUtil.SetPosition(
                        tile,
                        (startX + CoreManager.TILE_WIDTH * j) / 100.0f,
                        (startY - CoreManager.TILE_HEIGHT * i) / 100.0f,
                        0.0f
                        );
                    // Create the current cell data:
                    cellsList.Add(new CellData(i, j, tile, data[k]));
                }
            }

            cells = cellsList.ToArray();

            // Get the entities node inside the scene:
            var entitiesObject = GameObject.Find(CoreManager.ENTITIES_GOBJ_NAME);

            // Create all the entities inside the world:
            foreach (var item in descriptor.Entities)
            {
                var created = PlayerController.Create(item, entitiesObject);
                if (!created)
                {
                    BoxController.Create(item, entitiesObject, descriptor.Tileset, sprites);
                }
            }

            // Finishing the load level process:
            IsLoaded = true;
        } catch (Exception e) {
            CoreManager.Instance.Log(e);
            Width  = 0;
            Height = 0;
            cells  = null;
        }
    }
示例#10
0
        //--------------------------------------------------------------------------------------
        // Methods:
        //--------------------------------------------------------------------------------------

        /// <summary>
        /// Converts a TMX file to an XML level file.
        /// </summary>
        /// <param name="inputFileName">The input file name.</param>
        /// <param name="outputFileName">The output file name.</param>
        public static void Convert(string inputFileName, string outputFileName)
        {
            Shared.ShowTitle(inputFileName, outputFileName);

            // Get the basic data of the level:
            var level = new LevelXml();
            var map   = XmlFile.LoadXml <Tiled.Map>(inputFileName);

            level.Name        = findProperty(map, "Name", Shared.DEFAULT_NAME);
            level.Description = findProperty(map, "Description", Shared.DEFAULT_DESCRIPTION);
            level.Tileset     = findTileset(map);

            Console.WriteLine("Basic level data converted...");

            // Get the terrain data of the level:
            var layers = map.Items.Select(x => x as Tiled.Layer)
                         .Where(x => x != null).ToArray();
            var terrainLayer = findTerrainLayer(layers);

            level.World         = new WorldXml();
            level.World.Width   = terrainLayer.Width;
            level.World.Height  = terrainLayer.Height;
            level.World.Content = "\n";

            int currentProgress = 0;
            int totalProgress   = level.World.Width * level.World.Height;

            Console.Write("\rTerrain information into game level format... [" +
                          (currentProgress * 100 / totalProgress) + "%]");

            for (int y = 0, k = 0; y < level.World.Height; y++)
            {
                for (int x = 0; x < level.World.Width; x++, k++)
                {
                    var id = terrainLayer.Data.Tiles[k].Gid;
                    if (id > 0)
                    {
                        id--;
                    }
                    level.World.Content += id.ToString("0000");
                    level.World.Content += " ";

                    Console.Write("\rTerrain information into game level format... [" +
                                  (currentProgress * 100 / totalProgress) + "%]");
                }
                level.World.Content += "\n";
            }

            Console.WriteLine("\rTerrain information into game level format... [100%]");

            // Get the entities data of the level:
            var entitiesLayer = findEntitiesLayer(layers);
            var entities      = new List <EntityXml>();

            currentProgress = 0;
            Console.Write("\rEntities information into game level format... [" +
                          (currentProgress * 100 / totalProgress) + "%]");
            for (int y = 0, k = 0; y < entitiesLayer.Height; y++)
            {
                for (int x = 0; x < entitiesLayer.Width; x++, k++)
                {
                    var id = entitiesLayer.Data.Tiles[k].Gid;
                    if (id > 0)
                    {
                        id--;
                        string type = "";
                        if (Shared.TERRAIN_ID_FIRST_BOX <= id && id <= Shared.TERRAIN_ID_LAST_BOX)
                        {
                            var boxId = id - Shared.TERRAIN_ID_FIRST_BOX;
                            type = EntityType.BOX;
                            if (boxId > 0)
                            {
                                type += boxId;
                            }
                        }
                        else if (Shared.TERRAIN_ID_FIRST_DBOX <= id && id <= Shared.TERRAIN_ID_LAST_DBOX)
                        {
                            var boxId = id - Shared.TERRAIN_ID_FIRST_DBOX;
                            type = EntityType.BOX;
                            if (boxId > 0)
                            {
                                type += boxId;
                            }
                        }
                        else if (Shared.TERRAIN_ID_LAST_DBOX < id)
                        {
                            type = EntityType.PLAYER;
                        }
                        if (!string.IsNullOrEmpty(type))
                        {
                            var victim = new EntityXml();
                            victim.Type = type;
                            victim.X    = x; victim.Y = y;
                            entities.Add(victim);
                        }
                    }

                    Console.Write("\rEntities information into game level format... [" +
                                  (currentProgress * 100 / totalProgress) + "%]");
                }
            }
            level.Entities = entities.ToArray();

            Console.WriteLine("\rEntities information into game level format... [100%]");

            // Save the level data in a file:
            XmlFile.Save(outputFileName, level);
            Console.WriteLine(outputFileName + " generated & saved...\n");
            Shared.ShowEnd();
        }
示例#11
0
        /// <summary>
        /// Converts a level xml descriptor into a TMX xml text.
        /// </summary>
        /// <param name="level">The level descriptor</param>
        /// <returns>The TMX xml text.</returns>
        public static string[] ConvertToTmxText(LevelXml level)
        {
            var lines  = new List <string>();
            int width  = level.World.Width;
            int height = level.World.Height;

            // Set the root:
            lines.Add("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
            lines.Add("<map version=\"1.0\" orientation=\"orthogonal\" renderorder=\"right-down\" width=\"" +
                      width + "\" height=\"" + height + "\" tilewidth=\"16\" tileheight=\"16\">");

            Console.WriteLine("TMX root set...");

            // Set the properties:
            lines.Add(" <properties>");
            lines.Add("  <property name=\"Name\" value=\"" + level.Name + "\"/>");
            lines.Add("  <property name=\"Description\" value=\"" + level.Description + "\"/>");
            lines.Add(" </properties>");

            Console.WriteLine("TMX properties set...");

            // Set the tilesets:
            lines.Add(" <tileset firstgid=\"1\" name=\"" + level.Tileset + "\" tilewidth=\"16\" tileheight=\"16\">");
            lines.Add("  <image source=\"" + level.Tileset + ".png\" width=\"512\" height=\"512\"/>");
            lines.Add(" </tileset>");
            lines.Add(" <tileset firstgid=\"1025\" name=\"Charset\" tilewidth=\"16\" tileheight=\"16\">");
            lines.Add("  <image source=\"Charset.png\" width=\"256\" height=\"256\"/>");
            lines.Add(" </tileset>");

            Console.WriteLine("TMX tilesets set...");

            // Set the terrain layer:
            lines.Add(" <layer name=\"Terrain\" width=\"" + width + "\" height=\"" + height + "\">");
            lines.Add("  <data>");

            int currentProgress = 0;
            int totalProgress   = level.World.Width * level.World.Height;

            Console.Write("\rTerrain information into TMX level format... [" +
                          (currentProgress * 100 / totalProgress) + "%]");

            var terrain = level.World.Terrain;

            for (int i = 0, k = 0; i < height; i++)
            {
                for (int j = 0; j < width; j++, k++)
                {
                    var gid = terrain[k] + 1;
                    lines.Add("   <tile gid=\"" + gid + "\"/>");

                    Console.Write("\rTerrain information into TMX level format... [" +
                                  (currentProgress * 100 / totalProgress) + "%]");
                }
            }

            Console.WriteLine("\rTerrain information into TMX level format... [100%]");

            lines.Add("  </data>");
            lines.Add(" </layer>");

            // Set the entities layer:
            lines.Add(" <layer name=\"Entities\" width=\"" + width + "\" height=\"" + height + "\">");
            lines.Add("  <data>");

            currentProgress = 0;
            Console.Write("\rEntities information into TMX level format... [" +
                          (currentProgress * 100 / totalProgress) + "%]");

            for (int i = 0; i < height; i++)
            {
                for (int j = 0; j < width; j++)
                {
                    int gid    = 0;
                    var entity = level.Entities.Where(v => v.X == j && v.Y == i).FirstOrDefault();
                    if (entity != null)
                    {
                        if (entity.Type == EntityType.BOX)
                        {
                            gid = TERRAIN_ID_FIRST_BOX + 1;
                        }
                        else if (entity.Type == EntityType.PLAYER)
                        {
                            gid = PLAYER_GID;
                        }
                    }
                    lines.Add("   <tile gid=\"" + gid + "\"/>");

                    Console.Write("\rEntities information into TMX level format... [" +
                                  (currentProgress * 100 / totalProgress) + "%]");
                }
            }
            lines.Add("  </data>");
            lines.Add(" </layer>");

            Console.WriteLine("\rEntities information into TMX level format... [100%]");

            // Set the end:
            lines.Add("</map>");

            return(lines.ToArray());
        }
示例#12
0
        //--------------------------------------------------------------------------------------
        // Methods (Convert):
        //--------------------------------------------------------------------------------------

        /// <summary>
        /// Converts a text map level into a level xml descriptor.
        /// </summary>
        /// <param name="mapLines">The text map.</param>
        /// <returns>The converted map.</returns>
        public static LevelXml ConvertFromTextMap(string[] mapLines)
        {
            // Validate the input data:
            if (mapLines == null || mapLines.Length <= 0)
            {
                throw new Exception("No input map lines to convert!");
            }
            if (mapLines.Length > 1 && string.IsNullOrEmpty(mapLines[mapLines.Length - 1]))
            {
                var ml = new string[mapLines.Length - 1];
                for (int i = 0; i < ml.Length; i++)
                {
                    ml[i] = mapLines[i];
                }
                mapLines = ml;
            }
            if (mapLines.Select(l => string.IsNullOrEmpty(l)).Aggregate((cur, nxt) => cur || nxt))
            {
                throw new Exception("Some of the map lines are empty!");
            }

            // Transform the input data into something more cleaner:
            ShowMessageInBox("Raw input map", '|', '-');
            Console.WriteLine();
            ShowTextMap(mapLines);
            mapLines = transform(mapLines);
            ShowMessageInBox("Final input map", '|', '-');
            Console.WriteLine();
            ShowTextMap(mapLines);

            // Initialize the basic data of the level:
            var level = new LevelXml();

            level.Name        = DEFAULT_NAME;
            level.Description = DEFAULT_DESCRIPTION;
            level.Tileset     = DEFAULT_TILESET;

            // Set the terrain & entities data of the level:
            level.World         = new WorldXml();
            level.World.Width   = mapLines[0].Length;
            level.World.Height  = mapLines.Length;
            level.World.Content = "\n";

            int             x = 0, y = 0;
            var             entities  = new List <EntityXml>();
            Action <string> addEntity = (type) => {
                var victim = new EntityXml();
                victim.Type = type;
                victim.X    = x; victim.Y = y;
                entities.Add(victim);
            };

            int currentProgress = 0;
            int totalProgress   = level.World.Width * level.World.Height;

            Console.Write("\rText map into game level format... [" +
                          (currentProgress * 100 / totalProgress) + "%]");

            foreach (var line in mapLines)
            {
                foreach (var c in line)
                {
                    var id = TERRAIN_ID_EMPTY;
                    switch (c)
                    {
                    case WALL:  id = TERRAIN_ID_FIRST_WALL;   break;

                    case GOAL:  id = TERRAIN_ID_FIRST_DFLOOR; break;

                    case FLOOR: id = TERRAIN_ID_FIRST_FLOOR;  break;

                    case PLAYER_ON_GOAL:
                        id = TERRAIN_ID_FIRST_DFLOOR;
                        addEntity(EntityType.PLAYER);
                        break;

                    case BOX_ON_GOAL:
                        id = TERRAIN_ID_FIRST_DFLOOR;
                        addEntity(EntityType.BOX);
                        break;

                    case PLAYER:
                        id = TERRAIN_ID_FIRST_FLOOR;
                        addEntity(EntityType.PLAYER);
                        break;

                    case BOX:
                        id = TERRAIN_ID_FIRST_FLOOR;
                        addEntity(EntityType.BOX);
                        break;
                    }
                    level.World.Content += id.ToString("0000");
                    level.World.Content += " ";
                    ++x;

                    Console.Write("\rText map into game level format... [" +
                                  (currentProgress * 100 / totalProgress) + "%]");
                }
                level.World.Content += "\n";
                x = 0;
                ++y;
            }

            Console.WriteLine("\rText map into game level format... [100%]");

            level.Entities = entities.ToArray();
            return(level);
        }