Prop sphere: Difference between revisions
Jump to navigation
Jump to search
Tip:The only spherical model in Half-Life 2 is
TomEdwards (talk | contribs) (useful: a perfect vphysics sphere) |
TomEdwards (talk | contribs) (full documentation, plus new source code to extend the ent into something production-quality) |
||
Line 1: | Line 1: | ||
'''prop_sphere''' is an unlisted entity not referenced in any of Valve's stock [[FGD]]s, even though it is available to all of them. | |||
It is essentially a [[prop_physics]] with a perfectly spherical [[VPhysics]] collision model. If you want to create an spherical entity, it is far more efficient to use prop_sphere than try to create a spherical [[collision mesh]]! | |||
{{tip|The only spherical model in Half-Life 2 is <code>models\combine_helicopter\helicopter_bomb01.mdl</code>. Unfortunately it is made of wood!}} | |||
== | == Stock FGD == | ||
If you don't intend to make any changes to the entity's C++ code, use this: | |||
: | |||
[[ | <source lang=ini> | ||
@PointClass base(BasePropPhysics, RenderFields) studioprop() = prop_sphere : "Creates a perfect sphere." | |||
[ | |||
] | |||
</source> | |||
== Extending prop_sphere == | |||
The following simple addition to <code>CPhysSphere</code>: | |||
* Allows level designers to configure the collision model's radius | |||
* Fully applies the [[prop_data]] and [[$surfaceprop]] of the chosen [[model]]. | |||
=== C++ === | |||
Open \server\props.cpp and replace the existing <code>CPhysSphere</code> with this: | |||
<source lang=cpp> | |||
class CPhysSphere : public CPhysicsProp | |||
{ | |||
DECLARE_CLASS( CPhysSphere, CPhysicsProp ); | |||
DECLARE_DATADESC(); | |||
public: | |||
float m_fRadius; | |||
bool CreateVPhysics() | |||
{ | |||
SetSolid( SOLID_BBOX ); | |||
SetCollisionBounds( -Vector(m_fRadius), Vector(m_fRadius) ); | |||
objectparams_t params = g_PhysDefaultObjectParams; | |||
params.pGameData = static_cast<void *>(this); | |||
IPhysicsObject *pPhysicsObject = physenv->CreateSphereObject( m_fRadius, GetModelPtr()->GetRenderHdr()->textureindex, GetAbsOrigin(), GetAbsAngles(), ¶ms, false ); | |||
if ( pPhysicsObject ) | |||
{ | |||
VPhysicsSetObject( pPhysicsObject ); | |||
SetMoveType( MOVETYPE_VPHYSICS ); | |||
pPhysicsObject->Wake(); | |||
} | |||
return true; | |||
} | |||
}; | |||
LINK_ENTITY_TO_CLASS( prop_sphere, CPhysSphere ); | |||
BEGIN_DATADESC( CPhysSphere ) | |||
DEFINE_KEYFIELD( m_fRadius, FIELD_FLOAT, "radius"), | |||
END_DATADESC() | |||
</source> | |||
=== Extended FGD === | |||
<source lang=ini> | |||
@PointClass base(BasePropPhysics, RenderFields) studioprop() sphere(radius) = prop_sphere : "Creates a perfect sphere." | |||
[ | |||
radius(float) : "Radius" : 12 : "" | |||
] | |||
</source> | |||
== Stock Keyvalues == | |||
<div style="overflow:auto;max-height:30em;"> | |||
*{{KV BasePropPhysics}} | |||
*{{KV RenderFields}} | |||
</div> | |||
== Stock Flags == | |||
<div style="overflow:auto;max-height:30em;"> | |||
*{{Fl BasePropPhysics}} | |||
</div> | |||
== Stock Inputs == | |||
<div style="overflow:auto;max-height:30em;"> | |||
*{{I BasePropPhysics}} | |||
*{{I RenderFields}} | |||
</div> | |||
== Stock Outputs == | |||
<div style="overflow:auto;max-height:30em;"> | |||
*{{O BasePropPhysics}} | |||
</div> | |||
{{wrongtitle|prop_sphere}} [[Category:Entities]] [[Category:Free source code]] |
Revision as of 07:36, 14 June 2009
prop_sphere is an unlisted entity not referenced in any of Valve's stock FGDs, even though it is available to all of them.
It is essentially a prop_physics with a perfectly spherical VPhysics collision model. If you want to create an spherical entity, it is far more efficient to use prop_sphere than try to create a spherical collision mesh!

models\combine_helicopter\helicopter_bomb01.mdl
. Unfortunately it is made of wood!Stock FGD
If you don't intend to make any changes to the entity's C++ code, use this:
@PointClass base(BasePropPhysics, RenderFields) studioprop() = prop_sphere : "Creates a perfect sphere."
[
]
Extending prop_sphere
The following simple addition to CPhysSphere
:
- Allows level designers to configure the collision model's radius
- Fully applies the prop_data and $surfaceprop of the chosen model.
C++
Open \server\props.cpp and replace the existing CPhysSphere
with this:
class CPhysSphere : public CPhysicsProp
{
DECLARE_CLASS( CPhysSphere, CPhysicsProp );
DECLARE_DATADESC();
public:
float m_fRadius;
bool CreateVPhysics()
{
SetSolid( SOLID_BBOX );
SetCollisionBounds( -Vector(m_fRadius), Vector(m_fRadius) );
objectparams_t params = g_PhysDefaultObjectParams;
params.pGameData = static_cast<void *>(this);
IPhysicsObject *pPhysicsObject = physenv->CreateSphereObject( m_fRadius, GetModelPtr()->GetRenderHdr()->textureindex, GetAbsOrigin(), GetAbsAngles(), ¶ms, false );
if ( pPhysicsObject )
{
VPhysicsSetObject( pPhysicsObject );
SetMoveType( MOVETYPE_VPHYSICS );
pPhysicsObject->Wake();
}
return true;
}
};
LINK_ENTITY_TO_CLASS( prop_sphere, CPhysSphere );
BEGIN_DATADESC( CPhysSphere )
DEFINE_KEYFIELD( m_fRadius, FIELD_FLOAT, "radius"),
END_DATADESC()
Extended FGD
@PointClass base(BasePropPhysics, RenderFields) studioprop() sphere(radius) = prop_sphere : "Creates a perfect sphere."
[
radius(float) : "Radius" : 12 : ""
]
Stock Keyvalues
Note:Page left for viewable history, content moved to prop_physics
- RenderFields:
- Render Mode (rendermode) <byte choices>
- Set a non-standard rendering mode on this entity.
Render Modes
- Render FX (renderfx) <byte choices>
- Various somewhat legacy alpha effects. See render effects.
- Render Amount / Transparency (renderamt) <byte>
- Transparency amount, requires a Render Mode other than Normal. 0 is invisible, 255 is fully visible.
- Render Color (R G B) (rendercolor) <color255>
- Color tint.
Stock Flags
Note:Page left for viewable history, content moved to prop_physics
Stock Inputs
Note:Page left for viewable history, content moved to prop_physics
- RenderFields:
- Alpha <integer 0–255>
- Sets the entity's transparency to a number from 0 (invisible) to 255 (fully visible). Requires the entity to have its
rendermode
set to a number other than0
.
- Color <color255 >
- Sets an RGB color for the entity.
Stock Outputs
Note:Page left for viewable history, content moved to prop_physics