TODO file for DrDestructo2 v0.9.
--------------------------------------------

* Поправить падение при смене разрешения
* Подготовка версии:
	+ Скриншоты
	- Новое видео
	* Посты
		* ЖЖ
		* G+
		* Allegro
		* Abandonia

? Показ PBP - неадекватный

* Музыка для финальной заставки
* Вторая музыка для уровня
* Улучшить финальную заставку?

Архитектура...

Game
|--стэк GameState
|      |-- InputHandler
|	   |-- Level
|			   |-- Компоненты графики
|			   |-- Компоненты физики
|			   |-- Компоненты AI
|			   |-- Подсистема графики
|			   |-- Подсистема физики
|			   |-- Подсистема AI
|--Player
|--SkyController
|--ReflectionController
|--GlobalTimer
|--Обработка пользовательского ввода
|--Логика смены уровней
|--Логика проигрыша по времени
|--Логика проигрыша по жизням
|--Логика победы по завершению всех уровней
|--Логика выдачи жизни за завершение уровня
|--Логика показа меню
|--Логика экстренного выхода из игры

Milestone 1: (0.1) ( 11.08.2011 )

+ Задний фон со сменой времени суток
	+ Вода/Земля
	+ Солнце
	+ Луна
	+ Звёзды
	+ Цвет неба
	+ Отражения в воде (later)
+ Игрок
	+ Количество жизней
	+ Счёт
+ Самолёт игрока
	+ Графическая компонента
		+ Анимации
	+ Физическая компонента
	+ Логическая компонента
	+ Управление

+ Milestone 2: (0.2) ( 03.09.2011 )

+ Система прототипов
+ Самолёты противника
	+ Графическая компонента
	+ Физическая компонента
	+ Логическая компонента
	+ AI компонента
	
+ Генератор противников (тупой)
	
+ Milestone 3: (0.3) ( 11.09.2011 )

+ Патроны игрока
+ Коллизии
+ Падение вражеских самолётов
+ Падение самолёта игрока

+ Milestone 4: (0.4) ( 25.10.2011 )

+ Штопор
	+ Сделать, чтобы самолёт игрока уходил в штопор при пересечении верхней границы
	+ Сделать, чтобы самолёт игрока вываливался сверху и уходил в штопор при пересечении нижней границы
		+ Штопор состоит из двух частей:
			+ Полный анимационный круг
			+ Спец. анимация кутящегося самолёта
		+ Во время первой части штопора, самолёт неуязвим
+ Цель
+ Коллижены с целью
+ Уничтожение кусков цели
+ Просчёт утопление
+ Завершение уровня

+ Milestone 5: (0.5) ( 27.11.2011 )

+ Два новых типа врагов (вертолёты и мины)
+ Три уровня
+ Последовательность уровней
	+ Описание уровней
	+ Настройки генератора и врагов на каждый уровень
+ Меню
	+ Начало игры
	+ Выход
	+ Настройки графики
	+ Настройки управления
	* Настройки звука (позже)
	* Настройки сложности (позже?)
	* Сохранение (позже?)
	* Загрузка (позже?)
+ Смерть игрока
	+ Смерть по времени
+ Улучшить работу меню
	+ Esc должно всегда иметь значение "вернуться на уровень"
	+ Желательно, чтобы можно было зажимать стрелочки
	+ Надо сделать, чтобы нажатие вверх на верхнем пункте переводило на нижний
	
+ Milestone 6: (0.6) ( 07.01.2012 )

+ Автонаведение в настройках и игре
+ Таблица рекордов
+ Исправить проблемы с кадрами анимаций, хорошо видных при скейлинге (самолёт игрока чуть-чуть влево-вниз, самолёты противника на ровном полёте сверху полоса)
+ Ещё несколько  типов врагов и уровней
+ Патроны врагов (бомбы, стрелы)
+ Брифинг перед уровнем, фразы в уровне по мере затопления цели 
* Сделать, чтобы для интервалов спавна указывались не абсолютные координаты (в одном из режимов), а края экрана

+ Milestone 7: (0.7) ( 26.02.2012 )

+ Заставка
+ Подложка для меню и брифингов
+ Разобраться с графическими глюками при фейдах (на один кадр показывается предыдущий экран без фейда)
+ Ещё четыре уровня
+ Музыка
+ Звуки
+ Меню настройки звука

+ Milestone 8: (0.8) ( 09.04.2012 )

+ Все враги
+ Все уровни
+ Сделать несколько меню опций
+ Добавить настройки сложности:
	+ Количество жизней
	+ Время игры	
+ Завершение игры
+ Музыка
	+ Музыка для меню
	+ Музыка для брифинга
