winamp/Src/Winamp/plush/LIGHT.C

47 lines
1.2 KiB
C++
Raw Normal View History

2024-09-24 14:54:57 +02:00
/******************************************************************************
Plush Version 1.2
light.c
Light Control
Copyright (c) 1996-2000, Justin Frankel
******************************************************************************/
#include "plush.h"
pl_Light *plLightSet(pl_Light *light, pl_uChar mode, pl_Float x, pl_Float y,
pl_Float z, pl_Float intensity, pl_Float halfDist) {
pl_Float m[16], m2[16];
light->Type = mode;
light->Intensity = intensity;
light->HalfDistSquared = halfDist*halfDist;
switch (mode) {
case PL_LIGHT_VECTOR:
plMatrixRotate(m,1,x);
plMatrixRotate(m2,2,y);
plMatrixMultiply(m,m2);
plMatrixRotate(m2,3,z);
plMatrixMultiply(m,m2);
plMatrixApply(m,0.0,0.0,-1.0,&light->Xp, &light->Yp, &light->Zp);
break;
case PL_LIGHT_POINT_ANGLE:
case PL_LIGHT_POINT_DISTANCE:
case PL_LIGHT_POINT:
light->Xp = x;
light->Yp = y;
light->Zp = z;
break;
}
return light;
}
pl_Light *plLightCreate() {
pl_Light *l;
l = malloc(sizeof(pl_Light));
if (!l) return 0;
memset(l,0,sizeof(pl_Light));
return (l);
}
void plLightDelete(pl_Light *l) {
if (l) free(l);
}