private void Awake() { DontDestroyOnLoad(this.gameObject); //삭제 되지 않게함 m_dictionarySkillDataBase = new Dictionary <int, cSkillInformation>(); //Dictionary 인스턴스 할당 m_textAssetSkillData = (TextAsset)Resources.Load("chakraweapon_skill"); //Resoruces폴더에서 데이터파일 불러들임 string sSkillData = m_textAssetSkillData.text; //텍스트 에셋의 text를 저장 string[] sSplitSkillData = sSkillData.Split('\n'); //엔터를 기준으로 나눠서 다시 저장 List <string> listSkillData = new List <string>(); //엔터를 기준으로 나눈 텍스를 저장할 리스트 선언 foreach (string splitData in sSplitSkillData) //리스트에 텍스트 저장 { listSkillData.Add(splitData); } listSkillData.RemoveAt(0); //: 처음과 끝부분 데이터를 지움 listSkillData.Reverse(); // (처음과 끝에는 아무것도 들어있지 않음) listSkillData.RemoveAt(0); // listSkillData.Reverse(); //: List <string[]> listSkillDataArray = new List <string[]>(); // ","로 구분지어서 나눌 문자열 배열형 리스트를 선언 foreach (string skillData in listSkillData) // ","로 구분지어서 나눠서 담음 { string[] skillDataArray = skillData.Split(','); listSkillDataArray.Add(skillDataArray); } foreach (string[] skillDataArray in listSkillDataArray) // 여기서부터 스킬에 정보를 할당하고 { cSkillInformation skill = new cSkillInformation(); skill.m_nIdNumber = Int32.Parse(skillDataArray[0]); //스킬 고유번호 skill.m_sKoreanName = skillDataArray[1]; //스킬 한글명 skill.m_sName = skillDataArray[2]; //스킬 영문명 skill.m_eType = (Information.eSkillType)Int32.Parse(skillDataArray[3]); //스킬 계열 skill.m_nChainLevel = Int32.Parse(skillDataArray[4]); //스킬 연계레벨 skill.m_eElement = (Information.eElement)Int32.Parse(skillDataArray[5]); //스킬 원소 속성 skill.m_nDamageType = Int32.Parse(skillDataArray[6]); //스킬 공격 속성 skill.m_fDamage = float.Parse(skillDataArray[7]); //스킬 계수 skill.m_nChakraCost = Int32.Parse(skillDataArray[8]); //스킬 차크라 소모량 skill.m_sInfo = skillDataArray[9]; //스킬 정보 skill.m_nOptionNumber = Int32.Parse(skillDataArray[10]); //스킬 옵션번호 skill.m_sOption_1_Info = skillDataArray[11]; //스킬 옵션1 정보 skill.m_sOption_2_Info = skillDataArray[12]; //스킬 옵션2 정보 skill.m_sOption_3_Info = skillDataArray[13]; //스킬 옵션3 정보 //이미지 경로(작성해야함) //skill.m_imageIcon = (Image)Resources.Load(skillDataArray[14]); m_dictionarySkillDataBase.Add(skill.m_nIdNumber, skill); //스킬 고유번호를 키값으로 스킬을 Dictioary에 담는다 } }
private void InputSkillsForTest() { m_nCurrentSkillSlotIndex = 1; for (int i = 0; i < cSkillDataBase.Instance.m_dictionarySkillDataBase.Count; i++) { cSkillInformation skill = new cSkillInformation(); skill = cSkillDataBase.Instance.m_dictionarySkillDataBase[i - 1]; m_dicSkills.Add(skill.m_nIdNumber, skill); } }
private string IsSkillIn(int index, int step, Information.eClick mouse) { cSkillInformation skill = null; switch (index) { case 1: skill = cCharacterInformation.Instance.m_listDicMeleeSkillSlot[step][mouse]; break; case 2: skill = cCharacterInformation.Instance.m_listDicRangeSkillSlot[step][mouse]; break; case 3: skill = cCharacterInformation.Instance.m_listDicOtherSkillSlot[step][mouse]; break; } return(skill.m_sName); }
/// <summary> /// 스킬을 플레이어 자신의 슬롯에 장착함 /// </summary> public void SelectSkill() { //print(m_nSkillIdNumber + " : " + m_eClickedButton.ToString()); if (m_eClickedButton == Information.eClick.NONE) { return; } cSkillInformation skill = cCharacterInformation.Instance.m_dicSkills[m_nSkillIdNumber]; Information.eSkillType nSkillType = skill.m_eType; int nSkillStep = skill.m_nChainLevel; List <Dictionary <Information.eClick, cSkillInformation> > listDicSkillTree = null; // 스킬트리가 선택되는 부분 switch (nSkillType) { case Information.eSkillType.MELEE: listDicSkillTree = cCharacterInformation.Instance.m_listDicMeleeSkillSlot; break; case Information.eSkillType.RANGE: listDicSkillTree = cCharacterInformation.Instance.m_listDicRangeSkillSlot; break; case Information.eSkillType.OTHER: listDicSkillTree = cCharacterInformation.Instance.m_listDicOtherSkillSlot; break; } // 선택된 스킬트리에 선택한 스킬 집어넣는 부분 if (listDicSkillTree == null) { return; } listDicSkillTree[nSkillStep][m_eClickedButton] = skill; m_eClickedButton = Information.eClick.NONE; }
private cSkillInformation m_cSkillInformation; //스킬데이터 베이스 얕은복사 #endregion void Awake() { //스킬데이터 베이스 얕은복사 m_cSkillInformation = cSkillDataBase.Instance.m_dictionarySkillDataBase[0]; }
/// <summary> /// 좌, 우클릭을 통한 스킬을 선택 및 시전한다. /// </summary> public void CastSkill() { // >> 스킬 선택하는 부분 cSkillInformation cCurrentSkill = null; if (Input.GetMouseButtonDown(0)) { cCurrentSkill = cCharacterInformation.Instance.m_dicCurrentSkillSlot[Information.eClick.L_CLICK]; cCharacterInformation.Instance.m_eClick = Information.eClick.L_CLICK; } else if (Input.GetMouseButtonDown(1)) { cCurrentSkill = cCharacterInformation.Instance.m_dicCurrentSkillSlot[Information.eClick.R_CLICK]; cCharacterInformation.Instance.m_eClick = Information.eClick.R_CLICK; } // << print(cCurrentSkill.m_sName); // >> 스킬 시전 가능여부 검사하는 부분 if (cCharacterInformation.Instance.m_nChkra < cCurrentSkill.m_nChakraCost) { Debug.Log("차크라가 부족합니다."); return; } // << // >> 스킬 실제 시전하는 부분 print(cCurrentSkill.m_nIdNumber + "시전"); // 콤보가 0이 아닐때, 시전 스킬이 비어있는 경우는 종료되도록 if (cCurrentSkill.m_nIdNumber == -1) { switch (cCharacterInformation.Instance.m_nCurrentSkillSlotIndex) { case 1: if (cCharacterInformation.Instance.m_nMeleeSkillComboStep >= 1) { return; } break; case 2: if (cCharacterInformation.Instance.m_nRangeSkillComboStep >= 1) { return; } break; case 3: if (cCharacterInformation.Instance.m_nOtherSkillComboStep >= 1) { return; } break; } } else { m_arraySkill[cCurrentSkill.m_nIdNumber].gameObject.SetActive(true); } // << // >> 스킬 사용시 공통적으로 변경되는 정보들 // 일반공격/스킬사용 버튼 중 일반공격 눌렀을 경우 if (cCurrentSkill.m_nIdNumber == 0 || cCurrentSkill.m_nIdNumber == 15 || cCurrentSkill.m_nIdNumber == 30) { } // 일반공격/스킬사용 버튼 중 스킬사용 눌렀을 경우 else if (cCurrentSkill.m_nIdNumber == -1) { switch (cCharacterInformation.Instance.m_dicCurrentSkillSlot[Information.eClick.L_CLICK].m_eType) { case Information.eSkillType.MELEE: cCharacterInformation.Instance.m_nMeleeSkillComboStep += 1; break; case Information.eSkillType.RANGE: cCharacterInformation.Instance.m_nRangeSkillComboStep += 1; break; case Information.eSkillType.OTHER: cCharacterInformation.Instance.m_nOtherSkillComboStep += 1; break; } } //그 외 else { switch (cCurrentSkill.m_eType) { case Information.eSkillType.MELEE: cCharacterInformation.Instance.m_nMeleeSkillComboStep += 1; if (cCharacterInformation.Instance.m_nMeleeSkillComboStep > 3) { cCharacterInformation.Instance.m_nMeleeSkillComboStep = 0; } break; case Information.eSkillType.RANGE: cCharacterInformation.Instance.m_nRangeSkillComboStep += 1; if (cCharacterInformation.Instance.m_nRangeSkillComboStep > 3) { cCharacterInformation.Instance.m_nRangeSkillComboStep = 0; } break; case Information.eSkillType.OTHER: cCharacterInformation.Instance.m_nOtherSkillComboStep += 1; if (cCharacterInformation.Instance.m_nOtherSkillComboStep > 3) { cCharacterInformation.Instance.m_nOtherSkillComboStep = 0; } break; } // 콤보제한시간 안끝났으면 +1 if (cCharacterInformation.Instance.m_fComboLimitTime > 0) { cCharacterInformation.Instance.m_nTotalComboNum += 1; } // 스킬 쓴 뒤 콤보제한시간 최대치부터 다시 시작 cCharacterInformation.Instance.m_fComboLimitTime = cCharacterInformation.Instance.m_fMaxComboLimitTime; } // << }