Merge server/light_dynamic.cpp and client/light_dynamic.cpp into a single

shared/light_dynamic.cpp
This commit is contained in:
Marco Cawthorne 2020-11-27 13:53:54 +01:00
parent 5eae768a9b
commit c021be95b7
5 changed files with 78 additions and 111 deletions

View file

@ -20,7 +20,6 @@ client/env_laser.cpp
client/func_lod.cpp
client/func_dustmotes.cpp
client/light_environment.cpp
client/light_dynamic.cpp
client/sky_camera.cpp
client/info_notnull.cpp
client/point_message.cpp

View file

@ -1,107 +0,0 @@
/*
* Copyright (c) 2016-2020 Marco Hladik <marco@icculus.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
/* this has to match gs-entbase/server/light_dynamic.cpp! */
enumflags
{
DLIGHTFL_CHANGED_ORIGIN,
DLIGHTFL_CHANGED_ANGLES,
DLIGHTFL_CHANGED_LIGHT,
DLIGHTFL_CHANGED_INTENSITY,
DLIGHTFL_CHANGED_INNERCONE,
DLIGHTFL_CHANGED_CONE,
DLIGHTFL_CHANGED_DISTANCE,
DLIGHTFL_CHANGED_RADIUS,
DLIGHTFL_CHANGED_STYLE,
DLIGHTFL_CHANGED_STATE
};
class light_dynamic
{
vector m_vecLight;
float m_flIntensity;
float m_flInnerCone;
float m_flCone;
float m_flDistance;
float m_flRadius;
float m_flStyle;
int m_iState;
void(void) light_dynamic;
virtual void(float) ReceiveEntity;
virtual float(void) predraw;
};
float
light_dynamic::predraw(void)
{
if (!m_iState) {
return PREDRAW_NEXT;
}
/* TODO: We need to handle the second cone light */
dynamiclight_add(origin, m_flDistance, m_vecLight, m_flStyle);
addentity(this);
return PREDRAW_NEXT;
}
void
light_dynamic::ReceiveEntity(float flFlags)
{
if (flFlags & DLIGHTFL_CHANGED_ORIGIN) {
origin[0] = readcoord();
origin[1] = readcoord();
origin[2] = readcoord();
setorigin(this, origin);
}
if (flFlags & DLIGHTFL_CHANGED_ANGLES) {
angles[0] = readcoord();
angles[1] = readcoord();
angles[2] = readcoord();
}
if (flFlags & DLIGHTFL_CHANGED_LIGHT) {
m_vecLight[0] = readbyte() / 255;
m_vecLight[1] = readbyte() / 255;
m_vecLight[2] = readbyte() / 255;
}
if (flFlags & DLIGHTFL_CHANGED_INTENSITY)
m_flIntensity = readfloat();
if (flFlags & DLIGHTFL_CHANGED_INNERCONE)
m_flInnerCone = readfloat();
if (flFlags & DLIGHTFL_CHANGED_CONE)
m_flCone = readfloat();
if (flFlags & DLIGHTFL_CHANGED_DISTANCE)
m_flDistance = readfloat();
if (flFlags & DLIGHTFL_CHANGED_RADIUS)
m_flRadius = readfloat();
if (flFlags & DLIGHTFL_CHANGED_STYLE)
m_flStyle = readbyte();
if (flFlags & DLIGHTFL_CHANGED_STATE)
m_iState = readbyte();
classname = "light_dynamic";
}
void
light_dynamic::light_dynamic(void)
{
drawmask = MASK_ENGINE;
}

View file

@ -62,7 +62,6 @@ server/func_pendulum.cpp
server/func_vehicle.cpp
server/func_vehiclecontrols.cpp
server/light.cpp
server/light_dynamic.cpp
server/stubs.cpp
server/infodecal.cpp
server/player_weaponstrip.cpp

View file

@ -6,6 +6,7 @@
shared/decals.cpp
shared/spraylogo.cpp
shared/func_friction.cpp
shared/light_dynamic.cpp
shared/trigger_gravity.cpp
shared/info_particle_system.cpp
#endlist

