Я же не могу сетнуть глобалку выше объявления локалок.
Правда? А ты моск для этого пытался использовать?
globals
hashtable HT // текущая таблица
integer HI // текуший главный ключ таблицы
endglobals
function GetInt takes integer k return integer
return GetSavedInteger(HT, HI, k)
endfunction
// ... пачка функций на каждый тип
function GetTimerId takes hashtable ht returns integer
set HT = ht
set HI = GetHandleInd(GetExpiredTimer())
return HI
endfunction
function callback takes nothing returns nothing
local integer id = GetTimerId(SomeHashtable)
local integer myInt = GetInt(1)
local string myStr = GetStr(22)
//...
endfunction
globals
hashtable HT // текущая таблица
integer HI // текуший главный ключ таблицы
endglobals
function GetInt takes integer k return integer
return GetSavedInteger(HT, HI, k)
endfunction
// ... пачка функций на каждый тип
function callback takes nothing returns nothing
set HT = SomeHashtable
set HI = GetHandleInd(GetExpiredTimer())
set myInt = GetInt(1)
set myStr = GetStr(22)
//...
endfunction
KaneThaumaturge, как я понял, идея в том чтоб убрать автоматику из жтого вашего ООП и вручную более оптимально ложить структурированные данные в память.
Угадай в каком решении быстрее сделать обходы и умножения векторов много раз в секунду
А насколько у нас тесные связи? Вот допустим у нас есть система аур. Одна аура распространяет пониженную гравитацию в сфере. Другая распространяет вектор гравитации к своему центру. Третья убирает коллизии на своём радиусе. Как нам поможет ECS?
Ну или вообще по классике. Есть у нас дерево. Как удалить родителя не оставив висячих ссылок в пустоте? В ООП это разрулится деструкторами. А в ECS?
bifurcated, а каким образом связаны собственно позиции и хп. Это же по сути разные сущности. Ну или более банальный пример. У нас физический движок и нужен маятник Ньютона? Как передать импульс ровно последнему шарику?
Например, игрок является сущностью, а его скорость, позиция и жизни компонентами, движение игрока будет системой, которая итерируется по компонентам скорости и позиции. Данный подход делает наш код практичным и переиспользуемым.
Ужасное ООП
class Unit {
vec3 position;
vec3 speed;
void move(){
//...
}
}
Прекрасный ECS
struct Position {
vec3 position;
}
struct Speed {
vec3 position;
}
class Unit {
}
struct UnitHolder {
Unit unit;
Position position;
Speed speed;
}
void moveUnit(UnitHolder unit){
//...
}
» WarCraft 3 / Насколько быстро выполняется if ? - [Jass]
Ред. nazarpunk
» WarCraft 3 / Насколько быстро выполняется if ? - [Jass]
» WarCraft 3 / Насколько быстро выполняется if ? - [Jass]
» WarCraft 3 / Насколько быстро выполняется if ? - [Jass]
Ред. nazarpunk
» WarCraft 3 / Насколько быстро выполняется if ? - [Jass]
Ред. nazarpunk
» WarCraft 3 / Насколько быстро выполняется if ? - [Jass]
» WarCraft 3 / Насколько быстро выполняется if ? - [Jass]
» WarCraft 3 / Чем можно редактировать слк?
» WarCraft 3 / Mdlvis выписывает ошибку на новых моделях
» WarCraft 3 / JNGP: Rebuild от PT153
» Game Dev / Entity Component System (ECS)
» Game Dev / Entity Component System (ECS)
» WarCraft 3 / JNGP: Rebuild от PT153
» Game Dev / Entity Component System (ECS)
Ред. nazarpunk
» Game Dev / Entity Component System (ECS)
» Game Dev / Entity Component System (ECS)
» WarCraft 3 / Heroes of War 2
» Game Dev / Entity Component System (ECS)
» Во власти наживы / Глава 10. Харлок 2
Ред. nazarpunk
» Game Dev / Entity Component System (ECS)
» Game Dev / Entity Component System (ECS)
» Game Dev / Entity Component System (ECS)
» WarCraft 3 / JNGP: Rebuild от PT153
» XGM Team / Апгрейд - встречайте ТЕМЫ!
» Во власти наживы / Глава 10. Харлок 2