newgrf_spritegroup.c
changeset 4402 356627e69fc5
parent 4331 ec584824ffb8
child 4894 b9322e55f0e1
equal deleted inserted replaced
4401:ca197fcb332b 4402:356627e69fc5
    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