public void CalcdEnemyDelays(IDictionary <Byte, UInt16> enemyDelays, LevelConfigData levelConfigData) { Byte enemyTotal = levelConfigData.EnemyTotal; UInt16 enemyFrameDelay = levelConfigData.EnemyFrameDelay; UInt16 enemyFrameDelta = levelConfigData.EnemyFrameDelta; UInt16 noneFrameDelay = GetNoneFrameDelay(enemyFrameDelay, enemyFrameDelta); for (Byte key = 0; key < enemyTotal; key++) { SpeedType speedType = (SpeedType)enemyDelays[key]; switch (speedType) { case SpeedType.None: enemyDelays[key] = GetNoneFrameDelay(enemyFrameDelay, enemyFrameDelta); break; case SpeedType.Wave: enemyDelays[key] = GetWaveFrameDelay(enemyFrameDelay, levelConfigData.EnemyFrameRange, levelConfigData.EnemyFrameMinim); break; case SpeedType.Fast: enemyDelays[key] = GetFastFrameDelay(key, enemyTotal, enemyFrameDelay, levelConfigData.EnemyFrameRange, levelConfigData.EnemyFrameMinim); break; default: enemyDelays[key] = noneFrameDelay; break; } } }
private void UpdateLevel(int mergeSheep) { SheepConfigData sheepConfig = ConfigManager.Instance.GetSheepConfigByType(mergeSheep); DataManager.Instance.PlayerData.userExp += sheepConfig.Exp; LevelConfigData levelConfig = ConfigManager.Instance.GetLevelConfigByLevel(DataManager.Instance.PlayerData.userLevel); long maxExp = levelConfig.Maxexp; float progress = DataManager.Instance.PlayerData.userExp * 1.0f / maxExp; Tweener tween = lvlProgress.DOFillAmount(progress, 0.5f); if (progress >= 1.0f) { tween.onComplete = () => { DataManager.Instance.PlayerData.userLevel += 1; lvlProgress.fillAmount = 0.0f; DataManager.Instance.PlayerData.userExp = 0; txtLevelProgress.text = "Lv. " + DataManager.Instance.PlayerData.userLevel + "- <color=white> 0%"; if (DataManager.Instance.PlayerData.userLevel >= 3) { SpawnTimer.Instance.Setup(); } }; } else { txtLevelProgress.text = "Lv. " + DataManager.Instance.PlayerData.userLevel + "- <color=white>" + (progress * 100).ToString("F0") + "%"; } }
void UpdateUI() { t_name.text = roleData.name; t_pope.text = MessageData.GetMessage(108); // 无 t_race.text = MessageData.GetMessage(109); // 人族 t_identity.text = MessageData.GetMessage(163); // 身份 t_sex.text = MessageData.GetMessage(160 + (int)roleData.sex); // 性别 t_level.text = LevelConfigData.GetName(roleData.GetAttr(RoleAttribute.level)); t_interest.text = "笛子、萧"; t_intrinsic.text = MessageData.GetMessage(110 + roleData.intrinsic_disposition[0]); // 内在性格 t_intrinsic.GetComponent <BtnScale>().show_id = 56 + roleData.intrinsic_disposition[0]; for (int i = 0; i < 2; i++) { t_external[i].text = MessageData.GetMessage(130 + roleData.external_disposition[i]); // 外在性格 t_external[i].GetComponent <BtnScale>().show_id = 63 + roleData.external_disposition[i]; } for (int i = 0; i < t_xiantian.Length; i++) { XiantianQiyun data = XiantianQiyunData.dataList[roleData.xiantianqiyun[i]]; t_xiantian[i].text = data.name; t_xiantian[i].transform.parent.GetChild(0).GetComponent <Image>().sprite = UIAssets.instance.itemColor[data.color]; t_xiantian[i].GetComponent <BtnScale>().show_str = data.des; } for (int i = 0; i < t_houtian.Length; i++) { Tools.SetActive(t_houtian[i].transform.parent.gameObject, false); } }
public override void LoadContent() { // Adjust for testing. LevelType levelType = MyGame.Manager.ConfigManager.GlobalConfigData.LevelType; if (LevelType.Test == levelType) { // Load level configuration data. Byte levelNo = Constants.TEST_LEVEL_NUM - 1; MyGame.Manager.LevelManager.LoadLevelConfigData(levelType, levelNo); LevelConfigData levelConfigData = MyGame.Manager.LevelManager.LevelConfigData; levelType = (LevelType)Enum.Parse(typeof(LevelType), levelConfigData.LevelType, true); levelNo = Convert.ToByte(levelConfigData.LevelNo); MyGame.Manager.LevelManager.SetLevelType(levelType); MyGame.Manager.LevelManager.SetLevelNo(levelNo); LevelType = MyGame.Manager.LevelManager.LevelType; LevelIndex = MyGame.Manager.LevelManager.LevelIndex; } else { LevelType = MyGame.Manager.LevelManager.LevelType; LevelIndex = MyGame.Manager.LevelManager.LevelIndex; MyGame.Manager.LevelManager.LoadLevelConfigData(LevelType, LevelIndex); } LevelConfigData = MyGame.Manager.LevelManager.LevelConfigData; // Resets all relevant score level info, MyGame.Manager.ScoreManager.ResetLevel(); // Bullets. MyGame.Manager.BulletManager.Reset(LevelConfigData.BulletMaxim, LevelConfigData.BulletFrame, LevelConfigData.BulletShoot); // Enemies. MyGame.Manager.EnemyManager.Reset(LevelType, LevelConfigData); // Explosions. MyGame.Manager.ExplosionManager.Reset(LevelConfigData.EnemySpawn, LevelConfigData.ExplodeDelay); // Sprites. MyGame.Manager.SpriteManager.Reset(LevelType, MyGame.Manager.LevelManager.LevelNo); levelName = MyGame.Manager.LevelManager.LevelName; levelValu = MyGame.Manager.LevelManager.LevelValu; base.LoadContent(); // Must set this after base load content. enemyTotalText = EnemyTotal.ToString().PadLeft(3, '0'); MyGame.Manager.RenderManager.SetGridDelay(LevelConfigData.GridDelay); MyGame.Manager.StateManager.SetKillSpace(Vector2.Zero); MyGame.Manager.EnemyManager.SpawnAllEnemies(); MyGame.Manager.SpriteManager.LargeTarget.SetHomeSpot(); MyGame.Manager.SoundManager.StopMusic(); SongType songType = MyGame.Manager.SoundManager.GetGameMusic(LevelIndex); MyGame.Manager.SoundManager.PlayGameMusic(songType); }
void DoMerge(SheepController pickUpSheep, SheepController pointSheep) { int nextSheepLevel = pickUpSheep.SheepType + 1; SheepController sheepEvo = SheepFactory.Instance.CreateNewSheep(nextSheepLevel); SheepConfigData sheepConfigData = ConfigManager.Instance.GetSheepConfigByType(nextSheepLevel); sheepEvo.InitSheep(sheepConfigData.Sheepvalue, sheepConfigData.Speed); sheepEvo.onMoveOutOfCageDone = CloseGate; sheepEvo.transform.position = pointSheep.transform.position; pickUpSheep.gameObject.SetActive(false); pointSheep.gameObject.SetActive(false); activeSheeps.Remove(pickUpSheep); activeSheeps.Remove(pointSheep); activeSheeps.Add(sheepEvo); currentSheepInCage--; LevelConfigData lvlConfig = ConfigManager.Instance.GetLevelConfigByLevel(DataManager.Instance.PlayerData.userLevel); txtLimitSheep.text = currentSheepInCage + "/" + lvlConfig.Maxsheep; UpdateLevel(pickUpSheep.SheepType); SimpleResourcesManager.Instance.ShowParticle("MergeFx", pointSheep.transform.position, 1); }
private void UpdateItem(ItemData item) { ItemStaticData staticData = GameData.instance.item_static_data[item.static_id]; item_name.text = staticData.name; item_type.text = GameConst.itemTypeName[staticData.type]; item_sub_type.text = GameConst.itemSubTypeName[staticData.sub_ype]; item_need_lv.text = LevelConfigData.GetBigName(staticData.level); string[] array = staticData.des.Split('\n'); for (int i = 1; i < transform.childCount; i++) { if (i > array.Length) { transform.GetChild(i).gameObject.SetActive(false); } else { GameObject obj = transform.GetChild(i).gameObject; obj.SetActive(true); obj.GetComponent <Text>().text = array[i - 1]; } } //item_attr.text = GetItemAttrDes(staticData); item_bg.sprite = UIAssets.instance.bgColor[staticData.color]; item_color.sprite = UIAssets.instance.itemColor[staticData.color]; item_icon.sprite = UIAssets.instance.itemIcon[staticData.icon]; item_use.SetActive(RoleData.mainRole.ItemIsEquip(item.id)); }
public void OnUpdate() { for (int i = 0; i < view.childCount; i++) { int id = i; Transform tf = view.GetChild(id); tf.SetParent(view, false); tf.Find("idx").GetComponent <Text>().text = id.ToString(); bool has_save = Tools.HasSave(id); Transform info = tf.Find("Info"); Transform create = tf.Find("BtnCreate"); info.gameObject.SetActive(has_save); create.gameObject.SetActive(!has_save); if (has_save) { GameData.instance.save_id = id; // 读取存档数据显示 string quick_save_path = Tools.SavePath("quick_save.data"); byte[] byt = Tools.ReadAllBytes(quick_save_path); QuickSave quick_data = Tools.DeserializeObject <QuickSave>(byt); info.Find("grilHead").gameObject.SetActive(quick_data.sex == Sex.Girl); info.Find("boyHead").gameObject.SetActive(quick_data.sex == Sex.Boy); info.Find("TextName").GetComponent <Text>().text = quick_data.name; info.Find("TextTime").GetComponent <Text>().text = Tools.ShowTime(new System.DateTime(quick_data.time)); info.Find("TextLevel").GetComponent <Text>().text = LevelConfigData.GetName(quick_data.level); } } }
public override void LoadContent() { // Load the configuration for level type + index. levelType = MyGame.Manager.LevelManager.LevelType; levelIndex = MyGame.Manager.LevelManager.LevelIndex; MyGame.Manager.LevelManager.LoadLevelConfigData(levelType, levelIndex); levelConfigData = MyGame.Manager.LevelManager.LevelConfigData; Boolean isGodMode = MyGame.Manager.StateManager.IsGodMode; invincibile = isGodMode || levelConfigData.BonusLevel; // Not bad settings for default. //MyGame.Manager.BulletManager.Reset(10, 200, 100); MyGame.Manager.BulletManager.Reset(5, 50, 100); //MyGame.Manager.BulletManager.Reset(100, 20, 50); // TODO remove - extreme! //const Byte enemySpawn = 1; //const Byte enemyTotal = 3; Byte enemySpawn = MyGame.Manager.ConfigManager.GlobalConfigData.EnemySpawn; // 1; // TODO level config Byte enemyTotal = MyGame.Manager.ConfigManager.GlobalConfigData.EnemyTotal; // 1; // TODO level config MyGame.Manager.EnemyManager.Reset(levelType, enemySpawn, 1000, 5000, enemyTotal); MyGame.Manager.EnemyManager.SpawnAllEnemies(); MyGame.Manager.ExplosionManager.Reset(enemySpawn, MyGame.Manager.ConfigManager.GlobalConfigData.ExplodeDelay); MyGame.Manager.SoundManager.PlayMusic(SongType.GameMusic); base.LoadContent(); }
public void Reset(ScreenType screenType) { if (!MyGame.Manager.ConfigManager.GlobalConfigData.DebugTester) { return; } if (MyGame.Manager.ConfigManager.GlobalConfigData.ScreenType != screenType) { return; } // Reset scores for testing scenario. MyGame.Manager.ScoreManager.ResetAll(); // Reset levels for testing scenario. LevelType LevelType = MyGame.Manager.ConfigManager.GlobalConfigData.LevelType; Byte LevelNo = MyGame.Manager.ConfigManager.GlobalConfigData.LevelNo; if (LevelType.Test == LevelType) { if (ScreenType.Load == screenType) { return; } const Byte levelNo = Constants.TEST_LEVEL_NUM - 1; MyGame.Manager.LevelManager.LoadLevelConfigData(LevelType, levelNo); LevelType = (LevelType)Enum.Parse(typeof(LevelType), MyGame.Manager.LevelManager.LevelConfigData.LevelType, true); LevelNo = Convert.ToByte(MyGame.Manager.LevelManager.LevelConfigData.LevelNo); } // IMPORTANT data must be set otherwise will crash! MyGame.Manager.LevelManager.SetLevelType(LevelType); MyGame.Manager.LevelManager.SetLevelNo(LevelNo); // Load level configuration data. Byte LevelIndex = (Byte)(LevelNo - 1); MyGame.Manager.LevelManager.LoadLevelConfigData(LevelType, LevelIndex); LevelConfigData LevelConfigData = MyGame.Manager.LevelManager.LevelConfigData; // Bullets. MyGame.Manager.BulletManager.Reset(LevelConfigData.BulletMaxim, LevelConfigData.BulletFrame, LevelConfigData.BulletShoot); // Enemies. MyGame.Manager.EnemyManager.Reset(LevelType, LevelConfigData); // Explosions. MyGame.Manager.ExplosionManager.Reset(LevelConfigData.EnemySpawn, LevelConfigData.ExplodeDelay); // Sprites. MyGame.Manager.SpriteManager.Reset(LevelType, MyGame.Manager.LevelManager.LevelNo); }
private static void PrintData(LevelConfigData data) { var fields = data.GetType().GetFields(); foreach (FieldInfo field in fields) { object obj = field.GetValue(data); Console.WriteLine(field.Name + "\t\t" + obj); } }
void OpenGateLeaveSheepOut(SheepController sheepController) { currentSheepIsMovingOut++; currentSheepInCage--; LevelConfigData lvlConfig = ConfigManager.Instance.GetLevelConfigByLevel(DataManager.Instance.PlayerData.userLevel); txtLimitSheep.text = currentSheepInCage + "/" + lvlConfig.Maxsheep; cageGate.DORotate(Vector3.zero, 0.5f).onComplete = () => { sheepController.MoveOutOfCage(); }; }
public void UpdateLevel() { if (LevelConfigData == null) { return; } int level; CurrLevelProgress = LevelConfigData.GetLevelProgress(Value, out level); CurrLevel = level; }
void LoadLevelData() { TextAsset configTextAsset = Resources.Load <TextAsset>(levelDataPath); levelConfigData = GameUtility.DeserializeFromByte <LevelConfigData>(configTextAsset.bytes); //string path = GameUtility.GetStreamingassetPath(levelDataPath); //StartCoroutine(LoadLevelDataRoutine(path,(LevelConfigData _levelConfigData) => { // levelConfigData = _levelConfigData; //})); //levelConfigData = GameUtility.DeserializeFromPath<LevelConfigData>(path); //Debug.LogError(levelConfigData); }
public void UpdateInfo() { RoleData roleData = RoleData.mainRole; level_name.text = LevelConfigData.GetName(roleData.GetAttr(RoleAttribute.level)); hp.text = string.Format("{0}/{1}", roleData.GetAttr(RoleAttribute.hp), roleData.GetMaxAttr(RoleAttribute.hp)); mp.text = string.Format("{0}/{1}", roleData.GetAttr(RoleAttribute.mp), roleData.GetMaxAttr(RoleAttribute.mp)); nl.text = string.Format("{0}/{1}", roleData.GetAttr(RoleAttribute.spirit), roleData.GetMaxAttr(RoleAttribute.spirit)); role_name.text = roleData.name; show_coin.text = roleData.GetAttr(RoleAttribute.coin).ToString();; show_contributions.text = roleData.GetAttr(RoleAttribute.contributions).ToString();; show_city_token.text = roleData.GetAttr(RoleAttribute.city_token).ToString();; gril_head.SetActive(roleData.sex == Sex.Girl); boy_head.SetActive(roleData.sex == Sex.Boy); }
//SheepController SpawnSheep() //{ // SheepController sheep = sheepControllersPool[currentSheepPoolCursor]; // SheepConfigData sheepConfigData = ConfigManager.Instance.GetSheepConfigByType(1); // sheep.InitSheep(sheepConfigData.Sheepvalue, sheepConfigData.Speed); // currentSheepPoolCursor++; // if (currentSheepPoolCursor >= numOfSheep) // currentSheepPoolCursor = 0; // float x = UnityEngine.Random.Range(spawningBox.bounds.center.x - spawningBox.bounds.extents.x, spawningBox.bounds.center.x + spawningBox.bounds.extents.x); // float z = UnityEngine.Random.Range(spawningBox.bounds.center.z - spawningBox.bounds.extents.z, spawningBox.bounds.center.z + spawningBox.bounds.extents.z); // sheep.transform.position = new Vector3(x, 1.8f, z); // sheep.transform.localEulerAngles = new Vector3(0, UnityEngine.Random.Range(0,360), 0); // sheep.gameObject.SetActive(true); // activeSheeps.Add(sheep); // return sheep; //} public void PutSheepBackToCage(SheepController sheepController) { float x = UnityEngine.Random.Range(spawningBox.bounds.center.x - spawningBox.bounds.extents.x, spawningBox.bounds.center.x + spawningBox.bounds.extents.x); float z = UnityEngine.Random.Range(spawningBox.bounds.center.z - spawningBox.bounds.extents.z, spawningBox.bounds.center.z + spawningBox.bounds.extents.z); sheepController.transform.position = new Vector3(x, 1.8f, z); sheepController.ResetState(); if (!activeSheeps.Contains(sheepController)) { activeSheeps.Add(sheepController); } currentSheepInCage++; LevelConfigData lvlConfig = ConfigManager.Instance.GetLevelConfigByLevel(DataManager.Instance.PlayerData.userLevel); txtLimitSheep.text = currentSheepInCage + "/" + lvlConfig.Maxsheep; }
private String EnemySpeed(LevelConfigData data, Byte mult) { Int16 maxEnemyFrameRange = (Int16)(mult * data.EnemyFrameRange); if (data.EnemyFrameDelay - maxEnemyFrameRange < data.EnemyFrameMinim) { Int16 recommend = (Int16)(data.EnemyFrameDelay - maxEnemyFrameRange); return(String.Format("{0} Delay:{1} MAX:{2} Minim:{3} RECOMMEND:{4}", ErrorType.EnemySpeedWave, data.EnemyFrameDelay, maxEnemyFrameRange, data.EnemyFrameMinim, recommend)); } return(String.Empty); }
public void Process() { LevelConfigData data = new LevelConfigData { LevelNo = "01", LevelName = "MOOT", BonusLevel = false, GridDelay = 200, //BulletMaxim = 5, //BulletFrame = 10, //BulletShoot = 50, //EnemySpawn = 1, //EnemyTotal = 5, //EnemyFrameDelay = 100, }; const string fileName = "steve.xml"; // UTF8 https: //stackoverflow.com/questions/3862063/serializing-an-object-as-utf-8-xml-in-net // Namespace //https://stackoverflow.com/questions/625927/omitting-all-xsi-and-xsd-namespaces-when-serializing-an-object-in-net using (Stream stream = new FileStream(fileName, FileMode.Create)) { using (var writer = new StreamWriter(stream, System.Text.Encoding.UTF8)) { XmlSerializer serializer = new XmlSerializer(typeof(LevelConfigData)); XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add(String.Empty, String.Empty); serializer.Serialize(writer, data, ns); } } //using (Stream stream = new FileStream("steve.xml", FileMode.Create)) //{ // System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(LevelConfigData)); // //https://stackoverflow.com/questions/625927/omitting-all-xsi-and-xsd-namespaces-when-serializing-an-object-in-net // System.Xml.Serialization.XmlSerializerNamespaces ns = new System.Xml.Serialization.XmlSerializerNamespaces(); // ns.Add(String.Empty, String.Empty); // serializer.Serialize(stream, data, ns); //} }
public void Reset(LevelType theLevelType, LevelConfigData theLevelConfigData) { levelType = theLevelType; levelConfigData = theLevelConfigData; maxEnemySpawn = levelConfigData.EnemySpawn; if (maxEnemySpawn <= 0) { maxEnemySpawn = 1; } if (maxEnemySpawn > Constants.MAX_ENEMYS_SPAWN) { maxEnemySpawn = Constants.MAX_ENEMYS_SPAWN; } EnemyTotal = levelConfigData.EnemyTotal; if (EnemyTotal <= 0) { EnemyTotal = 1; } // Ensure max total takes precedence over spawn. if (maxEnemySpawn > EnemyTotal) { maxEnemySpawn = EnemyTotal; } // Reset all enemies but not the list as will clear. for (Byte index = 0; index < maxEnemySpawn; index++) { EnemyList[index].Reset(); } // Important: collections MUST be cleared on Reset() to ensure stability! Clear(); enemyDelays.Clear(); enemyRotates.Clear(); enemyMoves.Clear(); EnemyStart = 0; EnemySpawn = 0; EnemyStartText = EnemyStart.ToString().PadLeft(3, '0'); EnemyTotalText = EnemyTotal.ToString().PadLeft(3, '0'); EnemyPercentage = 0.0f; }
public void ResetEnemyDelays(IDictionary <Byte, UInt16> enemyDelays, LevelConfigData levelConfigData) { Byte enemyTotal = levelConfigData.EnemyTotal; enemyDelays.Clear(); for (Byte index = 0; index < enemyTotal; index++) { enemyDelays.Add(index, (Byte)SpeedType.None); } Byte enemySpeedWave = (Byte)(levelConfigData.EnemySpeedWave / 100.0f * levelConfigData.EnemyTotal); ResetEnemySpeedTypes(enemyDelays, enemyTotal, enemySpeedWave, SpeedType.Wave); Byte enemySpeedFast = (Byte)(levelConfigData.EnemySpeedFast / 100.0f * levelConfigData.EnemyTotal); ResetEnemySpeedTypes(enemyDelays, enemyTotal, enemySpeedFast, SpeedType.Fast); }
public void LoadLevelConfigDataTest() { const LevelType levelType = LevelType.Test; const Byte levelIndex = 98; LevelManager.LoadLevelConfigData(levelType, levelIndex); Assert.That(LevelManager.LevelConfigData, Is.Not.Null); // Ensure that enemy frame delay proportions work. LevelConfigData data = LevelManager.LevelConfigData; Byte sum1 = (Byte)(data.EnemySpeedNone + data.EnemySpeedWave + data.EnemySpeedFast); Assert.That(100, Is.EqualTo(sum1)); Byte sum2 = (Byte)(data.EnemyMoverNone + data.EnemyMoverHorz + data.EnemyMoverVert + data.EnemyMoverBoth); Assert.That(100, Is.EqualTo(sum2)); PrintData(LevelManager.LevelConfigData); }
public void EquipItem(int item_id, int idx) { ItemData item = GameData.instance.all_item[item_id]; ItemStaticData static_data = GameData.instance.item_static_data[item.static_id]; if (!LevelConfigData.CheckLevel(GetAttr(RoleAttribute.level), static_data.level)) { MessageTips.Message(43, LevelConfigData.GetBigName(static_data.level)); return; } if (static_data.sub_ype == ItemSubType.recoverRemedy || static_data.sub_ype == ItemSubType.buffRemedy) { remedy_items[idx] = item_id; EventManager.SendEvent(EventTyp.ItemChange, null); } else { EquipItem(item_id); } }
public void ObjToXml(LevelConfigData data) { string fileName = String.Format("{0}-{1}.xml", data.LevelNo, data.LevelName); // UTF8 // https://stackoverflow.com/questions/3862063/serializing-an-object-as-utf-8-xml-in-net // Namespace // https://stackoverflow.com/questions/625927/omitting-all-xsi-and-xsd-namespaces-when-serializing-an-object-in-net using (Stream stream = new FileStream(fileName, FileMode.Create)) { using (var writer = new StreamWriter(stream, System.Text.Encoding.UTF8)) { XmlSerializer serializer = new XmlSerializer(typeof(LevelConfigData)); XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add(String.Empty, String.Empty); serializer.Serialize(writer, data, ns); } } }
public string ObjToCsv(IDictionary <string, int> dict, LevelConfigData data) { string[] items = new string[dict.Count]; FieldInfo[] fields = data.GetType().GetFields(); //int idx = 0; for (int idx = 0; idx < fields.Length; idx++) { FieldInfo field = fields[idx]; string key = field.Name; object val = field.GetValue(data); string txt = val.ToString(); if (field.FieldType == typeof(Boolean)) { txt = txt.ToUpper(); } int lookd = dict[key]; items[lookd] = txt; } return(String.Join(DELIM, items)); }
public LevelConfigData CsvToObj(IDictionary <string, int> dict, string line) { string[] items = line.Split(DELIM); LevelConfigData data = new LevelConfigData(); FieldInfo[] fields = data.GetType().GetFields(); //int idx = 0; for (int idx = 0; idx < fields.Length; idx++) { string item = items[idx]; FieldInfo field = fields[idx]; string key = field.Name; int value = dict[key]; // TODO pad LevelNo with '0' when build CSV var conv = Convert.ChangeType(item, field.FieldType); fields[idx].SetValue(data, conv); } return(data); }
public void Process(LevelType levelType) { IList <string> lines = new List <string>(); Type dataType = typeof(LevelConfigData); string title = xmlToCsv.GetTitle(dataType); lines.Add(title); var dict = xmlToCsv.GetHeaders(dataType); string[] files = fileMgr.GetFiles(levelType); Boolean isValid = true; foreach (string file in files) { LevelConfigData data = xmlToCsv.XmlToObj(file); //ErrorType errorType = validate.ValidLevelConfigData(data); String error = validate.ValidLevelConfigData(data); if (!String.IsNullOrEmpty(error)) { String msg = String.Format("{0} [{1}] => {2}", file, data.LevelNo.ToString().PadLeft(2, '0'), error); logger.Error(msg); isValid = false; } string line = xmlToCsv.ObjToCsv(dict, data); lines.Add(line); } if (isValid) { string[] contents = lines.ToArray(); fileMgr.WriteCSV(levelType, contents); } }
public void WriteXML(LevelType levelType, LevelConfigData data) { string levelNo = data.LevelNo.ToString().PadLeft(2, '0'); string file = String.Format("{0}-{1}.{2}", levelNo, levelType, XmlExt); string path = String.Format("{0}/{1}/{2}", OutDir, levelType, file); // UTF8 // https://stackoverflow.com/questions/3862063/serializing-an-object-as-utf-8-xml-in-net // Namespace // https://stackoverflow.com/questions/625927/omitting-all-xsi-and-xsd-namespaces-when-serializing-an-object-in-net using (Stream stream = new FileStream(path, FileMode.Create)) { using (var writer = new StreamWriter(stream, System.Text.Encoding.UTF8)) { XmlSerializer serializer = new XmlSerializer(typeof(LevelConfigData)); XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add(String.Empty, String.Empty); serializer.Serialize(writer, data, ns); } } }
public void Process(LevelType levelType) { string file = fileMgr.GetCSVFile(levelType); string[] lines = fileMgr.ReadCSV(file); string title = lines[0]; var dict = csvToXml.GetHeaders(title); Boolean isValid = true; IList <LevelConfigData> items = new List <LevelConfigData>(); for (int index = 1; index < lines.Length; index++) { string line = lines[index]; LevelConfigData data = csvToXml.CsvToObj(dict, line); //ErrorType errorType = validate.ValidLevelConfigData(data); String error = validate.ValidLevelConfigData(data); if (!String.IsNullOrEmpty(error)) { String msg = String.Format("{0} [{1}] => {2}", file, data.LevelNo.ToString().PadLeft(2, '0'), error); logger.Error(msg); isValid = false; } items.Add(data); } if (isValid) { foreach (LevelConfigData data in items) { fileMgr.WriteXML(levelType, data); } } }
public void CalcdEnemyDelaysTest() { IDictionary <Byte, UInt16> enemyDelays = new Dictionary <Byte, UInt16>(Constants.MAX_ENEMYS_TOTAL); const LevelType levelType = LevelType.Hard; const Byte levelNo = 13; const Byte levelIndex = levelNo - 1; MyGame.Manager.LevelManager.Initialize(CONTENT_ROOT); MyGame.Manager.LevelManager.LoadLevelConfigData(levelType, levelIndex); LevelConfigData levelConfigData = MyGame.Manager.LevelManager.LevelConfigData; MyGame.Manager.RandomManager.Initialize(); DelayManager.LoadContent(); Console.WriteLine("Level:{0} Num:{1}", levelType, levelNo); DelayManager.ResetEnemyDelays(enemyDelays, levelConfigData); IDictionary <SpeedType, Byte> totals = new Dictionary <SpeedType, Byte>(Constants.MAX_ENEMYS_TOTAL); for (Byte index = 0; index < enemyDelays.Count; index++) { UInt16 value = enemyDelays[index]; SpeedType speedType = (SpeedType)value; if (!totals.ContainsKey(speedType)) { totals.Add(speedType, 1); } else { totals[speedType]++; } } Console.WriteLine("Speed[{0}]={1}", SpeedType.None, totals[SpeedType.None]); Console.WriteLine("Speed[{0}]={1}", SpeedType.Wave, totals[SpeedType.Wave]); Console.WriteLine("Speed[{0}]={1}", SpeedType.Fast, totals[SpeedType.Fast]); DelayManager.CalcdEnemyDelays(enemyDelays, levelConfigData); UInt16 minValue = UInt16.MaxValue; UInt16 maxValue = UInt16.MinValue; for (Byte index = 0; index < enemyDelays.Count; index++) { UInt16 value = enemyDelays[index]; if (value < minValue) { minValue = value; } if (value > maxValue) { maxValue = value; } } Console.WriteLine("Min:{0} Max:{1}", minValue, maxValue); }
/// <summary> /// 装备物品 /// 戒指或坐骑:如果是已穿戴就卸下,否则就穿戴 /// 药物:是已装备的药物则卸下,否则装备到最后一个空格子,没有的话提示装备已满 /// </summary> public void EquipItem(int item_id) { ItemData item = GameData.instance.all_item[item_id]; ItemStaticData static_data = GameData.instance.item_static_data[item.static_id]; if (!LevelConfigData.CheckLevel(GetAttr(RoleAttribute.level), static_data.level)) { MessageTips.Message(43, LevelConfigData.GetBigName(static_data.level)); return; } // 移除穿在身上的 if (static_data.sub_ype == ItemSubType.Ring) { if (equip_items[0] != -1) { int empty_count = GetAttr(RoleAttribute.max_item) - bag_items.Count; if (equip_items[0] == item_id) { // 脱下 empty_count -= GetItemAttrbuite(item_id, RoleAttribute.max_item); } else { // 更换 if (equip_items[0] != -1) { empty_count -= GetItemAttrbuite(equip_items[0], RoleAttribute.max_item); } empty_count += GetItemAttrbuite(item_id, RoleAttribute.max_item); } if (empty_count < 0) { // 无法更换或脱下戒指 MessageTips.Message(44); return; } } if (equip_items[0] == item_id) // 戒指 { equip_items[0] = -1; } else { equip_items[0] = item_id; } UpdateAttr(); EventManager.SendEvent(EventTyp.ItemChange, null); } else if (static_data.sub_ype == ItemSubType.Ride) { if (equip_items[1] == item_id) // 坐骑 { equip_items[1] = -1; } else { equip_items[1] = item_id; } UpdateAttr(); EventManager.SendEvent(EventTyp.ItemChange, null); } else if (static_data.sub_ype == ItemSubType.recoverRemedy || static_data.sub_ype == ItemSubType.buffRemedy) { for (int i = 0; i < remedy_items.Length; i++) // 判断卸下丹药 { if (remedy_items[i] == item_id) { remedy_items[i] = -1; EventManager.SendEvent(EventTyp.ItemChange, null); return; } } for (int i = 0; i < remedy_items.Length; i++) // 判断穿戴丹药 { if (remedy_items[i] == -1) { remedy_items[i] = item_id; EventManager.SendEvent(EventTyp.ItemChange, null); return; } } MessageTips.Message(27); } }
public String ValidLevelConfigData(LevelConfigData data) { String error = String.Empty; // 01. SpeedNotHundred Byte speed = (Byte)(data.EnemySpeedNone + data.EnemySpeedWave + data.EnemySpeedFast); if (100 != speed) { return(String.Format("{0} Total:{1} None:{2} Wave:{3} Fast:{4}", ErrorType.SpeedNotHundred, speed, data.EnemySpeedNone, data.EnemySpeedWave, data.EnemySpeedFast)); } // 01. MoversNotHundred Byte mover = (Byte)(data.EnemyMoverNone + data.EnemyMoverHorz + data.EnemyMoverVert + data.EnemyMoverBoth); if (100 != mover) { return(String.Format("{0} Total:{1} None:{2} Horz:{3} Vert:{4} Both:{5}", ErrorType.SpeedNotHundred, speed, data.EnemyMoverNone, data.EnemyMoverHorz, data.EnemyMoverVert, data.EnemyMoverBoth)); } //02. WrongNumberBullets const Byte bulletFrames = 6; UInt16 bulletSpace = (UInt16)(bulletFrames * data.BulletFrame); UInt16 bulletTimer = (UInt16)(data.BulletMaxim * data.BulletShoot); if (bulletTimer > bulletSpace) { Byte recommend = (Byte)(bulletSpace / data.BulletShoot); return(String.Format("{0} Space:{1} [{2}*{3}] Timer:{4} [MAX:{5} * Shoot:{6}] RECOMMEND:{7}", ErrorType.WrongNumberBullets, bulletSpace, bulletFrames, data.BulletFrame, bulletTimer, data.BulletMaxim, data.BulletShoot, recommend)); } // 03. WrongEnemySpeedWave if (0 == data.EnemySpeedNone) { return("EnemySpeedNone must be greater than 0"); } // 03. WrongEnemySpeedWave if (0 != data.EnemySpeedWave) { String wave = EnemySpeed(data, 1); if (!String.IsNullOrEmpty(wave)) { return(wave); } } // 03. WrongEnemySpeedFast if (0 != data.EnemySpeedFast) { String fast = EnemySpeed(data, 2); if (!String.IsNullOrEmpty(fast)) { return(fast); } } // 04. WrongGridDelay const UInt16 minGridDelay = 100; const UInt16 maxGridDelay = 500; if (data.GridDelay < minGridDelay || data.GridDelay > maxGridDelay) { return(String.Format("{0} Choose between {1} and {2}", ErrorType.WrongGridDelay, minGridDelay, maxGridDelay)); } // 05. WrongEnemySpawn const Int16 minEnemySpawn = 1; const Int16 maxEnemySpawn = 8; if (data.EnemySpawn < minEnemySpawn || data.EnemySpawn > maxEnemySpawn) { return(String.Format("{0} Choose between {1} and {2}", ErrorType.WrongEnemySpawn, minEnemySpawn, maxEnemySpawn)); } // 06. WrongEnemyTotal const Int16 minEnemyTotal = 1; const Int16 maxEnemyTotal = 255; if (data.EnemyTotal < minEnemyTotal || data.EnemyTotal > maxEnemyTotal) { return(String.Format("{0} Choose between {1} and {2}", ErrorType.WrongEnemyTotal, minEnemyTotal, maxEnemyTotal)); } // 05. WrongEnemyVelocity. const UInt16 minEnemyVelocity = 1; const UInt16 maxEnemyVelocity = 9; if (data.EnemyVelocity < minEnemyVelocity || data.EnemyVelocity > maxEnemyVelocity) { return(String.Format("{0} Choose between {1} and {2}", ErrorType.WrongEnemyVelocity, minEnemyVelocity, maxEnemyVelocity)); } // 04. WrongExplodeDelay const UInt16 minExplodeDelay = 75; const UInt16 maxExplodeDelay = 125; if (data.ExplodeDelay < minExplodeDelay || data.ExplodeDelay > maxExplodeDelay) { return(String.Format("{0} Choose between {1} and {2}", ErrorType.WrongExplodeDelay, minExplodeDelay, maxExplodeDelay)); } return(error); }