-
Notifications
You must be signed in to change notification settings - Fork 2
develop LevelUpSystem
경험치 획득 -> 레벨업 발생시 시간 멈추고 스킬 선택화면 등장 -> 선택, 스킬 갱신 후 게임 재개
뽑기에 사용된 RandomPicker 클래스는 다른 분의 코드를 가져와서 사용했습니다, 자세한 사용법은 참조 부분에 링크로 남겨놓았습니다.
- 여기서 말하는 "장비"라 함은 무기와 악세서리를 총칭하는 말입니다.
-
레벨업
- 경험치 획득 후 현재 maxExp 이상이면 현재 경험치를 초기화, maxExp에 dExp만큼 더해주기(선형 증가), 레벨업 함수 호출.
-
행운에 따른 선택지 개수 정하기
- 기본 3개, luck에 따라 1개 추가 가능 (luck 수치 1당 1%, 100 이상이면 100%로 4개)
-
스킬/장신구를 뽑을 때 나뉘는 2가지 경우
- 스킬/장신구 소지 수가 각각 6개로 모두 꽉 차있고 모두 마스터 한 경우 -> 스킬/장신구 대신 체력, 돈을 고르는 선택지 제공
- 마스터한 장비들을 제외하고 뽑기
-
뽑힌 장비 목록을 LevelUpUI에 넘겨주어 그 중 하나를 선택할 수 있게 하기 (develop - LevelUpUI 에서 계속)
namespace Enums
{
public enum Stat
{
Might,
Armor,
MaxHealth,
Recovery,
Cooldown,
Area,
ProjectileSpeed,
Duration,
Amount,
MoveSpeed,
Magnet,
Luck,
Growth,
Greed,
Curse,
Revival,
Reroll,
Skip,
Banish,
Ommi,
Reflection,
}
}
CharacterStats[(int)Enums.Stat.Luck]
CharacterStats[(int)Enums.Stat.사용할 스탯] 으로 해당하는 스텟을 가져올 수 있습니다.
stat들을 하나하나 변수로 관리하기는 힘들므로 int 배열에 넣어서 관리, 그냥 사용할 경우 index번호랑 스탯을 연결짓기 어려우므로 열거형을 이용하여 string <-> int 형변환 하듯이 사용해주었습니다.
- 먼저 뽑기 목록을 초기화
- 소지 장비 수가 최대치에 도달했다면 뽑기 목록에 가지고 있는 장비 중 마스터 하지 않은 장비만 넣어줌
- 최대치에 도달하지 않았다면 마스터한 장비를 제외한 모든 장비들을 넣어줌
필요 경험치(mMaxExp) = 초기 필요 경험치 + 레벨 * 경험치 증가폭 상수(Constants.DeltaExp)
위의 공식을 코드로 구현한 함수
- character의 level을 1 더해줌
- RandomPickUp()함수를 통해 현재 뽑힌 장비 목록을 받아옴
- pickUps는 List<Tuple<int, int, int>>로 Tuple 내의 각 int들의 의미는 < 0: 무기/ 1: 악세/ 2: 기타(돈, 회복), 해당 종류의 index 번호, 0: new/ 1:old >를 의미함
- ...LoadLevelUpUI() 함수에 뽑힌 목록들과 현재 스탯, 보유 무기/ 악세를 넘겨주어 레벨업 UI를 표시
- getPossibleChoice: 소지 장비 수가 최대치에 도달했는지 아닌지에 따라 뽑을 수 있는 최대 장비의 개수를 참조 변수에 대입해줌.
- getChoice: 현재 luck수치를 확률로 3개를 뽑을 수 있는지 4개를 뽑을 수 있는지를 반환해주는 함수.
- 위의 두 함수에서 얻은 값을 기반으로 최대 몇 개를 뽑아야하는지를 maxChoice에 대입해줌
- 0개일 경우 반환 값에 골드, 회복을 넣어줌
- getOnePickUp: 현재 뽑을 수 있는 장비의 개수와 이미 뽑힌 장비들의 List를 넘겨주어 랜덤 장비 한개를 반환하는 함수이다. (반환 값의 의미는 주석 참고)
getPickType: 뽑을 수 있는 장비 수를 기반으로 무기와 악세서리 중 어떤 타입을 뽑을 것인지를 반환하는 함수, 둘다 뽑을 수 있다면 50% 확률로 랜덤 선택
getWeaponRandomPick: 이미 뽑힌 장비 리스트를 넘겨주어 해당 리스트에 속하지 않은 장비를 하나 뽑아서 index를 반환하는 함수
mTransWeaponIndex는 배열에 해당 장비의 index를 넘겨주면 현재 가지고 있는 장비목록(Weapons, Accessories)에서의 index번호를 반환, 없다면 -1를 반환하는 배열이다.
-1를 반환한다면 가지고 있지 않는 장비이므로 new/ old를 구분하는 데 사용할 수 있다.
이후 뽑힌 장비의 종류에 따라 possibleWeapon(Accessory)Choice의 값을 줄여준다.
선택지에서 유저가 고른 pickUp을 받아서 적용하는 함수. 새로 얻은 장비의 경우 getWeapon/Accessory를, 이미 있는 장비의 경우는 UpgradeWeapon/Acc.. 함수를 호출한다.
applyEtc함수는 회복, 돈 관련 처리를 맡는다.