Сейчас 08:28:46 Понедельник, 16 мая, 2022 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » Раздел картостроителя » [cJass] - STL (А почему бы и нет?)
[cJass] - STL
xomachДата: Воскресенье, 09 Февраля 2014, 08:57:26 | Сообщение # 1
7 уровень
Группа: Проверенные
Сообщений: 484
Награды: 0
Репутация: 128
Блокировки:
Еще когда год назад занимался картостроением, думал, почему не нашлись энтузиасты, которые бы написали что-то вроде STL для картоделов. Имеется ввиду не перенос сишных функций, а реализация некого набора функций и наработак, которые и так гуляют из карты в карту, но только иной раз на костылях, а то и вовсе нерабочими.
Например:
- стандартные контейнеры C++ (лично мне регулярно не хватает)
- некоторые стандартные алгоритмы
- callback система
- 3Dcam
- ФСгуй
...

Думаю, не составит труда найти, чем наполнить, было бы, кому наполнять
Есть предложение собрать команду для реализация подобной библиотеки

П.С.: Сам я, естественно, в деле ;)




Сообщение отредактировал xomach - Воскресенье, 09 Февраля 2014, 14:33:47
 

SirNikolasДата: Воскресенье, 09 Февраля 2014, 09:32:02 | Сообщение # 2
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Название темы интригует. Что конкретно хотел узнать?

 

xomachДата: Воскресенье, 09 Февраля 2014, 10:50:28 | Сообщение # 3
7 уровень
Группа: Проверенные
Сообщений: 484
Награды: 0
Репутация: 128
Блокировки:
Здарова, да что-то бес попутал предложения глупые выдвигать) Неважно

 

SirNikolasДата: Воскресенье, 09 Февраля 2014, 11:28:05 | Сообщение # 4
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Ну почему же, макросы вполне могут исполнить роль шаблонов. Верни текст первого поста, интересно.

 

xomachДата: Воскресенье, 09 Февраля 2014, 14:20:53 | Сообщение # 5
7 уровень
Группа: Проверенные
Сообщений: 484
Награды: 0
Репутация: 128
Блокировки:
SirNikolas, глупое не потому, что не получится, а потому что врят ли кто-то возьмется за это

 

SirNikolasДата: Воскресенье, 09 Февраля 2014, 15:02:25 | Сообщение # 6
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Цитата xomach ()
- callback система
Забавно, сам недавно начинал делать нечто подобное. По моим замыслам, выглядеть должно было примерно так:[code=jass]library Poison requires SpellData {
define {
private SPELL = 'A000';
private DURATION(lvl) = 10.;
private PERIOD = 1.;
private DAMAGE(lvl) = (50. + 100. * lvl) * PERIOD;
private EFFECT = "";
private ATTACH = "chest";
}

constant key KEY;

//По таймеру наносим урон.
private void onTimer(SpellData d) {
UnitDamageTarget(d.unit[0], d.unit[1], d.real[0], true, false, null, null, null);
}

//После окончания снимаем эффект.
private void onEnd(SpellData d) {
DestroyEffect(d.effect[0]);
d.destroy();
}

//При смерти цели прекращаем действие заклинания.
private void onTargetDeath(SpellData d) {
d.End();
}

//Рассчитываем значения и запускаем таймер.
callback onUnitSpellEffect(SPELL) {
SpellData d = SpellData.create(KEY, 2);
int lvl = GetUnitAbilityLevel(GetTriggerUnit(), SPELL);
//Записываем кастера и цель.
d.unit[0] = GetTriggerUnit();
d.unit[1] = GetSpellTargetUnit();
//Регистрируемся на смерть цели.
d.onDeath[1] = onTargetDeath;
//Рассчитываем урон и (возможно) некоторые дополнительные данные.
d.real[0] = DAMAGE(lvl);
d.effect[0] = AddSpecialEffectTarget(EFFECT, d.unit[1], ATTACH);
//Запускаем периодик.
d.Start(DURATION(lvl), PERIOD, onTimer, onEnd);
}
}[/code]


 

xomachДата: Воскресенье, 09 Февраля 2014, 15:16:29 | Сообщение # 7
7 уровень
Группа: Проверенные
Сообщений: 484
Награды: 0
Репутация: 128
Блокировки:
Цитата SirNikolas ()
макросы вполне могут исполнить роль шаблонов

а указатели кстати ничем уже не заменишь

ну если говорить о define'ах как замене template, то все это чудо должно быть не константным, а что-то типо:
Код

define set_ini(type) = {
      struct set_##type () {   
         ....
         public void insert (type x) {
            ....
         }
         ....
     }
}

...
set_ini (int)
...
set_int q;
...




Сообщение отредактировал xomach - Воскресенье, 09 Февраля 2014, 15:17:18
 

SirNikolasДата: Воскресенье, 09 Февраля 2014, 15:55:51 | Сообщение # 8
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Цитата xomach ()
set_ini (int)
...
set_int q;
А вот и нет. Нужно использовать нативные JASS2 типы, иначе Adic не сможет восстановить тип q.
А вообще да, именно это я и имел в виду. Правда, мне для таких целей больше по душе текстмакросы, но это дело вкуса.


 

xomachДата: Воскресенье, 09 Февраля 2014, 16:11:14 | Сообщение # 9
7 уровень
Группа: Проверенные
Сообщений: 484
Награды: 0
Репутация: 128
Блокировки:
Цитата SirNikolas ()
А вот и нет. Нужно использовать нативные JASS2 типы, иначе Adic не сможет восстановить тип q

не совсем понимаю, почему?

ну, по крайней мере, это компилится:
Код

define int = integer
define void = nothing

define set_ini(type) = {
     struct set_##type {
         type x = 0
     }
}

set_ini(int)

void func () {
     set_integer q;
     q.x = 5
     int w = q.x
}

Добавлено (09 Февраля 2014, 16:11:14)
---------------------------------------------
а, нет, set_int q не компилится, и я даже понял, почему)


 

Форум о Warcraft 3 » Раздел для картостроителей » Раздел картостроителя » [cJass] - STL (А почему бы и нет?)
  • Страница 1 из 1
  • 1
Поиск:

Copyright © 2006 - 2022 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz