์˜ˆ์ „์— ์š”๊ธฐ์„œ gpgpu์— ์“ฐ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์—ฐ์†ํ•ด์„œ ์กด์žฌํ•˜๋‹ˆ๊นŒ ์ฐพ์•„๊ฐ€๊ธฐ ์‰ฝ๋‹ค... ๋ญ ์ด๋Ÿฐ ์‹์˜ ์„ค๋ช…์ด ์žˆ์—ˆ๋˜๊ฑฐ ๊ฐ™์€๋Ž….



์˜ˆ๋ฅผ๋“ค์–ด์„œ, ์–ด๋–ค ๋†ˆ์ด ๋‹ค๋ฅธ ๋†ˆ์„ ๊ณต๊ฒฉํ•˜๋Š”๊ฑธ ECS๋กœ ๋งŒ๋“ค์–ด๋ณธ๋‹ค๋ฉด,


entity๋Š” {entity id: # hp: ##, atk:### } ์ด๋Ÿฐ ์‹์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฐ์ฒด ๊ฐ™์€๊ฑฐ๊ณ 


system์€ ์ปดํฌ๋„ŒํŠธ .. hp๊ฐ€ ์žˆ์œผ๋ฉด ์ณ๋งž์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ, atk์ด ์žˆ์œผ๋ฉด ๋•Œ๋ฆด ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๊ตฌํ˜„ํ•œ ํ•จ์ˆ˜ ๊ฐ™์€ ์นœ๊ตฌ๋“ค.



entity๋ž‘ system์€ ๊ฐ๊ฐ ์•„๋ž˜์ฒ˜๋Ÿผ ๋ฐฐ์—ด๋กœ ๋ชจ์•„๋‘๊ณ , component๋Š” entity๊ฐ€ ๊ฐ€์ง€๊ณ  ๋‹ค๋‹˜.


entities = [๊ฐ์ข… entity ๋“ค... ];

systems = [ ๊ฐ์ข… system๋“ค... ];



๊ฒŒ์ž„ ๋ฃจํ”„๋Š” ์•„๋ž˜์ฒ˜๋Ÿผ ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ๋ฃจํ”„๋งŒ ๋„๋Š” ๊ต‰์žฅํžˆ ๋‹จ์ˆœํ•œ ํ˜•ํƒœ์ž„.


while(gaming) {

for(var system in systems) {

system(entities);

}


// ๊ฒŒ์ž„ ๋ฃจํ”„ ์ข…๋ฃŒ ๋กœ์ง ...

}


์‹œ์Šคํ…œ๋“ค์€ ์•„๋ž˜์ฒ˜๋Ÿผ ๋Œ์•„๊ฐ„๋‹ค๊ณ  ์นจ.


// ๊ณต๊ฒฉ ์‹œ์Šคํ…œ ์˜ˆ์ œ ...

attack(entities) {

for(var entity in entities) {

var me_ = entity;


if( me_.component["atk"] && atk_input) {

for(var entity2 in entities) {

var you_ = entity2;

if(isCollision(me_, you_)) {

attack(me_,you_);

}

}

}

}

}



์ฝ”๋“œ๊ฐ€ ์žฌ๋ฐŒ๊ฒŒ ์ƒ๊ธฐ๊ธดํ–ˆ๋Š”๋ฐ, ์ด๊ฒŒ ์™œ ์„ฑ๋Šฅ์„ ์ฆ๊ฐ€์‹œํ‚ค๋Š”๊ฑด์ง€ ๋ชจ๋ฆฌ๊ฒ ์Œ; ๋งค๋ฒˆ ์ „์ฒด ํƒ์ƒ‰ํ•˜๋‹ˆ๊นŒ ์—”ํ‹ฐํ‹ฐ ์ˆซ์ž๊ฐ€ ๋งŽ์•„์ง€๋ฉด ์žฌ๋ฏธ ๋ชป๋ณด๋Š”๊ฑฐ ์•„๋‹Œ๊ฐ€ ํ•˜๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์Œ.


์—”ํ‹ฐํ‹ฐ๋ฅผ entities ๋ฐฐ์—ด์— ๋ชจ์•„๋‘๊ธด ํ–ˆ์œผ๋‚˜, ๋ฉ”๋ชจ๋ฆฌ์ƒ์—์„œ ์ € ์นœ๊ตฌ๋“ค์ด ์—ฐ์†์ ์œผ๋กœ ์žˆ๋Š”๊ฒŒ ๋งž๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Œ. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ™์€ ์–ธ์–ด๋“ค์€ ๋ฐฐ์—ด์ด ๋ฆฌ์ŠคํŠธ์ฒ˜๋Ÿผ ๋˜๋‹ˆ๊นŒ ๊ผญ ๋ฉ”๋ชจ๋ฆฌ์ƒ์— ์—ฐ์†ํ•ด์„œ ์žˆ์„๊ฑฐ ๊ฐ™์ง€ ์•Š๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์Œ.


ํ  ...; ์™œ ์ข‹์€๊ฑด์ง€ ์ž˜๋ชจ๋ฅด๊ฒ ๋„ค์š”. ๊ธฐ์ดˆ๊ฐ€ ์ค‘์š”ํ•˜๋‹ค๋Š”๊ฒŒ ์ด๋Ÿด๋•Œ ๋“œ๋Ÿฌ๋‚˜๋Š”๋“ฏ.