+ Два режима огня (как в старой игре - долбёжка, и как у меня сейчас)	
+ Ускорить разлетание объектов после уровня

Milestone 9: (0.9)

+ Сохранение игры
+ Достижения
+ Проверить все спрайты при скейлинге - у шаттла нарушена граница опять
+ Решить проблему с задержкой при повторе музыки (уйти с irrKlang)
+ Попробовать что-нибудь сделать с искажением шрифтов при скейлинге
+ Сделать возможность менять хотя бы управление и звук во время игры (меню паузы)

Milestone 10:(1.0)

* Музыка для финальной заставки
* Вторая музыка для уровня
* Улучшить финальную заставку?

* Статистика общая и по уровням, показ статистики
* Новые шрифты
	* Шрифт меню
	* Шрифт игры
	* Отдельно шрифт для брифингов, достижений и т.п.?
* Новое оформление HUDа
* Замена графики
* Поддержка геймпада

1) Решить, как будет устроено переключение игровых состояний. С учётом компонентной модели?
   Лучше, наверное, это без компонент делать, уж очень состояния высокоуровневые.
   Тогда так:
   Каждое состояние - это класс, который имеет в себе InputHandler, ProcessInput, Render и Update.
   Состояния можно переключать в Update через контекст.
   Состояния можно не только переключать, но и класть в стэк. При этом они будут обрабатываться последовательно, от старшего к младшему.
   (Это обеспечит рисование "меню поверх экрана", "меню поверх меню" и т.п.)
   Если состояние хочет удлаиться из стэка (или его кто-то удаляет!), то удаляются и все младшие состояния, т.к. считается, что они его дочерние.
   

2) Планирование фич:

* Задний фон со сменой времени суток
	* Вода/Земля
	* Солнце
	* Луна
	* Звёзды
	* Цвет неба
	* Отражения в воде (later)
* Игрок
	* Количество жизней
	* Счёт
	* Управляемый объект
* Самолёт игрока
	* Графическая компонента
		* Анимации
	* Физическая компонента
	* Логическая компонента
	* Управление
* Самолёты противника
	* Графическая компонента
	* Физическая компонента
	* Логическая компонента
	* AI компонента
* Генератор противников (тупой)
* Патроны игрока
* Коллизии
* Падение вражеских самолётов
	* Подмена объекта
* Падение самолёта игрока
* Цель
	* Отражение цели в воде (later)
* Коллижены с целью
* Уничтожение кусков цели
* Просчёт утопление
* Завершение уровня
* Последовательность уровней
	* Описание уровней
	* Настройки генератора и врагов на каждый уровень
* Меню
	* Сохранение
	* Загрузка
* Все враги
* Патроны врагов (бомбы, стрелы)
* Все уровни/цели
* Завершение игры
* Продвинутый генератор врагов
* Звук

Попытка архитектуры:

Объекты:

* Самолёт игрока
	* Рисуется
	* Двигается
	* Коллидится с другими самолётами
	* Коллидится с выстрелами
	* Коллидится с потолком и водой
	* Умирает
* Игровая логика
	* Получает ввод
	* Управляет самолётом игрока
	* Стреляет
	* Кидает бомбы
	* Обрабатывает столкновения
	* Убивает объекты
	* Удаляет объекты
	* Создаёт объекты
* Самолёт противника (а также вертолёт и т.п.)
	* Управляется АИ
	* Рисуется
	* Двигается
	* Коллидится с выстрелами игрока
	* Коллидится с краями
	* Стреляет
	* Умирает
* Сбитый самолёт - облачко
	* Управляется АИ
	* Рисуется
	* Двигается
	* Коллидится с краями карты	
* Сбитый самолёт
	* Управляется АИ
	* Рисуется
	* Двигается
	* Коллидится с целью
* Снаряд игрока
	* Рисуется
	* Двигается
	* Коллидится с самолётами врага
	* Коллидится с краями карты
* Снаряд противника
	* Рисуется
	* Двигается
	* Коллидится с самолётом игрока
	* Коллидится с краями карты	
* Бомба игрока
	* Рисуется
	* Двигается
	* Коллидится с целью
	* Коллидится с краями карты	и водой
* Цель
	* Рисуется
	* Коллидится с бомбами
	* Коллидится с сбитыми самолётами
	* Взрывается
	* Тонет
* Уровень
	* Начинается
	* Завершается победой
	* Завершается поражением
	* Рисуется
	* Создаёт самолёт игрока
	* Создаёт самолёты противников
	* Уничтожает объекты
* Игрок
	* Имеет счёт
	* Имеет количество жизней
	* Выигрывает игру
	* Проигрывает игру
	* Рисуется
