func_brush: Ironed out most of the behaviour, thanks Xylemon for creating
a great test map documenting how this entity should behave in Source.
This commit is contained in:
parent
e13323e07d
commit
8a2820f15b
1 changed files with 42 additions and 31 deletions
|
@ -15,26 +15,28 @@
|
|||
*/
|
||||
|
||||
/*QUAKED func_brush (0 .5 .8) ?
|
||||
Combination of func_illusionary, func_wall, func_wall_toggle.
|
||||
When triggered, it'll become invisible and lose its collision.
|
||||
|
||||
-------- KEYS --------
|
||||
"targetname" Name
|
||||
|
||||
"Solidity" Mode for choosing solidity:
|
||||
0 - Toggle
|
||||
1 - Not solid
|
||||
2 - Solid
|
||||
"StartDisabled" Only valid when Solidity is 0. Will make it spawn invisible
|
||||
and without collision.
|
||||
1 - Never solid
|
||||
2 - Always Solid
|
||||
"StartDisabled" Will make it spawn invisible and without collision.
|
||||
"solidbsp" Type of collision model to choose
|
||||
"excludednpc" Name of the NPC classname that will not collide with this
|
||||
entity
|
||||
"invert_exclusion" Set to 1 if you want the 'excludednpc' key to act inverted
|
||||
|
||||
Description:
|
||||
Combination of func_illusionary, func_wall, func_wall_toggle.
|
||||
Triggering it causes to become invisible if the key 'Solidity' is set to 0 as
|
||||
well as lose its collision.
|
||||
-------- NOTES --------
|
||||
The main thing func_brush is concerned with is appearance, if it's toggled on
|
||||
it will always become visible, when toggled off it'll always be invisible.
|
||||
Collision however depends on the setting of the "Solidity" key.
|
||||
|
||||
|
||||
Trivia:
|
||||
-------- HISTORY --------
|
||||
This entity was introduced in Half-Life 2 (2004).
|
||||
*/
|
||||
|
||||
|
@ -53,6 +55,15 @@ class func_brush:CBaseTrigger
|
|||
void
|
||||
func_brush::Trigger(entity act, int state)
|
||||
{
|
||||
/* collision */
|
||||
switch (m_iSolidity) {
|
||||
case 1:
|
||||
SetSolid(SOLID_NOT);
|
||||
break;
|
||||
case 2:
|
||||
SetSolid(SOLID_BSP);
|
||||
break;
|
||||
default:
|
||||
switch (state) {
|
||||
case TRIG_OFF:
|
||||
SetSolid(SOLID_NOT);
|
||||
|
@ -61,12 +72,20 @@ func_brush::Trigger(entity act, int state)
|
|||
SetSolid(SOLID_BSP);
|
||||
break;
|
||||
default:
|
||||
SetSolid(solid == SOLID_BSP ? SOLID_NOT : SOLID_BSP);
|
||||
SetSolid(modelindex != 0 ? SOLID_NOT : SOLID_BSP);
|
||||
}
|
||||
}
|
||||
|
||||
/* toggle appareance */
|
||||
if (m_iSolidity == 0) {
|
||||
if (solid == SOLID_NOT)
|
||||
/* visual */
|
||||
switch (state) {
|
||||
case TRIG_OFF:
|
||||
SetModelindex(0);
|
||||
break;
|
||||
case TRIG_ON:
|
||||
SetModel(m_oldModel);
|
||||
break;
|
||||
default:
|
||||
if (modelindex != 0)
|
||||
SetModelindex(0);
|
||||
else
|
||||
SetModel(m_oldModel);
|
||||
|
@ -100,20 +119,11 @@ func_brush::Respawn(void)
|
|||
SetModel(m_oldModel);
|
||||
SetOrigin(m_oldOrigin);
|
||||
|
||||
switch (m_iSolidity) {
|
||||
case 1:
|
||||
SetSolid(SOLID_NOT);
|
||||
break;
|
||||
case 2:
|
||||
SetSolid(SOLID_BSP);
|
||||
break;
|
||||
default:
|
||||
/* make sure solid and so on are set */
|
||||
if (m_iStartOff) {
|
||||
SetSolid(SOLID_NOT);
|
||||
SetModelindex(0);
|
||||
Trigger(this, TRIG_OFF);
|
||||
} else {
|
||||
SetSolid(SOLID_BSP);
|
||||
}
|
||||
Trigger(this, TRIG_ON);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -121,4 +131,5 @@ void
|
|||
func_brush::func_brush(void)
|
||||
{
|
||||
CBaseTrigger::CBaseTrigger();
|
||||
Respawn();
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue