Ejemplo n.º 1
0
void add_lights(int x,int y)
{
        int xs,ys,xe,ye,in,cn,v,m;
        unsigned long long prof;

        prof=prof_start();

        xs=max(1,x-LIGHTDIST);
        ys=max(1,y-LIGHTDIST);
        xe=min(MAPX-2,x+1+LIGHTDIST);
        ye=min(MAPY-2,y+1+LIGHTDIST);

        for (y=ys; y<ye; y++) {
                m=y*MAPX+xs;
                for (x=xs; x<xe; x++,m++) {
                        if ((in=map[m].it)!=0) {
                                if (it[in].active) {
                                        if ((v=it[in].light[1])!=0)
                                                do_add_light(x,y,v);
                                } else {
                                        if ((v=it[in].light[0])!=0)
                                                do_add_light(x,y,v);
                                }
                        }
                        if ((cn=map[m].ch)!=0)
                                if ((v=ch[cn].light)!=0)
                                        do_add_light(x,y,v);
                        if (map[m].flags&MF_INDOORS)
                                compute_dlight(x,y);
                }
        }

        prof_stop(20,prof);
}
Ejemplo n.º 2
0
void init_lights(void)
{
	int x, y, in, m, cnt1 = 0, cnt2 = 0;

	for (y = m = 0; y<MAPY; y++)
	{
		for (x = 0; x<MAPX; x++, m++)
		{
			map[m].light  = 0;
			map[m].dlight = 0;
		}
	}

	for (y = m = 0; y<MAPY; y++)
	{
		printf("%4d/%4d (%d,%d)\r", y, MAPY, cnt1, cnt2);
		fflush(stdout);
		for (x = 0; x<MAPX; x++, m++)
		{
			if (map[m].flags & MF_INDOORS)
			{
				cnt2++;
				compute_dlight(x, y);
			}
			if ((in = map[m].it)==0)
			{
				continue;
			}
			if (it[in].active)
			{
				if (it[in].light[1])
				{
					do_add_light(x, y, it[in].light[1]);
					cnt1++;
				}
			}
			else
			{
				if (it[in].light[0])
				{
					do_add_light(x, y, it[in].light[0]);
					cnt1++;
				}
			}
		}
	}
}