View file

@ -36,7 +36,6 @@ Trivia:
This entity was introduced in Half-Life 2 (2004).
*/
/* this has to match gs-entbase/client/light_dynamic.cpp! */
enumflags
{
DLIGHTFL_CHANGED_ORIGIN,
@ -51,7 +50,11 @@ enumflags
DLIGHTFL_CHANGED_STATE
};
#ifdef CLIENT
class light_dynamic
#else
class light_dynamic:CBaseTrigger
#endif
{
vector m_vecLight;
float m_flIntensity;
@ -61,17 +64,79 @@ class light_dynamic:CBaseTrigger
float m_flRadius;
float m_flStyle;
int m_iState;
int m_iStartActive;
void(void) light_dynamic;
#ifdef CLIENT
virtual void(float) ReceiveEntity;
virtual float(void) predraw;
#else
int m_iStartActive;
virtual void(entity, int) Trigger;
virtual void(void) Respawn;
virtual float(entity, float) SendEntity;
virtual void(string, string) SpawnKey;
virtual void(entity, string, string) Input;
virtual void(void) ParentUpdate;
#endif
};
#ifdef CLIENT
float
light_dynamic::predraw(void)
{
if (!m_iState) {
return PREDRAW_NEXT;
}
/* TODO: We need to handle the second cone light */
dynamiclight_add(origin, m_flDistance, m_vecLight, m_flStyle);
addentity(this);
return PREDRAW_NEXT;
}
void
light_dynamic::ReceiveEntity(float flFlags)
{
if (flFlags & DLIGHTFL_CHANGED_ORIGIN) {
origin[0] = readcoord();
origin[1] = readcoord();
origin[2] = readcoord();
setorigin(this, origin);
}
if (flFlags & DLIGHTFL_CHANGED_ANGLES) {
angles[0] = readcoord();
angles[1] = readcoord();
angles[2] = readcoord();
}
if (flFlags & DLIGHTFL_CHANGED_LIGHT) {
m_vecLight[0] = readbyte() / 255;
m_vecLight[1] = readbyte() / 255;
m_vecLight[2] = readbyte() / 255;
}
if (flFlags & DLIGHTFL_CHANGED_INTENSITY)
m_flIntensity = readfloat();
if (flFlags & DLIGHTFL_CHANGED_INNERCONE)
m_flInnerCone = readfloat();
if (flFlags & DLIGHTFL_CHANGED_CONE)
m_flCone = readfloat();
if (flFlags & DLIGHTFL_CHANGED_DISTANCE)
m_flDistance = readfloat();
if (flFlags & DLIGHTFL_CHANGED_RADIUS)
m_flRadius = readfloat();
if (flFlags & DLIGHTFL_CHANGED_STYLE)
m_flStyle = readbyte();
if (flFlags & DLIGHTFL_CHANGED_STATE)
m_iState = readbyte();
classname = "light_dynamic";
}
#else
void
light_dynamic::ParentUpdate(void)
{
@ -223,6 +288,7 @@ light_dynamic::SpawnKey(string strKey, string strValue)
case "style":
m_flStyle = stof(strValue);
break;
/* out-of-spec */
case "start_active":
m_iStartActive = stoi(strValue);
break;
@ -252,15 +318,24 @@ light_dynamic::Respawn(void)
DLIGHTFL_CHANGED_STYLE | \
DLIGHTFL_CHANGED_STATE;
}
#endif
void
light_dynamic::light_dynamic(void)
{
#ifdef CLIENT
drawmask = MASK_ENGINE;
#else
m_vecLight = [255,255,255];
m_flDistance = 256;
m_iStartActive = 1;
CBaseTrigger::CBaseTrigger();
#endif
}
/* workaround for q3map2, as it turns any entity starting with light*
into a generic static world light. */
#ifndef CLIENT
CLASSEXPORT(dynamic_light, light_dynamic)
#endif