예제 #1
0
        public static string WriteMTilesets(string objFolder, string outputDir, GisPosition gisPosition, bool merge = false)
        {
            var tileConverter = new TilesConverter(objFolder, outputDir, gisPosition)
            {
                MergeTileJsonFiles = merge
            };

            return(tileConverter.Run());
            //var objFiles = Directory.GetFiles(objFolder, "*.obj");
            //var tilesetJson = Utility.CombineTilesets(outputDir, gisPosition, objFiles);
            //return tilesetJson;
        }
예제 #2
0
        public static (FileStream, string) getNewProblem(string suit = "s")
        {
            var dirChar       = Path.DirectorySeparatorChar;
            var outputDirPath = string.Join(dirChar, Assembly.GetExecutingAssembly().Location.Split(dirChar).SkipLast(1).Append(resourcesDirName).Append(outputDirName));

            var offset = 0;

            if (suit == "s")
            {
                offset = 18;
            }
            else if (suit == "p")
            {
                offset = 9;
            }
            var rd = new Random();

            int[]  hand;
            string handStr          = "";
            int    shanten          = 7;
            bool   handAlreadyExist = true;
            var    nbIter           = 0;
            var    shantenCalc      = new ShantenCalculator();
            var    availableTiles   = new List <int>();

            for (int i = 0; i <= 8; i++)
            {
                availableTiles.Add(i);
                availableTiles.Add(i);
                availableTiles.Add(i);
                availableTiles.Add(i);
            }
            while (shanten != 0 || handAlreadyExist)
            {
                hand = new int[34];
                for (int i = 1; i <= 13; i++)
                {
                    var roll  = rd.Next(0, availableTiles.Count);
                    var value = availableTiles[roll];
                    hand[offset + value]++;
                    availableTiles.RemoveAt(roll);
                }
                shanten = shantenCalc.Calculate_shanten(hand);
                nbIter++;
                var hand136 = TilesConverter.to_136_array(hand.ToList());
                handStr = TilesConverter.to_one_line_string(hand136);

                var outputFileName = $"{hand}.png";
                var outputFilePath = string.Join(dirChar, new string[] { outputDirPath, outputFileName });
                handAlreadyExist = File.Exists(outputFilePath);
            }
            return(GetImageFromTiles(handStr), handStr);
        }
예제 #3
0
        static int fromEmojiToTile34(DiscordEmoji emoji)
        {
            var emojiSplit = emoji.ToString().Split(':');
            var array      = TilesConverter.one_line_string_to_34_array(emojiSplit[1]);

            for (int i = 0; i < array.Length; i++)
            {
                if (array[i] > 0)
                {
                    return(i);
                }
            }
            return(-1);
        }
예제 #4
0
        public void Test_WriteTileset()
        {
            CheckObjFiles();
            var outputDir = "tileset";

            if (!Directory.Exists(outputDir))
            {
                Directory.CreateDirectory(outputDir);
            }
            var gisPosition = new GisPosition();

            TilesConverter.WriteTilesetFile(TestObjFile, outputDir, gisPosition);
            Assert.True(File.Exists(Path.Combine(outputDir, "tileset.json")));
        }
예제 #5
0
        public void Test_WriteTileset2()
        {
            CheckObjFiles();
            var outputDir = "tileset2";

            if (!Directory.Exists(outputDir))
            {
                Directory.CreateDirectory(outputDir);
            }
            var objParser = new Obj2Gltf.WaveFront.ObjParser(TestObjFile);
            var objModel  = objParser.GetModel();

            var gisPosition = new GisPosition();

            TilesConverter.WriteTilesetFile(objModel, Path.GetDirectoryName(TestObjFile), outputDir, gisPosition);
            Assert.True(File.Exists(Path.Combine(outputDir, "tileset.json")));
        }
