env_glow: from client-side only entity to shared. also support other rendermodes (accurate to GoldSrc)
This commit is contained in:
parent
e44f56a56d
commit
b7126fbadb
47 changed files with 759 additions and 785 deletions
|
@ -159,7 +159,7 @@ NSInteractiveSurface::predraw(void)
|
|||
return (PREDRAW_NEXT);
|
||||
|
||||
makevectors(angles);
|
||||
R_BeginPolygon(strtolower(m_strSurfaceMat), 0, 0);
|
||||
R_BeginPolygon(m_strSurfaceMat, 0, 0);
|
||||
R_PolygonVertex(origin + v_right * fsize[0] - v_up * fsize[1],
|
||||
[1,1], [1,0,0], 1.0f);
|
||||
R_PolygonVertex(origin - v_right * fsize[0] - v_up * fsize[1],
|
||||
|
|
|
@ -20,45 +20,45 @@ Entity_EntityUpdate(float type, float new)
|
|||
{
|
||||
switch (type) {
|
||||
case ENT_ENTITY:
|
||||
NSEntity_ReadEntity(new);
|
||||
NSENTITY_READENTITY(NSEntity, new)
|
||||
break;
|
||||
case ENT_ENTITYRENDERABLE:
|
||||
NSRenderableEntity_ReadEntity(new);
|
||||
NSENTITY_READENTITY(NSRenderableEntity, new)
|
||||
break;
|
||||
case ENT_SURFPROP:
|
||||
NSSurfacePropEntity_ReadEntity(new);
|
||||
NSENTITY_READENTITY(NSSurfacePropEntity, new)
|
||||
break;
|
||||
case ENT_BEAM:
|
||||
env_beam_ReadEntity(new);
|
||||
NSENTITY_READENTITY(env_beam, new)
|
||||
break;
|
||||
case ENT_LASER:
|
||||
env_laser_ReadEntity(new);
|
||||
NSENTITY_READENTITY(env_laser, new)
|
||||
break;
|
||||
case ENT_PHYSICS:
|
||||
NSPhysicsEntity_ReadEntity(new);
|
||||
NSENTITY_READENTITY(NSPhysicsEntity, new)
|
||||
break;
|
||||
case ENT_MONSTER:
|
||||
NSMonster_ReadEntity(new);
|
||||
NSENTITY_READENTITY(NSMonster, new)
|
||||
self.customphysics = Empty;
|
||||
break;
|
||||
case ENT_TALKMONSTER:
|
||||
NSTalkMonster_ReadEntity(new);
|
||||
NSENTITY_READENTITY(NSTalkMonster, new)
|
||||
self.customphysics = Empty;
|
||||
break;
|
||||
case ENT_VEHICLE:
|
||||
basevehicle_readentity(new);
|
||||
NSENTITY_READENTITY(NSVehicle, new)
|
||||
break;
|
||||
case ENT_PORTAL:
|
||||
NSPortal_ReadEntity(new);
|
||||
NSENTITY_READENTITY(NSPortal, new)
|
||||
break;
|
||||
case ENT_VEH_BRUSH:
|
||||
func_vehicle_readentity(new);
|
||||
NSENTITY_READENTITY(func_vehicle, new)
|
||||
break;
|
||||
case ENT_VEH_TANKMORTAR:
|
||||
func_tankmortar_readentity(new);
|
||||
NSENTITY_READENTITY(func_tankmortar, new)
|
||||
break;
|
||||
case ENT_VEH_4WHEEL:
|
||||
prop_vehicle_driveable_readentity(new);
|
||||
NSENTITY_READENTITY(prop_vehicle_driveable, new)
|
||||
break;
|
||||
case ENT_PLAYER:
|
||||
player pl = (player)self;
|
||||
|
@ -78,11 +78,10 @@ Entity_EntityUpdate(float type, float new)
|
|||
Spectator_ReadEntity(new);
|
||||
break;
|
||||
case ENT_SPRITE:
|
||||
env_sprite spr = (env_sprite)self;
|
||||
if (new) {
|
||||
spawnfunc_env_sprite();
|
||||
}
|
||||
spr.ReceiveEntity(new, readfloat());
|
||||
NSENTITY_READENTITY(env_sprite, new)
|
||||
break;
|
||||
case ENT_GLOW:
|
||||
NSENTITY_READENTITY(env_glow, new)
|
||||
break;
|
||||
case ENT_SPRAY:
|
||||
Spray_Parse();
|
||||
|
@ -91,68 +90,52 @@ Entity_EntityUpdate(float type, float new)
|
|||
Decal_Parse();
|
||||
break;
|
||||
case ENT_AMBIENTSOUND:
|
||||
ambient_generic_ReadEntity(new);
|
||||
NSENTITY_READENTITY(ambient_generic, new)
|
||||
break;
|
||||
case ENT_OLDCAMERA:
|
||||
trigger_camera tc = (trigger_camera)self;
|
||||
if (new) {
|
||||
spawnfunc_trigger_camera();
|
||||
}
|
||||
tc.ReceiveEntity(new, readfloat());
|
||||
NSENTITY_READENTITY(trigger_camera, new)
|
||||
break;
|
||||
case ENT_MONITOR:
|
||||
func_monitor fc = (func_monitor)self;
|
||||
if (new) {
|
||||
spawnfunc_func_monitor();
|
||||
}
|
||||
fc.ReceiveEntity(new, readfloat());
|
||||
NSENTITY_READENTITY(func_monitor, new)
|
||||
break;
|
||||
case ENT_DLIGHT:
|
||||
light_dynamic_ReadEntity(new);
|
||||
NSENTITY_READENTITY(light_dynamic, new)
|
||||
break;
|
||||
case ENT_PROJECTEDTEXTURE:
|
||||
env_projectedtexture ept = (env_projectedtexture)self;
|
||||
if (new) {
|
||||
spawnfunc_env_projectedtexture();
|
||||
}
|
||||
ept.ReceiveEntity(new, readfloat());
|
||||
NSENTITY_READENTITY(env_projectedtexture, new)
|
||||
break;
|
||||
case ENT_SPOTLIGHT:
|
||||
point_spotlight_ReadEntity(new);
|
||||
NSENTITY_READENTITY(point_spotlight, new)
|
||||
break;
|
||||
case ENT_FOG:
|
||||
env_fog_readentity(new);
|
||||
NSENTITY_READENTITY(env_fog, new)
|
||||
break;
|
||||
case ENT_STEAM:
|
||||
env_steam_ReadEntity(new);
|
||||
NSENTITY_READENTITY(env_steam, new)
|
||||
break;
|
||||
case ENT_FOGCONTROLLER:
|
||||
env_fog_controller_readentity(new);
|
||||
NSENTITY_READENTITY(env_fog_controller, new)
|
||||
break;
|
||||
case ENT_PARTSYSTEM:
|
||||
info_particle_system ips = (info_particle_system)self;
|
||||
if (new) {
|
||||
spawnfunc_info_particle_system();
|
||||
}
|
||||
ips.ReceiveEntity(new, readfloat());
|
||||
NSENTITY_READENTITY(info_particle_system, new)
|
||||
break;
|
||||
case ENT_PROPROPE:
|
||||
prop_rope_readentity(new);
|
||||
NSENTITY_READENTITY(prop_rope, new)
|
||||
break;
|
||||
case ENT_BUBBLES:
|
||||
env_bubbles_ReadEntity(new);
|
||||
NSENTITY_READENTITY(env_bubbles, new)
|
||||
break;
|
||||
case ENT_CONVEYOR:
|
||||
func_conveyor_ReadEntity(new);
|
||||
NSENTITY_READENTITY(func_conveyor, new)
|
||||
break;
|
||||
case ENT_WAYPOINT:
|
||||
info_waypoint_ReadEntity(new);
|
||||
NSENTITY_READENTITY(info_waypoint, new)
|
||||
break;
|
||||
case ENT_PUSH:
|
||||
trigger_push_ReadEntity(new);
|
||||
NSENTITY_READENTITY(trigger_push, new)
|
||||
break;
|
||||
case ENT_ENTITYPROJECTILE:
|
||||
NSProjectile_ReadEntity(new);
|
||||
NSENTITY_READENTITY(NSProjectile, new)
|
||||
break;
|
||||
default:
|
||||
//error(sprintf("Unknown entity type update received. (%d)\n", t));
|
||||
|
|
|
@ -6,7 +6,6 @@
|
|||
decals.h
|
||||
client/defs.h
|
||||
client/env_cubemap.qc
|
||||
client/env_glow.qc
|
||||
client/env_sun.qc
|
||||
client/env_sound.qc
|
||||
client/env_soundscape.qc
|
||||
|
|
|
@ -1,259 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2022 Vera Visions LLC.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
var int autocvar_r_skipGlows = 0;
|
||||
var int autocvar_r_skipLensFlares = 0;
|
||||
|
||||
/*!QUAKED env_glow (1 .5 0) (-8 -8 -8) (8 8 8) EVGLOW_ORIENT
|
||||
# OVERVIEW
|
||||
Client-side glare/glow orb effect like the flares in 1997's Unreal.
|
||||
|
||||
# KEYS
|
||||
- "shader" : Material to use for the glare/glow effect.
|
||||
- "model" : Sprite model to use for the glare/glow (idTech 2 BSPs only)
|
||||
- "scale" : Scale multiplier.
|
||||
- "rendercolor" : Material color override in RGB8.
|
||||
- "renderamt" : Material alpha override in A8.
|
||||
|
||||
# SPAWNFLAGS
|
||||
- EVGLOW_ORIENT (1) : TODO: Glow is an oriented sprite when set.
|
||||
|
||||
# TRIVIA
|
||||
This entity was introduced in Half-Life (1998).
|
||||
*/
|
||||
class env_glow:NSEntity /* TODO: change to renderablentity? */
|
||||
{
|
||||
public:
|
||||
void env_glow(void);
|
||||
|
||||
virtual void Spawned(void);
|
||||
virtual void Respawn(void);
|
||||
virtual float predraw(void);
|
||||
virtual void postdraw(void);
|
||||
virtual void SpawnKey(string,string);
|
||||
virtual void RendererRestarted(void);
|
||||
virtual bool CanSpawn(bool);
|
||||
|
||||
private:
|
||||
vector m_vecColor;
|
||||
float m_flAlpha;
|
||||
float m_flMaxAlpha;
|
||||
string m_strSprite;
|
||||
vector m_vecSize;
|
||||
float m_flScale;
|
||||
|
||||
vector m_vecRotate;
|
||||
vector m_vecOrientation;
|
||||
|
||||
nonvirtual bool IsVisible(vector);
|
||||
nonvirtual void RenderGlow(vector, vector);
|
||||
};
|
||||
|
||||
bool
|
||||
env_glow::IsVisible(vector vecPlayer)
|
||||
{
|
||||
entity oother = other;
|
||||
|
||||
if (autocvar_r_skipGlows)
|
||||
return (false);
|
||||
|
||||
if (checkpvs(vecPlayer, this) == FALSE)
|
||||
return (false);
|
||||
|
||||
other = world;
|
||||
traceline(this.origin, vecPlayer, MOVE_OTHERONLY, this);
|
||||
other = oother;
|
||||
|
||||
/* If we can't trace against the player, or are two close, fade out */
|
||||
if (trace_fraction < 1.0f || vlen(origin - vecPlayer) < 128)
|
||||
m_flAlpha = m_flAlpha - frametime;
|
||||
else
|
||||
m_flAlpha = m_flAlpha + frametime;
|
||||
|
||||
m_flAlpha = bound(0.0f, m_flAlpha, 1.0f);
|
||||
|
||||
if (m_flAlpha <= 0.0f)
|
||||
return (false);
|
||||
|
||||
return (true);
|
||||
}
|
||||
|
||||
bool
|
||||
env_glow::CanSpawn(bool clientSide)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
void env_sun_lensflare(vector, float, vector);
|
||||
void
|
||||
env_glow::postdraw(void)
|
||||
{
|
||||
if (!autocvar_r_skipLensFlares)
|
||||
env_sun_lensflare(origin, m_flAlpha, m_vecColor);
|
||||
}
|
||||
|
||||
void
|
||||
env_glow::RendererRestarted(void)
|
||||
{
|
||||
if (!model && m_strSprite) {
|
||||
precache_pic(m_strSprite);
|
||||
m_vecSize = drawgetimagesize(m_strSprite) / 2;
|
||||
} else {
|
||||
precache_model(model);
|
||||
m_strSprite = spriteframe(model, 0, 0.0f);
|
||||
m_vecSize = drawgetimagesize(m_strSprite) / 2;
|
||||
}
|
||||
|
||||
if (HasSpawnFlags(1)) {
|
||||
hitcontentsmaski = CONTENTBIT_SOLID;
|
||||
decal_pickwall(this, origin);
|
||||
m_vecOrientation = vectoangles(g_tracedDecal.normal * -1);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
env_glow::RenderGlow(vector forg, vector fsize)
|
||||
{
|
||||
#ifndef FTE_QUADFIX
|
||||
R_BeginPolygon(m_strSprite, 1, 0);
|
||||
R_PolygonVertex(forg + v_right * fsize[0] - v_up * fsize[1],
|
||||
[1,1], m_vecColor * m_flMaxAlpha, m_flAlpha);
|
||||
R_PolygonVertex(forg - v_right * fsize[0] - v_up * fsize[1],
|
||||
[0,1], m_vecColor * m_flMaxAlpha, m_flAlpha);
|
||||
R_PolygonVertex(forg - v_right * fsize[0] + v_up * fsize[1],
|
||||
[0,0], m_vecColor * m_flMaxAlpha, m_flAlpha);
|
||||
R_PolygonVertex(forg + v_right * fsize[0] + v_up * fsize[1],
|
||||
[1,0], m_vecColor * m_flMaxAlpha, m_flAlpha);
|
||||
R_EndPolygon();
|
||||
#else
|
||||
R_BeginPolygon(m_strSprite, 1, 0);
|
||||
R_PolygonVertex(forg + v_right * fsize[0] - v_up * fsize[1],
|
||||
[1,1], m_vecColor * m_flMaxAlpha, m_flAlpha);
|
||||
R_PolygonVertex(forg - v_right * fsize[0] - v_up * fsize[1],
|
||||
[0,1], m_vecColor * m_flMaxAlpha, m_flAlpha);
|
||||
R_PolygonVertex(forg - v_right * fsize[0] + v_up * fsize[1],
|
||||
[0,0], m_vecColor * m_flMaxAlpha, m_flAlpha);
|
||||
R_EndPolygon();
|
||||
R_BeginPolygon(m_strSprite, 1, 0);
|
||||
R_PolygonVertex(forg - v_right * fsize[0] - v_up * fsize[1],
|
||||
[0,1], m_vecColor * m_flMaxAlpha, m_flAlpha);
|
||||
R_PolygonVertex(forg - v_right * fsize[0] + v_up * fsize[1],
|
||||
[0,0], m_vecColor * m_flMaxAlpha, m_flAlpha);
|
||||
R_PolygonVertex(forg + v_right * fsize[0] + v_up * fsize[1],
|
||||
[1,0], m_vecColor * m_flMaxAlpha, m_flAlpha);
|
||||
R_EndPolygon();
|
||||
#endif
|
||||
}
|
||||
|
||||
float
|
||||
env_glow::predraw(void)
|
||||
{
|
||||
vector forg;
|
||||
vector fsize;
|
||||
vector vecPlayer = g_view.GetCameraOrigin();
|
||||
vector vecAngle = g_view.GetCameraAngle();
|
||||
float flDist = vlen(vecPlayer - origin);
|
||||
|
||||
if (IsVisible(vecPlayer) == false)
|
||||
return (PREDRAW_NEXT);
|
||||
|
||||
/* Scale the glow somewhat with the players distance */
|
||||
fsize = m_vecSize * m_flScale;
|
||||
fsize *= bound(1, flDist / 256, 4);
|
||||
|
||||
/* Nudge this slightly towards the camera */
|
||||
makevectors(vectoangles(origin - vecPlayer));
|
||||
forg = origin + (v_forward * -16);
|
||||
|
||||
if (HasSpawnFlags(1)) {
|
||||
vector above;
|
||||
makevectors(m_vecOrientation);
|
||||
above = origin + (v_forward * 16);
|
||||
|
||||
/* we're aiming right down */
|
||||
if (above[2] > origin[2])
|
||||
makevectors(m_vecOrientation+[0, m_vecRotate[2],0]);
|
||||
else
|
||||
makevectors(m_vecOrientation+[0,0, m_vecRotate[2]]);
|
||||
} else {
|
||||
makevectors(vecAngle +[0, m_vecRotate[1], m_vecRotate[2]]);
|
||||
}
|
||||
|
||||
RenderGlow(forg, fsize);
|
||||
|
||||
return (PREDRAW_NEXT);
|
||||
}
|
||||
|
||||
void
|
||||
env_glow::SpawnKey(string strField, string strKey)
|
||||
{
|
||||
switch (strField) {
|
||||
case "material":
|
||||
case "shader":
|
||||
model = __NULL__;
|
||||
m_strSprite = strKey;
|
||||
break;
|
||||
case "sprite":
|
||||
case "model":
|
||||
model = strKey;
|
||||
break;
|
||||
case "scale":
|
||||
m_flScale = stof(strKey);
|
||||
break;
|
||||
case "color":
|
||||
m_vecColor = stov(strKey);
|
||||
break;
|
||||
case "rendercolor":
|
||||
case "rendercolour":
|
||||
m_vecColor = stov(strKey) / 255;
|
||||
break;
|
||||
case "renderamt":
|
||||
m_flMaxAlpha = stof(strKey) / 255;
|
||||
break;
|
||||
case "rotate":
|
||||
m_vecRotate[2] = stof(strKey);
|
||||
break;
|
||||
case "rotate":
|
||||
break;
|
||||
default:
|
||||
super::SpawnKey(strField, strKey);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
env_glow::Respawn(void)
|
||||
{
|
||||
SetSize([0,0,0], [0,0,0]);
|
||||
SetOrigin(GetSpawnOrigin());
|
||||
effects &= ~EF_NOSHADOW;
|
||||
}
|
||||
|
||||
void
|
||||
env_glow::Spawned(void)
|
||||
{
|
||||
super::Spawned();
|
||||
RendererRestarted();
|
||||
}
|
||||
|
||||
void
|
||||
env_glow::env_glow(void)
|
||||
{
|
||||
m_flScale = 1.0f;
|
||||
m_flMaxAlpha = 1.0f;
|
||||
m_vecColor = [1,1,1];
|
||||
drawmask = MASK_GLOWS;
|
||||
isCSQC = true;
|
||||
}
|
|
@ -57,11 +57,7 @@ env_particle::CanSpawn(bool clientSide)
|
|||
|
||||
void env_particle::customphysics(void)
|
||||
{
|
||||
vector vecPlayer;
|
||||
|
||||
int s = (float)getproperty(VF_ACTIVESEAT);
|
||||
pSeat = &g_seats[s];
|
||||
vecPlayer = pSeat->m_vecPredictedOrigin;
|
||||
vector vecPlayer = g_view.GetCameraOrigin();
|
||||
|
||||
if (checkpvs(vecPlayer, this) == FALSE) {
|
||||
return;
|
||||
|
|
|
@ -99,7 +99,7 @@ env_sound::SpawnKey(string strField, string strKey)
|
|||
int efx_alias = stoi(strKey);
|
||||
|
||||
if (efx_alias >= g_hlefx.length) {
|
||||
print("^1env_sound::SpawnKey: Invalid roomtype!\n");
|
||||
NSEntWarning("invalid roomtype!");
|
||||
m_iRoomType = 0;
|
||||
} else
|
||||
m_iRoomType = EFX_Load(g_hlefx[efx_alias]);
|
||||
|
|
|
@ -77,6 +77,12 @@ float
|
|||
func_dustcloud_cloud::predraw(void)
|
||||
{
|
||||
float alpha;
|
||||
vector vecPlayer = g_view.GetCameraOrigin();
|
||||
|
||||
if (checkpvs(vecPlayer, this) == FALSE) {
|
||||
return;
|
||||
}
|
||||
|
||||
makevectors(view_angles);
|
||||
|
||||
if (lifetime < (m_flLifeTime / 2)) {
|
||||
|
|
|
@ -77,6 +77,13 @@ float
|
|||
func_smokevolume_cloud::predraw(void)
|
||||
{
|
||||
float alpha;
|
||||
vector vecPlayer = g_view.GetCameraOrigin();
|
||||
return PREDRAW_NEXT;
|
||||
|
||||
if (checkpvs(vecPlayer, this) == FALSE) {
|
||||
return PREDRAW_NEXT;
|
||||
}
|
||||
|
||||
makevectors(view_angles);
|
||||
|
||||
if (lifetime < (m_flLifeTime / 2)) {
|
||||
|
@ -89,6 +96,9 @@ func_smokevolume_cloud::predraw(void)
|
|||
|
||||
if (!(spawnflags & 1)) {
|
||||
m_vecColor *= (getlight(origin) / 255);
|
||||
m_vecColor[0] = bound(0.0, m_vecColor[0], 1.0);
|
||||
m_vecColor[1] = bound(0.0, m_vecColor[1], 1.0);
|
||||
m_vecColor[2] = bound(0.0, m_vecColor[2], 1.0);
|
||||
}
|
||||
|
||||
R_BeginPolygon(m_strMaterial, 0, 0);
|
||||
|
@ -121,12 +131,14 @@ float
|
|||
func_smokevolume::predraw(void)
|
||||
{
|
||||
vector vecPlayer = g_view.GetCameraOrigin();
|
||||
float playerDist = vlen(vecPlayer - origin);
|
||||
float fracDist = 1.0 - bound(0.0, playerDist / 512, 1.0);
|
||||
|
||||
if (checkpvs(vecPlayer, this) == FALSE)
|
||||
return (PREDRAW_NEXT);
|
||||
|
||||
if (m_flMaxDrawDistance > 0.0)
|
||||
if (vlen(vecPlayer - origin) > m_flMaxDrawDistance)
|
||||
if (playerDist > m_flMaxDrawDistance)
|
||||
return (PREDRAW_NEXT);
|
||||
|
||||
if (m_flNexTime > cltime)
|
||||
|
@ -144,7 +156,7 @@ func_smokevolume::predraw(void)
|
|||
cloud.m_vecColor[0] = Math_Lerp(m_vecColor1[0], m_vecColor2[0], r);
|
||||
cloud.m_vecColor[1] = Math_Lerp(m_vecColor1[1], m_vecColor2[1], r);
|
||||
cloud.m_vecColor[2] = Math_Lerp(m_vecColor1[2], m_vecColor2[2], r);
|
||||
cloud.m_flMaxAlpha = m_flAlpha;
|
||||
cloud.m_flMaxAlpha = m_flAlpha * fracDist;
|
||||
cloud.cloudsize[0] = random(m_flSizeMin, m_flSizeMax);
|
||||
cloud.cloudsize[1] = random(m_flSizeMin, m_flSizeMax);
|
||||
cloud.m_flLifeTime = random(m_flLifetimeMin, m_flLifetimeMax);
|
||||
|
|
|
@ -215,8 +215,7 @@ func_breakable::SpawnKey(string strKey, string strValue)
|
|||
|
||||
if (oid >= funcbreakable_objtable.length) {
|
||||
m_strBreakSpawn = "";
|
||||
print(sprintf("^1func_breakable^7:" \
|
||||
"spawnobject %i out of bounds! fix your mod!\n", oid));
|
||||
NSEntWarning("spawnobject %i out of bounds", oid);
|
||||
} else {
|
||||
m_strBreakSpawn = funcbreakable_objtable[oid];
|
||||
}
|
||||
|
|
|
@ -148,7 +148,7 @@ func_guntarget::Move(void)
|
|||
node = (path_corner)find(world, ::targetname, target);
|
||||
|
||||
if (!node) {
|
||||
NSLog("^1func_guntarget::^3Move^7: Path node for %s not found!", targetname);
|
||||
NSEntWarning("node %s for %s not found!", target, targetname);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -136,7 +136,7 @@ trigger_once::Touch(entity eToucher)
|
|||
SetSolid(SOLID_NOT); /* make inactive */
|
||||
m_iValue = 1;
|
||||
|
||||
if (!target) {
|
||||
if (!target && !m_strKillTarget) {
|
||||
UseOutput(eToucher, m_strOnStartTouch);
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -10,6 +10,7 @@ shared/env_beam.qc
|
|||
shared/env_sprite.qc
|
||||
shared/env_bubbles.qc
|
||||
shared/env_laser.qc
|
||||
shared/env_glow.qc
|
||||
shared/env_projectedtexture.qc
|
||||
shared/env_fog.qc
|
||||
shared/env_fog_controller.qc
|
||||
|
|
|
@ -427,15 +427,3 @@ ambient_generic::predraw(void)
|
|||
return (PREDRAW_NEXT);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CLIENT
|
||||
void
|
||||
ambient_generic_ReadEntity(float new)
|
||||
{
|
||||
ambient_generic me = (ambient_generic)self;
|
||||
if (new) {
|
||||
spawnfunc_ambient_generic();
|
||||
}
|
||||
me.ReceiveEntity(new, readfloat());
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -512,18 +512,4 @@ env_beam::predraw(void)
|
|||
|
||||
return (PREDRAW_NEXT);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CLIENT
|
||||
void
|
||||
env_beam_ReadEntity(float isnew)
|
||||
{
|
||||
env_beam beam = (env_beam)self;
|
||||
float changedflags = readfloat();
|
||||
|
||||
if (isnew)
|
||||
spawnfunc_env_beam();
|
||||
|
||||
beam.ReceiveEntity(isnew, changedflags);
|
||||
}
|
||||
#endif
|
|
@ -345,15 +345,3 @@ env_bubbles::Spawned(void)
|
|||
|
||||
precache_model("sprites/bubble.spr");
|
||||
}
|
||||
|
||||
#ifdef CLIENT
|
||||
void
|
||||
env_bubbles_ReadEntity(float new)
|
||||
{
|
||||
env_bubbles me = (env_bubbles)self;
|
||||
if (new) {
|
||||
spawnfunc_env_bubbles();
|
||||
}
|
||||
me.ReceiveEntity(new, readfloat());
|
||||
}
|
||||
#endif
|
||||
|
|
205
src/gs-entbase/shared/env_fire.qc
Normal file
205
src/gs-entbase/shared/env_fire.qc
Normal file
|
@ -0,0 +1,205 @@
|
|||
/*
|
||||
* Copyright (c) 2023 Vera Visions LLC.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
enumflags
|
||||
{
|
||||
ENVFIRE_INFINITE,
|
||||
ENVFIRE_SMOKELESS,
|
||||
ENVFIRE_STARTON,
|
||||
ENVFIRE_STARTFULL,
|
||||
ENVFIRE_NODROP,
|
||||
ENVFIRE_NOGLOW,
|
||||
ENVFIRE_UNUSED,
|
||||
ENVFIRE_DELETE,
|
||||
ENVFIRE_TOPVISIBLE
|
||||
};
|
||||
|
||||
/*!QUAKED env_fire (1 .5 0) (-8 -8 -8) (8 8 8) INFINITE_DURATION SMOKELESS STARTON STARTFULL NODROP NOGLOW x DELETE TOPVISIBLE
|
||||
# OVERVIEW
|
||||
Environmental fire/flame entity. Will apply damage to entities, including other fire entities. They grow/shrink depending on their ignition level.
|
||||
|
||||
# KEYS
|
||||
- "targetname" : Name
|
||||
- "health" : Duration, in seconds.
|
||||
- "firesize" : Size of the fire in world units.
|
||||
- "fireattack" : Time in seconds until the fire has fully expanded.
|
||||
- "firetype" : Type of fire. 0 - Standard, 1 - Plasma
|
||||
- "ignitionpoint" : Amount of fire damage it takes before igniting fully.
|
||||
- "damagescale" : Burn damage multiplier.
|
||||
|
||||
# SPAWNFLAGS
|
||||
- INFINITE_DURATION (1) : Don't extinguish by itself.
|
||||
- SMOKELESS (2) : Don't spawn smoke.
|
||||
- STARTON (4) : Starts enabled.
|
||||
- STARTFULL (8) : Starts expanded.
|
||||
- NODROP (16) : Don't drop to floor (?)
|
||||
- NOGLOW (32) : Don't glow.
|
||||
- DELETE (128) : Delete from game when extinguished.
|
||||
- TOPVISIBLE (256) : Visible from above.
|
||||
|
||||
# INPUTS
|
||||
- "StartFire" : Starts the fire effect.
|
||||
- "Extinguish" : Puts out the fire, with an optional timer (in seconds).
|
||||
- "ExtinguishTemporary" : Puts out the fire (temporarily).
|
||||
|
||||
# OUTPUTS
|
||||
- "OnIgnited" : Triggered when the fire ignites.
|
||||
- "OnExtinguished" : Triggered when the fire is extinguished.
|
||||
|
||||
# TRIVIA
|
||||
This entity was introduced in Half-Life 2 (2004).
|
||||
*/
|
||||
class
|
||||
env_fire:NSPointTrigger
|
||||
{
|
||||
PREDICTED_FLOAT(m_flSize)
|
||||
PREDICTED_BOOL(m_bState)
|
||||
PREDICTED_FLOAT m_flMaxSize)
|
||||
PREDICTED_FLOATm_flGrowTime)
|
||||
PREDICTED_BOOL(m_bType)
|
||||
float m_flIgnitionPoint;
|
||||
float m_flDamageScale;
|
||||
float m_flDuration;
|
||||
|
||||
void env_fire(void);
|
||||
|
||||
#ifdef SERVER
|
||||
virtual void SpawnKey(string strKey, string strValue);
|
||||
#endif
|
||||
};
|
||||
|
||||
void
|
||||
env_fire::env_fire(void)
|
||||
{
|
||||
m_flDuration = 30.0f;
|
||||
m_flSize = 64.0;
|
||||
m_flGrowTime = 4.0f;
|
||||
m_bType = false;
|
||||
m_flIgnitionPoint = 32.0f;
|
||||
m_flDamageScale = 1.0f;
|
||||
}
|
||||
|
||||
#ifdef SERVER
|
||||
void
|
||||
env_fire::SpawnKey(string strKey, string strValue)
|
||||
{
|
||||
switch (strKey) {
|
||||
case "health":
|
||||
m_flDuration = stof(strValue);
|
||||
break;
|
||||
case "firesize":
|
||||
m_flSize = stof(strValue);
|
||||
break;
|
||||
case "fireattack":
|
||||
m_flGrowTime = stof(strValue);
|
||||
break;
|
||||
case "firetype":
|
||||
m_bType = stof(strValue);
|
||||
break;
|
||||
case "ignitionpoint":
|
||||
m_flIgnitionPoint = stof(strValue);
|
||||
break;
|
||||
case "damagescale":
|
||||
m_flDamageScale = stof(strValue);
|
||||
break;
|
||||
default:
|
||||
super::SpawnKey(strKey, strValue);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
env_fire::Respawn(void)
|
||||
{
|
||||
SetSize([0,0,0], [0,0,0]);
|
||||
SetOrigin(GetSpawnOrigin());
|
||||
}
|
||||
|
||||
void
|
||||
env_fire::EvaluateEntity(void)
|
||||
{
|
||||
EVALUATE_VECTOR(origin, 0, EVFIRE_CHANGED_ORIGIN)
|
||||
EVALUATE_VECTOR(origin, 1, EVFIRE_CHANGED_ORIGIN)
|
||||
EVALUATE_VECTOR(origin, 2, EVFIRE_CHANGED_ORIGIN)
|
||||
EVALUATE_VECTOR(angles, 0, EVFIRE_CHANGED_ANGLE)
|
||||
EVALUATE_VECTOR(angles, 1, EVFIRE_CHANGED_ANGLE)
|
||||
EVALUATE_VECTOR(angles, 2, EVFIRE_CHANGED_ANGLE)
|
||||
EVALUATE_FIELD(m_flDuration, EVFIRE_CHANGED_DURATION)
|
||||
EVALUATE_FIELD(m_flMaxSize, EVFIRE_CHANGED_SIZE)
|
||||
EVALUATE_FIELD(m_flGrowTime, EVFIRE_CHANGED_GROW)
|
||||
EVALUATE_FIELD(m_bType, EVFIRE_CHANGED_TYPE)
|
||||
}
|
||||
|
||||
float
|
||||
env_fire::SendEntity(entity ePEnt, float flChanged)
|
||||
{
|
||||
WriteByte(MSG_ENTITY, ENT_STEAM);
|
||||
WriteFloat(MSG_ENTITY, flChanged);
|
||||
|
||||
SENDENTITY_COORD(origin[0], EVFIRE_CHANGED_ORIGIN)
|
||||
SENDENTITY_COORD(origin[1], EVFIRE_CHANGED_ORIGIN)
|
||||
SENDENTITY_COORD(origin[2], EVFIRE_CHANGED_ORIGIN)
|
||||
SENDENTITY_COORD(angles[0], EVFIRE_CHANGED_ANGLE)
|
||||
SENDENTITY_COORD(angles[1], EVFIRE_CHANGED_ANGLE)
|
||||
SENDENTITY_COORD(angles[2], EVFIRE_CHANGED_ANGLE)
|
||||
SENDENTITY_BYTE(m_bState, EVFIRE_CHANGED_STATE)
|
||||
SENDENTITY_BYTE(m_bType, EVFIRE_CHANGED_TYPE)
|
||||
SENDENTITY_FLOAT(m_flSpread, EVFIRE_CHANGED_SPREAD)
|
||||
SENDENTITY_FLOAT(m_flSpeed, EVFIRE_CHANGED_SPEED)
|
||||
SENDENTITY_FLOAT(m_flStartSize, EVFIRE_CHANGED_MINS)
|
||||
SENDENTITY_FLOAT(m_flEndSize , EVFIRE_CHANGED_MAXS)
|
||||
SENDENTITY_FLOAT(m_flRate, EVFIRE_CHANGED_RATE)
|
||||
SENDENTITY_COLOR(m_vecColor[0], EVFIRE_CHANGED_COLOR)
|
||||
SENDENTITY_COLOR(m_vecColor[1], EVFIRE_CHANGED_COLOR)
|
||||
SENDENTITY_COLOR(m_vecColor[2], EVFIRE_CHANGED_COLOR)
|
||||
SENDENTITY_FLOAT(m_flLength, EVFIRE_CHANGED_LENGTH)
|
||||
SENDENTITY_FLOAT(m_flAlpha, EVFIRE_CHANGED_ALPHA)
|
||||
SENDENTITY_FLOAT(m_flRollSpeed, EVFIRE_CHANGED_ROLL)
|
||||
|
||||
//print(sprintf("S (%x): %v %v %i\n", flChanged, origin, m_vecEndPos, m_iActive));
|
||||
|
||||
return (1);
|
||||
}
|
||||
#else
|
||||
void
|
||||
env_fire::ReceiveEntity(float flNew, float flChanged)
|
||||
{
|
||||
READENTITY_COORD(origin[0], EVFIRE_CHANGED_ORIGIN)
|
||||
READENTITY_COORD(origin[1], EVFIRE_CHANGED_ORIGIN)
|
||||
READENTITY_COORD(origin[2], EVFIRE_CHANGED_ORIGIN)
|
||||
READENTITY_COORD(angles[0], EVFIRE_CHANGED_ANGLE)
|
||||
READENTITY_COORD(angles[1], EVFIRE_CHANGED_ANGLE)
|
||||
READENTITY_COORD(angles[2], EVFIRE_CHANGED_ANGLE)
|
||||
READENTITY_BYTE(m_bState, EVFIRE_CHANGED_STATE)
|
||||
READENTITY_BYTE(m_bType, EVFIRE_CHANGED_TYPE)
|
||||
READENTITY_FLOAT(m_flSpread, EVFIRE_CHANGED_SPREAD)
|
||||
READENTITY_FLOAT(m_flSpeed, EVFIRE_CHANGED_SPEED)
|
||||
READENTITY_FLOAT(m_flStartSize, EVFIRE_CHANGED_MINS)
|
||||
READENTITY_FLOAT(m_flEndSize , EVFIRE_CHANGED_MAXS)
|
||||
READENTITY_FLOAT(m_flRate, EVFIRE_CHANGED_RATE)
|
||||
READENTITY_COLOR(m_vecColor[0], EVFIRE_CHANGED_COLOR)
|
||||
READENTITY_COLOR(m_vecColor[1], EVFIRE_CHANGED_COLOR)
|
||||
READENTITY_COLOR(m_vecColor[2], EVFIRE_CHANGED_COLOR)
|
||||
READENTITY_FLOAT(m_flLength, EVFIRE_CHANGED_LENGTH)
|
||||
READENTITY_FLOAT(m_flAlpha, EVFIRE_CHANGED_ALPHA)
|
||||
READENTITY_FLOAT(m_flRollSpeed, EVFIRE_CHANGED_ROLL)
|
||||
|
||||
//print(sprintf("R (%x): %v %v %i\n", flChanged, origin, m_vecEndPos, m_iActive));
|
||||
|
||||
//drawmask = MASK_ENGINE;
|
||||
setsize(this, [0,0,0], [0,0,0]);
|
||||
setorigin(this, origin);
|
||||
}
|
||||
#endif
|
|
@ -215,18 +215,4 @@ env_fog::Trigger(entity act, triggermode_t state)
|
|||
m_bEnabled = (m_bEnabled) ? false : true;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CLIENT
|
||||
void
|
||||
env_fog_readentity(float isnew)
|
||||
{
|
||||
env_fog fog = (env_fog)self;
|
||||
float flags = readfloat();
|
||||
|
||||
if (isnew)
|
||||
spawnfunc_env_fog();
|
||||
|
||||
fog.ReceiveEntity(isnew, flags);
|
||||
}
|
||||
#endif
|
|
@ -168,13 +168,13 @@ env_fog_controller::FogRender(void)
|
|||
m_flNextDraw = cltime + 1.0f;
|
||||
|
||||
/* apply the fog. wish there was a builtin for this instead... */
|
||||
localcmd(sprintf("fog %f %f %f %f %f %f\n", \
|
||||
StartToBias(),
|
||||
localcmd(sprintf("set r_fog_linear 1; fog %f %f %f %f %f %f\n", \
|
||||
m_flFogEnd,
|
||||
Math_Lerp(m_vecFogColor[0], m_vecFogColor2[0], delta),
|
||||
Math_Lerp(m_vecFogColor[1], m_vecFogColor2[1], delta),
|
||||
Math_Lerp(m_vecFogColor[2], m_vecFogColor2[2], delta),
|
||||
m_flFogMaxDensity,
|
||||
0.0f));
|
||||
m_flFogStart));
|
||||
|
||||
//print(sprintf("%f (%v, %v)\n", delta, p1, p2));
|
||||
|
||||
|
@ -187,13 +187,13 @@ env_fog_controller::FogUpdate(void)
|
|||
if (!m_iFogActive)
|
||||
return;
|
||||
|
||||
localcmd(sprintf("fog %f %f %f %f %f %f\n", \
|
||||
StartToBias(),
|
||||
localcmd(sprintf("set r_fog_linear 1; fog %f %f %f %f %f %f\n", \
|
||||
m_flFogEnd,
|
||||
m_vecFogColor[0],
|
||||
m_vecFogColor[1],
|
||||
m_vecFogColor[2],
|
||||
m_flFogMaxDensity,
|
||||
0.0f));
|
||||
m_flFogStart));
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -528,19 +528,4 @@ env_fog_controller::env_fog_controller(void)
|
|||
m_vecSpawnColor = [1.0, 1.0, 1.0];
|
||||
m_flSpawnMaxDensity = 1.0f;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
#ifdef CLIENT
|
||||
void
|
||||
env_fog_controller_readentity(float isnew)
|
||||
{
|
||||
env_fog_controller fog = (env_fog_controller)self;
|
||||
float flags = readfloat();
|
||||
|
||||
if (isnew)
|
||||
spawnfunc_env_fog_controller();
|
||||
|
||||
fog.ReceiveEntity(flags, isnew);
|
||||
}
|
||||
#endif
|
||||
}
|
353
src/gs-entbase/shared/env_glow.qc
Normal file
353
src/gs-entbase/shared/env_glow.qc
Normal file
|
@ -0,0 +1,353 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2022 Vera Visions LLC.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
var int autocvar_r_skipGlows = 0;
|
||||
var int autocvar_r_skipLensFlares = 0;
|
||||
|
||||
/*!QUAKED env_glow (1 .5 0) (-8 -8 -8) (8 8 8) EVGLOW_ORIENT
|
||||
# OVERVIEW
|
||||
Glare/glow orb effect like the flares in 1997's Unreal.
|
||||
|
||||
# KEYS
|
||||
- "targetname" : Name
|
||||
- "shader" : Material to use for the glare/glow effect.
|
||||
- "model" : Sprite model to use for the glare/glow (idTech 2 BSPs only)
|
||||
- "scale" : Scale multiplier.
|
||||
- "rendercolor" : Material color override in RGB8.
|
||||
- "renderamt" : Material alpha override in A8.
|
||||
- "rendermode" : Render Mode
|
||||
- "renderfx" : Render FX
|
||||
|
||||
# SPAWNFLAGS
|
||||
- EVGLOW_ORIENT (1) : Glow is an oriented sprite when set.
|
||||
|
||||
# TRIVIA
|
||||
This entity was introduced in Half-Life (1998).
|
||||
*/
|
||||
class env_glow:NSRenderableEntity
|
||||
{
|
||||
public:
|
||||
void env_glow(void);
|
||||
|
||||
#ifdef SERVER
|
||||
virtual void Respawn(void);
|
||||
virtual void SpawnKey(string,string);
|
||||
virtual void EvaluateEntity(void);
|
||||
virtual float SendEntity(entity,float);
|
||||
#else
|
||||
float m_flMaxAlpha;
|
||||
vector m_vecSize;
|
||||
vector m_vecRotate;
|
||||
virtual float predraw(void);
|
||||
virtual void postdraw(void);
|
||||
virtual void RendererRestarted(void);
|
||||
nonvirtual bool IsVisible(vector);
|
||||
nonvirtual void RenderGlow(vector, vector);
|
||||
nonvirtual void RenderNormal(vector, vector);
|
||||
virtual void ReceiveEntity(float,float);
|
||||
#endif
|
||||
|
||||
private:
|
||||
NETWORKED_STRING(m_strMaterial)
|
||||
};
|
||||
|
||||
void
|
||||
env_glow::env_glow(void)
|
||||
{
|
||||
m_strMaterial = __NULL__;
|
||||
#ifdef CLIENT
|
||||
m_flMaxAlpha = 1.0f;
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef SERVER
|
||||
void
|
||||
env_glow::SpawnKey(string strField, string strKey)
|
||||
{
|
||||
switch (strField) {
|
||||
case "material":
|
||||
case "shader":
|
||||
model = __NULL__;
|
||||
m_strMaterial = strKey;
|
||||
break;
|
||||
default:
|
||||
super::SpawnKey(strField, strKey);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
env_glow::Respawn(void)
|
||||
{
|
||||
if (!model && !m_strMaterial) {
|
||||
NSEntWarning("no model specified");
|
||||
Destroy();
|
||||
return;
|
||||
}
|
||||
|
||||
SetModel(GetSpawnModel());
|
||||
SetSize([0,0,0], [0,0,0]);
|
||||
SetOrigin(GetSpawnOrigin());
|
||||
AddEffects(EF_NOSHADOW);
|
||||
|
||||
if (GetRenderColor() == g_vec_null)
|
||||
SetRenderColor([1.0, 1.0, 1.0]);
|
||||
|
||||
if (GetRenderMode() == RM_NORMAL)
|
||||
SetRenderAmt(1.0);
|
||||
/*
|
||||
if (HasSpawnFlags(1)) {
|
||||
hitcontentsmaski = CONTENTBIT_SOLID;
|
||||
decal_pickwall(this, origin);
|
||||
angles = vectoangles(g_tracedDecal.normal * -1);
|
||||
}
|
||||
*/
|
||||
}
|
||||
void
|
||||
env_glow::EvaluateEntity(void)
|
||||
{
|
||||
EVALUATE_VECTOR(origin, 0, SPRITE_CHANGED_ORIGIN)
|
||||
EVALUATE_VECTOR(origin, 1, SPRITE_CHANGED_ORIGIN)
|
||||
EVALUATE_VECTOR(origin, 2, SPRITE_CHANGED_ORIGIN)
|
||||
EVALUATE_FIELD(modelindex, SPRITE_CHANGED_MODELINDEX)
|
||||
EVALUATE_FIELD(scale, SPRITE_CHANGED_SCALE)
|
||||
EVALUATE_FIELD(m_iRenderMode, SPRITE_CHANGED_RENDERMODE)
|
||||
EVALUATE_FIELD(m_iRenderFX, SPRITE_CHANGED_RENDERFX)
|
||||
EVALUATE_VECTOR(m_vecRenderColor, 0, SPRITE_CHANGED_RENDERCOLOR)
|
||||
EVALUATE_VECTOR(m_vecRenderColor, 1, SPRITE_CHANGED_RENDERCOLOR)
|
||||
EVALUATE_VECTOR(m_vecRenderColor, 2, SPRITE_CHANGED_RENDERCOLOR)
|
||||
EVALUATE_FIELD(m_flRenderAmt, SPRITE_CHANGED_RENDERAMT)
|
||||
EVALUATE_FIELD(m_strMaterial, SPRITE_CHANGED_MATERIAL)
|
||||
}
|
||||
|
||||
float
|
||||
env_glow::SendEntity(entity ePEnt, float flChanged)
|
||||
{
|
||||
if (clienttype(ePEnt) != CLIENTTYPE_REAL)
|
||||
return (0);
|
||||
|
||||
/* strings are expensive. */
|
||||
if (!m_strMaterial)
|
||||
flChanged &= ~SPRITE_CHANGED_MATERIAL;
|
||||
|
||||
WriteByte(MSG_ENTITY, ENT_GLOW);
|
||||
WriteFloat(MSG_ENTITY, flChanged);
|
||||
|
||||
SENDENTITY_COORD(origin[0], SPRITE_CHANGED_ORIGIN)
|
||||
SENDENTITY_COORD(origin[1], SPRITE_CHANGED_ORIGIN)
|
||||
SENDENTITY_COORD(origin[2], SPRITE_CHANGED_ORIGIN)
|
||||
SENDENTITY_FLOAT(modelindex, SPRITE_CHANGED_MODELINDEX)
|
||||
SENDENTITY_FLOAT(scale, SPRITE_CHANGED_SCALE)
|
||||
SENDENTITY_BYTE(m_iRenderMode, SPRITE_CHANGED_RENDERMODE)
|
||||
SENDENTITY_BYTE(m_iRenderFX, SPRITE_CHANGED_RENDERFX)
|
||||
SENDENTITY_COLOR(m_vecRenderColor[0], SPRITE_CHANGED_RENDERCOLOR)
|
||||
SENDENTITY_COLOR(m_vecRenderColor[1], SPRITE_CHANGED_RENDERCOLOR)
|
||||
SENDENTITY_COLOR(m_vecRenderColor[2], SPRITE_CHANGED_RENDERCOLOR)
|
||||
SENDENTITY_COLOR(m_flRenderAmt, SPRITE_CHANGED_RENDERAMT)
|
||||
SENDENTITY_STRING(m_strMaterial, SPRITE_CHANGED_MATERIAL)
|
||||
|
||||
return (1);
|
||||
}
|
||||
#else
|
||||
bool
|
||||
env_glow::IsVisible(vector vecPlayer)
|
||||
{
|
||||
entity oother = other;
|
||||
|
||||
if (autocvar_r_skipGlows)
|
||||
return (false);
|
||||
|
||||
if (checkpvs(vecPlayer, this) == FALSE)
|
||||
return (false);
|
||||
|
||||
other = world;
|
||||
traceline(this.origin, vecPlayer, MOVE_OTHERONLY, this);
|
||||
other = oother;
|
||||
|
||||
/* If we can't trace against the player, or are two close, fade out */
|
||||
if (trace_fraction < 1.0f || vlen(origin - vecPlayer) < 128)
|
||||
m_flMaxAlpha = m_flMaxAlpha - frametime;
|
||||
else
|
||||
m_flMaxAlpha = m_flMaxAlpha + frametime;
|
||||
|
||||
m_flMaxAlpha = bound(0.0f, m_flMaxAlpha, 1.0f);
|
||||
|
||||
if (m_flMaxAlpha <= 0.0f)
|
||||
return (false);
|
||||
|
||||
return (true);
|
||||
}
|
||||
|
||||
void env_sun_lensflare(vector, float, vector);
|
||||
void
|
||||
env_glow::postdraw(void)
|
||||
{
|
||||
if (GetRenderMode() == RM_GLOW)
|
||||
if (!autocvar_r_skipLensFlares)
|
||||
env_sun_lensflare(origin, m_flMaxAlpha, m_vecRenderColor);
|
||||
}
|
||||
|
||||
void
|
||||
env_glow::RendererRestarted(void)
|
||||
{
|
||||
if (!modelindex && m_strMaterial) {
|
||||
precache_pic(m_strMaterial);
|
||||
m_vecSize = drawgetimagesize(m_strMaterial) / 2;
|
||||
} else {
|
||||
model = modelnameforindex(modelindex);
|
||||
m_strMaterial = spriteframe(model, 0, 0.0f);
|
||||
m_vecSize = drawgetimagesize(m_strMaterial) / 2;
|
||||
//NSEntWarning("%S %d %S %v", model, modelindex, m_strMaterial, m_vecSize);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
env_glow::RenderGlow(vector forg, vector fsize)
|
||||
{
|
||||
#ifndef FTE_QUADFIX
|
||||
R_BeginPolygon(m_strMaterial, 1, 0);
|
||||
R_PolygonVertex(forg + v_right * fsize[0] - v_up * fsize[1],
|
||||
[1,1], m_vecRenderColor * m_flRenderAmt, m_flMaxAlpha);
|
||||
R_PolygonVertex(forg - v_right * fsize[0] - v_up * fsize[1],
|
||||
[0,1], m_vecRenderColor * m_flRenderAmt, m_flMaxAlpha);
|
||||
R_PolygonVertex(forg - v_right * fsize[0] + v_up * fsize[1],
|
||||
[0,0], m_vecRenderColor * m_flRenderAmt, m_flMaxAlpha);
|
||||
R_PolygonVertex(forg + v_right * fsize[0] + v_up * fsize[1],
|
||||
[1,0], m_vecRenderColor * m_flRenderAmt, m_flMaxAlpha);
|
||||
R_EndPolygon();
|
||||
#else
|
||||
R_BeginPolygon(m_strMaterial, 1, 0);
|
||||
R_PolygonVertex(forg + v_right * fsize[0] - v_up * fsize[1],
|
||||
[1,1], m_vecRenderColor * m_flRenderAmt, m_flMaxAlpha);
|
||||
R_PolygonVertex(forg - v_right * fsize[0] - v_up * fsize[1],
|
||||
[0,1], m_vecRenderColor * m_flRenderAmt, m_flMaxAlpha);
|
||||
R_PolygonVertex(forg - v_right * fsize[0] + v_up * fsize[1],
|
||||
[0,0], m_vecRenderColor * m_flRenderAmt, m_flMaxAlpha);
|
||||
R_EndPolygon();
|
||||
R_BeginPolygon(m_strMaterial, 1, 0);
|
||||
R_PolygonVertex(forg - v_right * fsize[0] - v_up * fsize[1],
|
||||
[0,1], m_vecRenderColor * m_flRenderAmt, m_flMaxAlpha);
|
||||
R_PolygonVertex(forg - v_right * fsize[0] + v_up * fsize[1],
|
||||
[0,0], m_vecRenderColor * m_flRenderAmt, m_flMaxAlpha);
|
||||
R_PolygonVertex(forg + v_right * fsize[0] + v_up * fsize[1],
|
||||
[1,0], m_vecRenderColor * m_flRenderAmt, m_flMaxAlpha);
|
||||
R_EndPolygon();
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
env_glow::RenderNormal(vector forg, vector fsize)
|
||||
{
|
||||
#ifndef FTE_QUADFIX
|
||||
R_BeginPolygon(m_strMaterial, 0, 0);
|
||||
R_PolygonVertex(forg + v_right * fsize[0] - v_up * fsize[1],
|
||||
[1,1], m_vecRenderColor, m_flRenderAmt);
|
||||
R_PolygonVertex(forg - v_right * fsize[0] - v_up * fsize[1],
|
||||
[0,1], m_vecRenderColor, m_flRenderAmt);
|
||||
R_PolygonVertex(forg - v_right * fsize[0] + v_up * fsize[1],
|
||||
[0,0], m_vecRenderColor, m_flRenderAmt);
|
||||
R_PolygonVertex(forg + v_right * fsize[0] + v_up * fsize[1],
|
||||
[1,0], m_vecRenderColor, m_flRenderAmt);
|
||||
R_EndPolygon();
|
||||
#else
|
||||
R_BeginPolygon(m_strMaterial, 0, 0);
|
||||
R_PolygonVertex(forg + v_right * fsize[0] - v_up * fsize[1],
|
||||
[1,1], m_vecRenderColor, m_flRenderAmt);
|
||||
R_PolygonVertex(forg - v_right * fsize[0] - v_up * fsize[1],
|
||||
[0,1], m_vecRenderColor, m_flRenderAmt);
|
||||
R_PolygonVertex(forg - v_right * fsize[0] + v_up * fsize[1],
|
||||
[0,0], m_vecRenderColor, m_flRenderAmt);
|
||||
R_EndPolygon();
|
||||
R_BeginPolygon(m_strMaterial, 0, 0);
|
||||
R_PolygonVertex(forg - v_right * fsize[0] - v_up * fsize[1],
|
||||
[0,1], m_vecRenderColor, m_flRenderAmt);
|
||||
R_PolygonVertex(forg - v_right * fsize[0] + v_up * fsize[1],
|
||||
[0,0], m_vecRenderColor, m_flRenderAmt);
|
||||
R_PolygonVertex(forg + v_right * fsize[0] + v_up * fsize[1],
|
||||
[1,0], m_vecRenderColor, m_flRenderAmt);
|
||||
R_EndPolygon();
|
||||
#endif
|
||||
}
|
||||
|
||||
float
|
||||
env_glow::predraw(void)
|
||||
{
|
||||
vector forg;
|
||||
vector fsize;
|
||||
vector vecPlayer = g_view.GetCameraOrigin();
|
||||
vector vecAngle = g_view.GetCameraAngle();
|
||||
float flDist = vlen(vecPlayer - origin);
|
||||
|
||||
if (GetRenderMode() == RM_GLOW) {
|
||||
if (IsVisible(vecPlayer) == false)
|
||||
return (PREDRAW_NEXT);
|
||||
|
||||
/* Scale the glow somewhat with the players distance */
|
||||
fsize = m_vecSize * scale;
|
||||
fsize *= bound(1, flDist / 256, 4);
|
||||
}
|
||||
|
||||
/* Nudge this slightly towards the camera */
|
||||
makevectors(vectoangles(origin - vecPlayer));
|
||||
forg = origin + (v_forward * -16);
|
||||
|
||||
if (HasSpawnFlags(1)) {
|
||||
vector above;
|
||||
makevectors(angles);
|
||||
above = origin + (v_forward * 16);
|
||||
|
||||
/* we're aiming right down */
|
||||
if (above[2] > origin[2])
|
||||
makevectors(angles + [0, m_vecRotate[2],0]);
|
||||
else
|
||||
makevectors(angles + [0,0, m_vecRotate[2]]);
|
||||
} else {
|
||||
makevectors(vecAngle + [0, m_vecRotate[1], m_vecRotate[2]]);
|
||||
}
|
||||
|
||||
if (GetRenderMode() == RM_GLOW)
|
||||
RenderGlow(forg, fsize);
|
||||
else if (GetRenderMode() == RM_ADDITIVE)
|
||||
RenderGlow(forg, m_vecSize * scale);
|
||||
else
|
||||
RenderNormal(forg, m_vecSize * scale);
|
||||
|
||||
return (PREDRAW_NEXT);
|
||||
}
|
||||
|
||||
void
|
||||
env_glow::ReceiveEntity(float flNew, float flChanged)
|
||||
{
|
||||
READENTITY_COORD(origin[0], SPRITE_CHANGED_ORIGIN)
|
||||
READENTITY_COORD(origin[1], SPRITE_CHANGED_ORIGIN)
|
||||
READENTITY_COORD(origin[2], SPRITE_CHANGED_ORIGIN)
|
||||
READENTITY_FLOAT(modelindex, SPRITE_CHANGED_MODELINDEX)
|
||||
READENTITY_FLOAT(scale, SPRITE_CHANGED_SCALE)
|
||||
READENTITY_BYTE(m_iRenderMode, SPRITE_CHANGED_RENDERMODE)
|
||||
READENTITY_BYTE(m_iRenderFX, SPRITE_CHANGED_RENDERFX)
|
||||
READENTITY_COLOR(m_vecRenderColor[0], SPRITE_CHANGED_RENDERCOLOR)
|
||||
READENTITY_COLOR(m_vecRenderColor[1], SPRITE_CHANGED_RENDERCOLOR)
|
||||
READENTITY_COLOR(m_vecRenderColor[2], SPRITE_CHANGED_RENDERCOLOR)
|
||||
READENTITY_COLOR(m_flRenderAmt, SPRITE_CHANGED_RENDERAMT)
|
||||
READENTITY_STRING(m_strMaterial, SPRITE_CHANGED_MATERIAL)
|
||||
|
||||
if (flNew)
|
||||
RendererRestarted();
|
||||
|
||||
drawmask = MASK_GLOWS;
|
||||
setsize(this, g_vec_null, g_vec_null);
|
||||
setorigin(this, origin);
|
||||
}
|
||||
#endif
|
|
@ -401,18 +401,4 @@ env_laser::predraw(void)
|
|||
|
||||
return (PREDRAW_NEXT);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CLIENT
|
||||
void
|
||||
env_laser_ReadEntity(float isnew)
|
||||
{
|
||||
env_laser laser = (env_laser)self;
|
||||
float changedflags = readfloat();
|
||||
|
||||
if (isnew)
|
||||
spawnfunc_env_laser();
|
||||
|
||||
laser.ReceiveEntity(isnew, changedflags);
|
||||
}
|
||||
#endif
|
|
@ -66,8 +66,8 @@ private:
|
|||
int m_iToggled;
|
||||
float m_flEffects;
|
||||
|
||||
PREDICTED_STRING(m_strMaterial)
|
||||
PREDICTED_FLOAT(m_flFramerate)
|
||||
NETWORKED_STRING(m_strMaterial)
|
||||
NETWORKED_FLOAT(m_flFramerate)
|
||||
|
||||
#ifdef CLIENT
|
||||
int m_iMaxFrame;
|
||||
|
@ -96,48 +96,36 @@ public:
|
|||
#endif
|
||||
};
|
||||
|
||||
void
|
||||
env_sprite::env_sprite(void)
|
||||
{
|
||||
NETWORKED_DEFAULT(m_strMaterial, __NULL__)
|
||||
NETWORKED_DEFAULT(m_flFramerate, 10.0f)
|
||||
NETWORKED_DEFAULT(scale, 1.0f)
|
||||
m_iIsShader = false;
|
||||
}
|
||||
|
||||
#ifdef SERVER
|
||||
void
|
||||
env_sprite::EvaluateEntity(void)
|
||||
{
|
||||
if (ATTR_CHANGED(origin)) {
|
||||
SetSendFlags(SPRITE_CHANGED_ORIGIN);
|
||||
}
|
||||
if (ATTR_CHANGED(modelindex)) {
|
||||
SetSendFlags(SPRITE_CHANGED_MODELINDEX);
|
||||
}
|
||||
if (ATTR_CHANGED(m_flFramerate)) {
|
||||
SetSendFlags(SPRITE_CHANGED_FRAMERATE);
|
||||
}
|
||||
if (ATTR_CHANGED(scale)) {
|
||||
SetSendFlags(SPRITE_CHANGED_SCALE);
|
||||
}
|
||||
if (ATTR_CHANGED(m_iRenderMode)) {
|
||||
SetSendFlags(SPRITE_CHANGED_RENDERMODE);
|
||||
}
|
||||
if (ATTR_CHANGED(m_vecRenderColor)) {
|
||||
SetSendFlags(SPRITE_CHANGED_RENDERCOLOR);
|
||||
}
|
||||
if (ATTR_CHANGED(m_flRenderAmt)) {
|
||||
SetSendFlags(SPRITE_CHANGED_RENDERAMT);
|
||||
}
|
||||
if (ATTR_CHANGED(m_strMaterial)) {
|
||||
SetSendFlags(SPRITE_CHANGED_MATERIAL);
|
||||
}
|
||||
|
||||
SAVE_STATE(origin)
|
||||
SAVE_STATE(modelindex)
|
||||
SAVE_STATE(m_flFramerate)
|
||||
SAVE_STATE(scale)
|
||||
SAVE_STATE(m_iRenderMode)
|
||||
SAVE_STATE(m_iRenderFX)
|
||||
SAVE_STATE(m_vecRenderColor)
|
||||
SAVE_STATE(m_flRenderAmt)
|
||||
SAVE_STATE(m_strMaterial)
|
||||
EVALUATE_VECTOR(origin, 0, SPRITE_CHANGED_ORIGIN)
|
||||
EVALUATE_VECTOR(origin, 1, SPRITE_CHANGED_ORIGIN)
|
||||
EVALUATE_VECTOR(origin, 2, SPRITE_CHANGED_ORIGIN)
|
||||
EVALUATE_FIELD(modelindex, SPRITE_CHANGED_MODELINDEX)
|
||||
EVALUATE_FIELD(m_flFramerate, SPRITE_CHANGED_FRAMERATE)
|
||||
EVALUATE_FIELD(scale, SPRITE_CHANGED_SCALE)
|
||||
EVALUATE_FIELD(m_iRenderMode, SPRITE_CHANGED_RENDERMODE)
|
||||
EVALUATE_FIELD(m_iRenderFX, SPRITE_CHANGED_RENDERFX)
|
||||
EVALUATE_VECTOR(m_vecRenderColor, 0, SPRITE_CHANGED_RENDERCOLOR)
|
||||
EVALUATE_VECTOR(m_vecRenderColor, 1, SPRITE_CHANGED_RENDERCOLOR)
|
||||
EVALUATE_VECTOR(m_vecRenderColor, 2, SPRITE_CHANGED_RENDERCOLOR)
|
||||
EVALUATE_FIELD(m_flRenderAmt, SPRITE_CHANGED_RENDERAMT)
|
||||
EVALUATE_FIELD(m_strMaterial, SPRITE_CHANGED_MATERIAL)
|
||||
}
|
||||
|
||||
float
|
||||
env_sprite::SendEntity(entity ePEnt, float flFlags)
|
||||
env_sprite::SendEntity(entity ePEnt, float flChanged)
|
||||
{
|
||||
if (clienttype(ePEnt) != CLIENTTYPE_REAL)
|
||||
return (0);
|
||||
|
@ -149,41 +137,26 @@ env_sprite::SendEntity(entity ePEnt, float flFlags)
|
|||
if (m_iToggled == FALSE)
|
||||
return (0);
|
||||
|
||||
/* strings are expensive. */
|
||||
if (!m_strMaterial)
|
||||
flChanged &= ~SPRITE_CHANGED_MATERIAL;
|
||||
|
||||
WriteByte(MSG_ENTITY, ENT_SPRITE);
|
||||
WriteFloat(MSG_ENTITY, flFlags);
|
||||
WriteFloat(MSG_ENTITY, flChanged);
|
||||
|
||||
if (flFlags & SPRITE_CHANGED_ORIGIN) {
|
||||
WriteCoord(MSG_ENTITY, origin[0]);
|
||||
WriteCoord(MSG_ENTITY, origin[1]);
|
||||
WriteCoord(MSG_ENTITY, origin[2]);
|
||||
}
|
||||
|
||||
if (flFlags & SPRITE_CHANGED_MODELINDEX) {
|
||||
WriteFloat(MSG_ENTITY, modelindex);
|
||||
}
|
||||
if (flFlags & SPRITE_CHANGED_FRAMERATE) {
|
||||
WriteFloat(MSG_ENTITY, m_flFramerate);
|
||||
}
|
||||
if (flFlags & SPRITE_CHANGED_SCALE) {
|
||||
WriteFloat(MSG_ENTITY, scale);
|
||||
}
|
||||
if (flFlags & SPRITE_CHANGED_RENDERMODE) {
|
||||
WriteByte(MSG_ENTITY, m_iRenderMode);
|
||||
}
|
||||
if (flFlags & SPRITE_CHANGED_RENDERFX) {
|
||||
WriteByte(MSG_ENTITY, m_iRenderFX);
|
||||
}
|
||||
if (flFlags & SPRITE_CHANGED_RENDERCOLOR) {
|
||||
WriteFloat(MSG_ENTITY, m_vecRenderColor[0]);
|
||||
WriteFloat(MSG_ENTITY, m_vecRenderColor[1]);
|
||||
WriteFloat(MSG_ENTITY, m_vecRenderColor[2]);
|
||||
}
|
||||
if (flFlags & SPRITE_CHANGED_RENDERAMT) {
|
||||
WriteFloat(MSG_ENTITY, m_flRenderAmt);
|
||||
}
|
||||
if (flFlags & SPRITE_CHANGED_MATERIAL) {
|
||||
WriteString(MSG_ENTITY, m_strMaterial);
|
||||
}
|
||||
SENDENTITY_COORD(origin[0], SPRITE_CHANGED_ORIGIN)
|
||||
SENDENTITY_COORD(origin[1], SPRITE_CHANGED_ORIGIN)
|
||||
SENDENTITY_COORD(origin[2], SPRITE_CHANGED_ORIGIN)
|
||||
SENDENTITY_FLOAT(modelindex, SPRITE_CHANGED_MODELINDEX)
|
||||
SENDENTITY_FLOAT(m_flFramerate, SPRITE_CHANGED_FRAMERATE)
|
||||
SENDENTITY_FLOAT(scale, SPRITE_CHANGED_SCALE)
|
||||
SENDENTITY_BYTE(m_iRenderMode, SPRITE_CHANGED_RENDERMODE)
|
||||
SENDENTITY_BYTE(m_iRenderFX, SPRITE_CHANGED_RENDERFX)
|
||||
SENDENTITY_COLOR(m_vecRenderColor[0], SPRITE_CHANGED_RENDERCOLOR)
|
||||
SENDENTITY_COLOR(m_vecRenderColor[1], SPRITE_CHANGED_RENDERCOLOR)
|
||||
SENDENTITY_COLOR(m_vecRenderColor[2], SPRITE_CHANGED_RENDERCOLOR)
|
||||
SENDENTITY_COLOR(m_flRenderAmt, SPRITE_CHANGED_RENDERAMT)
|
||||
SENDENTITY_STRING(m_strMaterial, SPRITE_CHANGED_MATERIAL)
|
||||
|
||||
return (1);
|
||||
}
|
||||
|
@ -305,39 +278,21 @@ env_sprite::think(void)
|
|||
}
|
||||
|
||||
void
|
||||
env_sprite::ReceiveEntity(float flNew, float flFlags)
|
||||
env_sprite::ReceiveEntity(float flNew, float flChanged)
|
||||
{
|
||||
if (flFlags & SPRITE_CHANGED_ORIGIN) {
|
||||
origin[0] = readcoord();
|
||||
origin[1] = readcoord();
|
||||
origin[2] = readcoord();
|
||||
}
|
||||
if (flFlags & SPRITE_CHANGED_MODELINDEX) {
|
||||
modelindex = readfloat();
|
||||
}
|
||||
if (flFlags & SPRITE_CHANGED_FRAMERATE) {
|
||||
m_flFramerate = readfloat();
|
||||
}
|
||||
if (flFlags & SPRITE_CHANGED_SCALE) {
|
||||
scale = readfloat();
|
||||
}
|
||||
if (flFlags & SPRITE_CHANGED_RENDERMODE) {
|
||||
m_iRenderMode = readbyte();
|
||||
}
|
||||
if (flFlags & SPRITE_CHANGED_RENDERFX) {
|
||||
m_iRenderFX = readbyte();
|
||||
}
|
||||
if (flFlags & SPRITE_CHANGED_RENDERCOLOR) {
|
||||
m_vecRenderColor[0] = readfloat();
|
||||
m_vecRenderColor[1] = readfloat();
|
||||
m_vecRenderColor[2] = readfloat();
|
||||
}
|
||||
if (flFlags & SPRITE_CHANGED_RENDERAMT) {
|
||||
m_flRenderAmt = readfloat();
|
||||
}
|
||||
if (flFlags & SPRITE_CHANGED_MATERIAL) {
|
||||
m_strMaterial = readstring();
|
||||
}
|
||||
READENTITY_COORD(origin[0], SPRITE_CHANGED_ORIGIN)
|
||||
READENTITY_COORD(origin[1], SPRITE_CHANGED_ORIGIN)
|
||||
READENTITY_COORD(origin[2], SPRITE_CHANGED_ORIGIN)
|
||||
READENTITY_FLOAT(modelindex, SPRITE_CHANGED_MODELINDEX)
|
||||
READENTITY_FLOAT(m_flFramerate, SPRITE_CHANGED_FRAMERATE)
|
||||
READENTITY_FLOAT(scale, SPRITE_CHANGED_SCALE)
|
||||
READENTITY_BYTE(m_iRenderMode, SPRITE_CHANGED_RENDERMODE)
|
||||
READENTITY_BYTE(m_iRenderFX, SPRITE_CHANGED_RENDERFX)
|
||||
READENTITY_COLOR(m_vecRenderColor[0], SPRITE_CHANGED_RENDERCOLOR)
|
||||
READENTITY_COLOR(m_vecRenderColor[1], SPRITE_CHANGED_RENDERCOLOR)
|
||||
READENTITY_COLOR(m_vecRenderColor[2], SPRITE_CHANGED_RENDERCOLOR)
|
||||
READENTITY_COLOR(m_flRenderAmt, SPRITE_CHANGED_RENDERAMT)
|
||||
READENTITY_STRING(m_strMaterial, SPRITE_CHANGED_MATERIAL)
|
||||
|
||||
drawmask = MASK_ENGINE;
|
||||
nextthink = time + (1 / m_flFramerate);
|
||||
|
@ -366,15 +321,6 @@ env_sprite::SetFramerate(bool flag)
|
|||
|
||||
}
|
||||
|
||||
void
|
||||
env_sprite::env_sprite(void)
|
||||
{
|
||||
m_iIsShader = false;
|
||||
m_flFramerate = 10;
|
||||
m_strMaterial = __NULL__;
|
||||
scale = 1.0f;
|
||||
}
|
||||
|
||||
#ifdef CLIENT
|
||||
void
|
||||
EnvSprite_ParseEvent(void)
|
||||
|
|
|
@ -481,18 +481,4 @@ env_steam::predraw(void)
|
|||
addentity(self);
|
||||
return (PREDRAW_NEXT);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CLIENT
|
||||
void
|
||||
env_steam_ReadEntity(float isnew)
|
||||
{
|
||||
env_steam laser = (env_steam)self;
|
||||
float changedflags = readfloat();
|
||||
|
||||
if (isnew)
|
||||
spawnfunc_env_steam();
|
||||
|
||||
laser.ReceiveEntity(isnew, changedflags);
|
||||
}
|
||||
#endif
|
|
@ -364,20 +364,6 @@ func_conveyor::ReceiveEntity(float flNew, float flChanged)
|
|||
|
||||
setorigin(this, origin);
|
||||
}
|
||||
|
||||
void
|
||||
func_conveyor_ReadEntity(bool new)
|
||||
{
|
||||
float fl;
|
||||
|
||||
func_conveyor rend = (func_conveyor)self;
|
||||
if (new) {
|
||||
spawnfunc_func_conveyor();
|
||||
}
|
||||
|
||||
fl = readfloat();
|
||||
rend.ReceiveEntity(new, fl);
|
||||
}
|
||||
#endif
|
||||
|
||||
void
|
||||
|
|
|
@ -458,18 +458,4 @@ func_tankmortar::func_tankmortar(void)
|
|||
{
|
||||
m_iVehicleFlags |= VHF_FROZEN | VHF_NOATTACK;
|
||||
|
||||
}
|
||||
|
||||
#ifdef CLIENT
|
||||
void
|
||||
func_tankmortar_readentity(float isnew)
|
||||
{
|
||||
func_tankmortar veh = (func_tankmortar)self;
|
||||
float flags = readfloat();
|
||||
|
||||
if (isnew)
|
||||
spawnfunc_func_tankmortar();
|
||||
|
||||
veh.ReceiveEntity(flags, isnew);
|
||||
}
|
||||
#endif
|
||||
}
|
|
@ -1018,18 +1018,4 @@ func_vehicle::SendEntity(entity ePEnt, float flChanged)
|
|||
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CLIENT
|
||||
void
|
||||
func_vehicle_readentity(float isnew)
|
||||
{
|
||||
func_vehicle veh = (func_vehicle)self;
|
||||
float flags = readfloat();
|
||||
|
||||
if (isnew)
|
||||
spawnfunc_func_vehicle();
|
||||
|
||||
veh.ReceiveEntity(flags, isnew);
|
||||
}
|
||||
#endif
|
|
@ -245,18 +245,4 @@ info_waypoint::postdraw(void)
|
|||
Font_DrawText_RGBA(projectedPos, m_strText, [1,1,1], a, FONT_CON);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
info_waypoint_ReadEntity(bool new)
|
||||
{
|
||||
float fl;
|
||||
|
||||
info_waypoint rend = (info_waypoint)self;
|
||||
if (new) {
|
||||
spawnfunc_info_waypoint();
|
||||
}
|
||||
|
||||
fl = readfloat();
|
||||
rend.ReceiveEntity(new, fl);
|
||||
}
|
||||
#endif
|
|
@ -416,19 +416,4 @@ light_dynamic::light_dynamic(void)
|
|||
}
|
||||
|
||||
/* compatibility for q3map users, stay safe out there */
|
||||
class dynamic_light:light_dynamic { };
|
||||
|
||||
#ifdef CLIENT
|
||||
void
|
||||
light_dynamic_ReadEntity(float new)
|
||||
{
|
||||
light_dynamic dl = (light_dynamic)self;
|
||||
|
||||
if (new) {
|
||||
spawnfunc_light_dynamic();
|
||||
}
|
||||
|
||||
dl.ReceiveEntity(new, readfloat());
|
||||
dl.drawmask = MASK_GLOWS;
|
||||
}
|
||||
#endif
|
||||
class dynamic_light:light_dynamic { };
|
|
@ -353,16 +353,4 @@ point_spotlight::point_spotlight(void)
|
|||
m_flBeamWidth = 50.0f;
|
||||
m_vecColor = [1.0,1.0,1.0];
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef CLIENT
|
||||
void
|
||||
point_spotlight_ReadEntity(float isNew)
|
||||
{
|
||||
point_spotlight ept = (point_spotlight)self;
|
||||
if (isNew) {
|
||||
spawnfunc_point_spotlight();
|
||||
}
|
||||
ept.ReceiveEntity(isNew, readfloat());
|
||||
}
|
||||
#endif
|
||||
}
|
|
@ -307,19 +307,4 @@ prop_rope::prop_rope(void)
|
|||
/* this is empty for a good reason */
|
||||
drawmask = MASK_ENGINE;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
#ifdef CLIENT
|
||||
void
|
||||
prop_rope_readentity(float isnew)
|
||||
{
|
||||
prop_rope rope = (prop_rope)self;
|
||||
float flags = readfloat();
|
||||
|
||||
if (isnew)
|
||||
spawnfunc_prop_rope();
|
||||
|
||||
rope.ReceiveEntity(flags, isnew);
|
||||
}
|
||||
#endif
|
||||
}
|
|
@ -903,18 +903,4 @@ prop_vehicle_driveable::Spawned(void)
|
|||
#ifdef SERVER
|
||||
Sound_Precache("prop_vehicle_driveable.bounce");
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef CLIENT
|
||||
void
|
||||
prop_vehicle_driveable_readentity(float isnew)
|
||||
{
|
||||
prop_vehicle_driveable veh = (prop_vehicle_driveable)self;
|
||||
float flags = readfloat();
|
||||
|
||||
if (isnew)
|
||||
spawnfunc_prop_vehicle_driveable();
|
||||
|
||||
veh.ReceiveEntity(flags, isnew);
|
||||
}
|
||||
#endif
|
||||
}
|
|
@ -87,8 +87,6 @@ trigger_camera::ReceiveEntity(float flNew, float flFlags)
|
|||
{
|
||||
float flWait = 0.0f;
|
||||
|
||||
print(sprintf("camera update %d %d %x\n", entnum, flNew, flFlags));
|
||||
|
||||
if (flFlags & OCAMFL_CHANGED_ORIGIN) {
|
||||
origin[0] = readcoord();
|
||||
origin[1] = readcoord();
|
||||
|
@ -234,7 +232,7 @@ trigger_camera::GoToTarget(void)
|
|||
NSLog("trigger_camera (%s): Moving to path_corner %S within %f secs", targetname, target, flTravelTime);
|
||||
|
||||
if (!flTravelTime) {
|
||||
print("^1trigger_camera::^3GoToTarget^7: Distance short, going next\n");
|
||||
NSEntWarning("distance too short, going to next");
|
||||
NextPath();
|
||||
return;
|
||||
}
|
||||
|
@ -264,7 +262,7 @@ trigger_camera::NextPath(void)
|
|||
|
||||
/* warp next frame */
|
||||
if (eNode.HasSpawnFlags(PC_TELEPORT)) {
|
||||
print(sprintf("^1trigger_camera::^3NextPath^7: Node %s wants %s to teleport\n", eNode.targetname, targetname));
|
||||
NSLog("^1trigger_camera::^3NextPath^7: Node %s wants %s to teleport\n", eNode.targetname, targetname);
|
||||
ScheduleThink(NextPath, 0.0f);
|
||||
return;
|
||||
}
|
||||
|
@ -290,7 +288,7 @@ trigger_camera::Trigger(entity act, triggermode_t state)
|
|||
act = find(world, ::classname, "player");
|
||||
}
|
||||
|
||||
print(sprintf("trigger_camera for %S is now %S\n", act.netname, targetname));
|
||||
NSLog("trigger_camera for %S is now %S\n", act.netname, targetname);
|
||||
|
||||
/* kill the other cams the player may be attached to */
|
||||
for (trigger_camera cam = __NULL__; (cam = (trigger_camera)find(cam, ::classname, "trigger_camera"));) {
|
||||
|
|
|
@ -368,8 +368,4 @@ public:
|
|||
nonvirtual float GetSpawnTime(void);
|
||||
/** Move the entity to a new position, with updated angles. */
|
||||
nonvirtual void Transport(vector, vector);
|
||||
};
|
||||
|
||||
#ifdef CLIENT
|
||||
void NSEntity_ReadEntity(float);
|
||||
#endif
|
||||
};
|
|
@ -908,7 +908,7 @@ bool NSEntity::StartSound( string strSample, float channel, float flags, bool br
|
|||
}
|
||||
|
||||
bool NSEntity::StartSoundDef( string strSample, float channel, bool broadcast ) {
|
||||
NSLog( "StartSoundDef: %s %d %d", strSample, channel, broadcast );
|
||||
NSLog( "^2%s::^3StartSoundDef^7: %s (chan: %d bcast: %d)", classname, strSample, channel, broadcast );
|
||||
Sound_Play( this, channel, strSample );
|
||||
return ( true );
|
||||
}
|
||||
|
@ -979,20 +979,4 @@ NSEntity::Transport(vector new_pos, vector new_ang)
|
|||
if (flags & FL_CLIENT)
|
||||
Client_FixAngle(this, new_ang);
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef CLIENT
|
||||
void
|
||||
NSEntity_ReadEntity(bool new)
|
||||
{
|
||||
float fl;
|
||||
|
||||
NSEntity read = (NSEntity)self;
|
||||
if (new) {
|
||||
spawnfunc_NSEntity();
|
||||
}
|
||||
|
||||
fl = readfloat();
|
||||
read.ReceiveEntity(new, fl);
|
||||
}
|
||||
#endif
|
||||
}
|
|
@ -576,7 +576,6 @@ private:
|
|||
#ifdef CLIENT
|
||||
string Sentences_GetSamples(string);
|
||||
string Sentences_ProcessSample(string);
|
||||
void NSMonster_ReadEntity(bool);
|
||||
#endif
|
||||
|
||||
#ifdef SERVER
|
||||
|
|
|
@ -2099,19 +2099,7 @@ NSMonster::_RenderDebugViewCone(void)
|
|||
}
|
||||
#endif
|
||||
|
||||
#ifdef CLIENT
|
||||
void
|
||||
NSMonster_ReadEntity(bool new)
|
||||
{
|
||||
NSMonster me = (NSMonster)self;
|
||||
if (new) {
|
||||
spawnfunc_NSMonster();
|
||||
}
|
||||
me.ReceiveEntity(new, readfloat());
|
||||
}
|
||||
#else
|
||||
|
||||
|
||||
#ifdef SERVER
|
||||
var int autocvar_ai_alertdebug = 0;
|
||||
|
||||
var float g_monsteralert_timer;
|
||||
|
|
|
@ -120,8 +120,4 @@ public:
|
|||
nonvirtual void ApplyTorqueCenter(vector);
|
||||
/** Called by the physics routine to figure out the impact damage. */
|
||||
nonvirtual float CalculateImpactDamage(int,int);
|
||||
};
|
||||
|
||||
#ifdef CLIENT
|
||||
void NSPhysicsEntity_ReadEntity(bool);
|
||||
#endif
|
||||
};
|
|
@ -633,20 +633,4 @@ NSPhysicsEntity::SpawnKey(string strKey, string strValue)
|
|||
super::SpawnKey(strKey, strValue);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef CLIENT
|
||||
void
|
||||
NSPhysicsEntity_ReadEntity(bool new)
|
||||
{
|
||||
float fl;
|
||||
NSPhysicsEntity rend = (NSPhysicsEntity)self;
|
||||
if (new) {
|
||||
spawnfunc_NSPhysicsEntity();
|
||||
}
|
||||
fl = readfloat();
|
||||
rend.ReceiveEntity(new, fl);
|
||||
|
||||
//print(sprintf("physics ent update: %d %x %d %v\n", self.entnum, fl, self.origin, vlen(self.velocity)));
|
||||
}
|
||||
#endif
|
||||
}
|
|
@ -90,8 +90,6 @@ private:
|
|||
};
|
||||
|
||||
#ifdef CLIENT
|
||||
void NSPortal_ReadEntity(bool);
|
||||
|
||||
#define READENTITY_PORTAL(field, changedflag) {\
|
||||
if (flChanged & changedflag) {\
|
||||
field = (NSPortal)findfloat(world, ::entnum, readentitynum());\
|
||||
|
|
|
@ -445,16 +445,4 @@ NSPortal::ReceiveEntity(float flNew, float flChanged)
|
|||
drawmask = MASK_ENGINE;
|
||||
predraw = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CLIENT
|
||||
void
|
||||
NSPortal_ReadEntity(bool new)
|
||||
{
|
||||
NSPortal me = (NSPortal)self;
|
||||
if (new) {
|
||||
spawnfunc_NSPortal();
|
||||
}
|
||||
me.ReceiveEntity(new, readfloat());
|
||||
}
|
||||
#endif
|
|
@ -153,11 +153,6 @@ public:
|
|||
#endif
|
||||
};
|
||||
|
||||
|
||||
#ifdef CLIENT
|
||||
void NSProjectile_ReadEntity(bool);
|
||||
#endif
|
||||
|
||||
#ifdef SERVER
|
||||
NSProjectile NSProjectile_SpawnDef(string entityDef, NSEntity theOwner);
|
||||
NSProjectile NSProjectile_SpawnDefAtPosition(string entityDef, NSEntity theOwner, vector vecOrigin, vector vecAngles);
|
||||
|
|
|
@ -840,23 +840,6 @@ NSProjectile::ReceiveEntity(float flNew, float flChanged)
|
|||
}
|
||||
#endif
|
||||
|
||||
#ifdef CLIENT
|
||||
void
|
||||
NSProjectile_ReadEntity(bool new)
|
||||
{
|
||||
float fl;
|
||||
|
||||
NSProjectile rend = (NSProjectile)self;
|
||||
if (new) {
|
||||
spawnfunc_NSProjectile();
|
||||
}
|
||||
|
||||
fl = readfloat();
|
||||
|
||||
rend.ReceiveEntity(new, fl);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef SERVER
|
||||
NSProjectile
|
||||
NSProjectile_SpawnDef(string entityDef, NSEntity theOwner)
|
||||
|
|
|
@ -208,8 +208,4 @@ public:
|
|||
nonvirtual void RenderAxialScale(void);
|
||||
nonvirtual void RenderGLQuakeShadow(void);
|
||||
#endif
|
||||
};
|
||||
|
||||
#ifdef CLIENT
|
||||
void NSRenderableEntity_ReadEntity(bool)
|
||||
#endif
|
||||
};
|
|
@ -217,9 +217,9 @@ NSRenderableEntity::SendEntity(entity ePEnt, float flChanged)
|
|||
SENDENTITY_COORD(avelocity[2], RDENT_CHANGED_ANGULARVELOCITY)
|
||||
SENDENTITY_BYTE(m_iRenderMode, RDENT_CHANGED_RENDERMODE)
|
||||
SENDENTITY_BYTE(m_iRenderFX, RDENT_CHANGED_RENDERMODE)
|
||||
SENDENTITY_ANGLE(m_vecRenderColor[0], RDENT_CHANGED_RENDERCOLOR)
|
||||
SENDENTITY_ANGLE(m_vecRenderColor[1], RDENT_CHANGED_RENDERCOLOR)
|
||||
SENDENTITY_ANGLE(m_vecRenderColor[2], RDENT_CHANGED_RENDERCOLOR)
|
||||
SENDENTITY_COLOR(m_vecRenderColor[0], RDENT_CHANGED_RENDERCOLOR)
|
||||
SENDENTITY_COLOR(m_vecRenderColor[1], RDENT_CHANGED_RENDERCOLOR)
|
||||
SENDENTITY_COLOR(m_vecRenderColor[2], RDENT_CHANGED_RENDERCOLOR)
|
||||
/* these need more precision for shader hacks... */
|
||||
SENDENTITY_FLOAT(glowmod[0], RDENT_CHANGED_RENDERCOLOR)
|
||||
SENDENTITY_FLOAT(glowmod[1], RDENT_CHANGED_RENDERCOLOR)
|
||||
|
@ -277,9 +277,9 @@ NSRenderableEntity::ReceiveEntity(float flNew, float flChanged)
|
|||
READENTITY_COORD(avelocity[2], RDENT_CHANGED_ANGULARVELOCITY)
|
||||
READENTITY_BYTE(m_iRenderMode, RDENT_CHANGED_RENDERMODE)
|
||||
READENTITY_BYTE(m_iRenderFX, RDENT_CHANGED_RENDERMODE)
|
||||
READENTITY_ANGLE(m_vecRenderColor[0], RDENT_CHANGED_RENDERCOLOR)
|
||||
READENTITY_ANGLE(m_vecRenderColor[1], RDENT_CHANGED_RENDERCOLOR)
|
||||
READENTITY_ANGLE(m_vecRenderColor[2], RDENT_CHANGED_RENDERCOLOR)
|
||||
READENTITY_COLOR(m_vecRenderColor[0], RDENT_CHANGED_RENDERCOLOR)
|
||||
READENTITY_COLOR(m_vecRenderColor[1], RDENT_CHANGED_RENDERCOLOR)
|
||||
READENTITY_COLOR(m_vecRenderColor[2], RDENT_CHANGED_RENDERCOLOR)
|
||||
/* these need more precision for shader hacks... */
|
||||
READENTITY_FLOAT(glowmod[0], RDENT_CHANGED_RENDERCOLOR)
|
||||
READENTITY_FLOAT(glowmod[1], RDENT_CHANGED_RENDERCOLOR)
|
||||
|
@ -638,6 +638,12 @@ NSRenderableEntity::Respawn(void)
|
|||
SetRenderMode(m_oldiRenderMode);
|
||||
SetRenderAmt(m_oldflRenderAmt);
|
||||
SetRenderColor(m_oldvecRenderColor);
|
||||
|
||||
if (GetRenderColor() == g_vec_null)
|
||||
SetRenderColor([1.0, 1.0, 1.0]);
|
||||
|
||||
if (GetRenderMode() == RM_NORMAL)
|
||||
SetRenderAmt(1.0);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -1042,20 +1048,4 @@ NSRenderableEntity::SpawnKey(string strKey, string strValue)
|
|||
super::SpawnKey(strKey, strValue);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef CLIENT
|
||||
void
|
||||
NSRenderableEntity_ReadEntity(bool new)
|
||||
{
|
||||
float fl;
|
||||
|
||||
NSRenderableEntity rend = (NSRenderableEntity)self;
|
||||
if (new) {
|
||||
spawnfunc_NSRenderableEntity();
|
||||
}
|
||||
|
||||
fl = readfloat();
|
||||
rend.ReceiveEntity(new, fl);
|
||||
}
|
||||
#endif
|
||||
}
|
|
@ -50,8 +50,9 @@ NSTrigger::UseTargets(entity act, int state, float fDelay)
|
|||
remove(self);
|
||||
}
|
||||
|
||||
if (!target || target == "")
|
||||
return;
|
||||
if not (m_strKillTarget)
|
||||
if not (target)
|
||||
return;
|
||||
|
||||
if (fDelay > 0.0f) {
|
||||
NSLog("^2%s::^3UseTargets^7: Triggering `%s`",
|
||||
|
@ -82,9 +83,11 @@ NSTrigger::UseTargets(entity act, int state, float fDelay)
|
|||
}
|
||||
|
||||
if (m_strKillTarget && m_strKillTarget != "") {
|
||||
entity eKill = find(world, ::targetname, m_strKillTarget);
|
||||
NSEntity eKill = (NSEntity)find(world, ::targetname, m_strKillTarget);
|
||||
NSLog("^2%s::^3UseTargets^7: Killing `%s`",
|
||||
classname, m_strKillTarget);
|
||||
if (eKill) {
|
||||
remove(eKill);
|
||||
eKill.Destroy();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,6 +15,18 @@
|
|||
*/
|
||||
|
||||
/* networking helpers */
|
||||
#define NETWORKED_INT(x) int x; int x ##_net;
|
||||
#define NETWORKED_FLOAT(x) float x; float x ##_net;
|
||||
#define NETWORKED_VECTOR(x) vector x; vector x ##_net;
|
||||
#define NETWORKED_ENT(x) entity x; entity x ##_net;
|
||||
#define NETWORKED_STRING(x) string x; string x ##_net;
|
||||
#define NETWORKED_BOOL(x) bool x; bool x ##_net;
|
||||
|
||||
#define NETWORKED_INT_N(x) int x ##_net;
|
||||
#define NETWORKED_FLOAT_N(x) float x ##_net;
|
||||
#define NETWORKED_VECTOR_N(x) vector x ##_net;
|
||||
#define NETWORKED_STRING_N(x) string x ##_net;
|
||||
|
||||
#define PREDICTED_INT(x) int x; int x ##_net;
|
||||
#define PREDICTED_FLOAT(x) float x; float x ##_net;
|
||||
#define PREDICTED_VECTOR(x) vector x; vector x ##_net;
|
||||
|
@ -27,6 +39,22 @@
|
|||
#define PREDICTED_VECTOR_N(x) vector x ##_net;
|
||||
#define PREDICTED_STRING_N(x) string x ##_net;
|
||||
|
||||
#ifdef CLIENT
|
||||
#define NSENTITY_READENTITY(x, y) \
|
||||
{ \
|
||||
local x x ##_e = ( x )self;\
|
||||
if (y == true) { \
|
||||
self.classname = strcat("spawnfunc_", #x); \
|
||||
callfunction(self.classname); \
|
||||
} \
|
||||
x ##_e.ReceiveEntity( y, readfloat() );\
|
||||
}
|
||||
#else
|
||||
|
||||
#endif
|
||||
|
||||
#define NETWORKED_DEFAULT(x, y) x ##_net = x = y;
|
||||
|
||||
#define ROLL_BACK(x) x = x ##_net;
|
||||
#define SAVE_STATE(x) x ##_net = x;
|
||||
#define SAVE_STATE_FIELD(x, y) x ##_net[y] = x[y];
|
||||
|
@ -175,6 +203,10 @@ crossprint(string m)
|
|||
__wrap string
|
||||
precache_model(string m)
|
||||
{
|
||||
if not (m) {
|
||||
breakpoint();
|
||||
}
|
||||
|
||||
#ifdef CLIENT
|
||||
NSLog("^3Client precaching model ^7%s", m);
|
||||
#else
|
||||
|
|
|
@ -40,6 +40,7 @@ typedef enum
|
|||
ENT_LASER, /**< of type env_laser */
|
||||
ENT_PARTSYSTEM, /**< of type info_particle_system */
|
||||
ENT_SPRITE, /**< of type env_sprite */
|
||||
ENT_GLOW, /**< of type env_glow */
|
||||
ENT_SPRAY, /**< of type spray */
|
||||
ENT_DECAL, /**< of type infodecal */
|
||||
ENT_OLDCAMERA, /**< of type trigger_camera */
|
||||
|
|
|
@ -37,6 +37,12 @@ _NSAssert(bool condition, string function, string descr)
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
_NSEntWarning(string className, vector classOrg, string warnMessage)
|
||||
{
|
||||
print(sprintf("^1Class %s at %v: %s\n", className, classOrg, warnMessage));
|
||||
}
|
||||
|
||||
/** Logs an error type message, with timestamp.
|
||||
The console variable `g_developer` has to be `1` for them to be visible.
|
||||
|
||||
|
@ -50,6 +56,9 @@ _NSAssert(bool condition, string function, string descr)
|
|||
|
||||
#define NSAssert(condition, ...) _NSAssert(condition, __FUNC__, sprintf(__VA_ARGS__))
|
||||
|
||||
|
||||
#define NSEntWarning(...) _NSEntWarning(classname, origin, sprintf(__VA_ARGS__))
|
||||
|
||||
typedef enumflags
|
||||
{
|
||||
SEARCH_INSENSITIVE, /**< Attempt to do a case-insensitive search (slower) */
|
||||
|
|
Loading…
Reference in a new issue