* Игра
	* Начинается
	* Меняет состояния
	* Меняет уровни
	* Заканчивается
	* Становится на паузу
	
По схеме, получается следующее:

ObjectsStorage
	* Содержит в себе разные компоненты (в т.ч. объекты)

GameObject
	* Содержит в себе ссылки на компоненты
	
State
	* Обрабатывает ввод, текущую логику, доп. рендер, AI(?)
	
Game
	* Обрабатывает общий рендер, физику, вызывает логику стейта
	* Обрабатывает высокоуровневые вещи типа выхода из игры, сохранения игры, поражения, победы и т.п.
	
Player
	* Содержит счёт, количество жизней и статистику для ачивок
	
GameLogic
	* Не конкретный объект, а часть State - центральный заведующий всем код
	
Input
	* Предоставляет текущей логике информацию о событиях ввода
	
Physic
	* Предоставляет текущей логике информацию о столкновениях
	
Иерархия вызовов:

Game
|--- Render
|--- Physic
|--- Input
|--- State ( with context )
|----|--- GameLogic

Иерархия содержания:
Game
|---- Render
|---- Physic
|---- Input
|---- State
|-----|---- AI
|-----|---- Special render
|---- Player
|---- ObjectsStorage
|-----|---- GameObject(s)

Виды AI:

1) Обычные самолёты:
* Лететь прямо быстро
* Лететь прямо медленно
* Лететь прямо быстро, один раз поменять высоту вверех
* Лететь прямо быстро, один раз поменять высоту вниз
* Лететь прямо медленно, один раз поменять высоту вверех
* Лететь прямо медленно, один раз поменять высоту вниз

2) Вертолёт:
* Вылететь сверху, опуститься до определённого уровня, выпустить стрелу, полетать влево-вправо
* Вылететь из-за края экрана, полетать туда-сюда не меняя высоты

3) Стрела:
* Лететь прямо

4) "Мина"
* Вылететь сверху экрана, долететь до определённой высоты, пробыть там несколько секунд, улететь за верх экрана

5) Бомбардировщик
* Лететь прямо, не меняя высоты, через промежутки времени спавнить бомбы с маленьким интервалом

6) Бомба
* Лететь вниз, взорваться на определённой высоте

7) Двухместный самолёт
* Лететь прямо и менять высоту один раз

8) Сверхзвуковой самолёт
* Вылететь из-за края экрана, остановится, проиграть анимацию, быстро пролететь прямо

9) Параноя
* Лететь прямо (?)

10) Шаттл
* Вылететь из-за верхнуго края, лететь вниз периодически меняя направление, изредка спавнить спутники (улететь-то куда?)

11) НЛО
* Появиться в случайном месте экрана, повисеть, проиграть анимацию, исчезнуть, появится и т.д. (окончательно исчезнуть - по времени?)

12) Спутник
* Летать, меняя направление (?)

Звуки:

Общие:

* Переход в меню
* Выбор в меню
* Звук текста в брифинге (?)

Объекты:

* Самолёт игрока:
	* Звук двигателя с измененича частоты в зависимости от угла
	* Звук выстрела
	* Звук использования бомбы
	* Звук входа в штопор
	* Звук штопора
	* Звук падения
	* Звук взрыва

1) Обычные самолёты:
	* Звук двигателя
	* Звук смены высоты(?)
	* Звук попадания(?)
	* Звук взрыва
	* Звук "облака"(?)
	* Звук падения
	
2) Вертолёт:
	* Звук двигателя
	* Звук попадания(?)
	* Звук разворота (?)
	* Звук взрыва
	* Звук выстрела
	* Звук падения
	* Звук взрыва

3) Стрела:
	* Звук полёта(?)

4) "Мина"
	* Звук в движении
	* Звук обычный(?)

5) Бомбардировщик
	* Звук двигателя
	* Звук попадания(?)
	* Звук смены высоты(?)
	* Звук падения
	* Звук взрыва

6) Бомба
	* Обычный звук
	* Звук взрыва

7) Двухместный самолёт
	* Звук двигателя
	* Звук смены высоты(?)
	* Звук попадания(?)
	* Звук превращения	

8) Сверхзвуковой самолёт
	* Звук вылета
	* Звук разгона
	* Звук полёта
	* Звук попадания(?)
	* Звук падения
	* Звук взрыва

9) Параноя
	* Аналогично обычному самолёту

10) Шаттл
	???

11) НЛО
	* Звук спавна
	* Звук висения
	* Звук полёта
	* Звук попадания(?)
	* Звук смерти
	* Звук падения

12) Спутник
	???????????//