/// <summary> /// 重置和npc的聊天记录 /// </summary> public void ResetChatRecords() { DataHandler.SaveInstanceListToFile <HLHNPCChatRecord>(new List <HLHNPCChatRecord>(), CommonData.chatRecordsFilePath); }
/// <summary> /// 保存游戏购买记录 /// </summary> public void SaveBuyRecord() { DataHandler.SaveInstanceDataToFile <BuyRecord> (BuyRecord.Instance, CommonData.buyRecordFilePath, true); }
/// <summary> /// 保存和npc的聊天记录 /// </summary> public void SaveChatRecords() { List <HLHNPCChatRecord> chatRecords = GameManager.Instance.gameDataCenter.chatRecords; DataHandler.SaveInstanceListToFile <HLHNPCChatRecord>(chatRecords, CommonData.chatRecordsFilePath); }
/// <summary> /// 保存当前关卡单词学习记录 /// </summary> public void SaveCurrentMapWordsRecords() { DataHandler.SaveInstanceListToFile <HLHWord>(GameManager.Instance.gameDataCenter.currentMapWordRecords, CommonData.currentMapWordsRecordsFilePath); }
/// <summary> /// 清理当前单词学习记录并保存 /// </summary> public void ClearCurrentMapWordsRecordAndSave() { GameManager.Instance.gameDataCenter.currentMapWordRecords.Clear(); DataHandler.SaveInstanceListToFile <HLHWord>(new List <HLHWord>(), CommonData.currentMapWordsRecordsFilePath); }
private static MonsterModel[] LoadMonsterModels(string monsterDataPath) { string monsterDataString = DataHandler.LoadDataString(monsterDataPath); string[] monsterDatas = monsterDataString.Split(new char[] { '\n' }, System.StringSplitOptions.None); MonsterModel[] monsterModels = new MonsterModel[monsterDatas.Length - 1]; for (int i = 1; i < monsterDatas.Length; i++) { string monsterData = monsterDatas [i]; MonsterModel mm = new MonsterModel(); monsterModels [i - 1] = mm; string[] detailDatas = monsterData.Split(new char[] { ',' }, System.StringSplitOptions.None); mm.monsterId = int.Parse(detailDatas [0]); mm.monsterName = detailDatas [1]; mm.monsterSkeName = detailDatas [3]; mm.attackInterval = float.Parse(detailDatas [5]); mm.gold = int.Parse(detailDatas [6]); mm.experience = int.Parse(detailDatas [7]); mm.maxHealth = int.Parse(detailDatas [8]); mm.attack = int.Parse(detailDatas [9]); mm.armor = int.Parse(detailDatas [10]); mm.magicAttack = int.Parse(detailDatas [11]); mm.magicResist = int.Parse(detailDatas [12]); mm.crit = float.Parse(detailDatas [13]); mm.dodge = float.Parse(detailDatas [14]); mm.armorDecrease = int.Parse(detailDatas [15]); mm.magicResistDecrease = int.Parse(detailDatas [16]); mm.critHurtScaler = float.Parse(detailDatas [17]); mm.attackSpeedLevel = int.Parse(detailDatas[18]); mm.evaluate = int.Parse(detailDatas[19]); mm.story = detailDatas[20]; mm.monsterSays[0] = detailDatas[21].Replace('+', ','); mm.monsterSays[1] = detailDatas[22].Replace('+', ','); mm.monsterSays[2] = detailDatas[23].Replace('+', ','); //PropertyType type = GetProperty(int.Parse(detailDatas[21])); //float value = float.Parse(detailDatas[22]); //mm.puzzleCorrectDecrease = new PropertySet(type, value); //type = GetProperty(int.Parse(detailDatas[23])); //value = float.Parse(detailDatas[24]); //mm.puzzleWrongIncrease = new PropertySet(type, value); } return(monsterModels); }
/// <summary> /// 保存当前关卡地图事件记录 /// </summary> public void SaveCurrentMapEventsRecords() { DataHandler.SaveInstanceDataToFile <CurrentMapEventsRecord>(GameManager.Instance.gameDataCenter.currentMapEventsRecord, CommonData.currentMapEventsRecordFilePath); }
/// <summary> /// 保存应用信息【主要是当前版本号】 /// </summary> public void SaveApplicationInfo() { DataHandler.SaveInstanceDataToFile <ApplicationInfo>(ApplicationInfo.Instance, CommonData.applicationInfoFilePath); }
/// <summary> /// 保存当前小地图记录 /// </summary> public void SaveCurrentMapMiniMapRecord() { DataHandler.SaveInstanceDataToFile <MiniMapRecord>(GameManager.Instance.gameDataCenter.currentMapMiniMapRecord, CommonData.miniMapRecordFilePath); }
/// <summary> /// 截屏并截取分享部分的图片 /// </summary> /// <returns>The screen shot and share.</returns> private IEnumerator TrimScreenShotAndShare() { yield return(new WaitForEndOfFrame()); // 截屏 Texture2D texture = ScreenCapture.CaptureScreenshotAsTexture(); Debug.LogFormat("截屏图片大小[{0},{1}]", texture.width, texture.height); float transferScaler = 1f; // 按照分辨率来确认转换系数 if (Camera.main.pixelWidth < 1080f) { if (CommonData.HWScalerOfCurrentScreen < 1.7f) { transferScaler = CommonData.scalerToPresetH; } else { transferScaler = CommonData.scalerToPresetW; } } // 获取分享区域的大小 int shareHUDWidth = (int)((shareShotcutRect.transform as RectTransform).rect.width * transferScaler); int shareHUDHeight = (int)((shareShotcutRect.transform as RectTransform).rect.height * transferScaler); Debug.LogFormat("实际图片大小:[{0},{1}]", shareHUDWidth, shareHUDHeight); // 分享区域在y方向的偏移 int sharePlaneFixY = (int)(sharePlane.localPosition.y * transferScaler); Debug.LogFormat("3y:{0}", sharePlane.localPosition.y); // 分享区域的X方向offset和Y方向offset int offsetYFix = (int)(shareShotcutRect.localPosition.y * transferScaler); int offsetX = (texture.width - shareHUDWidth) / 2; // 实际分享区域的最小y值 int offsetYMin = (texture.height - shareHUDHeight) / 2 + offsetYFix + sharePlaneFixY; // 实际分享区域的最大y值 int offsetYMax = (texture.height + shareHUDHeight) / 2 + offsetYFix + sharePlaneFixY; //int offsetYMin = offsetYFix; //int offsetYMax = offsetYFix + shareHUDHeight; Debug.LogFormat("实际最小y{0},最大y{1}", offsetYMin, offsetYMax); // 按照分享图片的大小创建新的空纹理 Texture2D newT2d = new Texture2D(shareHUDWidth, shareHUDHeight); // 像素处理 for (int i = offsetX; i < texture.width - offsetX; i++) { for (int j = offsetYMin; j < offsetYMax; j++) { Color c = texture.GetPixel(i, j); newT2d.SetPixel(i - offsetX, j - offsetYMin, c); } } // 纹理应用 newT2d.Apply(); // 纹理转化为jpg格式二进制数据 byte[] trimImgData = newT2d.EncodeToJPG(); // 检查临时分享文件夹是否存在,不存在创建文件夹 if (!DataHandler.DirectoryExist(Application.persistentDataPath + "/tempPics")) { DataHandler.CreateDirectory(Application.persistentDataPath + "/tempPics"); } // 临时图片保存位置 string trimImgPath = Application.persistentDataPath + "/tempPics/shareImage.jpg"; // 保存图片 File.WriteAllBytes(trimImgPath, trimImgData); // 清理工作 Destroy(texture); Destroy(newT2d); texture = null; newT2d = null; trimImgData = null; Resources.UnloadUnusedAssets(); GC.Collect(); #if UNITY_EDITOR //DataHandler.DeleteFile(Application.persistentDataPath + "/tempPics/shareImage.jpg"); QuitShareView(); #elif UNITY_IOS || UNITY_ANDROID Share(); #endif }
/// <summary> /// 保存游戏设置 /// </summary> public void SaveGameSettings() { string gameSettingsPath = string.Format("{0}/{1}", CommonData.persistDataPath, "GameSettings.json"); DataHandler.SaveInstanceDataToFile <GameSettings> (GameManager.Instance.gameDataCenter.gameSettings, gameSettingsPath); }
/// <summary> /// 读取地图数据,并将数据转化为自定义的MapData模型 /// </summary> /// <returns>The map.</returns> /// <param name="mapDataPath">Map data path.</param> private static HLHMapData ReadMap(string mapDataPath, FileInfo fi) { // 读取原始json数据 string oriMapDataString = DataHandler.LoadDataString(mapDataPath); // MiniJson解析json数据 Dictionary <string, object> oriMapDataDic = Json.Deserialize(oriMapDataString) as Dictionary <string, object>; // 获取地图宽高 int mapHeight = int.Parse(oriMapDataDic ["height"].ToString()); int mapWidth = int.Parse(oriMapDataDic ["width"].ToString()); Debug.LogFormat("name:{0},height:{1},width:{2}", fi.Name, mapHeight, mapWidth); // 获取标准地图块宽高 int mapTileHeight = int.Parse(oriMapDataDic ["tileheight"].ToString()); int mapTileWidth = int.Parse(oriMapDataDic ["tilewidth"].ToString()); // 获取地图上所有图层的数据 List <object> layersDataArray = (List <object>)oriMapDataDic ["layers"]; List <object> tileSetsArray = (List <object>)oriMapDataDic ["tilesets"]; // 所有构建地图使用的图层 List <MapLayer> mapLayers = new List <MapLayer> (); // 所有地图附加信息图层 List <MapAttachedInfoLayer> attachedInfoLayers = new List <MapAttachedInfoLayer> (); // 地图块图集名称 string tileSetsImageName = string.Empty; // 地图块数据(内含walkable info array) MapTilesInfo tileInfo = null; Dictionary <string, object> tileSetInfo = null; int[,] mapWalkableInfoArray = new int[mapWidth, mapHeight]; for (int m = 0; m < mapWidth; m++) { for (int n = 0; n < mapHeight; n++) { mapWalkableInfoArray[m, n] = 1; } } for (int j = 0; j < layersDataArray.Count; j++) { Dictionary <string, object> layerDataDic = layersDataArray [j] as Dictionary <string, object>; List <MapTile> tileDatas = new List <MapTile> (); //获取当前层的类型名称 string layerType = layerDataDic ["type"].ToString(); // 当前层为地图层 if (layerType.Equals("tilelayer")) { List <object> tileDataArray = (List <object>)layerDataDic["data"]; string layerName = layerDataDic["name"].ToString(); if (layerName.Equals("FloorLayer")) { Dictionary <string, object> tileSetsNameDic = layerDataDic["properties"] as Dictionary <string, object>; tileSetsImageName = tileSetsNameDic["TilesetImageName"].ToString(); tileInfo = GetMapTilesInfoWithName(tileSetsImageName); } if (tileSetInfo == null) { for (int k = 0; k < tileSetsArray.Count; k++) { Dictionary <string, object> tempTileSetInfo = tileSetsArray[k] as Dictionary <string, object>; string sourceName = tempTileSetInfo["source"] as string; if (sourceName.Contains(tileSetsImageName)) { tileSetInfo = tempTileSetInfo; break; } } } //获取当前层使用的地图块的firstGid int firstGid = int.Parse(tileSetInfo["firstgid"].ToString()); for (int k = 0; k < tileDataArray.Count; k++) { int row = mapHeight - k / mapWidth - 1; int col = k % mapWidth; int tileIndex = int.Parse(tileDataArray [k].ToString()) - firstGid; if (tileIndex >= 0) { bool canWalk = false; //Debug.LogFormat("mapName:{0},layerName:{1},tileIndex:{2},firstGid:{3}",fi.Name, layerName, tileIndex,firstGid); canWalk = tileInfo.walkableInfoArray [tileIndex] == 1; int miniMapInfo = tileInfo.miniMapInfoArray[tileIndex]; MapTile tile = new MapTile(new Vector2(col, row), tileIndex, canWalk, miniMapInfo); tileDatas.Add(tile); if (layerName == "DecorationLayer") { mapWalkableInfoArray[col, row] = 0; } } } MapLayer layer = new MapLayer(layerName, tileDatas); mapLayers.Add(layer); } // 当前层为事件层 if (layerType.Equals("objectgroup")) { string layerName = layerDataDic ["name"].ToString(); List <MapAttachedInfoTile> attachedInfoTiles = new List <MapAttachedInfoTile> (); List <object> attachedInfoList = (List <object>)layerDataDic ["objects"]; //int monsterCount = 0; for (int k = 0; k < attachedInfoList.Count; k++) { Dictionary <string, object> attachedInfo = attachedInfoList [k] as Dictionary <string, object>; string type = attachedInfo ["type"].ToString(); //Debug.Log(type); //if(type=="monster"){ // monsterCount++; //} float posX = float.Parse(attachedInfo ["x"].ToString()); float posY = float.Parse(attachedInfo ["y"].ToString()); int col = Mathf.RoundToInt(posX / mapTileWidth); int row = mapHeight - Mathf.RoundToInt(posY / mapTileHeight); Vector2 pos = new Vector2(col, row); if (mapWalkableInfoArray[col, row] == 0 && type != "doorGear" && type != "keyDoorGear") { Debug.LogFormat("地图:{0},事件位置和某种装饰位置重合:[{1}/{2},事件类型:{3}](如果装饰不是墙体,则不是错误)", fi.Name, col, mapHeight - row - 1, type); } Dictionary <string, object> properties = null; MapAttachedInfoTile attachedInfoTile = null; List <KVPair> kvPairs = new List <KVPair> (); if (!attachedInfo.ContainsKey("properties")) { attachedInfoTile = new MapAttachedInfoTile(type, pos, kvPairs); attachedInfoTiles.Add(attachedInfoTile); continue; } properties = attachedInfo ["properties"] as Dictionary <string, object>; IDictionaryEnumerator dicEnumerator = properties.GetEnumerator(); while (dicEnumerator.MoveNext()) { string key = dicEnumerator.Key.ToString(); string value = dicEnumerator.Value.ToString(); // Debug.LogFormat ("key:{0},value:{1}",key,value); KVPair kv = new KVPair(key, value); kvPairs.Add(kv); } attachedInfoTile = new MapAttachedInfoTile(type, pos, kvPairs); attachedInfoTiles.Add(attachedInfoTile); } MapAttachedInfoLayer attachedInfoLayer = new MapAttachedInfoLayer(layerName, attachedInfoTiles); attachedInfoLayers.Add(attachedInfoLayer); } } HLHMapData mapData = new HLHMapData(mapHeight, mapWidth, tileSetsImageName, mapLayers, attachedInfoLayers); return(mapData); }
public GameSettings LoadGameSettings() { string settingsPath = string.Format("{0}/{1}", CommonData.persistDataPath, "GameSettings.json"); return(DataHandler.LoadDataToSingleModelWithPath <GameSettings> (settingsPath)); }
public static void SaveMonstersData() { List <MonsterData> monsterDatas = new List <MonsterData>(); string monsterDataPath = "/Users/houlianghong/Desktop/MyGameData/monsters.csv"; MonsterModel[] monsterModels = LoadMonsterModels(monsterDataPath); for (int i = 0; i < monsterModels.Length; i++) { MonsterModel monsterModel = monsterModels[i]; MonsterData monsterData = new MonsterData(); monsterData.agentLevel = 1; monsterData.monsterId = monsterModel.monsterId; monsterData.monsterName = monsterModel.monsterName; monsterData.originalMaxHealth = monsterModel.maxHealth; //基础最大生命值 monsterData.originalAttack = monsterModel.attack; //基础物理伤害 monsterData.originalMagicAttack = monsterModel.magicAttack; //基础魔法伤害 monsterData.originalArmor = monsterModel.armor; //基础护甲 monsterData.originalMagicResist = monsterModel.magicResist; //基础抗性 monsterData.originalArmorDecrease = monsterModel.armorDecrease; //基础护甲穿刺 monsterData.originalMagicResistDecrease = monsterModel.magicResistDecrease; //基础抗性穿刺 monsterData.originalCrit = monsterModel.crit; //基础暴击率 monsterData.originalDodge = monsterModel.dodge; //基础闪避率 monsterData.originalCritHurtScaler = monsterModel.critHurtScaler; //基础暴击系数 monsterData.attackInterval = monsterModel.attackInterval; //攻击间隔 monsterData.rewardExperience = monsterModel.experience; //奖励的经验值 monsterData.rewardGold = monsterModel.gold; //奖励的金钱 monsterData.attackSpeedLevel = monsterModel.attackSpeedLevel; monsterData.mosnterEvaluate = monsterModel.evaluate; monsterData.monsterStory = monsterModel.story.Replace('+', ','); monsterDatas.Add(monsterData); } monsterDataPath = "/Users/houlianghong/Desktop/MyGameData/boss.csv"; monsterModels = LoadMonsterModels(monsterDataPath); for (int i = 0; i < monsterModels.Length; i++) { MonsterModel monsterModel = monsterModels[i]; MonsterData monsterData = new MonsterData(); monsterData.agentLevel = 1; monsterData.monsterId = monsterModel.monsterId; monsterData.monsterName = monsterModel.monsterName; monsterData.originalMaxHealth = monsterModel.maxHealth; //基础最大生命值 monsterData.originalAttack = monsterModel.attack; //基础物理伤害 monsterData.originalMagicAttack = monsterModel.magicAttack; //基础魔法伤害 monsterData.originalArmor = monsterModel.armor; //基础护甲 monsterData.originalMagicResist = monsterModel.magicResist; //基础抗性 monsterData.originalArmorDecrease = monsterModel.armorDecrease; //基础护甲穿刺 monsterData.originalMagicResistDecrease = monsterModel.magicResistDecrease; //基础抗性穿刺 monsterData.originalCrit = monsterModel.crit; //基础暴击率 monsterData.originalDodge = monsterModel.dodge; //基础闪避率 monsterData.originalCritHurtScaler = monsterModel.critHurtScaler; //基础暴击系数 monsterData.attackInterval = monsterModel.attackInterval; //攻击间隔 monsterData.rewardExperience = monsterModel.experience; //奖励的经验值 monsterData.rewardGold = monsterModel.gold; //奖励的金钱 monsterData.attackSpeedLevel = monsterModel.attackSpeedLevel; monsterData.mosnterEvaluate = monsterModel.evaluate; monsterData.monsterStory = monsterModel.story.Replace('+', ','); monsterDatas.Add(monsterData); } string targetPath = CommonData.originDataPath + "/MonstersData.json"; DataHandler.SaveInstanceListToFile <MonsterData>(monsterDatas, targetPath); Debug.Log("怪物数据存储完毕!"); }
/// <summary> /// 保存通关记录 /// </summary> /// <param name="playRecords">Play records.</param> public void SavePlayRecords(List <PlayRecord> playRecords) { DataHandler.SaveInstanceListToFile <PlayRecord>(playRecords, CommonData.playRecordsFilePath); }
/// <summary> /// 重置当前小地图记录并保存 /// </summary> public void ResetCurrentMapMiniMapRecordAndSave() { GameManager.Instance.gameDataCenter.currentMapMiniMapRecord = null; DataHandler.SaveInstanceDataToFile <MiniMapRecord>(null, CommonData.miniMapRecordFilePath); }
/// <summary> /// 保存地图事件记录 /// </summary> public void SaveMapEventsRecord() { DataHandler.SaveInstanceListToFile <MapEventsRecord>(GameManager.Instance.gameDataCenter.mapEventsRecords, CommonData.mapEventsRecordFilePath); }
private void ResetPlayerDataAndSave() { Player.mainPlayer.InitializeMapIndex(); PlayerData playerData = new PlayerData(Player.mainPlayer); playerData.agentLevel = 1; playerData.maxHealth = maxHealth; playerData.originalMaxHealth = maxHealth; playerData.health = maxHealth; playerData.originalMaxMana = maxMana; playerData.maxMana = maxMana; playerData.mana = maxMana; playerData.originalAttack = attack; playerData.attack = attack; playerData.originalMagicAttack = magicAttack; playerData.magicAttack = magicAttack; playerData.originalArmor = armor; playerData.armor = armor; playerData.originalMagicResist = magicResist; playerData.magicResist = magicResist; playerData.originalDodge = dodge; playerData.dodge = dodge; playerData.originalCrit = crit; playerData.crit = crit; playerData.originalAttackSpeed = AttackSpeed.Slow; playerData.originalMoveSpeed = 20; playerData.originalArmorDecrease = 0; playerData.originalMagicResistDecrease = 0; playerData.originalCritHurtScaler = 1.5f; playerData.originalPhysicalHurtScaler = 1f; playerData.originalMagicalHurtScaler = 1f; playerData.originalExtraGold = 0; playerData.originalExtraExperience = 0; playerData.originalHealthRecovery = 0; playerData.originalMagicRecovery = 0; playerData.attackSpeed = AttackSpeed.Slow; playerData.moveSpeed = 20; playerData.armorDecrease = 0; playerData.magicResistDecrease = 0; playerData.critHurtScaler = 1.5f; playerData.physicalHurtScaler = 1f; playerData.magicalHurtScaler = 1f; playerData.extraGold = 0; playerData.extraExperience = 0; playerData.healthRecovery = 0; playerData.magicRecovery = 0; playerData.allEquipmentsInBag = new List <Equipment>(); playerData.allConsumablesInBag = new List <Consumables>(); playerData.allSkillScrollsInBag = new List <SkillScroll>(); playerData.allSpecialItemsInBag = new List <SpecialItem>(); playerData.allLearnedSkillsRecord = new List <SkillModel>(); playerData.allPropertyGemstonesInBag = new List <PropertyGemstone>(); playerData.maxUnlockLevelIndex = 0; playerData.currentLevelIndex = 0; playerData.totalGold = 0; playerData.experience = 0; playerData.isNewPlayer = false; playerData.needChooseDifficulty = true; playerData.skillNumLeft = 0; playerData.luckInOpenTreasure = 0; playerData.luckInMonsterTreasure = 0; DataHandler.SaveInstanceDataToFile <PlayerData>(playerData, CommonData.oriPlayerDataFilePath); }