static public List <PlayerController.MapElement> loadExistMapList() { List <PlayerController.MapElement> list = new List <PlayerController.MapElement>(); String[] directories = DataUtility.getFolderList(); for (int i = 0; i < directories.Length; i++) { WorldDataConst.WorldData worldInfo = DataUtility.load <WorldDataConst.WorldData>(directories[i], WORLD_FILENAME); if (worldInfo != null) { PlayerController.MapElement element = new PlayerController.MapElement(); element.name = worldInfo.name; element.uuid = worldInfo.uuid; element.seeds = worldInfo.seeds; element.width = worldInfo.width; element.height = worldInfo.height; element.lastUpdate_long = worldInfo.lastUpdate; element.lastUpdate = DateTimeOffset.FromUnixTimeSeconds(worldInfo.lastUpdate).LocalDateTime.ToString(); element.pathName = directories[i]; list.Add(element); } } MapComparer comparer = new MapComparer(); list.Sort((a, b) => (int)(a.lastUpdate_long - b.lastUpdate_long)); list.Reverse(); return(list); }
public void loadNewMapDatas() { if (newWorldData_Generate != null) { worldData = newWorldData_Generate; preNotifyNewMap(); } }
public async void Cmd_Generate_Async(string name, string seeds, int width, int height) { var context = SynchronizationContext.Current; await Task.Run(() => { worldData = WorldGenerator.GenerateMap(name, seeds, width, height); newWorldData_Generate = worldData; preNotifyNewMap(); current_uuid = newWorldData_Generate.uuid; Debug.Log("Generate End!"); }); }
static public WorldDataConst.WorldData loadExistMapDatas(PlayerController.MapElement element) { var dbPath = element.pathName; WorldDataConst.WorldData worldData = DataUtility.load <WorldDataConst.WorldData>(dbPath, WORLD_FILENAME); worldData.terrainList = DataUtility.load <ListStore <WorldDataConst.EachTerrainData> >(dbPath, TERRAIN_FILENAME).getList(); worldData.buildingList = DataUtility.load <ListStore <WorldDataConst.EachRegionData> >(dbPath, BUILDING_FILENAME).getList(); worldData.vehicleList = DataUtility.load <ListStore <WorldDataConst.EachVehicleInfo> >(dbPath, VEHICLE_FILENAME).getList(); worldData.wildAnimalList = DataUtility.load <ListStore <WorldDataConst.EachWildAnimal> >(dbPath, WILDANIMAL_FILENAME).getList(); worldData.mapPicture = DataUtility.readPictureData(dbPath, MAPIMAGE_FILENAME); return(worldData); }
static public void storeNemMap(WorldDataConst.WorldData worldData, string name) { worldData.name = name; DateTime dt = DateTime.Now.ToUniversalTime(); DateTime dtUnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); worldData.lastUpdate = (long)dt.Subtract(dtUnixEpoch).TotalSeconds; DataUtility.save(worldData, worldData.uuid, WORLD_FILENAME); DataUtility.save(ListStore <WorldDataConst.EachTerrainData> .getListStore(worldData.terrainList), worldData.uuid, TERRAIN_FILENAME); DataUtility.save(ListStore <WorldDataConst.EachRegionData> .getListStore(worldData.buildingList), worldData.uuid, BUILDING_FILENAME); DataUtility.save(ListStore <WorldDataConst.EachVehicleInfo> .getListStore(worldData.vehicleList), worldData.uuid, VEHICLE_FILENAME); DataUtility.save(ListStore <WorldDataConst.EachWildAnimal> .getListStore(worldData.wildAnimalList), worldData.uuid, WILDANIMAL_FILENAME); DataUtility.storePictureData(worldData.mapPicture, worldData.uuid, MAPIMAGE_FILENAME); }
public void setReadyToStart() { isReady = true; newWorldData_Generate = null; foreach (KeyValuePair <NetworkInstanceId, NetworkIdentity> dict in ClientScene.objects) { NetworkIdentity networkIdentity = dict.Value; PlayerController playerCtr = networkIdentity.GetComponent <PlayerController>(); if (playerCtr != null) { playerCtr.TargetDispTopMenuPanel(playerCtr.connectionToClient); playerCtr.Target_CloseInformationPanel(playerCtr.connectionToClient); } } }
static public Texture2D createMapPicture(WorldDataConst.WorldData worldData) { // テクスチャ生成 var tex = new Texture2D(worldData.width, worldData.height); for (int y = 0; y < worldData.height; y++) { for (int x = 0; x < worldData.width; x++) { WorldDataConst.EachTerrainData terrainData = worldData.terrainList[y * worldData.width + x]; Color color = Color.cyan; string colorString = "#4080C0"; // 赤色の16進数文字列 ColorUtility.TryParseHtmlString(colorString, out color); if (terrainData.type == WorldDataConst.TileType.FIELD) { colorString = "#A7C131"; // 赤色の16進数文字列 ColorUtility.TryParseHtmlString(colorString, out color); } tex.SetPixel(x, y, color); } } return(tex); }
public void loadExistMapDatas(PlayerController.MapElement element) { worldData = WorldDataUtility.loadExistMapDatas(element); preNotifyNewMap(); current_uuid = element.pathName; }
//サーバでの世界データ作成 static public WorldDataConst.WorldData GenerateMap(string name, string seeds, int width, int height) { Vector2Int size = new Vector2Int(width, height); Debug.Log("Start Generating! Seeds:" + seeds + " Width:" + size.x + " Height:" + size.y); //Seedsごとに同じ地図データを生成するため、Seeds固定の乱数生成器を作成 System.Random rnd = new System.Random(seeds.GetHashCode()); int seaSplitNum = 10; int seaSplitSizeX = size.x / seaSplitNum; int seaSplitSizeY = size.y / seaSplitNum; Debug.Log("SplitWidth:" + seaSplitSizeX + " SplitHeight:" + seaSplitSizeY); //地図上に描く縦横の海バンド生成 List <BandSeed> verticalBands = generateBandSeeds(rnd, 0, 2, seaSplitNum, seaSplitSizeX); List <BandSeed> horizontalBands = generateBandSeeds(rnd, 0, 2, seaSplitNum, seaSplitSizeY); //地図上に描く海のSeeds List <TerrainSeed> sea_seeds = generateSeeds(rnd, size, 0, 5, seaSplitSizeX, seaSplitSizeY, 2); //地図上に描く陸のSeeds List <TerrainSeed> field_seeds = generateSeeds(rnd, size, 5, 12, seaSplitSizeX, seaSplitSizeY, 1); //Seedsを元に初期マップ生成 WorldDataConst.EachTerrainData[] tileMap = generateFirstTileMap(rnd, size, verticalBands, horizontalBands, sea_seeds, field_seeds); //マップをランダマイズ int tryIndex = rnd.Next(10, 30); for (int l = 0; l < tryIndex; l++) { tileMap = deformationTileMap(rnd, size, tileMap); } //マップに存在する1Cellの陸や海を除去 tileMap = fillGap(size, tileMap); //すべての陸と海のサイズを計算 int[] areaNoList = Enumerable.Repeat <int>(-1, tileMap.Length).ToArray(); List <AreaInvestigationInfo> sizeList = investigationSizeList(size, tileMap, areaNoList); sizeList = aggregateSizeList(sizeList); //小さな島は削除 tileMap = removeSmallIsland(size, tileMap, areaNoList, sizeList); WorldDataConst.WorldData worldData = new WorldDataConst.WorldData(); worldData.name = name; worldData.uuid = Guid.NewGuid().ToString().Replace("-", ""); worldData.seeds = seeds; worldData.width = width; worldData.height = height; //現在のUTC時刻取得 DateTime dt = DateTime.Now.ToUniversalTime(); DateTime dtUnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); worldData.lastUpdate = (long)dt.Subtract(dtUnixEpoch).TotalSeconds; worldData.terrainList = new List <WorldDataConst.EachTerrainData>(tileMap); worldData.buildingList = new List <WorldDataConst.EachRegionData>(); worldData.vehicleList = new List <WorldDataConst.EachVehicleInfo>(); worldData.wildAnimalList = new List <WorldDataConst.EachWildAnimal>(); return(worldData); }