ReGameDLL_CS/regamedll/dlls/addons/item_airbox.cpp

139 lines
3.2 KiB
C++
Raw Normal View History

2017-10-12 22:31:57 +03:00
/*
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at
* your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#include "precompiled.h"
LINK_ENTITY_TO_CLASS(item_airbox, CItemAirBox, CCSItemAirBox);
void CItemAirBox::Spawn()
{
CArmoury::Spawn();
pev->movetype = MOVETYPE_NOCLIP;
2017-10-13 03:04:37 +03:00
if (!m_iszSpriteName.IsNull())
2017-10-12 22:31:57 +03:00
{
2017-10-14 09:20:23 +03:00
m_hSprite.Remove();
m_hSprite = CSprite::SpriteCreate(m_iszSpriteName, pev->origin, FALSE);
m_hSprite->SetTransparency(m_rendermode, m_rendercolor.x, m_rendercolor.y, m_rendercolor.z, m_renderamt, m_renderfx);
m_hSprite->SetScale(m_scale);
m_hSprite->SetAttachment(edict(), pev->body);
m_hSprite->pev->spawnflags |= SF_SPRITE_STARTON;
m_hSprite->pev->framerate = m_frameRate;
m_hSprite->TurnOn();
2017-10-12 22:31:57 +03:00
}
2017-10-14 09:20:23 +03:00
if (m_flyup > 0 && m_delay > 0.01f)
2017-10-12 22:31:57 +03:00
{
SetThink(&CItemAirBox::MoveUp);
pev->nextthink = gpGlobals->time + 1.0f;
}
}
2017-10-14 09:20:23 +03:00
void CItemAirBox::OnDestroy()
{
m_hSprite.Remove();
}
2017-10-12 22:31:57 +03:00
void CItemAirBox::Touch(CBaseEntity *pOther)
{
CArmoury::Touch(pOther);
// airbox was picked up, so sprite to turn off
if ((pev->effects & EF_NODRAW) == EF_NODRAW) {
2017-10-14 09:20:23 +03:00
m_hSprite->TurnOff();
2017-10-12 22:31:57 +03:00
}
}
void CItemAirBox::Restart()
{
CArmoury::Restart();
UTIL_SetOrigin(pev, pev->oldorigin);
}
void CItemAirBox::Precache()
{
CArmoury::Precache();
2017-10-13 03:04:37 +03:00
if (!m_iszSpriteName.IsNull()) {
2017-10-12 22:54:10 +03:00
PRECACHE_MODEL(m_iszSpriteName);
2017-10-12 22:31:57 +03:00
}
}
void CItemAirBox::KeyValue(KeyValueData *pkvd)
{
if (FStrEq(pkvd->szKeyName, "flyup"))
{
m_flyup = Q_atof(pkvd->szValue);
pkvd->fHandled = TRUE;
}
else if (FStrEq(pkvd->szKeyName, "delay"))
{
m_delay = Q_atof(pkvd->szValue);
pkvd->fHandled = TRUE;
}
else if (FStrEq(pkvd->szKeyName, "sprite_model"))
{
m_iszSpriteName = ALLOC_STRING(pkvd->szValue);
pkvd->fHandled = TRUE;
}
else if (FStrEq(pkvd->szKeyName, "sprite_renderfx"))
{
m_renderfx = Q_atoi(pkvd->szValue);
pkvd->fHandled = TRUE;
}
else if (FStrEq(pkvd->szKeyName, "sprite_rendermode"))
{
m_rendermode = Q_atoi(pkvd->szValue);
pkvd->fHandled = TRUE;
}
else if (FStrEq(pkvd->szKeyName, "sprite_renderamt"))
{
m_renderamt = Q_atof(pkvd->szValue);
pkvd->fHandled = TRUE;
}
else if (FStrEq(pkvd->szKeyName, "sprite_rendercolor"))
{
UTIL_StringToVector(m_rendercolor, pkvd->szValue, ' ');
pkvd->fHandled = TRUE;
}
else if (FStrEq(pkvd->szKeyName, "sprite_scale"))
{
m_scale = Q_atof(pkvd->szValue);
pkvd->fHandled = TRUE;
}
else if (FStrEq(pkvd->szKeyName, "sprite_framerate"))
{
m_frameRate = Q_atof(pkvd->szValue);
pkvd->fHandled = TRUE;
}
else
{
CArmoury::KeyValue(pkvd);
}
}
void CItemAirBox::MoveUp()
{
pev->velocity.z = m_flyup;
m_flyup = -m_flyup;
pev->nextthink = gpGlobals->time + m_delay;
}