В этом видео кот дышит, моргает, двигает хвостом, следит за курсором и спит. Всё это работает на базе моего простого и удобного движка анимаций.
🧠 Идея
Каждое настроение кота (сон, бодрствование, наблюдение) — это набор анимационных эффектов, каждый из которых независим и легко настраивается.
🎛 Система сделана так, чтобы было просто управлять поведением и позой.
case .walking: // Анимации для состояния ходьбы
addEffect(BlinkEffect()) // Моргание глаз
addEffect(EyeWanderEffect()) // Наблюдение за рандомной точкой
addEffect(BreatheEffect()) // Дыхание
addEffect(TailWagEffect()) // Движение хвостом
🧩 Как устроен движок
Каждый эффект реализует простой протокол:
protocol CatAnimationEffect {
func apply(to view: CatLayeredView)
func remove(from view: CatLayeredView)
}Аниматор подключает нужные эффекты в зависимости от "настроения" кота:
animator.setPose(.sleeping)
// → добавит BreatheEffect, HideEyesEffect, LyingEffect
🎬 Эффекты могут быть какими угодно. Вот, например, как двигается хвост:
final class TailWagEffect: CatAnimationEffect {
func apply(to view: CatLayeredView) {
let wag = SKAction.sequence([
.rotate(byAngle: 0.2, duration: 1.3),
.rotate(byAngle: -0.4, duration: 1.3),
.rotate(byAngle: 0.2, duration: 1.3)
])
view.tail.run(.repeatForever(wag), withKey: "tail_wag")
}
func remove(from view: CatLayeredView) {
view.tail.removeAction(forKey: "tail_wag")
}
}