Буквально несколько дней назад вышла игра The Entropy Centre — очень похожая на Portal трёхмерная головоломка, которую автор сделал практически в одиночку.
По сюжету человечество открыло "энтропийную энергию", с помощью которой можно перематывать назад во времени отдельные объекты. На Луне была построена специальная база — The Entropy Centre — с огромным энтропийным орудием, направленным на Землю. Если с Землёй случается какая-то катастрофа (ядерная война, пандемия, попадание метеорита итд), то планету отматывают назад на 5 лет, а людям высылают информацию, позволяющую избежать беды.
Вы просыпаетесь в этом Центре, почему-то находящемся в состоянии запустения. Других людей нет. Вам дают ручную энтропийную пушку и отправляют решать задачки (разработчик не скрывает буквально прямые заимствования из Portal). Весь игровой процесс как раз строится на перемотке предметов во времени: перенесли кубик с первой кнопки на вторую, прошли куда-то, а потом запустили в него луч из пушки, и он сам по воздуху двигается в обратном направлении на первую кнопку.
Очень интересная задумка, отличное качество исполнения, забавные сюжетные детали (например, работники Центра в письмах обсуждают возможность перемотать себя до того, как посмотрел любимый сериал, чтобы забыть его и посмотреть ещё раз). Учитывая, что делал это один человек, снимаю шляпу.
Но из-за этого у автора не хватило сил и времени глубоко поработать над левел-дизайном. Задачки сравнительно простые и даже близко не раскрывают потенциал такой многомерной идеи. На уровнях, которые названы сложными, ты тратишь больше времени на анализ сцены и понимание того, какой переключатель какую дверь открывает, а не на изобретение какого-то магического мозговыносящего решения, как хотелось бы. Игровые элементы тоже примитивные: пять видов кубов с разными функциями, да два типа кнопок. Есть конвейеры и вентиляторы, но их обращение во времени смотрится совсем не эффектно, потому что движение ленты или лопастей в обратную сторону не ощущается необычным или противоестественным (в отличие, например, от внезапно взлетающих в воздух кубов, чьё падение ты перематываешь).
И всё равно проект интересный, особенно на современном безрыбье. Инди с крутыми механиками обычно выглядят дёшево и нарисованы набившим оскомину плоским пиксель-артом, а дорогущие блокбастеры за миллионы баксов все на одно лицо и надоедают через 5 минут. В The Entropy Centre красивая графика, проработанные детали, есть претензия на сюжет (хотя концовку я не понял), при этом эксплуатируется любопытная небанальная механика с глубоким потенциалом.
Надеюсь, автор заработает кучу денег и выпустит вторую часть помощнее.
#games
🏝🤖 На сайте Android Developers обновили материалы по Kotlin Multiplatform:
👉 Обновили главную страницу
👉 Появился базовый курс по KMP (бесплатный)
👉 Обновленные руководство по использованию Jetpack библиотека с поддержкой KMP
#android#kmp
📹Android Developers Backstage 215. KMP. Have your code and eat it too
Software Engineers Dustin Lam и Yigit Boyar присоединяются к ведущему Tor Norbye, чтобы обсудить Kotlin Multiplatform (KMP).
0:00 - Введение
0:29 - Что такое KMP: не новый продукт, а Kotlin с новыми возможностями
3:20 - Зачем нужен KMP: преимущества и цели
6:17 - KMP vs. другие кроссплатформенные фреймворки
6:41 - Общая бизнес-логика — основной сценарий использования
9:18 - Практическое внедрение: превращение Android-приложения в KMP
13:15 - Работа с платформо-специфичными зависимостями
28:56 - Поддержка библиотек в Kotlin Multiplatform
35:56 - Developer Experience: инструменты и интеграция
40:16 - Совместимость с iOS: как добиться взаимодействия
42:51 - KMP в действии: как Google использует эту технологию
47:17 - Долгосрочное видение и потенциал KMP
51:30 - Консистентность поведения vs. нативная производительность
55:32 - Попробуйте KMP и присоединяйтесь к разработке!
#android#kmp
Reanimator - простоя библиотека для Jetpack ViewModel (с поддержкой KMP) для работы с состоянием. Подробный разбор в статье (EN,11м) или альтернативной ссылке
@Serializable
data class MyUiState(
// Persistent
val data: List<String> = emptyList(),
val selectedItem: String? = null,
// Transient
val isLoading: Boolean = false,
val error: String? = null
)
class MyViewModel(private val savedStateHandle: SavedStateHandle) : ViewModel() {
// Define which properties are transient
private val transientProps = listOf("isLoading", "error")
// Declare your state flow - Reanimator handles the rest!
private val _uiState by savedStateHandle.getMutableStateFlow(
defaultValue = MyUiState(), // Initial/default state
coroutineScope = viewModelScope, // Scope for saving changes
transientProperties = transientProps // What NOT to save
// key = "custom_state_key" // Optional: custom key
)
val uiState: StateFlow<MyUiState> = _uiState.asStateFlow()
// ... rest of your ViewModel logic ...
fun updateData(newData: List<String>) {
// Just update the state - Reanimator saves persistent parts automatically
_uiState.update { it.copy(data = newData, isLoading = false) }
}
}
#android#kmp
🚀Вышел Jetpack Window Manager 1.4 - библиотека для работы с разными форматами устройства и несколькими окнами с поддержкой KMP
Что нового в свежей версии:
👉 Улучшения Activity Embedding
👉 Улучшения API WindowMetrics
👉 Улучшили API для тестирования
#jetpack#kmp
📹Compose/iOS готов к продакшену? Прямой эфир с ответами на вопросы
Когда: четверг, 8 мая, 18:30 (GMT+3)
Буквально вчера вышел Compose iOS Stable и конечно же открывает возможности Android разработчиками по написанию мобильных приложений под обе платформы. Но всё ли так сладко, как заявляет JetBrains? Будем разбираться в этом с экспертом кто уже познал прелести продакшена!
👨💻 Эксперт - Никита, фуллстек Kotlin разработчик, автор проектов FlowMVI и respawn.pro. При анонсе Compose iOS Stable, его приложение было в официальном анонсе 🔥
👨💻 И еще одни эксперт - Чикишев Тимур, Senior Android разработчик в KTS. Начал пробовать Compose iOS еще до официального релиза. Успел адаптировать Android приложение с Compose на iOS, буквально на этой неделе сделали релиз
Задавайте свои вопросы в комментариях к посту, чтобы они были заданы на эфире
#android#compose#kmp
Вышел Coil 3.1.0 - популярный загрузчик картинок с поддержкой KMP
👉Улучшили производительность AsyncImage: скорость работы стала лучше на 25-40%, а потребление памяти - на 35-48%
👉 FakeImage теперь deprecated
👉 Появился ColorImage - полезен для возвращения фейковых значений в тестах и для Compose превью
👉 coil-compose-core больше не зависит от Dispatchers.Main.immedate, что позволило исправить баги в работе Paparazzi и Roborazzi
🛠 Множество других исправлений и улучшений API
#kmp#android#compose
🤯 Те кто использовал Jetpack Paging 3 знают насколько он может справиться только с базовыми сценариямми. Шаг влево или вправо - уже боль!
Сегодня хочу познакомить вас с альтернативой — библиотекой 🐱Paginator. Это KMP-решение для пагинации, которое решает те самые проблемы, где Paging 3 начинает "буксовать".
Paginator построен на отличной модели от Jetpack Paging 3: страница — это адресуемая ячейка в кэше, кэш — обычная структура данных, а навигация — обычные методы.
1️⃣✅ Адресуемые страницы
Прямые методы goNextPage(), goPreviousPage() и jump(Bookmark). Deeplink на сообщение из пуша решается одной строкой.
2️⃣✅ Мутации по запросу
MutablePaginator предоставляет CRUD-операции: replace { it.id == 42 }, removeWhere { it.deleted }. Один лайк меняет один элемент без инвалидации всей страницы.
3️⃣✅ Сохраняемое состояние
Кэш — обычная структура данных, которую можно сериализовать через kotlinx.serialization. Методы serializeToJson() и restoreFromJson() решают проблему Process Death без плясок с бубном.
4️⃣✅ Библиотека, а не фреймворк
Написан на чистом Kotlin без платформенных зависимостей и живёт в commonMain. Логика пагинации становится частью общего доменного слоя KMP, не копируется между платформами и не имеет двух реализаций.
5️⃣✅ Курсорная пагинация "из коробки"
Отдельный класс CursorPaginator с единой моделью состояний, транзакций и сериализации.
Paginator — это не обёртка над Paging 3. Это другая модель, переосмысливающая ключевые типы. Обёртка просто не смогла бы дать ни мутации элемента, ни сериализации кэша.
🔗Оригинальная статья на Хабре
🐱Репозиторий Paginator
#Android#AndroidDev#KMP
🤯Команда Anvil решила прекратить развитие проекта в пользу другого решения
Anvil - Kotlin плагина для расширения возможностей Dagger 2 и упрощения работы с ним решили прекратить развивать. Коллега автором решения сделал Metro и компания будет переходить на него и участвовать в его развитии.
Metro - это compile-time DI фреймворк с поддержкой KMP, который вдохновлялся Dagger, Anvil, Kotlin-Inject.
#di#kmp