Слайд 2Универсальный редактор для нескольких проектов
Мельников Михаил
Бинарные данные:
Картинки
Модели
Анимации
Звуки
Музыка
Ролики
Другие данные
Слайд 3Универсальный редактор для нескольких проектов
Мельников Михаил
Табличные данные:
RPG система
Всевозможные настройки вынесенные программистами из
кода
Игровые локации (карты)
Скрипты
Обвязки вокруг бинарных данных
Данные для ELK (тексты и комментарии к ним)
Другие данные
Слайд 4Универсальный редактор для нескольких проектов
Универсальный редактор для нескольких проектов
Мельников Михаил
Дуализм хранения данных
на этапе разработки:
Слайд 5Универсальный редактор для нескольких проектов
Мельников Михаил
Требования к механизму работы с табличными данными:
Целостность
данных на всем этапе разработки
Возможность работать с данными вручную
Массовая обработка данных
Быстрота работы с данными
Независимость от конкретных типов данных
Слайд 6Универсальный редактор для нескольких проектов
Мельников Михаил
Пример структуры данных из кода игры “Блицкриг”
struct
SRMPatch
{
int nSize;
string szName;
//constructors
SRMPatch() {}
// serializing...
virtual int operator&( IStructureSaver &ss )
{
saver.Add( 1, &nSize );
saver.Add( 2, &szName );
}
virtual int operator&( IDataTree &ss )
{
saver.Add( “Size”, &nSize );
saver.Add( “Name”, &szName );
}
};
Слайд 7Универсальный редактор для нескольких проектов
Мельников Михаил
Схема создания типов данных в игре “Блицкриг
II”
Слайд 8Универсальный редактор для нескольких проектов
Мельников Михаил
Интерфейс IManipulator
interface IManipulator : public CObjectBase
{
virtual
IManipulatorIterator* Iterate( bool bShowHidden, ECacheType eCache ) = 0;
virtual const SIteratorDesc* GetDesc( const string &rszName ) const = 0;
virtual bool GetType( const string &rszName, string *pszType ) const = 0;
virtual bool GetName( UINT nID, string *pszName ) const = 0;
virtual bool InsertNode( const string &rszName, int nNodeIndex = ADD ) = 0;
virtual bool RemoveNode( const string &rszName, int nNodeIndex = REMOVE_ALL ) = 0;
virtual bool GetValue( const string &rszName, CVariant *pValue ) const = 0;
virtual bool SetValue( const string &rszName, const CVariant &rValue ) = 0;
virtual bool CheckValue( const string &rszName, const CVariant &rValue, bool *pRes ) = 0;
virtual bool IsNameExists( const string &rszName ) const = 0;
};
Слайд 9Универсальный редактор для нескольких проектов
Мельников Михаил
Броузер данных и универсальный Property Control
Слайд 10Универсальный редактор для нескольких проектов
Мельников Михаил
Схема работы с данными в редакторе (MCV)
Слайд 11Универсальный редактор для нескольких проектов
Мельников Михаил
Схема вызова экпортеров в редактрое
Слайд 12Универсальный редактор для нескольких проектов
Мельников Михаил
Создание, удаление и копирование объектов
Слайд 13Универсальный редактор для нескольких проектов
Мельников Михаил
Схема вызова редакторов и обработки сообщений
Слайд 14Универсальный редактор для нескольких проектов
Мельников Михаил
Интерфейс IInputState
interface IInputState
{
virtual void Enter()
= 0;
virtual void Leave() = 0;
virtual void Draw( class CPaintDC *pDC ) = 0;
virtual void OnSetFocus( class CWnd* pNewWnd ) = 0;
virtual void OnKillFocus( class CWnd* pOldWnd ) = 0;
virtual void OnMouseMove( UINT nFlags, const CTPoint &rMousePoint ) = 0;
virtual bool OnMouseWheel( UINT nFlags, short zDelta, CTPoint &rMousePoint ) = 0;
virtual void OnLButtonDown( UINT nFlags, const CTPoint &rMousePoint ) = 0;
virtual void OnLButtonUp( UINT nFlags, const CTPoint &rMousePoint ) = 0;
virtual void OnLButtonDblClk( UINT nFlags, const CTPoint &rMousePoint ) = 0;
…
};
Слайд 15Универсальный редактор для нескольких проектов
Мельников Михаил
Общая часть редактора:
Система обработки XSD, генерация исходников,
система считывания бинарных данных, система трансляции данных из внешнего формата во внутренний формат, представление данных в виде IManipulator
Общий Frame редактора с несколькими заготовленными окнами визуального редактирования транслирующие сообщения от дизайнера в интерфейс IInputState
Возможности по созданию дополнительных окон, меню, панелей инструментов Легкая работа со строкой статуса
Броузер общего списка объектов редактирования, система навигации по списку
Универсальный Property Control позволяющий редактировать любые данные представленные интерфейсом IManipulator
Механизм иерархического запуска экспортеров
Механизм вызова дополнительной функциональности при создании объектов, их копировании и удалении
Механизм запуска редакторов IEditor
Слайд 16Универсальный редактор для нескольких проектов
Мельников Михаил
Внешние части редактора:
Набор XSD файлов
Экспортеры. IExporter
Билдеры. IBuilder
Редакторы.
IEditor + IInputState