mirror of
https://github.com/ptitSeb/Serious-Engine
synced 2024-11-22 18:30:27 +01:00
127 lines
4.1 KiB
C++
127 lines
4.1 KiB
C++
|
216
|
||
|
%{
|
||
|
#include "Entities/StdH/StdH.h"
|
||
|
%}
|
||
|
|
||
|
uses "Entities/Marker";
|
||
|
uses "Entities/FogMarker";
|
||
|
|
||
|
|
||
|
class CHazeMarker: CMarker {
|
||
|
name "Haze Marker";
|
||
|
thumbnail "Thumbnails\\HazeMarker.tbn";
|
||
|
features "IsImportant";
|
||
|
|
||
|
properties:
|
||
|
10 enum FogAttenuationType m_faType "Attenuation Type" 'A' =FA_EXP,
|
||
|
11 FLOAT m_fDensity "Density" 'D' = 0.1f,
|
||
|
12 FLOAT m_fNear "Near" = 100.0f,
|
||
|
13 FLOAT m_fFar "Far" = 1000.0f,
|
||
|
14 BOOL m_bVisibleFromOutside "Visible from outside" = FALSE,
|
||
|
|
||
|
22 INDEX m_iSize "Size" = 32,
|
||
|
23 COLOR m_colBase "Base Color" 'C' = (C_WHITE|CT_OPAQUE),
|
||
|
24 COLOR m_colUp "Color (up)" = (C_BLACK|CT_TRANSPARENT),
|
||
|
25 COLOR m_colDown "Color (down)" = (C_BLACK|CT_TRANSPARENT),
|
||
|
26 COLOR m_colNorth "Color (north)" = (C_BLACK|CT_TRANSPARENT),
|
||
|
27 COLOR m_colSouth "Color (south)" = (C_BLACK|CT_TRANSPARENT),
|
||
|
28 COLOR m_colEast "Color (east)" = (C_BLACK|CT_TRANSPARENT),
|
||
|
29 COLOR m_colWest "Color (west)" = (C_BLACK|CT_TRANSPARENT),
|
||
|
|
||
|
components:
|
||
|
1 model MODEL_MARKER "Models\\Editor\\Haze.mdl",
|
||
|
2 texture TEXTURE_MARKER "Models\\Editor\\Haze.tex"
|
||
|
|
||
|
functions:
|
||
|
|
||
|
/* Get haze type name, return empty string if not used. */
|
||
|
const CTString &GetHazeName(void)
|
||
|
{
|
||
|
return m_strName;
|
||
|
}
|
||
|
|
||
|
/* Get haze. */
|
||
|
void GetHaze(class CHazeParameters &hpHaze, FLOAT3D &vViewDir)
|
||
|
{
|
||
|
// calculate directional haze color
|
||
|
COLOR colDir=C_BLACK, colMul;
|
||
|
FLOAT fR=0.0f, fG=0.0f, fB=0.0f, fA=0.0f;
|
||
|
FLOAT fSum = 255.0f / (Abs(vViewDir(1))+Abs(vViewDir(2))+Abs(vViewDir(3)));
|
||
|
|
||
|
if( vViewDir(1) < 0.0f) {
|
||
|
colMul = (COLOR)(-vViewDir(1)*fSum);
|
||
|
colMul = (colMul<<CT_RSHIFT) | (colMul<<CT_GSHIFT) | (colMul<<CT_BSHIFT) | (colMul<<CT_ASHIFT);
|
||
|
colDir = AddColors( colDir, MulColors( m_colWest, colMul));
|
||
|
}
|
||
|
if( vViewDir(1) > 0.0f) {
|
||
|
colMul = (COLOR)(+vViewDir(1)*fSum);
|
||
|
colMul = (colMul<<CT_RSHIFT) | (colMul<<CT_GSHIFT) | (colMul<<CT_BSHIFT) | (colMul<<CT_ASHIFT);
|
||
|
colDir = AddColors( colDir, MulColors( m_colEast, colMul));
|
||
|
}
|
||
|
if( vViewDir(2) < 0.0f) {
|
||
|
colMul = (COLOR)(-vViewDir(2)*fSum);
|
||
|
colMul = (colMul<<CT_RSHIFT) | (colMul<<CT_GSHIFT) | (colMul<<CT_BSHIFT) | (colMul<<CT_ASHIFT);
|
||
|
colDir = AddColors( colDir, MulColors( m_colDown, colMul));
|
||
|
}
|
||
|
if( vViewDir(2) > 0.0f) {
|
||
|
colMul = (COLOR)(+vViewDir(2)*fSum);
|
||
|
colMul = (colMul<<CT_RSHIFT) | (colMul<<CT_GSHIFT) | (colMul<<CT_BSHIFT) | (colMul<<CT_ASHIFT);
|
||
|
colDir = AddColors( colDir, MulColors( m_colUp, colMul));
|
||
|
}
|
||
|
if( vViewDir(3) < 0.0f) {
|
||
|
colMul = (COLOR)(-vViewDir(3)*fSum);
|
||
|
colMul = (colMul<<CT_RSHIFT) | (colMul<<CT_GSHIFT) | (colMul<<CT_BSHIFT) | (colMul<<CT_ASHIFT);
|
||
|
colDir = AddColors( colDir, MulColors( m_colNorth, colMul));
|
||
|
}
|
||
|
if( vViewDir(3) > 0.0f) {
|
||
|
colMul = (COLOR)(+vViewDir(3)*fSum);
|
||
|
colMul = (colMul<<CT_RSHIFT) | (colMul<<CT_GSHIFT) | (colMul<<CT_BSHIFT) | (colMul<<CT_ASHIFT);
|
||
|
colDir = AddColors( colDir, MulColors( m_colSouth, colMul));
|
||
|
}
|
||
|
|
||
|
// blend base and direction haze color
|
||
|
colDir = AddColors( colDir, m_colBase);
|
||
|
|
||
|
// assign parameters
|
||
|
hpHaze.hp_colColor = colDir;
|
||
|
hpHaze.hp_atType = (AttenuationType) m_faType;
|
||
|
hpHaze.hp_fDensity = m_fDensity;
|
||
|
hpHaze.hp_fNear = m_fNear;
|
||
|
hpHaze.hp_fFar = m_fFar;
|
||
|
hpHaze.hp_iSize = m_iSize;
|
||
|
hpHaze.hp_ulFlags = 0;
|
||
|
if (m_bVisibleFromOutside) {
|
||
|
hpHaze.hp_ulFlags |= HPF_VISIBLEFROMOUTSIDE;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
procedures:
|
||
|
|
||
|
Main()
|
||
|
{
|
||
|
InitAsEditorModel();
|
||
|
SetPhysicsFlags(EPF_MODEL_IMMATERIAL);
|
||
|
SetCollisionFlags(ECF_IMMATERIAL);
|
||
|
|
||
|
// set appearance
|
||
|
SetModel(MODEL_MARKER);
|
||
|
SetModelMainTexture(TEXTURE_MARKER);
|
||
|
|
||
|
// set name
|
||
|
if (m_strName=="Marker") {
|
||
|
m_strName = "Haze marker";
|
||
|
}
|
||
|
|
||
|
// clamp values to valid ranges
|
||
|
m_fDensity = ClampDn(m_fDensity, 1E-6f);
|
||
|
m_fFar = ClampDn(m_fFar, 0.001f);
|
||
|
m_fNear = Clamp(m_fNear, 0.0f, m_fFar-0.0005f);
|
||
|
ASSERT(m_fNear>=0 && m_fNear<m_fFar);
|
||
|
|
||
|
m_iSize = 1<<INDEX(Log2(m_iSize));
|
||
|
m_iSize= Clamp(m_iSize, INDEX(2), INDEX(256));
|
||
|
|
||
|
return;
|
||
|
}
|
||
|
};
|