Files
Cyd 2b8ca921cb Initial full mirror of c:\VWE (source + assets + toolchain + outputs) via Git LFS
Complete disaster-recovery snapshot: engine/game source, game data assets,
VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive.
Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false,
no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
2026-06-24 21:28:16 -05:00

142 lines
3.9 KiB
C++

// PPLightManager.cpp: implementation of the CPPLightManager class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "pixelwhippro.h"
#include "PPLightManager.h"
#include <MLR\MLR.hpp>
extern CPixelWhipProApp theApp;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CPPLightManager::CPPLightManager()
{
}
CPPLightManager::~CPPLightManager()
{
}
gosFX::Light *CPPLightManager::MakePointLight(const char* light_map, bool light_vertex)
{
int i;
for(i=0;i<MidLevelRenderer::Limits::Max_Number_Of_Lights_Per_Primitive && theApp.LightState->m_lights[i];i++)
{
}
MidLevelRenderer::MLRPointLight *new_light;
gos_PushCurrentHeap(MidLevelRenderer::LightsHeap);
new_light=new MidLevelRenderer::MLRPointLight;
if(i<MidLevelRenderer::Limits::Max_Number_Of_Lights_Per_Primitive)
theApp.LightState->m_lights[i]=new_light;
MString name = light_map;
if(name)
{
Check_Object(MidLevelRenderer::MLRTexturePool::Instance);
MidLevelRenderer::MLRTexture *texture =
(*MidLevelRenderer::MLRTexturePool::Instance)(name, 0);
if (!texture)
texture = MidLevelRenderer::MLRTexturePool::Instance->Add(name, 0);
Check_Object(texture);
MidLevelRenderer::MLRLightMap *map = new MidLevelRenderer::MLRLightMap(texture);
Check_Object(map);
new_light->SetLightMap(map);
if (!light_vertex)
{
int mask = new_light->GetLightMask();
mask &= ~MidLevelRenderer::MLRState::VertexLightingMode;
new_light->SetLightMask(mask);
}
}
gos_PopCurrentHeap();
return (gosFX::Light *)new_light;
}
void CPPLightManager::ChangeLight(gosFX::Light *light,Info *info)
{
MidLevelRenderer::MLRLight *mlght=(MidLevelRenderer::MLRLight *)light;
switch(mlght->GetLightType())
{
case MidLevelRenderer::MLRLight::AmbientLight:
{
MidLevelRenderer::MLRAmbientLight *tlght=(MidLevelRenderer::MLRAmbientLight *)light;
}
break;
case MidLevelRenderer::MLRLight::InfiniteLight:
{
MidLevelRenderer::MLRInfiniteLight *tlght=(MidLevelRenderer::MLRInfiniteLight *)light;
}
break;
case MidLevelRenderer::MLRLight::InfiniteLightWithFallOff:
{
MidLevelRenderer::MLRInfiniteLightWithFalloff *tlght=(MidLevelRenderer::MLRInfiniteLightWithFalloff *)light;
tlght->SetFalloffDistance(info->m_inner,info->m_outer);
}
break;
case MidLevelRenderer::MLRLight::PointLight:
{
MidLevelRenderer::MLRPointLight *tlght=(MidLevelRenderer::MLRPointLight *)light;
tlght->SetFalloffDistance(info->m_inner,info->m_outer);
tlght->SetLightToWorldMatrix(info->m_origin);
}
break;
case MidLevelRenderer::MLRLight::SpotLight:
{
MidLevelRenderer::MLRSpotLight *tlght=(MidLevelRenderer::MLRSpotLight *)light;
tlght->SetSpreadAngle(info->m_spread);
tlght->SetFalloffDistance(info->m_inner,info->m_outer);
tlght->SetLightToWorldMatrix(info->m_origin);
}
break;
case MidLevelRenderer::MLRLight::LookUpLight:
{
MidLevelRenderer::MLRLookUpLight *tlght=(MidLevelRenderer::MLRLookUpLight *)light;
}
break;
}
mlght->SetColor(info->m_color);
mlght->SetIntensity(info->m_intensity);
}
void CPPLightManager::DeleteLight(gosFX::Light *light)
{
MidLevelRenderer::MLRLight *mlght=(MidLevelRenderer::MLRLight *)light;
int lidx,i;
for(lidx=0;
theApp.LightState->m_lights[lidx]!=mlght && lidx<MidLevelRenderer::Limits::Max_Number_Of_Lights_Per_Primitive;
lidx++)
{
}
if(lidx<MidLevelRenderer::Limits::Max_Number_Of_Lights_Per_Primitive)
{
for(i=lidx;i<MidLevelRenderer::Limits::Max_Number_Of_Lights_Per_Primitive-1;i++)
{
theApp.LightState->m_lights[i]=theApp.LightState->m_lights[i+1];
}
theApp.LightState->m_lights[MidLevelRenderer::Limits::Max_Number_Of_Lights_Per_Primitive-1]=NULL;
}
gos_PushCurrentHeap(MidLevelRenderer::LightsHeap);
delete mlght;
gos_PopCurrentHeap();
}