41 |
|
o = objptr(i); |
42 |
|
if (!issurface(o->otype) || o->omod == OVOID) |
43 |
|
continue; |
44 |
< |
if (!isvlight(objptr(o->omod)->otype)) |
44 |
> |
if (!isvlight(vsmaterial(o)->otype)) |
45 |
|
continue; |
46 |
|
if (sfun[o->otype].of == NULL || |
47 |
|
sfun[o->otype].of->getpleq == NULL) { |
101 |
|
if (o == source[sn].so) /* objects cannot project themselves */ |
102 |
|
return; |
103 |
|
/* get virtual source material */ |
104 |
< |
vsmat = sfun[objptr(o->omod)->otype].mf; |
104 |
> |
vsmat = sfun[vsmaterial(o)->otype].mf; |
105 |
|
/* project virtual sources */ |
106 |
|
for (i = 0; i < vsmat->nproj; i++) |
107 |
|
if ((*vsmat->vproj)(proj, o, &source[sn], i)) |
112 |
|
#endif |
113 |
|
addvirtuals(ns, n); |
114 |
|
} |
115 |
+ |
} |
116 |
+ |
|
117 |
+ |
|
118 |
+ |
OBJREC * |
119 |
+ |
vsmaterial(o) /* get virtual source material pointer */ |
120 |
+ |
OBJREC *o; |
121 |
+ |
{ |
122 |
+ |
register int i; |
123 |
+ |
register OBJREC *m; |
124 |
+ |
|
125 |
+ |
i = o->omod; |
126 |
+ |
m = objptr(i); |
127 |
+ |
if (m->otype != MAT_ILLUM || m->oargs.nsargs < 1 || |
128 |
+ |
!strcmp(m->oargs.sarg[0], VOIDID) || |
129 |
+ |
(i = modifier(m->oargs.sarg[0])) < 0) |
130 |
+ |
return(m); /* direct modifier */ |
131 |
+ |
return(objptr(i)); /* illum alternate */ |
132 |
|
} |
133 |
|
|
134 |
|
|