/*
** Command & Conquer Generals Zero Hour(tm)
** Copyright 2025 Electronic Arts Inc.
**
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program. If not, see .
*/
////////////////////////////////////////////////////////////////////////////////
// //
// (c) 2001-2003 Electronic Arts Inc. //
// //
////////////////////////////////////////////////////////////////////////////////
// W3DDynamicLight.h
// Class to generate texture for terrain.
// Author: John Ahlquist, April 2001
#pragma once
#ifndef W3D_DYNAMIC_LIGHT_H
#define W3D_DYNAMIC_LIGHT_H
#include "WW3D2/Light.h"
#include "lib/baseType.h"
class HeightMapRenderObjClass;
/*************************************************************************
** W3DDynamicLight
***************************************************************************/
class W3DDynamicLight : public LightClass
{
friend class BaseHeightMapRenderObjClass;
friend class HeightMapRenderObjClass;
protected:
/// Values used by HeightMapRenderObjClass to update the height map.
Bool m_priorEnable;
Bool m_processMe;
Int m_prevMinX, m_prevMinY, m_prevMaxX, m_prevMaxY;
Int m_minX, m_minY, m_maxX, m_maxY;
Bool m_enabled;
Bool m_decayRange;
Bool m_decayColor;
UnsignedInt m_curDecayFrameCount;
UnsignedInt m_curIncreaseFrameCount;
UnsignedInt m_decayFrameCount;
UnsignedInt m_increaseFrameCount;
Real m_targetRange;
Vector3 m_targetAmbient;
Vector3 m_targetDiffuse;
public:
W3DDynamicLight();
~W3DDynamicLight(void);
public:
virtual void On_Frame_Update(void);
void setEnabled(Bool enabled) { m_enabled = enabled; m_decayRange = false; m_decayFrameCount = 0; m_decayColor = false; m_increaseFrameCount = 0;};
Bool isEnabled(void) {return m_enabled;};
/// 0 frameIncreaseTime means it starts out full size/intensity, 0 decay time means it lasts forever.
void setFrameFade(UnsignedInt frameIncreaseTime, UnsignedInt decayFrameTime);
void setDecayRange(void) {m_decayRange = true;};
void setDecayColor(void) {m_decayColor = true;};
// Cull returns true if the terrain vertex at x,y is outside of the light's influence.
Bool cull(Int x, Int y ) {return (xm_maxX||y>m_maxY);}
};
#endif //TEXTURE_H