v1.7 (10.01.2010): + Добавлен новый виз�?альный контрол:
CHECKBOX. �?налогичен контролл�? button, �? некоторыми отличиями правда.
Пример объявления в
.window файле:
CHECKBOX
{
NAME="MyCheckbox"
X=-420
Y=240
WIDTH=100
HEIGHT=100
DISABLED=FALSE
VISIBLE=TRUE
PARENT_NOTIFY=TRUE
PIXEL_PERFECT=FALSE
FOCUSABLE=FALSE
CENTER_IMAGE=FALSE
PRESSED=TRUE ; изначальное �?о�?тояние чекбок�?а: отмечен или нет. true - отмечен.
IMAGE="checkbox_checked.png" ; изображение изначального �?о�?тояния чекбо�?а. должно быть аналогичным значению переменной "PRESSED".
SCRIPT="scripts\system\mycheckbox.script"
EDITOR_PROPERTY
{
NAME="Selected"
VALUE="False"
}
}
Пример
mycheckbox.script:
#include "scripts\base.inc"
on "init" // вызывает�?я �?раз�? же как �?криптовый файл б�?дет прочитан движком. то е�?ть этот блок �?работает до того, как пользователь �?видет �?одержимое .window файла (предположим, меню на�?троек)
{
self.SetPressedOnImage("checkbox_checked.png"); // изображение отмеченного чекбо�?а
self.SetPressedOffImage("checkbox_unchecked.png"); // изображение неотмеченного чекбо�?а
}
on "checked" // тек�?щее изображение �?о�?тояния чекбок�?а(отмечен/нет) б�?дет переключено автоматиче�?ки на то, которое вы �?�?тановили вызвав "SetPressedOnImage".
{
Game.Msg("checked!");
}
on "unchecked" // аналогично опи�?анию "checked", но отно�?ит�?я к ф�?нкции "SetPressedOffImage".
{
Game.Msg("unchecked!");
} // �?оотве�?твенно �?прайты вр�?чн�?ю переключать вам �?же не надо, для отображения �?о�?тояния включенно�?ти/выключенно�?ти чекбок�?а.
+ ДОбавлен идентификатор "Type" в игров�?ю отладочн�?ю �?тати�?тик�?. Теперь когда мы�?ка находит�?я над каким-ниб�?дь объектом, б�?дет отображать�?я в блоке отладочной информации не "Name: имя_активного_объекта", а "Name: имя_активного_объекта (Type: тип_активного_объекта)". Плю�? неболь�?ие ко�?метиче�?кие изменения в �?тилизации вывода тек�?та.
+ Добавлен новый параметр в командн�?ю �?трок�? ехе-файла: "-nosettingsdlg" (по запро�?�?
Aleksandr Recoba). Ехе-файл игры зап�?щенный �? этим параметром, не б�?дет отображать в�?троенный движковый диалог на�?троек при первом зап�?�?ке игры, и при по�?лед�?ющих тоже(но �? по�?лед�?ющими �?же не надо �?казывать -nosettingsdlg, необходимо �?казать ли�?ь �? первым зап�?�?ком, когда игра например была только что �?�?тановлена).
Е�?ли вы �?обираете�?ь и�?пользовать эт�? ф�?нкцию, было бы неплохо е�?ли бы �?�?тановщик ва�?ей игры пропи�?ал в рее�?тре(или в .ini файле ва�?ей игры) в�?е н�?жные на�?тройки по-�?молчанию.
- �?�?правлена работа �?вой�?тва Game.IsFullScreenSwitchSupported. Теперь она ф�?нкционир�?ет как планировало�?ь.
Некоторые примечания которые б�?д�?т полезны разработчикам, работающими �? и�?ходным кодом движка, в ча�?тно�?ти тем, кто планир�?ет перене�?ти ча�?ть изменений моего движка в и�?ходный код �?воей модификации WME:
a) Проект �?компилирован �? DirectX 9 SDK November 2008 & Windows SDK v7.0. Так что вам необходимо по�?тавлять �?о �?воим проектом файл d3dx9_40.dll. Но
WME_D3D9.exe без проблем работает �? DX8-видеокартами (я те�?тир�?ю кажд�?ю нов�?ю вер�?ию
Kinjal Edition на GeForce 2, помимо �?воей о�?новной видеокарты GeForce 9800GTX+), так что вы можете не и�?пользовать
wme.exe(DX8-рендерер), т.к. я обновляю только WME_D3D9.exe.
b) d3dx8tex.h заменен на d3dx9tex.h
c) Файл в "b)" перемещен из 3DShadowGen.cpp в dcgf.h (панацея от ма�?�?овых о�?ибок компиляции из-за изменений вне�?енных в �?лед�?твии п�?нкта "a)")
d) Добавлены DIRECTSOUND_HEADER_VERSION и DIRECTINPUT_HEADER_VERSION в dcgf.h (аналогично из-за изменений п�?нкта "a)")
e) PlatformWin.h: typedef GUID *REFKNOWNFOLDERID; переименован в typedef GUID *REFKNOWNFOLDERIDA; (аналогично вы�?е)
f) Объявление вн�?тренней ф�?нкции
Game->LOG было изменено �? (HRESULT res, LPSTR fmt, ...) на (int EchoInGame, LPSTR fmt, ...):
Game->LOG(0, "bla") - пи�?ет только в лог-файл.
Game->LOG(1, "bla") - пи�?ет в лог файл, и в добавок выводит это �?ообщение в игровой окно на манер "Script Runtime Error" �?ообщения. Это б�?дет �?ироко мною и�?пользовать�?я для вывода о�?ибок типа "Syntax error in BLABLA definition", которые б�?д�?т выводит�?я через Game->LOG(1, error_message). На данный момент это и�?польз�?ет�?я только в объявлении
CHECKBOX. Попроб�?йте �?делать о�?ибк�? в названии, например, токена IMAGE, чтобы по�?мотреть как это �?ообщение об о�?ибке б�?дет выглядеть в игре.
g) _WIN32_WINNT изменена �? 0x0500 на 0x0501.
P.S. Да, я знаю, что чекбо�?ы можно без тр�?да реализовать на объектах типа
button, и чекбок�? в виде отдельного контрола в принципе не н�?жен вов�?е, но так как я планир�?ю добавить контролы �?кроллбара и выпадающего �?пи�?ка, надо было в�?е-таки �? чего-то начать, чтобы л�?ч�?е понять как добавляют�?я в движке новые виз�?альные контролы. Поэтом�? контрол чекбок�?а был выбран в каче�?тве *�?тартовой площадки*.
v1.6 (06.01.2010): + ДОбавлено �?вой�?тво Game.IsFullScreenSwitchSupported. Возвращает true/false. Проверяет, что игра зап�?щена в поддерживаемом разре�?ении. Е�?ли это не так, ф�?нкция SetWindowedMode() работать не б�?дет. Так что вам надо проводить эт�? проверк�? перед тем, как предположим захотите выве�?ти опцию а-ля "На ве�?ь экран?" в меню на�?троек ва�?ей игры в каче�?тве, доп�?�?тим, активной к нажатию.
* Ф�?нкция SetWindowedMode(bool
значение) перепи�?ана. Теперь она возвращает значение в каче�?тве рез�?льтата �?воей работы. 0 - нечего изменять (тек�?щее �?о�?тояние окна(
оконный режим либо полный экран) являет�?я
значением которые вы хотите �?�?тановить), 1 - режим был изменен �?�?пе�?но, 2 - �?гра зап�?щена в режиме неподдерживаемого разре�?ения (плю�?, б�?дет выведено �?ообщение "script runtime error").
* Удаленые некоторые мои отладочные �?ообщения.
- �?�?правлены возможные вылеты в ф�?нкциях по работе �? рее�?тром (regwritenumber, regreadnumber, regwritestring, regreadstring).
v1.5 (03.01.2010): + libtheora обновлена �? 1.0 до 1.1.1
+ �?зменения �?деланные в WME 1.9.1
* wme.rc был обновлен.
v1.4 (18.12.2009):
+ Метод this.GetLayer() (про�?тран�?тво Entity) - возвращает reference на �?лой тек�?щего Ентити.
Пример:
http://kinjal.apeironstudios.com/testlayer.rar + Теперь �? кнопок и �?татик-лейблов е�?ть метод AlphaColor.
Пример: btn.AlphaColor = RGB(255, 255, 255, 50);
+ Два новых метода для объекта Entity: SetBeforeEntity(int index) / SetAfterEntity(int index) - меняют�?я позицию ентити на �?лое. Применяет�?я только в том �?л�?чае, е�?ли ентити находит�?я в этом же �?лое.
Полезно для анимации, например, открывающей�?я двери. Чтобы не приходило�?ь по�?тоянно пере�?оздавать Ентити.
+ GetIndex (namespace - Entity) - возвращает индек�?(позицию) данного ентити в �?лое (т.к. ентити может жить без �?лоя, в таком �?л�?чае вернет -1).
- �?�?правлено от�?�?т�?твие к�?р�?ора на бордюре программы в оконном режиме.
v1.3 (15.12.2009):
+ Возможно�?ть гамма-коррекции.
Game.SetGamma(int) - �?�?тановить гамм�?. значения - от 0(темно-темно) до 254(ярко-ярко).
int Game.GetGamma Game.SetGammaDefault(int) - зде�?ь вы должны �?казать значение гаммы для ва�?ей игры по-�?молчанию (е�?ли не �?казано, и�?польз�?ет�?я �?довлетворительное значение, в каче�?тве значения по-�?молчанию, для моего монитора - 140). Эта ф�?нкция, в отличии от о�?тальных Gamma-ф�?нкций, желательно чтобы была обязательно �?казана. Где-ниб�?дь в начале game.script например.
Game.RestoreGamma(). - �?�?танавливает гамм�? в �?оответвет�?твии �?о значением, �?казанным при вызове ф�?нкции SetGammaDefault.
Например:
const GAMMA_STEP = 5;
Game.SetGammaDefault(249); // п�?�?ть глаза плач�?т.
....
// Доп�?�?тим, где-то в на�?тройках, пользователь кр�?тит полз�?нок гаммы...
var current_gamma = Game.GetGamma();
Game.SetGamma(current_gamma + GAMMA_STEP);
....
// Наиграл�?я полз�?нком пользователь, захотел�?о�?ь ем�? верн�?ть на�?тройки гаммы по-�?молчанию, в �?оответ�?твии �? чем нажимает на кнопочк�? а-ля "По-�?молчанию"
Game.RestoreGamma(); // 249.
+ libpng обновлена �? 1.2.22 до 1.2.41
* Метод
Game.ShowText переименован обратно в
Game.ShowVersion(text, x = 863, y = 740, width = 160, text_alignment = 0). В замен этого метод
Game.Msg �?о �?тандартного
Game.Msg(text) ра�?�?ирен до
Game.Msg(
text, duration = 3000, x = 0, y = 20, text_alignment = 0).
* По�?ледний арг�?мент �?
Game.ShowVersion - text_aligment - теперь принимает не 10/20/30, а 0/1/2 (по �?молчанию - 0, то е�?ть TAL_LEFT). Поэтом�? теперь для �?казания выравнивания тек�?та можно и�?пользовать кон�?танты TAL_ из const.inc.
* �?зменения �?деланные в диалоге на�?троек в моей редакции WME �?далены, теперь он �?нова дефолтный.
v1.2 (12.12.2009): + Новые методы для теоры (объект Entity): (
http://forum.dead-code.org/index.php?topic=3725.0)
int GetTheoraPositionInFrames();
float GetTheoraPositionInSeconds();
float SetTheoraPositionInSeconds(int seconds); примечание: е�?ли не пол�?чило�?ь, ф�?нкции верн�?т -1.
+ Немножко �?мень�?ен лаг в GetSoundPosition, GetMusicPosition, GetMusicChannelPosition (те�?тил только на огг файлах). Полно�?ть �?брать лаг при выполнении этих ф�?нкций не пол�?чит�?я, к �?ожалению. (
http://forum.dead-code.org/index.php?topic=3283.0)
+ Зат�?хание зв�?ка:
Game.MusicFadeOut(
fade_out_millisec, channel = 0). (Mnemonic's todo).
Пример:
Game.PlayMusicChannel(0, ...)
Game.MusicFadeOut(3000, 0);
+ Опять немножко оптимизирован к�?р�?ор (так в�?е таки, на ва�? взгляд он �?тал более отзывчивым?).
* Ра�?�?ирил Game.ShowVersion(text). Теперь она называет�?я Game.ShowText. Может принимать �?лед�?ющие арг�?менты: Game.ShowText(text, x = 863, y = 740, width = 160, text_alignment = 10).
примечание: alignment - принимает 10, 20, 30. 10 - left, 20 - center, 30 - right.
примечание2: hh/mm/yyyy hh:mins в�?ё ещё поддерживают�?я в "text".
- �?�?правлен фатальный вылет движка при и�?пользовании Game.TotalNumItems/NumItems. (
http://forum.dead-code.org/index.php?topic=3026.0)
- Др�?гие более мелкие изменения(Оптимизация MusicCrossfade, мерцание при и�?пользовании SetWindowedMode так же и�?правлено, в ShowText и�?правлен overflow-bug который возникал при многократком вызове этой ф�?нкции, от�?�?т�?твие minimize/maximize/close кнопочк на бордюре при переключении в оконный режим через SetWindowedMode(true) тоже и�?правлено, и так далее...).
v1.1 (11.12.2009): + Новая �?криптовая ф�?нкция для отключения/включения вертикальной �?инхронизации (перезап�?�?к игры не треб�?ет�?я): Game.SetVSyncMode(bool true/false)
+ Немного оптимизирован к�?р�?ор в режиме полного экрана �? включенным VSync'ом (�?�?бъективно, он �?тал двигат�?я отзывчивее. поглядите �?ами, может меня глючит)
v1.0 (09.12.2009): 1. Убран в�?троенный диалог на�?троек (не показывает�?я теперь по дефолт�?, но может быть показан изменив �?оотве�?тв�?ющ�?ю на�?тройк�? в рее�?тре программы)
2. Переключение в оконный режим и обратно в полноэкранный прямо в игре (метод Game.SetWindowedMode(bool true/false)
3. Переделаны ф�?нкции для работы �? рее�?тром. Снято ограничение на �?охранение на�?троек(PrivateSettings, в�?мы�?ле). Теперь формат для ф�?нкций по работе �? рее�?тром �?лед�?ющий: Game.RegZZZYYY(Key, Value, Where).
ZZZ - Write/Read
YYY - Number, String
Пример: Game.RegWriteString("Subtitles", 1, "Video").
Е�?ли параметр Where не �?казан - в�?ё пи�?ет�?я/читает�?я из PrivateSettings.
4. Перед каждым зап�?�?ком игры лог-файл теперь очищает�?я.
5. В отладочной информации, на экране игры, теперь выводит�?я количе�?тво и�?польз�?емой памяти.
6. libvorbis был обновлен �? 1.2.0 вер�?ии до 1.2.3.
7. Метод Game.ShowVersion(text) - показывает�?я в правом нижнем �?гл�? информацию о вер�?ии ва�?ей игры. Пример и�?пользования: Game.ShowVersion("v1.0 dd/mm/yyyy hh:mins").
dd/mm/yyyy hh:mins - б�?д�?т заменены на Last Modified Date файла data.dcp в папке �? ва�?ей игрой который (на мой взгляд - ве�?ьма �?добный �?по�?об вер�?и'онирования игр на базе WME).
8. Можете теперь хранить на�?тройки игры не тоьлко в рее�?тре, но и в ини, который б�?дет �?оздан в папке �? игрой при вызове ф�?нкции Game.SetSettingsFile(text path). Пример: Game.SetSettingsFile(".\\bla.ini");
Методы: Game.IniReadValue(Key, InitValue, Where), Game.IniWriteValue(Key, Value, Where); - по аналогии �? рее�?тром короче. Пример: Game.IniWriteValue("ShowFPS", 1, "De6ugGgGg");
9. �? че-то ещё по мелочи...
http://kinjal.apeironstudios.com/WME-KE_V17a_bin_12jan2010.rarhttp://kinjal.apeironstudios.com/WME-KE_V17a_src_12jan2010.rar