void CBaseButton::__MAKE_VHOOK(Precache)() { char *pszSound; // this button should spark in OFF state if (pev->spawnflags & SF_BUTTON_SPARK_IF_OFF) { PRECACHE_SOUND("buttons/spark1.wav"); PRECACHE_SOUND("buttons/spark2.wav"); PRECACHE_SOUND("buttons/spark3.wav"); PRECACHE_SOUND("buttons/spark4.wav"); PRECACHE_SOUND("buttons/spark5.wav"); PRECACHE_SOUND("buttons/spark6.wav"); } // get door button sounds, for doors which require buttons to open if (m_bLockedSound) { pszSound = ButtonSound(int(m_bLockedSound)); PRECACHE_SOUND(pszSound); m_ls.sLockedSound = ALLOC_STRING(pszSound); } if (m_bUnlockedSound) { pszSound = ButtonSound(int(m_bUnlockedSound)); PRECACHE_SOUND(pszSound); m_ls.sUnlockedSound = ALLOC_STRING(pszSound); } // get sentence group names, for doors which are directly 'touched' to open switch (m_bLockedSentence) { case 1: m_ls.sLockedSentence = MAKE_STRING("NA"); break; // access denied case 2: m_ls.sLockedSentence = MAKE_STRING("ND"); break; // security lockout case 3: m_ls.sLockedSentence = MAKE_STRING("NF"); break; // blast door case 4: m_ls.sLockedSentence = MAKE_STRING("NFIRE"); break; // fire door case 5: m_ls.sLockedSentence = MAKE_STRING("NCHEM"); break; // chemical door case 6: m_ls.sLockedSentence = MAKE_STRING("NRAD"); break; // radiation door case 7: m_ls.sLockedSentence = MAKE_STRING("NCON"); break; // gen containment case 8: m_ls.sLockedSentence = MAKE_STRING("NH"); break; // maintenance door case 9: m_ls.sLockedSentence = MAKE_STRING("NG"); break; // broken door default: m_ls.sLockedSentence = 0; break; } switch (m_bUnlockedSentence) { case 1: m_ls.sUnlockedSentence = MAKE_STRING("EA"); break; // access granted case 2: m_ls.sUnlockedSentence = MAKE_STRING("ED"); break; // security door case 3: m_ls.sUnlockedSentence = MAKE_STRING("EF"); break; // blast door case 4: m_ls.sUnlockedSentence = MAKE_STRING("EFIRE"); break; // fire door case 5: m_ls.sUnlockedSentence = MAKE_STRING("ECHEM"); break; // chemical door case 6: m_ls.sUnlockedSentence = MAKE_STRING("ERAD"); break; // radiation door case 7: m_ls.sUnlockedSentence = MAKE_STRING("ECON"); break; // gen containment case 8: m_ls.sUnlockedSentence = MAKE_STRING("EH"); break; // maintenance door default: m_ls.sUnlockedSentence = 0; break; } }
void CBaseButton::Precache(void) { char *pszSound; if (FBitSet(pev->spawnflags, SF_BUTTON_SPARK_IF_OFF)) { PRECACHE_SOUND("buttons/spark1.wav"); PRECACHE_SOUND("buttons/spark2.wav"); PRECACHE_SOUND("buttons/spark3.wav"); PRECACHE_SOUND("buttons/spark4.wav"); PRECACHE_SOUND("buttons/spark5.wav"); PRECACHE_SOUND("buttons/spark6.wav"); } if (m_bLockedSound) { pszSound = ButtonSound(m_bLockedSound); PRECACHE_SOUND(pszSound); m_ls.sLockedSound = ALLOC_STRING(pszSound); } if (m_bUnlockedSound) { pszSound = ButtonSound(m_bUnlockedSound); PRECACHE_SOUND(pszSound); m_ls.sUnlockedSound = ALLOC_STRING(pszSound); } switch (m_bLockedSentence) { case 1: m_ls.sLockedSentence = MAKE_STRING("NA"); break; case 2: m_ls.sLockedSentence = MAKE_STRING("ND"); break; case 3: m_ls.sLockedSentence = MAKE_STRING("NF"); break; case 4: m_ls.sLockedSentence = MAKE_STRING("NFIRE"); break; case 5: m_ls.sLockedSentence = MAKE_STRING("NCHEM"); break; case 6: m_ls.sLockedSentence = MAKE_STRING("NRAD"); break; case 7: m_ls.sLockedSentence = MAKE_STRING("NCON"); break; case 8: m_ls.sLockedSentence = MAKE_STRING("NH"); break; case 9: m_ls.sLockedSentence = MAKE_STRING("NG"); break; default: m_ls.sLockedSentence = 0; break; } switch (m_bUnlockedSentence) { case 1: m_ls.sUnlockedSentence = MAKE_STRING("EA"); break; case 2: m_ls.sUnlockedSentence = MAKE_STRING("ED"); break; case 3: m_ls.sUnlockedSentence = MAKE_STRING("EF"); break; case 4: m_ls.sUnlockedSentence = MAKE_STRING("EFIRE"); break; case 5: m_ls.sUnlockedSentence = MAKE_STRING("ECHEM"); break; case 6: m_ls.sUnlockedSentence = MAKE_STRING("ERAD"); break; case 7: m_ls.sUnlockedSentence = MAKE_STRING("ECON"); break; case 8: m_ls.sUnlockedSentence = MAKE_STRING("EH"); break; default: m_ls.sUnlockedSentence = 0; break; } }
void CBaseDoor::Precache( void ) { const char* pszSound; // set the door's "in-motion" sound pszSound = DoorMoveSound( m_bMoveSnd ); PRECACHE_SOUND( pszSound ); pev->noiseMoving = MAKE_STRING( pszSound ); // set the door's 'reached destination' stop sound pszSound = DoorStopSound( m_bStopSnd ); PRECACHE_SOUND( pszSound ); pev->noiseArrived = MAKE_STRING( pszSound ); // get door button sounds, for doors which are directly 'touched' to open if( m_bLockedSound ) { pszSound = ButtonSound( ( int ) m_bLockedSound ); PRECACHE_SOUND( pszSound ); m_ls.sLockedSound = ALLOC_STRING( pszSound ); } if( m_bUnlockedSound ) { pszSound = ButtonSound( ( int ) m_bUnlockedSound ); PRECACHE_SOUND( pszSound ); m_ls.sUnlockedSound = ALLOC_STRING( pszSound ); } // get sentence group names, for doors which are directly 'touched' to open pszSound = LockedSentence( m_bLockedSentence ); if( pszSound ) m_ls.sLockedSentence = MAKE_STRING( pszSound ); else m_ls.sLockedSentence = iStringNull; pszSound = UnlockedSentence( m_bUnlockedSentence ); if( pszSound ) m_ls.sUnlockedSentence = MAKE_STRING( pszSound ); else m_ls.sUnlockedSentence = iStringNull; }
void CMomentaryRotButton::Spawn( void ) { CBaseToggle::AxisDir( pev ); if ( pev->speed == 0 ) pev->speed = 100; if ( m_flMoveDistance < 0 ) { m_start = pev->angles + pev->movedir * m_flMoveDistance; m_end = pev->angles; m_direction = 1; // This will toggle to -1 on the first use() m_flMoveDistance = -m_flMoveDistance; } else { m_start = pev->angles; m_end = pev->angles + pev->movedir * m_flMoveDistance; m_direction = -1; // This will toggle to +1 on the first use() } if ( pev->spawnflags & SF_MOMENTARY_DOOR ) pev->solid = SOLID_BSP; else pev->solid = SOLID_NOT; pev->movetype = MOVETYPE_PUSH; UTIL_SetOrigin(pev, pev->origin); SET_MODEL(ENT(pev), STRING(pev->model) ); char *pszSound = ButtonSound( m_sounds ); PRECACHE_SOUND(pszSound); pev->noise = ALLOC_STRING(pszSound); m_lastUsed = 0; }
void CRotButton::Spawn( void ) { char *pszSound; //---------------------------------------------------- //determine sounds for buttons //a sound of 0 should not make a sound //---------------------------------------------------- pszSound = ButtonSound( m_sounds ); PRECACHE_SOUND(pszSound); pev->noise = ALLOC_STRING(pszSound); // set the axis of rotation CBaseToggle::AxisDir( pev ); // check for clockwise rotation if ( FBitSet (pev->spawnflags, SF_DOOR_ROTATE_BACKWARDS) ) pev->movedir = pev->movedir * -1; pev->movetype = MOVETYPE_PUSH; if ( pev->spawnflags & SF_ROTBUTTON_NOTSOLID ) pev->solid = SOLID_NOT; else pev->solid = SOLID_BSP; SET_MODEL(ENT(pev), STRING(pev->model)); if (pev->speed == 0) pev->speed = 40; if (m_flWait == 0) m_flWait = 1; if (pev->health > 0) { pev->takedamage = DAMAGE_YES; } m_toggle_state = TS_AT_BOTTOM; m_vecAngle1 = pev->angles; m_vecAngle2 = pev->angles + pev->movedir * m_flMoveDistance; ASSERTSZ(m_vecAngle1 != m_vecAngle2, "rotating button start/end positions are equal"); m_fStayPushed = (m_flWait == -1 ? TRUE : FALSE); m_fRotating = TRUE; // if the button is flagged for USE button activation only, take away it's touch function and add a use function if ( !FBitSet ( pev->spawnflags, SF_BUTTON_TOUCH_ONLY ) ) { SetTouch ( NULL ); SetUse ( &CBaseButton::ButtonUse ); } else // touchable button SetTouch( &CBaseButton::ButtonTouch ); //SetTouch( ButtonTouch ); }
void CBaseButton::Spawn(void) { char *pszSound = ButtonSound(m_sounds); PRECACHE_SOUND(pszSound); pev->noise = ALLOC_STRING(pszSound); Precache(); if (FBitSet(pev->spawnflags, SF_BUTTON_SPARK_IF_OFF)) { SetThink(&CBaseButton::ButtonSpark); pev->nextthink = gpGlobals->time + 0.5; } SetMovedir(pev); pev->movetype = MOVETYPE_PUSH; pev->solid = SOLID_BSP; SET_MODEL(ENT(pev), STRING(pev->model)); if (!pev->speed) pev->speed = 40; if (pev->health > 0) pev->takedamage = DAMAGE_YES; if (!m_flWait) m_flWait = 1; if (!m_flLip) m_flLip = 4; m_toggle_state = TS_AT_BOTTOM; m_vecPosition1 = pev->origin; m_vecPosition2 = m_vecPosition1 + (pev->movedir * (fabs(pev->movedir.x * (pev->size.x - 2)) + fabs(pev->movedir.y * (pev->size.y - 2)) + fabs(pev->movedir.z * (pev->size.z - 2)) - m_flLip)); if (((m_vecPosition2 - m_vecPosition1).Length() < 1) || (pev->spawnflags & SF_BUTTON_DONTMOVE)) m_vecPosition2 = m_vecPosition1; m_fStayPushed = m_flWait == -1 ? TRUE : FALSE; m_fRotating = FALSE; if (FBitSet(pev->spawnflags, SF_BUTTON_TOUCH_ONLY)) { SetTouch(&CBaseButton::ButtonTouch); } else { SetTouch(NULL); SetUse(&CBaseButton::ButtonUse); } }
void CRotButton::Spawn(void) { char *pszSound = ButtonSound(m_sounds); PRECACHE_SOUND(pszSound); pev->noise = ALLOC_STRING(pszSound); CBaseToggle::AxisDir(pev); if (FBitSet(pev->spawnflags, SF_DOOR_ROTATE_BACKWARDS)) pev->movedir = pev->movedir * -1; pev->movetype = MOVETYPE_PUSH; if (pev->spawnflags & SF_ROTBUTTON_NOTSOLID) pev->solid = SOLID_NOT; else pev->solid = SOLID_BSP; SET_MODEL(ENT(pev), STRING(pev->model)); if (!pev->speed) pev->speed = 40; if (!m_flWait) m_flWait = 1; if (pev->health > 0) pev->takedamage = DAMAGE_YES; m_toggle_state = TS_AT_BOTTOM; m_vecAngle1 = pev->angles; m_vecAngle2 = pev->angles + pev->movedir * m_flMoveDistance; m_fStayPushed = m_flWait == -1 ? TRUE : FALSE; m_fRotating = TRUE; if (!FBitSet(pev->spawnflags, SF_BUTTON_TOUCH_ONLY)) { SetTouch(NULL); SetUse(&CBaseButton::ButtonUse); } else SetTouch(&CBaseButton::ButtonTouch); }
void CBaseButton::Spawn() { char *pszSound; //---------------------------------------------------- //determine sounds for buttons //a sound of 0 should not make a sound //---------------------------------------------------- pszSound = ButtonSound(m_sounds); PRECACHE_SOUND(pszSound); pev->noise = ALLOC_STRING(pszSound); Precache(); if(FBitSet(pev->spawnflags, SF_BUTTON_SPARK_IF_OFF)) // this button should spark in OFF state { SetThink(&CBaseButton::ButtonSpark); pev->nextthink = gpGlobals->time + 0.5; // no hurry, make sure everything else spawns } SetMovedir(pev); pev->movetype = MOVETYPE_PUSH; pev->solid = SOLID_BSP; SET_MODEL(ENT(pev), STRING(pev->model)); if(pev->speed == 0) pev->speed = 40; if(pev->health > 0) { pev->takedamage = DAMAGE_YES; } if(m_flWait == 0) m_flWait = 1; if(m_flLip == 0) m_flLip = 4; m_toggle_state = TS_AT_BOTTOM; m_vecPosition1 = pev->origin; // Subtract 2 from size because the engine expands bboxes by 1 in all directions making the size too big m_vecPosition2 = m_vecPosition1 + (pev->movedir * (fabs(pev->movedir.x * (pev->size.x - 2)) + fabs(pev->movedir.y * (pev->size.y - 2)) + fabs(pev->movedir.z * (pev->size.z - 2)) - m_flLip)); // Is this a non-moving button? if(((m_vecPosition2 - m_vecPosition1).Length() < 1) || (pev->spawnflags & SF_BUTTON_DONTMOVE)) m_vecPosition2 = m_vecPosition1; m_fStayPushed = (m_flWait == -1 ? TRUE : FALSE); m_fRotating = FALSE; // if the button is flagged for USE button activation only, take away it's touch function and add a use function if(FBitSet(pev->spawnflags, SF_BUTTON_TOUCH_ONLY)) // touchable button { SetTouch(&CBaseButton::ButtonTouch); } else { SetTouch(NULL); SetUse(&CBaseButton::ButtonUse); } }
void CBaseDoor::Precache( void ) { char *pszSound; // set the door's "in-motion" sound switch (m_bMoveSnd) { case 0: pev->noiseMoving = ALLOC_STRING("common/null.wav"); break; case 1: PRECACHE_SOUND ("doors/doormove1.wav"); pev->noiseMoving = ALLOC_STRING("doors/doormove1.wav"); break; case 2: PRECACHE_SOUND ("doors/doormove2.wav"); pev->noiseMoving = ALLOC_STRING("doors/doormove2.wav"); break; case 3: PRECACHE_SOUND ("doors/doormove3.wav"); pev->noiseMoving = ALLOC_STRING("doors/doormove3.wav"); break; case 4: PRECACHE_SOUND ("doors/doormove4.wav"); pev->noiseMoving = ALLOC_STRING("doors/doormove4.wav"); break; case 5: PRECACHE_SOUND ("doors/doormove5.wav"); pev->noiseMoving = ALLOC_STRING("doors/doormove5.wav"); break; case 6: PRECACHE_SOUND ("doors/doormove6.wav"); pev->noiseMoving = ALLOC_STRING("doors/doormove6.wav"); break; case 7: PRECACHE_SOUND ("doors/doormove7.wav"); pev->noiseMoving = ALLOC_STRING("doors/doormove7.wav"); break; case 8: PRECACHE_SOUND ("doors/doormove8.wav"); pev->noiseMoving = ALLOC_STRING("doors/doormove8.wav"); break; case 9: PRECACHE_SOUND ("doors/doormove9.wav"); pev->noiseMoving = ALLOC_STRING("doors/doormove9.wav"); break; case 10: PRECACHE_SOUND ("doors/doormove10.wav"); pev->noiseMoving = ALLOC_STRING("doors/doormove10.wav"); break; default: pev->noiseMoving = ALLOC_STRING("common/null.wav"); break; } // set the door's 'reached destination' stop sound switch (m_bStopSnd) { case 0: pev->noiseArrived = ALLOC_STRING("common/null.wav"); break; case 1: PRECACHE_SOUND ("doors/doorstop1.wav"); pev->noiseArrived = ALLOC_STRING("doors/doorstop1.wav"); break; case 2: PRECACHE_SOUND ("doors/doorstop2.wav"); pev->noiseArrived = ALLOC_STRING("doors/doorstop2.wav"); break; case 3: PRECACHE_SOUND ("doors/doorstop3.wav"); pev->noiseArrived = ALLOC_STRING("doors/doorstop3.wav"); break; case 4: PRECACHE_SOUND ("doors/doorstop4.wav"); pev->noiseArrived = ALLOC_STRING("doors/doorstop4.wav"); break; case 5: PRECACHE_SOUND ("doors/doorstop5.wav"); pev->noiseArrived = ALLOC_STRING("doors/doorstop5.wav"); break; case 6: PRECACHE_SOUND ("doors/doorstop6.wav"); pev->noiseArrived = ALLOC_STRING("doors/doorstop6.wav"); break; case 7: PRECACHE_SOUND ("doors/doorstop7.wav"); pev->noiseArrived = ALLOC_STRING("doors/doorstop7.wav"); break; case 8: PRECACHE_SOUND ("doors/doorstop8.wav"); pev->noiseArrived = ALLOC_STRING("doors/doorstop8.wav"); break; default: pev->noiseArrived = ALLOC_STRING("common/null.wav"); break; } // get door button sounds, for doors which are directly 'touched' to open if (m_bLockedSound) { pszSound = ButtonSound( (int)m_bLockedSound ); PRECACHE_SOUND(pszSound); m_ls.sLockedSound = ALLOC_STRING(pszSound); } if (m_bUnlockedSound) { pszSound = ButtonSound( (int)m_bUnlockedSound ); PRECACHE_SOUND(pszSound); m_ls.sUnlockedSound = ALLOC_STRING(pszSound); } // get sentence group names, for doors which are directly 'touched' to open switch (m_bLockedSentence) { case 1: m_ls.sLockedSentence = ALLOC_STRING("NA"); break; // access denied case 2: m_ls.sLockedSentence = ALLOC_STRING("ND"); break; // security lockout case 3: m_ls.sLockedSentence = ALLOC_STRING("NF"); break; // blast door case 4: m_ls.sLockedSentence = ALLOC_STRING("NFIRE"); break; // fire door case 5: m_ls.sLockedSentence = ALLOC_STRING("NCHEM"); break; // chemical door case 6: m_ls.sLockedSentence = ALLOC_STRING("NRAD"); break; // radiation door case 7: m_ls.sLockedSentence = ALLOC_STRING("NCON"); break; // gen containment case 8: m_ls.sLockedSentence = ALLOC_STRING("NH"); break; // maintenance door case 9: m_ls.sLockedSentence = ALLOC_STRING("NG"); break; // broken door default: m_ls.sLockedSentence = 0; break; } switch (m_bUnlockedSentence) { case 1: m_ls.sUnlockedSentence = ALLOC_STRING("EA"); break; // access granted case 2: m_ls.sUnlockedSentence = ALLOC_STRING("ED"); break; // security door case 3: m_ls.sUnlockedSentence = ALLOC_STRING("EF"); break; // blast door case 4: m_ls.sUnlockedSentence = ALLOC_STRING("EFIRE"); break; // fire door case 5: m_ls.sUnlockedSentence = ALLOC_STRING("ECHEM"); break; // chemical door case 6: m_ls.sUnlockedSentence = ALLOC_STRING("ERAD"); break; // radiation door case 7: m_ls.sUnlockedSentence = ALLOC_STRING("ECON"); break; // gen containment case 8: m_ls.sUnlockedSentence = ALLOC_STRING("EH"); break; // maintenance door default: m_ls.sUnlockedSentence = 0; break; } }
//-------------------------------------------------------------------------------------------------------------------------------------- int UTFT_Buttons_Rus::checkButtons(OnCheckButtonsFunc func) { if (_URTouch->dataAvailable() == true) { _URTouch->read(); int result = -1; int touch_x = _URTouch->getX(); int touch_y = _URTouch->getY(); word _current_color = _UTFT->getColor(); for (int i=0;i<MAX_BUTTONS;i++) { if (((buttons[i].flags & BUTTON_UNUSED) == 0) and ((buttons[i].flags & BUTTON_DISABLED) == 0) and ((buttons[i].flags & BUTTON_VISIBLE) ) and (result == -1)) { if ((touch_x >= buttons[i].pos_x) and (touch_x <= (buttons[i].pos_x + buttons[i].width)) and (touch_y >= buttons[i].pos_y) and (touch_y <= (buttons[i].pos_y + buttons[i].height))) result = i; } } if (result != -1) { if (!(buttons[result].flags & BUTTON_NO_BORDER)) { _UTFT->setColor(_color_hilite); ButtonSound(); if (buttons[result].flags & BUTTON_BITMAP) { _UTFT->drawRect(buttons[result].pos_x, buttons[result].pos_y, buttons[result].pos_x + buttons[result].width, buttons[result].pos_y + buttons[result].height); } else _UTFT->drawRoundRect(buttons[result].pos_x, buttons[result].pos_y, buttons[result].pos_x+buttons[result].width, buttons[result].pos_y+buttons[result].height); yield(); } if(func) func(result); } if (result != -1) { while (_URTouch->dataAvailable() == true) { yield(); } if (!(buttons[result].flags & BUTTON_NO_BORDER)) { if(buttons[result].flags & BUTTON_SELECTED) _UTFT->setColor(_color_hilite); else _UTFT->setColor(_color_border); if (buttons[result].flags & BUTTON_BITMAP) _UTFT->drawRect(buttons[result].pos_x, buttons[result].pos_y, buttons[result].pos_x+buttons[result].width, buttons[result].pos_y+buttons[result].height); else _UTFT->drawRoundRect(buttons[result].pos_x, buttons[result].pos_y, buttons[result].pos_x+buttons[result].width, buttons[result].pos_y+buttons[result].height); yield(); } } _UTFT->setColor(_current_color); return result; } else return -1; }