예제 #6
0
        public async Task Hand(
            CommandContext ctx,
            [Description("The hand to display. Circles: [0-9]p, Chars: [0-9]m, Bamboo: [0-9]s, Honnors: [1-7]z, Dragons: [R,W,G]d, Winds: [ESWN]w")] string hand,
            [Description("The options people can vote for, can be empty, \"all\", or be another hand format")] string options = ""
            )
        {
            try
            {
                var basicHand    = HandParser.GetSimpleHand(hand);
                var handEmoji    = HandParser.GetHandEmojiCodes(hand, ctx.Client);
                var optionsEmoji = options == "all"
                    ? handEmoji
                    : HandParser.GetHandEmojiCodes(options, ctx.Client);
                try
                {
                    //await ctx.Message.DeleteAsync();
                }
                catch
                {
                    // do nothing
                }

                var hand34      = TilesConverter.one_line_string_to_34_array(basicHand);
                var shantenCalc = new ShantenCalculator();
                int shanten     = -2;
                var nbTiles     = hand34.Sum();
                if (nbTiles == 13 || nbTiles == 14)
                {
                    shanten = shantenCalc.Calculate_shanten(hand34);
                }
                var message = await ctx.Channel.SendMessageAsync($"<@!{ctx.User.Id}>: {GetHandMessage(handEmoji)}  {getShanten(shanten)}");

                {
                    foreach (var emoji in optionsEmoji)
                    {
                        await message.CreateReactionAsync(emoji);
                    }
                }
            }
            catch (Exception e)
            {
                await ctx.RespondAsync(e.Message);
            }
        }
예제 #7
0
        public void Test_MergeTilesets()
        {
            var name      = "mergetest";
            var objFolder = MOfficeFolder;

            Assert.True(Directory.Exists(objFolder), "Input Folder does not exist!");
            var outputDir = name;

            if (!Directory.Exists(outputDir))
            {
                Directory.CreateDirectory(outputDir);
            }
            var gisPosition   = new GisPosition();
            var lod           = true;
            var tileConverter = new TilesConverter(objFolder, outputDir, gisPosition);
            var tilesetJson   = tileConverter.Run(lod);

            Assert.True(File.Exists(tilesetJson));
        }
예제 #8
0
        public void Test_CombineTilesets()
        {
            var name      = "test";
            var objFolder = MOfficeFolder;

            Assert.True(Directory.Exists(objFolder), "Input Folder does not exist!");
            var outputDir = name; //"mtileset";

            if (!Directory.Exists(outputDir))
            {
                Directory.CreateDirectory(outputDir);
            }
            var gisPosition = new GisPosition();

            var tileConverter = new TilesConverter(objFolder, outputDir, gisPosition)
            {
                MergeTileJsonFiles = false
            };
            var tilesetJson = tileConverter.Run();

            Assert.True(File.Exists(tilesetJson));
        }
예제 #9
0
        public static string SplitObjAndMergeMTilesetsWithZip(string objZipFile, string outputDir, GisPosition gisPosition, int splitLevel = 2)
        {
            var name     = Path.GetFileNameWithoutExtension(objZipFile);
            var unzipDir = Path.Combine(Path.GetDirectoryName(objZipFile), name);

            if (Directory.Exists(unzipDir))
            {
                Directory.Delete(unzipDir, true);
            }
            Directory.CreateDirectory(unzipDir);
            try
            {
                ExtractZipFile(objZipFile, unzipDir);
                var objFile = Path.Combine(unzipDir, "model.obj");
                if (!File.Exists(objFile))
                {
                    objFile = Path.Combine(unzipDir, name + ".obj");
                }
                if (!File.Exists(objFile))
                {
                    throw new FileNotFoundException("Obj file not found", objFile);
                }
                var tilesOpts = new TilesOptions {
                    MergeTileJsonFiles = true, OutputFolder = outputDir, WriteChildTileJson = false
                };
                using (var objParser = new Obj2Gltf.WaveFront.ObjParser(objFile))
                {
                    var objModel       = objParser.GetModel();
                    var objModels      = objModel.Split(splitLevel);
                    var tilesConverter = new TilesConverter(unzipDir, objModels, gisPosition, tilesOpts);
                    return(tilesConverter.Run());
                }
            }
            finally
            {
                Directory.Delete(unzipDir, true);
            }
        }