mirror of
https://github.com/jmarshall23/DoomRTX.git
synced 2026-08-12 08:11:10 +02:00
253 lines
4.4 KiB
C++
253 lines
4.4 KiB
C++
// Weapon_flashlight.cpp
|
|
//
|
|
|
|
#pragma hdrstop
|
|
#include "precompiled.h"
|
|
#include "../Game_local.h"
|
|
|
|
|
|
// blend times
|
|
#define FLASHLIGHT_IDLE_TO_LOWER 4
|
|
#define FLASHLIGHT_IDLE_TO_FIRE 2
|
|
#define FLASHLIGHT_IDLE_TO_RELOAD 4
|
|
#define FLASHLIGHT_RAISE_TO_IDLE 4
|
|
#define FLASHLIGHT_FIRE_TO_IDLE 4
|
|
#define FLASHLIGHT_RELOAD_TO_IDLE 4
|
|
|
|
#define FLASHLIGHT_MIN_SKIN_INTENSITY 0.2
|
|
|
|
/*
|
|
================
|
|
rvmWeaponFlashlight::Init
|
|
================
|
|
*/
|
|
void rvmWeaponFlashlight::Init( idWeapon* weapon )
|
|
{
|
|
rvmWeaponObject::Init( weapon );
|
|
|
|
skin_on = owner->GetKey( "skin_on" );
|
|
skin_on_invis = owner->GetKey( "skin_on_invis" );
|
|
skin_off = owner->GetKey( "skin_off" );
|
|
skin_off_invis = owner->GetKey( "skin_off_invis" );
|
|
|
|
intensity = 1.0;
|
|
|
|
owner->Event_SetLightParm( 3, 1.0 );
|
|
owner->Event_SetShaderParm( 3, 1.0 );
|
|
|
|
on = true;
|
|
|
|
UpdateSkin();
|
|
}
|
|
|
|
/*
|
|
================
|
|
rvmWeaponFlashlight::UpdateLightIntensity
|
|
================
|
|
*/
|
|
void rvmWeaponFlashlight::UpdateLightIntensity( void )
|
|
{
|
|
// TODO this has to interact with scripts somehow
|
|
}
|
|
|
|
/*
|
|
================
|
|
rvmWeaponFlashlight::UpdateSkin
|
|
================
|
|
*/
|
|
void rvmWeaponFlashlight::UpdateSkin( void )
|
|
{
|
|
if( on && ( intensity > FLASHLIGHT_MIN_SKIN_INTENSITY ) )
|
|
{
|
|
if( !owner->Event_IsInvisible() )
|
|
{
|
|
owner->Event_SetSkin( skin_on );
|
|
}
|
|
else
|
|
{
|
|
owner->Event_SetSkin( skin_on_invis );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if( !owner->Event_IsInvisible() )
|
|
{
|
|
owner->Event_SetSkin( skin_off );
|
|
}
|
|
else
|
|
{
|
|
owner->Event_SetSkin( skin_off_invis );
|
|
}
|
|
}
|
|
}
|
|
|
|
/*
|
|
================
|
|
rvmWeaponFlashlight::Raise
|
|
================
|
|
*/
|
|
stateResult_t rvmWeaponFlashlight::Raise( stateParms_t* parms )
|
|
{
|
|
enum RisingState
|
|
{
|
|
RISING_NOTSET = 0,
|
|
RISING_WAIT
|
|
};
|
|
|
|
switch( parms->stage )
|
|
{
|
|
case RISING_NOTSET:
|
|
owner->Event_PlayAnim( ANIMCHANNEL_ALL, "raise", false );
|
|
parms->stage = RISING_WAIT;
|
|
return SRESULT_WAIT;
|
|
|
|
case RISING_WAIT:
|
|
if( owner->Event_AnimDone( ANIMCHANNEL_ALL, FLASHLIGHT_RAISE_TO_IDLE ) )
|
|
{
|
|
return SRESULT_DONE;
|
|
}
|
|
return SRESULT_WAIT;
|
|
}
|
|
|
|
return SRESULT_ERROR;
|
|
}
|
|
|
|
/*
|
|
================
|
|
rvmWeaponFlashlight::Lower
|
|
================
|
|
*/
|
|
stateResult_t rvmWeaponFlashlight::Lower( stateParms_t* parms )
|
|
{
|
|
enum LoweringState
|
|
{
|
|
LOWERING_NOTSET = 0,
|
|
LOWERING_WAIT
|
|
};
|
|
|
|
switch( parms->stage )
|
|
{
|
|
case LOWERING_NOTSET:
|
|
owner->Event_PlayAnim( ANIMCHANNEL_ALL, "putaway", false );
|
|
parms->stage = LOWERING_WAIT;
|
|
return SRESULT_WAIT;
|
|
|
|
case LOWERING_WAIT:
|
|
if( owner->Event_AnimDone( ANIMCHANNEL_ALL, 0 ) )
|
|
{
|
|
SetState( "Holstered" );
|
|
return SRESULT_DONE;
|
|
}
|
|
return SRESULT_WAIT;
|
|
}
|
|
|
|
return SRESULT_ERROR;
|
|
}
|
|
|
|
/*
|
|
================
|
|
rvmWeaponFlashlight::Idle
|
|
================
|
|
*/
|
|
stateResult_t rvmWeaponFlashlight::Idle( stateParms_t* parms )
|
|
{
|
|
enum IdleState
|
|
{
|
|
IDLE_NOTSET = 0,
|
|
IDLE_WAIT
|
|
};
|
|
|
|
switch( parms->stage )
|
|
{
|
|
case IDLE_NOTSET:
|
|
owner->Event_WeaponReady();
|
|
owner->Event_PlayCycle( ANIMCHANNEL_ALL, "idle" );
|
|
parms->stage = IDLE_WAIT;
|
|
return SRESULT_WAIT;
|
|
|
|
case IDLE_WAIT:
|
|
// Do nothing.
|
|
return SRESULT_DONE;
|
|
}
|
|
|
|
return SRESULT_ERROR;
|
|
}
|
|
|
|
/*
|
|
================
|
|
rvmWeaponFlashlight::Fire
|
|
================
|
|
*/
|
|
stateResult_t rvmWeaponFlashlight::Fire( stateParms_t* parms )
|
|
{
|
|
enum FIRE_State
|
|
{
|
|
FIRE_NOTSET = 0,
|
|
FIRE_MELEE,
|
|
FIRE_WAIT
|
|
};
|
|
|
|
switch( parms->stage )
|
|
{
|
|
case FIRE_NOTSET:
|
|
owner->Event_PlayAnim( ANIMCHANNEL_ALL, "fire", false );
|
|
parms->stage = FIRE_MELEE;
|
|
parms->Wait( 0.1f );
|
|
return SRESULT_WAIT;
|
|
|
|
case FIRE_MELEE:
|
|
owner->Event_Melee();
|
|
parms->stage = FIRE_WAIT;
|
|
return SRESULT_WAIT;
|
|
|
|
case FIRE_WAIT:
|
|
if( owner->Event_AnimDone( ANIMCHANNEL_ALL, FLASHLIGHT_FIRE_TO_IDLE ) )
|
|
{
|
|
return SRESULT_DONE;
|
|
}
|
|
return SRESULT_WAIT;
|
|
}
|
|
|
|
return SRESULT_DONE;
|
|
}
|
|
|
|
/*
|
|
================
|
|
rvmWeaponFlashlight::Reload
|
|
================
|
|
*/
|
|
stateResult_t rvmWeaponFlashlight::Reload( stateParms_t* parms )
|
|
{
|
|
enum RELOAD_State
|
|
{
|
|
RELOAD_NOTSET = 0,
|
|
RELOAD_TOGGLEFLASHLIGHT,
|
|
RELOAD_WAIT
|
|
};
|
|
|
|
switch( parms->stage )
|
|
{
|
|
case RELOAD_NOTSET:
|
|
owner->Event_PlayAnim( ANIMCHANNEL_ALL, "reload", false );
|
|
parms->stage = RELOAD_TOGGLEFLASHLIGHT;
|
|
parms->Wait( 0.2f );
|
|
return SRESULT_WAIT;
|
|
|
|
case RELOAD_TOGGLEFLASHLIGHT:
|
|
on = !on;
|
|
UpdateSkin();
|
|
owner->Event_Flashlight( on );
|
|
parms->stage = RELOAD_WAIT;
|
|
return SRESULT_WAIT;
|
|
|
|
case RELOAD_WAIT:
|
|
if( owner->Event_AnimDone( ANIMCHANNEL_ALL, FLASHLIGHT_RELOAD_TO_IDLE ) )
|
|
{
|
|
return SRESULT_DONE;
|
|
}
|
|
return SRESULT_WAIT;
|
|
}
|
|
|
|
return SRESULT_ERROR;
|
|
}
|