14 }; |
14 }; |
15 |
15 |
16 static uint _spritegroup_count = 0; |
16 static uint _spritegroup_count = 0; |
17 static MemoryPool _spritegroup_pool; |
17 static MemoryPool _spritegroup_pool; |
18 |
18 |
|
19 void DestroySpriteGroup(SpriteGroup *group) |
|
20 { |
|
21 /* Free dynamically allocated memory */ |
|
22 switch (group->type) { |
|
23 case SGT_REAL: |
|
24 free(group->g.real.loaded); |
|
25 free(group->g.real.loading); |
|
26 break; |
|
27 |
|
28 case SGT_DETERMINISTIC: |
|
29 free(group->g.determ.adjusts); |
|
30 free(group->g.determ.ranges); |
|
31 break; |
|
32 |
|
33 case SGT_RANDOMIZED: |
|
34 free(group->g.random.groups); |
|
35 break; |
|
36 |
|
37 default: |
|
38 break; |
|
39 } |
|
40 } |
19 |
41 |
20 static void SpriteGroupPoolCleanBlock(uint start_item, uint end_item) |
42 static void SpriteGroupPoolCleanBlock(uint start_item, uint end_item) |
21 { |
43 { |
22 uint i; |
44 uint i; |
23 |
45 |
24 for (i = start_item; i <= end_item; i++) { |
46 for (i = start_item; i <= end_item; i++) { |
25 SpriteGroup *group = (SpriteGroup*)GetItemFromPool(&_spritegroup_pool, i); |
47 DestroySpriteGroup((SpriteGroup*)GetItemFromPool(&_spritegroup_pool, i)); |
26 |
48 } |
27 /* Free dynamically allocated memory */ |
49 } |
28 switch (group->type) { |
|
29 case SGT_REAL: |
|
30 free(group->g.real.loaded); |
|
31 free(group->g.real.loading); |
|
32 break; |
|
33 |
|
34 case SGT_DETERMINISTIC: |
|
35 free(group->g.determ.adjusts); |
|
36 free(group->g.determ.ranges); |
|
37 break; |
|
38 |
|
39 case SGT_RANDOMIZED: |
|
40 free(group->g.random.groups); |
|
41 break; |
|
42 |
|
43 default: |
|
44 break; |
|
45 } |
|
46 } |
|
47 } |
|
48 |
|
49 |
50 |
50 /* Initialize the SpriteGroup pool */ |
51 /* Initialize the SpriteGroup pool */ |
51 static MemoryPool _spritegroup_pool = { "SpriteGr", SPRITEGROUP_POOL_MAX_BLOCKS, SPRITEGROUP_POOL_BLOCK_SIZE_BITS, sizeof(SpriteGroup), NULL, &SpriteGroupPoolCleanBlock, 0, 0, NULL }; |
52 static MemoryPool _spritegroup_pool = { "SpriteGr", SPRITEGROUP_POOL_MAX_BLOCKS, SPRITEGROUP_POOL_BLOCK_SIZE_BITS, sizeof(SpriteGroup), NULL, &SpriteGroupPoolCleanBlock, 0, 0, NULL }; |
52 |
53 |
53 |
54 |