public RoleRecord randomRoleFor(int level) {//level1為種族 level2為基礎職業 if (level < 2) { Debug.LogWarning("randomRoleFor 的level為:" + level + "小於2"); return(null); } RoleRecord newRole = new RoleRecord(); int race = baseRaceNos[UnityEngine.Random.Range(0, baseRaceNos.Count)]; level -= 2; giveRace(newRole, objects[race]); int index = UnityEngine.Random.Range(0, baseCareerNos.Count); int no = baseCareerNos[index]; careerInf nowCareer = objects[no]; transferTo(newRole, nowCareer); for (int nowlv = 0; nowlv < level; nowlv++) { int nextNo = nowCareer.nexrCareer[UnityEngine.Random.Range(0, nowCareer.nexrCareer.Count)]; nowCareer = objects[nextNo]; transferTo(newRole, nowCareer); } return(newRole); }
public void onPickCareer(careerInf traget) { string statement = ""; Dictionary <byte, int> attr = traget.Attributes; foreach (KeyValuePair <byte, int> pair in attr) { statement += " +"; statement += unitData.getAttributeString(pair.Key); statement += ":"; statement += pair.Value; } atribute.text = statement; foreach (GameObject sobj in skillList) { Destroy(sobj); } foreach (int sno in traget.skillPool) { GameObject sobj = Instantiate(skillObj, skillsPanel.transform); sobj.tag = "Untagged";//要設置tag的原因是在compositePanel的技能面板裏有技能的時候,若角色信息面板是打開狀態,則無論怎麼點擊何處RayCast2D都會cast到技能面板的第四個技能 sobj.GetComponent <showSkillInf>().initInf(SkillList.main.representation[sno], role.data); sobj.GetComponent <showSkillInf>().panel = skillInfPanel; sobj.GetComponent <Image>().sprite = ImageList.main.skillIcons[sno]; skillList.Add(sobj); } }
public static void transferTo(RoleRecord role, careerInf traget) { role.careers.Add(traget.careerNo); List <int> skills = new List <int>(); //所有技能池內角色尚未擁有的技能 foreach (int no in traget.giftSkills) //添加所有必定獲得的技能 { string name = SkillList.main.representation[no]; if (Type.GetType("subst_skill_representation").IsAssignableFrom(Type.GetType(name))) //if (Type.GetType(name).IsSubclassOf(Type.GetType("subst_skill_representation"))) {//如果技能敘述繼承了subst_skill_representation //則改為從subst_skill_representation的替補中選擇一個技能名稱 object repre = System.Activator.CreateInstance(System.Type.GetType(name)); role.skillNos.Add(((subst_skill_representation)repre).substitutNo()); } else { role.skillNos.Add(no); } } foreach (int no in traget.skillPool) { if (!role.skillNos.Contains(no)) { skills.Add(no); } } if (skills.Count > 0) { int index = UnityEngine.Random.Range(0, skills.Count); string name = SkillList.main.representation[skills[index]]; //Debug.Log("skill representation name:" + name + " issubclass:" + Type.GetType(name).IsSubclassOf(Type.GetType("subst_skill_representation"))); if (Type.GetType("subst_skill_representation").IsAssignableFrom(Type.GetType(name))) //if (Type.GetType(name).IsSubclassOf(Type.GetType("subst_skill_representation"))) {//如果技能敘述繼承了subst_skill_representation //則改為從subst_skill_representation的替補中選擇一個技能名稱 object repre = System.Activator.CreateInstance(System.Type.GetType(name)); role.skillNos.Add(((subst_skill_representation)repre).substitutNo()); } else { role.skillNos.Add(skills[index]); } //role.skillNos.Add(skills[index]); } else { Debug.LogWarning("在轉職成" + traget.name + "的過程中並沒有新增任何人技能"); } role.data.attributeUpdate = traget.Attributes; }
public List <int> baseCareerNos; //記錄基礎職業的信息編號 public static void giveRace(RoleRecord role, careerInf traget) { role.race = traget.careerNo; if (role.skillNos.Count != 0) { Debug.LogWarning("添加種族" + traget.name + "的時候技能欄不為空"); } foreach (int no in traget.giftSkills) { role.skillNos.Add(no); } role.data.attributeUpdate = traget.Attributes; }
public void initRoleForCareer(RoleRecord role) { careerInf race = objects[role.race]; if (role.skillNos.Count != 0) { Debug.LogWarning("在初始化角色種族" + race.name + "的時候技能欄不為空"); } foreach (int no in race.skillPool) { role.skillNos.Add(no); } role.data.attributeUpdate = race.Attributes; foreach (int cno in role.careers) { careerInf career = objects[cno]; List <int> skills = new List <int>();//所有技能池內角色尚未擁有的技能 foreach (int no in career.skillPool) { if (!role.skillNos.Contains(no)) { skills.Add(no); } } if (skills.Count > 0) { int index = UnityEngine.Random.Range(0, skills.Count); string name = SkillList.main.representation[skills[index]]; if (Type.GetType("subst_skill_representation").IsAssignableFrom(Type.GetType(name))) //if (Type.GetType(name).IsSubclassOf(Type.GetType("subst_skill_representation"))) {//如果技能敘述繼承了subst_skill_representation //則改為從subst_skill_representation的替補中選擇一個技能名稱 object repre = System.Activator.CreateInstance(System.Type.GetType(name)); role.skillNos.Add(((subst_skill_representation)repre).substitutNo()); } else { role.skillNos.Add(skills[index]); } } else { Debug.LogWarning("在初始化職業時" + career.name + "的過程中並沒有新增任何人技能"); } role.data.attributeUpdate = career.Attributes; } }
public static int totalPriceOf(careerInf career) { int price = 0; while (true) { price += career.Price; if (career.frontCareer < 0) { break; } else { career = main.objects[career.frontCareer]; } } return(price); }
public void prepareRole(RoleRecord traget) { role = traget; cancer(); Debug.Log("careers count:" + traget.careers.Count); int no = traget.careers[traget.careers.Count - 1]; roleBox.sprite = ImageList.main.headIcons[traget.race]; careerInf nowcareer = careerList.main.objects[no]; foreach (int cno in nowcareer.nexrCareer) { careerInf nextcareer = careerList.main.objects[cno]; GameObject obj = Instantiate(careerObj, upPanel.transform); obj.GetComponent <roleForUpgrade>().init(role, nextcareer, onPickCareer, aftUpgrade); objList.Add(obj); } }
public rolePanel panel; //初始化時賦予 public void init(RoleRecord inf, careerInf career, withCareer callback, withNone upgrade_callback) { roleInf = inf; this.career = career; Debug.Log("Icon" + Icon + "race:" + inf.race); Icon.sprite = ImageList.main.headIcons[inf.race]; if (itemName != null) { string name = career.name; itemName.text = name; } if (itemCost != null) { itemCost.text = "" + career.Price; } onClick_callback = callback; onUpgradeFinsh_callback = upgrade_callback; }