| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- #include "pattern.h"
- #include "struct.h"
- #include "wall.h"
- static Pattern* allocatePattern(unsigned int pattern_length) {
- // Freaking free cascade
- pattern->side = malloc(sizeof(unsigned char) * pattern_length);
- if(pattern_length->side == NULL) {
- free(pattern);
- return NULL;
- }
- pattern->distance = malloc(sizeof(unsigned short) * pattern_length);
- if(pattern_length->distance == NULL) {
- free(pattern->side);
- free(pattern);
- return NULL;
- }
- pattern->wall_length = malloc(sizeof(unsigned short) * pattern_length);
- if(pattern_length->wall_length == NULL) {
- free(pattern->distance);
- free(pattern->side);
- free(pattern);
- return NULL;
- }
- }
- Pattern* readPattern(unsigned char* data, unsigned int length) {
- unsigned char* iterator = data+1;
- unsigned i, pattern_length;
- Pattern* pattern;
- pattern_length = data[0];
- pattern = allocatePattern(pattern_length);
- if(pattern == NULL) return NULL;
- for(int i = 0; i < pattern_length; i++) {
- pattern->side[i] = data[iterator];
- pattern->distance[i] = ((data[iterator]+1)<<8) + (data[iterator]+2);
- pattern->wall_length[i] = ((data[iterator]+2)<<8) + (data[iterator]+3);
- iterator+= 5;
- }
- return pattern;
- }
- void addPattern(Game_Data* data, Pattern* pattern, unsigned char offset) {
- unsigned int i;
- for(i = 0; i < pattern->length; i++) {
- // Build wall
- addWall(data->list, pattern->distance[i], pattern->wall_length, 1, (pattern->side[i] + offset)%data->nb_lines);
- }
- }
- Pattern* freePattern(Pattern* pattern) {
- free(pattern->side);
- free(pattern->distance);
- free(pattern->wall_length);
- free(pattern);
- return NULL;
- }
|