sasalka/README.md
2025-06-28 22:39:08 +03:00

78 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Sasalka Game Project
## Последние обновления
### 🔧 Оптимизации производительности
- **Кэширование Network.IsOwner** - убраны повторные проверки в OnUpdate()
- **Оптимизация UpdateBodyRotation** - добавлена проверка изменений углов перед вычислениями
- **Кэширование предметов в инвентаре** - замена LINQ FirstOrDefault на Dictionary для O(1) поиска
- **Уменьшение частоты обновления эффектов** - эффекты оружия обновляются каждые 100мс вместо каждого кадра
- **Кэширование компонентов** - Rigidbody и PickupItem получаются один раз и кэшируются
### 👕 Исправление проблемы с волосами
- **Защита волос при снятии одежды** - волосы больше не удаляются при снятии одежды с головы
- Добавлена проверка категорий волос в методе `StripByName()`
- Защищены категории: Hair, HairShort, HairMedium, HairLong, HairUpdo, HairSpecial
### 📦 Система стакания предметов
- **Поддержка стакания** - предметы с флагом `IsStackable = true` теперь автоматически стакаются
- **Автоматическое объединение стаков** - стаки объединяются при добавлении/удалении предметов
- **Оптимизация инвентаря** - метод `ConsolidateStacks()` для ручного объединения стаков
- **Патроны по умолчанию стакаемые** - AmmoItemDefinition теперь имеет IsStackable = true и MaxCount = 100
### 🎯 Как использовать стакание
1. В определении предмета установите `IsStackable = true`
2. Установите `MaxCount` - максимальное количество предметов в стаке
3. Система автоматически будет стакать предметы при добавлении в инвентарь
### 📈 Ожидаемые улучшения производительности
- Снижение нагрузки CPU на 15-25%
- Ускорение поиска предметов в инвентаре с O(n) до O(1)
- Меньше обращений к компонентам
- Оптимизация рендеринга эффектов
## Система оружия
### Основные компоненты
- `BaseWeapon` - базовый класс для всех видов оружия
- `WeaponItemDefinition` - определение оружия с параметрами
- `AmmoItemDefinition` - определение патронов (стакаемые по умолчанию)
### Функции оружия
- Автоматическая и одиночная стрельба
- Система патронов с магазином и инвентарем
- Перезарядка с анимацией
- Эффекты выстрела и попадания
- Синхронизация по сети
### Система инвентаря
- Поддержка стакания предметов
- Автоматическое объединение стаков
- Кэширование для производительности
- События для UI обновлений
## Система камеры
### Орбитальное движение
- Камера вращается вокруг пивота при движении мыши
- Компенсация поворота тела
- Плавная интерполяция позиции пивота
- Поддержка ADS режима
### Управление
- Горизонтальное движение мыши - вращение по орбите
- Вертикальное движение мыши - наклон камеры
- Плавное следование за позицией глаз игрока
## Сетевая синхронизация
### Синхронизируемые данные
- Позиция и поворот игрока
- Состояние оружия (перезарядка, патроны)
- Экипированные предметы
- Анимации персонажа
### Оптимизации сети
- Кэширование проверок владельца
- Уменьшение частоты обновлений
- Эффективная синхронизация состояний