public static TpAtlasMeta *Init(TpAtlasMeta *self, string str) { #if FDB Should.NotNull("self", self); Should.NotNullOrEmpty("str", str); self->type = Type; #endif string[] segs = str.Split(','); int * nums = stackalloc int[segs.Length]; for (int j = 0, end = segs.Length; j < end; j += 1) { nums[j] = int.Parse(segs[j]); } int i = 0; self->name = nums[i++]; self->size[0] = nums[i++]; self->size[1] = nums[i++]; self->spriteCount = nums[i++]; self->sprites = (TpSpriteMeta *)Mem.Malloc(self->spriteCount * sizeof(TpSpriteMeta)); for (int j = 0, end = self->spriteCount; j < end; j += 1) { var sprite = self->sprites + j; #if FDB sprite->type = TpSpriteMeta.Type; #endif sprite->atlas = self; sprite->name = nums[i++]; sprite->rotated = nums[i++] != 0; sprite->size[0] = nums[i++]; sprite->size[1] = nums[i++]; sprite->pivot[0] = nums[i++]; sprite->pivot[1] = nums[i++]; sprite->quad[0] = nums[i++]; sprite->quad[1] = nums[i++]; sprite->quad[2] = nums[i++]; sprite->quad[3] = nums[i++]; sprite->uv[0] = nums[i++]; sprite->uv[1] = nums[i++]; sprite->uv[2] = nums[i++]; sprite->uv[3] = nums[i++]; sprite->border[0] = nums[i++]; sprite->border[1] = nums[i++]; sprite->border[2] = nums[i++]; sprite->border[3] = nums[i++]; } return(self); }
public static void Decon(TpAtlasMeta *self) { #if FDB Should.NotNull("self", self); Should.TypeEqual("self", self->type, Type); Should.NotNull("self->sprites", self->sprites); self->type = Fdb.NullType; for (int j = 0, end = self->spriteCount; j < end; j += 1) { var sprite = self->sprites + j; Should.TypeEqual("sprite->type", sprite->type, TpSpriteMeta.Type); sprite->type = Fdb.NullType; } #endif self->name = -1; Mem.Free(self->sprites); self->sprites = null; }