Example #1
0
void NamedSpritesFree(NamedSprites *ns)
{
	if (ns == NULL)
	{
		return;
	}
	CFREE(ns->name);
	for (int i = 0; i < (int)ns->pics.size; i++)
	{
		PicFree(CArrayGet(&ns->pics, i));
	}
	CArrayTerminate(&ns->pics);
}
Example #2
0
void PicManagerClear(CArray *pics, CArray *sprites)
{
	for (int i = 0; i < (int)pics->size; i++)
	{
		NamedPic *n = CArrayGet(pics, i);
		CFREE(n->name);
		PicFree(&n->pic);
	}
	CArrayClear(pics);
	for (int i = 0; i < (int)sprites->size; i++)
	{
		NamedSpritesFree(CArrayGet(sprites, i));
	}
	CArrayClear(sprites);
}
Example #3
0
void PicManagerTerminate(PicManager *pm)
{
	for (int i = 0; i < PIC_MAX; i++)
	{
		if (pm->oldPics[i] != NULL)
		{
			CFREE(pm->oldPics[i]);
		}
		if (PicIsNotNone(&pm->picsFromOld[i]))
		{
			PicFree(&pm->picsFromOld[i]);
		}
	}
	PicManagerClear(&pm->pics, &pm->sprites);
	CArrayTerminate(&pm->pics);
	CArrayTerminate(&pm->sprites);
	PicManagerClear(&pm->customPics, &pm->customSprites);
	CArrayTerminate(&pm->customPics);
	CArrayTerminate(&pm->customSprites);
	IMG_Quit();
}
Example #4
0
void PicLoad(
	Pic *p, const struct vec2i size, const struct vec2i offset, const SDL_Surface *image)
{
	memset(p, 0, sizeof *p);
	p->size = size;
	p->offset = svec2i_zero();
	CMALLOC(p->Data, size.x * size.y * sizeof *((Pic *)0)->Data);
	// Manually copy the pixels and replace the alpha component,
	// since our gfx device format has no alpha
	int srcI = offset.y*image->w + offset.x;
	for (int i = 0; i < size.x * size.y; i++, srcI++)
	{
		const Uint32 pixel = ((Uint32 *)image->pixels)[srcI];
		color_t c;
		SDL_GetRGBA(pixel, image->format, &c.r, &c.g, &c.b, &c.a);
		// If completely transparent, replace rgb with black (0) too
		// This is because transparency blitting checks entire pixel
		if (c.a == 0)
		{
			p->Data[i] = 0;
		}
		else
		{
			p->Data[i] = COLOR2PIXEL(c);
		}
		if ((i + 1) % size.x == 0)
		{
			srcI += image->w - size.x;
		}
	}

	if (!PicTryMakeTex(p))
	{
		goto bail;
	}
	return;

bail:
	PicFree(p);
}
Example #5
0
void PicManagerGenerateOldPics(PicManager *pm, GraphicsDevice *g)
{
	int i;
	// Convert old pics into new format ones
	// TODO: this is wasteful; better to eliminate old pics altogether
	// Note: always need to reload in editor since colours could change,
	// requiring an updating of palettes
	for (i = 0; i < PIC_MAX; i++)
	{
		PicPaletted *oldPic = PicManagerGetOldPic(pm, i);
		if (PicIsNotNone(&pm->picsFromOld[i]))
		{
			PicFree(&pm->picsFromOld[i]);
		}
		if (oldPic == NULL)
		{
			memcpy(&pm->picsFromOld[i], &picNone, sizeof picNone);
		}
		else
		{
			PicFromPicPaletted(g, &pm->picsFromOld[i], oldPic);
		}
	}
}