예제 #1
0
파일: io.c 프로젝트: Almamu/portalDS
void writeMapEditor(editorRoom_struct* er, const char* str)
{
	if(!er)return;

	FILE* f=fopen(str,"wb+");
	// if(!f)return;

	mapHeader_struct h=blankHeader;
	writeHeader(&h,f);

	room_struct r;
	lightingData_struct* ld=&r.lightingData;
	initRoom(&r, 0, 0, vect(0,0,0));

	rectangleList_struct sludgeList;
	r.rectangles=generateOptimizedRectangles(er->blockArray, &sludgeList);
	generateLightsFromEntities();
	// generateLightmaps(&r, ld);
	generateVertexLighting(&r, ld);

	h.dataPosition=ftell(f);
		u8* compressed=compressBlockArray(er->blockArray, &h.dataSize);	// decompress(compressed, er->blockArray, RLE);
		if(!compressed){return;} //TEMP : clean up first !
		NOGBA("DATASIZE %d",h.dataSize);
		fwrite(compressed,sizeof(u8),h.dataSize*2,f);
		free(compressed);

	h.rectanglesPosition=ftell(f);
		writeRectangleList(&r.rectangles, f);

	h.lightPosition=ftell(f);
		writeLightingData(ld, f);

	h.entityPosition=ftell(f);
		writeEntities(f);

	h.sludgePosition=ftell(f);
		writeRectangleList(&sludgeList, f);

	writeHeader(&h,f);

	//empty sludgelist here
	while(sludgeList.num)popRectangle(&sludgeList);

	freeRoom(&r);
	fclose(f);
}
예제 #2
0
void removeRoomRectangles(room_s* r)
{
	while(r->rectangles.num)popRectangle(&r->rectangles);
}