-
Notifications
You must be signed in to change notification settings - Fork 0
Fever Mode
Song edited this page Jul 31, 2021
·
4 revisions
by Song
흐름도
-
📱 Game View Controller➡️🛠 Game View Model- 사용자의 버튼 Input 전달 (오른쪽 or 왼쪽) -
🛠 Game View Model➡️⏰ Time Manager- Correct / Wrong 판단하여 각 상황에 맞는 Time Manager 메소드 호출 -
⏰ Time Manager➡️🔥 Fever Manager- Correct / Wrong 상황에 따른 시간(게이지) 업데이트 지시 🔥 Fever Manager➡️⏰ Time Manager- 피버 게이지 상황에 따라 피버 모드 On / Off 판단 전달-
⏰ Time Manager➡️🛠 Game View Model- 타임 모드 (normal / fever) 전달 -
🛠 Game View Model➡️📱 Game View Controller- 피버 타이머가 필요한지 전달
연속 입력 성공 시 피버 모드로 진입
- 게임 세팅 값으로 피버 게이지 최대치와 피버 진입 시 주어지는 피버 타임을 설정
enum GameSetting {
static let feverGaugeMax = 20
static let feverTime = 10
}- 사용자 액션이 Correct인 경우 Fever Manager의 현재 피버 게이지를 1 올리도록 함
- Wrong인 경우 Fever Manager의 피버 게이지를 0으로 리셋
- 1초가 지날 때마다 피버 게이지를 1씩 감소시킴
- 현재 피버 게이지가 feverGaugeMax과 같아지면 Fever Mode를 발동시킴
피버 모드 진입 시 전용 Time View 노출
- Stack View 안에 Normal Time View / Fever Time View 배치
- 각 모드에 따라 다른 View를 Hidden 처리
- Height는 두 View 모두 Stack View 높이와 같게 지정하되, 한 View의 priority를 더 낮게 설정하여 Hidden 상태에 따라 Stack View에 꽉 차도록 설정
피버 모드 중 배경 레이어 애니메이션 구현
- Timer Mode 변경 시 Start / Stop하도록 구현
- CAKeyframeAnimation로 배경 색상 애니메이트
- Pause & GameOver Scene에서 생성한 ReplicateAnimationView를 subclassing하여 재사용
final class GameBackgroundView: ReplicateAnimationView {
func startFever() {
backgroundAnimation(duration: 5, colors: feverColors, repeatCount: .infinity)
draw(withImage: .fever, countPerLine: 2.5) // superclass의 메소드
}
func stopFever() {
layer.sublayers?.forEach({ sublayer in
sublayer.removeFromSuperlayer()
})
}
}결과
created by 우송