После достаточно длительных поисков, я наконец-то определился с интерфейсом и внешним видом будущей игры. Я перепробовал более 10 различных решений для создания интерфейса под XNA, и в тот момент, когда решил было, что я бы уже написал собственный интерфейс, если бы не тратил столько времени на поиски, я нашел гениальную (не побоюсь этого слова) разработку Тома Шейна – Neoforce. В данный момент Том разочаровался в своем детище и отдал его на волю OpenSource, где это бриллиант прозябает под кучей коммерческих решений, некоторые из которых даже рядом не стоят с Neoforce.

Я ничего не пишу в этот блог, т.к. банально не хватает на это времени: в рабочее время к своим вольнонаемным обязанностям я добавил создание сайтов , о чем и свидетельствует сайт нашей студии. В свободное время от этих занятий, которые дают мне возможность кушать и дарить цветы девушке, я продолжаю программировать свою новую игру.

В данный момент готово:

  • заготовка под базы, где можно закладывать новые строения, которые даже построятся через несколько игровых дней. Базы выполнены в трушном пиксель-арт стиле с добавлением партикл-эффектов (систему частиц я еще не вводил)
  • реализована система времени. Время течет в режиме карты (как было и есть во всех играх серии x-com) с разной скоростью. То как выглядят часы на карте и кнопки переключения скорости хода времени, вы можете видеть на картинке выше
  • куча элементов интерфейса: кнопки, надписи, всплывающее меню и всплывающие подсказки – все средствами XNA

Определяем страну на карте

Научил игру определять страну под курсором на глобальной карте, используя алгоритм из предыдущего поста , сведя все к решению задачи определения точки в полигоне. Набросал 12кб данных о полигонах на карту. Кроме того, сделал систему отображения всплывающих подсказок на экране.

На очереди – реализация контрола TextBox под XNA и работа над структурой базы игрока.

С# – Точка в полигоне

Быстро и без особых пояснений делюсь отличным (если не лучшим) алгоритмом поиска принадлежности точки полигону на двухмерной плоскости.

Алгоритм прекрасно работает со всеми видами полигонов. Для увеличения производительности можно на этапе загрузки полигонов, обрамлять его в прямоугольник и первой проверкой смотреть входит ли искомая точка в прямоугольник – это должно значительно увеличить скорость выполнения алгоритма при большом количестве сложных полигонов.

 

Туман войны, закрывающий области, которые не могут быть известны игроку из-за удаленности от них баз.

Карта мира (мейн скрин игры) с установленными двумя базами игрока.

Начинаем новый проект

Вчера начал работу над новым игровым проектом. Рабочее название (которое на 99% останется до релиза) – As We Rise .

Пока конкретных деталей я не могу открыть, т.к. они еще не оформились в приличном для публикации виде, но в целом – это будет глобальная стратегия для одного игрока в духе Master of Orion и UFO.

Релиз Timeline

 

Timeline

Я уже долго пишу о том, как разрабатываю Timeline и для чего он нужен , но в разработке любой программы есть момент, когда она должна быть завершена, а программа выпущена в свободное плавание. Сегодня я выпускаю первый билд Timeline.

 

С помощью Timeline можно анализировать, как используется домашний компьютер в то время, когда вас нет дома, либо вы не контролируете его использование. Из отчетов можно узнать, когда, какие запускались программы и открывались сайты, сколько времени было потрачено. Можно посмотреть распределение времени по различным программам.

 

Основные функции:

 

  • Мониторинг веб-сайтов
  • Снятие скриншотов экрана
  • Мониторинг запущенных процессов и приложений
  • Мониторинг общей работы компьютера
Программа выпускается по trial-лицензии.


Релиз AppUpdater

Как я и обещал , приложение апдейтер выходит одновременно с релизом Timeline . В отличии от которого, оно распространяется абсолютно бесплатно. Приложение протестировано в связке с Timeline, но может работать с абсолютно любой другой программой. Исходные коды Апдейтера я выложу немного позже, как только появится свободное время.

В дополнении ко всем существующим инструкциям апдейтера, я добавил еще одну – ожидание завершения процесса в системе. Ее я использую первой для того, что бы быть уверенным, что Timeline завершил свою работу, перед тем как начать его обновлять.

Инструкция для апдейта текущей версии Timeline выглядит следующим образом:

<WaitForApplicationEnd object=”Timeline.exe” /> – ожидаем завершение процесса, запущенного файлом timeline.exe

<BackupFolder object=”backup/” /> – определяем папку для бекапа
<BackupFile object=”timeline.exe” /> – бекапим заменяемый в дальнейшем файл

<DownloadFile object=”https://dl.dropbox.com/u/31655535/timeline-dev/Timeline.exe” target=”timeline.exe” /> – загружаем файл и записываем его как timeline.exe

<Execute object=”timeline.exe” /> – запускаем timeline.exe

Я не большой мастер писать документации, тем более для проекта у которого пока 0 пользователей, но если в ваших решениях вы найдете мой апдейтер полезным, то я с удовольствием отвечу на ваши вопросы.

Application Updater: часть кода в клиентском приложении

Для запуска модуля обновления часть кода должна быть расположена внутри клиентского(обновляемого) приложения. Вот код, который я использую в своем проекте Timeline :

Проверяем получена ли инструкция для обновления.

Запускаем проверку на наличие более новых версий инструкции, чем текущая версия программы:

При наличии более новой инструкции, вызываем модуль обновления и закрываем текущий процесс: