2013-12-03 07:31:46 +04:00
|
|
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
|
|
|
//
|
|
|
|
// Purpose:
|
|
|
|
//
|
|
|
|
// $NoKeywords: $
|
|
|
|
//=============================================================================//
|
|
|
|
|
|
|
|
#ifndef BASEFLEX_H
|
|
|
|
#define BASEFLEX_H
|
|
|
|
#ifdef _WIN32
|
|
|
|
#pragma once
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#include "BaseAnimatingOverlay.h"
|
|
|
|
#include "utlvector.h"
|
|
|
|
#include "utlrbtree.h"
|
|
|
|
#include "sceneentity_shared.h"
|
|
|
|
|
|
|
|
struct flexsettinghdr_t;
|
|
|
|
struct flexsetting_t;
|
2021-03-08 11:11:13 +03:00
|
|
|
#ifndef NEW_RESPONSE_SYSTEM
|
2013-12-03 07:31:46 +04:00
|
|
|
class AI_Response;
|
2021-03-08 11:11:13 +03:00
|
|
|
#endif
|
2013-12-03 07:31:46 +04:00
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// Purpose: A .vfe referenced by a scene during .vcd playback
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class CFlexSceneFile
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
enum
|
|
|
|
{
|
|
|
|
MAX_FLEX_FILENAME = 128,
|
|
|
|
};
|
|
|
|
|
|
|
|
char filename[ MAX_FLEX_FILENAME ];
|
|
|
|
void *buffer;
|
|
|
|
};
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// Purpose: Animated characters who have vertex flex capability (e.g., facial expressions)
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
class CBaseFlex : public CBaseAnimatingOverlay
|
|
|
|
{
|
|
|
|
DECLARE_CLASS( CBaseFlex, CBaseAnimatingOverlay );
|
|
|
|
public:
|
|
|
|
DECLARE_SERVERCLASS();
|
|
|
|
DECLARE_DATADESC();
|
|
|
|
DECLARE_PREDICTABLE();
|
2020-05-04 09:25:15 +03:00
|
|
|
// script description
|
|
|
|
DECLARE_ENT_SCRIPTDESC();
|
2013-12-03 07:31:46 +04:00
|
|
|
|
|
|
|
// Construction
|
|
|
|
CBaseFlex( void );
|
|
|
|
~CBaseFlex( void );
|
|
|
|
|
|
|
|
virtual void SetModel( const char *szModelName );
|
|
|
|
|
|
|
|
void Blink( );
|
|
|
|
|
|
|
|
virtual void SetViewtarget( const Vector &viewtarget );
|
|
|
|
const Vector &GetViewtarget( void ) const;
|
|
|
|
|
|
|
|
void SetFlexWeight( char *szName, float value );
|
|
|
|
void SetFlexWeight( LocalFlexController_t index, float value );
|
|
|
|
float GetFlexWeight( char *szName );
|
|
|
|
float GetFlexWeight( LocalFlexController_t index );
|
|
|
|
|
|
|
|
// Look up flex controller index by global name
|
|
|
|
LocalFlexController_t FindFlexController( const char *szName );
|
|
|
|
void EnsureTranslations( const flexsettinghdr_t *pSettinghdr );
|
|
|
|
|
|
|
|
// Keep track of what scenes are being played
|
|
|
|
void StartChoreoScene( CChoreoScene *scene );
|
|
|
|
void RemoveChoreoScene( CChoreoScene *scene, bool canceled = false );
|
|
|
|
|
|
|
|
// Start the specifics of an scene event
|
Mapbase v3.0
- Overhauled matcher system and added expanded wildcard support, meaning "text", "te?t", "blah_test", etc. are now supported instead of only trailing *
- Added support for regular expression matching
- Added the missing matrixinvert.h file, which prevented programmers from compiling vbsp
- Fixed env_global_light brightness
- Added info_player_view_proxy, an entity which mimics a player's view (created for script_intro)
- New UnZoomWithRate and SetZoomRate inputs on env_zoom
- New "Don't change target's angles" flag on logic_measure_movement
- Fixed logic_measure_movement not using ignore origin flags correctly
- Fixed filter_damage_mod secondary filter not recognizing mode correctly
- Fixed DisableGeigerCounter causing NPCs to ignore player, and possibly fixed other adverse effects in similar code
- Added SetEntityName input for setting an entity's targetname
- Added "SetTarget" support to point_posecontroller
- Added "sk_alyx_health" convar for adjustable npc_alyx health, restored/fixed "sk_barney_health" for adjustable npc_barney health
- Added ignore flags and several direction-related inputs to math_vector
- Added pose parameter stuff to logic_modelinfo
- Fixed ChangeWeapon not changing during combat
- Fixed holster/unholster on NPCs without holster/unholster animations
- Fixed func_tank and other "player in the way" code ignoring notarget
- Added SetPoseParameter input to animating entities
- Introduced an experimental chapter system which allows for custom chapter title/restriction management
- Added SetChapterTitle input to worldspawn for dynamic title changing
- Fixed func_tankairboatgun damage credit, added ability to use its damage keyvalues
- Fixed mapbase_rpc_enabled not actually affecting RPC
- Moved some newly found Combine soldier grenade code to ai_grenade for other grenade users
- Fixed some problems with the new shared activities
- Restored an old Mapbase entity as "prop_interactable", an entity which contains all of the functionality of a func_button/func_door in a prop entity
- Added env_microphone pitch scale for scaling the pitch of transmitted sounds
- Added experimental, long-overdue code for scenes to be able to access !target#'s and other scene-related names through AI_INPUT
- Added "mat_specular_disable_on_missing", which "disables" specular reflections when the cubemap texture is missing
- Fixed $envmapmasktransform and $bumptransform on VertexLitGeneric and related shaders
- Areaportal leaks now stop compilation in leaktest
- Replaced "-nodefaultcubemap" with "-defaultcubemap" as the shader changes allow maps to compile without default cubemaps by default with little effect
2020-02-05 22:08:49 +03:00
|
|
|
#ifdef MAPBASE
|
|
|
|
virtual bool StartSceneEvent( CSceneEventInfo *info, CChoreoScene *scene, CChoreoEvent *event, CChoreoActor *actor, CBaseEntity *pTarget, CSceneEntity *pSceneEnt = NULL );
|
|
|
|
#else
|
2013-12-03 07:31:46 +04:00
|
|
|
virtual bool StartSceneEvent( CSceneEventInfo *info, CChoreoScene *scene, CChoreoEvent *event, CChoreoActor *actor, CBaseEntity *pTarget );
|
Mapbase v3.0
- Overhauled matcher system and added expanded wildcard support, meaning "text", "te?t", "blah_test", etc. are now supported instead of only trailing *
- Added support for regular expression matching
- Added the missing matrixinvert.h file, which prevented programmers from compiling vbsp
- Fixed env_global_light brightness
- Added info_player_view_proxy, an entity which mimics a player's view (created for script_intro)
- New UnZoomWithRate and SetZoomRate inputs on env_zoom
- New "Don't change target's angles" flag on logic_measure_movement
- Fixed logic_measure_movement not using ignore origin flags correctly
- Fixed filter_damage_mod secondary filter not recognizing mode correctly
- Fixed DisableGeigerCounter causing NPCs to ignore player, and possibly fixed other adverse effects in similar code
- Added SetEntityName input for setting an entity's targetname
- Added "SetTarget" support to point_posecontroller
- Added "sk_alyx_health" convar for adjustable npc_alyx health, restored/fixed "sk_barney_health" for adjustable npc_barney health
- Added ignore flags and several direction-related inputs to math_vector
- Added pose parameter stuff to logic_modelinfo
- Fixed ChangeWeapon not changing during combat
- Fixed holster/unholster on NPCs without holster/unholster animations
- Fixed func_tank and other "player in the way" code ignoring notarget
- Added SetPoseParameter input to animating entities
- Introduced an experimental chapter system which allows for custom chapter title/restriction management
- Added SetChapterTitle input to worldspawn for dynamic title changing
- Fixed func_tankairboatgun damage credit, added ability to use its damage keyvalues
- Fixed mapbase_rpc_enabled not actually affecting RPC
- Moved some newly found Combine soldier grenade code to ai_grenade for other grenade users
- Fixed some problems with the new shared activities
- Restored an old Mapbase entity as "prop_interactable", an entity which contains all of the functionality of a func_button/func_door in a prop entity
- Added env_microphone pitch scale for scaling the pitch of transmitted sounds
- Added experimental, long-overdue code for scenes to be able to access !target#'s and other scene-related names through AI_INPUT
- Added "mat_specular_disable_on_missing", which "disables" specular reflections when the cubemap texture is missing
- Fixed $envmapmasktransform and $bumptransform on VertexLitGeneric and related shaders
- Areaportal leaks now stop compilation in leaktest
- Replaced "-nodefaultcubemap" with "-defaultcubemap" as the shader changes allow maps to compile without default cubemaps by default with little effect
2020-02-05 22:08:49 +03:00
|
|
|
#endif
|
2013-12-03 07:31:46 +04:00
|
|
|
|
|
|
|
// Manipulation of events for the object
|
|
|
|
// Should be called by think function to process all scene events
|
|
|
|
// The default implementation resets m_flexWeight array and calls
|
|
|
|
// AddSceneEvents
|
|
|
|
virtual void ProcessSceneEvents( void );
|
|
|
|
|
|
|
|
// Assumes m_flexWeight array has been set up, this adds the actual currently playing
|
|
|
|
// expressions to the flex weights and adds other scene events as needed
|
|
|
|
virtual bool ProcessSceneEvent( CSceneEventInfo *info, CChoreoScene *scene, CChoreoEvent *event );
|
|
|
|
|
|
|
|
// Remove all playing events
|
|
|
|
void ClearSceneEvents( CChoreoScene *scene, bool canceled );
|
|
|
|
|
|
|
|
// Stop specifics of event
|
|
|
|
virtual bool ClearSceneEvent( CSceneEventInfo *info, bool fastKill, bool canceled );
|
|
|
|
|
|
|
|
// Add the event to the queue for this actor
|
Mapbase v3.0
- Overhauled matcher system and added expanded wildcard support, meaning "text", "te?t", "blah_test", etc. are now supported instead of only trailing *
- Added support for regular expression matching
- Added the missing matrixinvert.h file, which prevented programmers from compiling vbsp
- Fixed env_global_light brightness
- Added info_player_view_proxy, an entity which mimics a player's view (created for script_intro)
- New UnZoomWithRate and SetZoomRate inputs on env_zoom
- New "Don't change target's angles" flag on logic_measure_movement
- Fixed logic_measure_movement not using ignore origin flags correctly
- Fixed filter_damage_mod secondary filter not recognizing mode correctly
- Fixed DisableGeigerCounter causing NPCs to ignore player, and possibly fixed other adverse effects in similar code
- Added SetEntityName input for setting an entity's targetname
- Added "SetTarget" support to point_posecontroller
- Added "sk_alyx_health" convar for adjustable npc_alyx health, restored/fixed "sk_barney_health" for adjustable npc_barney health
- Added ignore flags and several direction-related inputs to math_vector
- Added pose parameter stuff to logic_modelinfo
- Fixed ChangeWeapon not changing during combat
- Fixed holster/unholster on NPCs without holster/unholster animations
- Fixed func_tank and other "player in the way" code ignoring notarget
- Added SetPoseParameter input to animating entities
- Introduced an experimental chapter system which allows for custom chapter title/restriction management
- Added SetChapterTitle input to worldspawn for dynamic title changing
- Fixed func_tankairboatgun damage credit, added ability to use its damage keyvalues
- Fixed mapbase_rpc_enabled not actually affecting RPC
- Moved some newly found Combine soldier grenade code to ai_grenade for other grenade users
- Fixed some problems with the new shared activities
- Restored an old Mapbase entity as "prop_interactable", an entity which contains all of the functionality of a func_button/func_door in a prop entity
- Added env_microphone pitch scale for scaling the pitch of transmitted sounds
- Added experimental, long-overdue code for scenes to be able to access !target#'s and other scene-related names through AI_INPUT
- Added "mat_specular_disable_on_missing", which "disables" specular reflections when the cubemap texture is missing
- Fixed $envmapmasktransform and $bumptransform on VertexLitGeneric and related shaders
- Areaportal leaks now stop compilation in leaktest
- Replaced "-nodefaultcubemap" with "-defaultcubemap" as the shader changes allow maps to compile without default cubemaps by default with little effect
2020-02-05 22:08:49 +03:00
|
|
|
#ifdef MAPBASE
|
|
|
|
void AddSceneEvent( CChoreoScene *scene, CChoreoEvent *event, CBaseEntity *pTarget = NULL, CSceneEntity *pSceneEnt = NULL );
|
|
|
|
#else
|
2013-12-03 07:31:46 +04:00
|
|
|
void AddSceneEvent( CChoreoScene *scene, CChoreoEvent *event, CBaseEntity *pTarget = NULL );
|
Mapbase v3.0
- Overhauled matcher system and added expanded wildcard support, meaning "text", "te?t", "blah_test", etc. are now supported instead of only trailing *
- Added support for regular expression matching
- Added the missing matrixinvert.h file, which prevented programmers from compiling vbsp
- Fixed env_global_light brightness
- Added info_player_view_proxy, an entity which mimics a player's view (created for script_intro)
- New UnZoomWithRate and SetZoomRate inputs on env_zoom
- New "Don't change target's angles" flag on logic_measure_movement
- Fixed logic_measure_movement not using ignore origin flags correctly
- Fixed filter_damage_mod secondary filter not recognizing mode correctly
- Fixed DisableGeigerCounter causing NPCs to ignore player, and possibly fixed other adverse effects in similar code
- Added SetEntityName input for setting an entity's targetname
- Added "SetTarget" support to point_posecontroller
- Added "sk_alyx_health" convar for adjustable npc_alyx health, restored/fixed "sk_barney_health" for adjustable npc_barney health
- Added ignore flags and several direction-related inputs to math_vector
- Added pose parameter stuff to logic_modelinfo
- Fixed ChangeWeapon not changing during combat
- Fixed holster/unholster on NPCs without holster/unholster animations
- Fixed func_tank and other "player in the way" code ignoring notarget
- Added SetPoseParameter input to animating entities
- Introduced an experimental chapter system which allows for custom chapter title/restriction management
- Added SetChapterTitle input to worldspawn for dynamic title changing
- Fixed func_tankairboatgun damage credit, added ability to use its damage keyvalues
- Fixed mapbase_rpc_enabled not actually affecting RPC
- Moved some newly found Combine soldier grenade code to ai_grenade for other grenade users
- Fixed some problems with the new shared activities
- Restored an old Mapbase entity as "prop_interactable", an entity which contains all of the functionality of a func_button/func_door in a prop entity
- Added env_microphone pitch scale for scaling the pitch of transmitted sounds
- Added experimental, long-overdue code for scenes to be able to access !target#'s and other scene-related names through AI_INPUT
- Added "mat_specular_disable_on_missing", which "disables" specular reflections when the cubemap texture is missing
- Fixed $envmapmasktransform and $bumptransform on VertexLitGeneric and related shaders
- Areaportal leaks now stop compilation in leaktest
- Replaced "-nodefaultcubemap" with "-defaultcubemap" as the shader changes allow maps to compile without default cubemaps by default with little effect
2020-02-05 22:08:49 +03:00
|
|
|
#endif
|
2013-12-03 07:31:46 +04:00
|
|
|
|
|
|
|
// Remove the event from the queue for this actor
|
|
|
|
void RemoveSceneEvent( CChoreoScene *scene, CChoreoEvent *event, bool fastKill );
|
|
|
|
|
|
|
|
// Checks to see if the event should be considered "completed"
|
|
|
|
bool CheckSceneEvent( float currenttime, CChoreoScene *scene, CChoreoEvent *event );
|
|
|
|
|
|
|
|
// Checks to see if a event should be considered "completed"
|
|
|
|
virtual bool CheckSceneEventCompletion( CSceneEventInfo *info, float currenttime, CChoreoScene *scene, CChoreoEvent *event );
|
|
|
|
|
|
|
|
// Finds the layer priority of the current scene
|
|
|
|
int GetScenePriority( CChoreoScene *scene );
|
|
|
|
|
|
|
|
// Returns true if the actor is not currently in a scene OR if the actor
|
|
|
|
// is in a scene, but a PERMIT_RESPONSES event is active and the permit time
|
|
|
|
// period has enough time remaining to handle the response in full.
|
|
|
|
bool PermitResponse( float response_length );
|
|
|
|
|
|
|
|
// Set response end time (0 to clear response blocking)
|
|
|
|
void SetPermitResponse( float endtime );
|
|
|
|
|
|
|
|
void SentenceStop( void ) { EmitSound( "AI_BaseNPC.SentenceStop" ); }
|
|
|
|
|
|
|
|
virtual float PlayScene( const char *pszScene, float flDelay = 0.0f, AI_Response *response = NULL, IRecipientFilter *filter = NULL );
|
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 07:20:02 +03:00
|
|
|
#ifdef MAPBASE
|
|
|
|
virtual float PlayAutoGeneratedSoundScene( const char *soundname, float flDelay = 0.0f, AI_Response *response = NULL, IRecipientFilter *filter = NULL );
|
|
|
|
#else
|
2013-12-03 07:31:46 +04:00
|
|
|
virtual float PlayAutoGeneratedSoundScene( const char *soundname );
|
Mapbase v2.0; bulk commit
- Added custom map compile tools (vbsp, vvis, vrad)
- Changed blink fix (shouldn't change anything in-game)
- Added auto-completion to ent_create, npc_create, and the main set of "npc_" debug commands
- Added ent_create_aimed, an ent_create equivalent of npc_create_aimed
- Made hunters start using the "vs. player" melee animation against smaller NPCs that look weird with the "stab" attack
- Added "explosion_sparks" convar, which fixes broken code for giving explosions sparks (disabled by default because of how different it looks)
- Made interaction code capable of being dispatched on any entity, not just combat characters
- Added npc_barnacle_ignite convar, which lets barnacles be ignited by flares
- Fixed certain NPCs getting out of the way for the player when they hate them
- Fixed auto-generated "speak" scene responses not using parameters that work on real VCDs
- Made "stop_on_nonidle" capable of being used in any mod, not just HL2 episodic mods
- Selectable color for ragdoll boogie/point_ragdollboogie
- Fixed PickupWeaponInstant not firing weapon pickup outputs
- Introduced inputs and keyvalues for "lerping" to math_counter_advanced
- Fixed ClearConsole on logic_console
- logic_convar should now detect client convars correctly
- New NormalizeAngles input on math_vector
- logic_modelinfo LookupActivity input
- math_generate fixed and expanded to be more like math_counter
- Added a WIP game logging system for playtesting maps
- Introduced logic_playerinfo, an entity that can read a player's name or ID
- Fixed some new filters not working with filter_multi
- Added radius pickup spawnflag to func_physbox
- Added "Preserve name" spawnflag to weapons
- Added cc_achievement_debug message for when an achievement doesn't exist
- Made npc_combine_s not speak while in logic_choreographed_scenes
- Fixed zombie torsos/legs/headcrabs not being serverside when zombie is forced to server ragdoll
- Expanded and cleaned up npc_zombie_custom
- Fixed func_commandredirects not cleaning up correctly and sometimes crashing the game
- Allowed player squad commands to go through +USE-held objects
- Added a bunch of I/O/KV to trigger_waterydeath for better configuration
- Changed save comment system to use the chapter title from world properties, and the ability to suppress the title popup that normally results from it
- Adjusted game_convar_mod for MP planning
- Removed the func_precipitation custom particle/splash code for now, as it was causing problems
- Fixed env_global_light not accepting lightcolor
- Added "Additional Buttons" to player_speedmod
- Added save comment to RPC
- Added env_projectedtexture attenuation
- Added scripted_sequence OnPreIdleSequence
- Added OnCrab to zombies
- Added skill_changed game event (may need further testing)
- Added a fix for viewmodels flipping under extreme FOV values
- Added code that allows mappers to change the skin on shotgunners without it usually flipping back randomly
- Fixed a very, very, very major shader performance issue
- New SetAbsOrigin/Angles inputs on all entities, analogous to SetLocalOrigin/Angles
- Code improvements for I/O involving angles
- logic_entity_position improvements/fixes, including a new OutAngles output that outputs the angles on position calls
- Alternate collision/player avoidance spawnflag obsoletion enforcement disabled
- Enable/DisableHazardLights inputs on the EP2 jalopy, equivalent to the keyvalue
- Miscellaneous shader formatting adjustments and fixes
- Fixed AlwaysDrawOff on env_projectedtexture not being a valid input
2019-12-14 07:20:02 +03:00
|
|
|
#endif
|
2013-12-03 07:31:46 +04:00
|
|
|
|
2020-05-04 09:25:15 +03:00
|
|
|
// Returns the script instance of the scene entity associated with our oldest ("top level") scene event
|
|
|
|
virtual HSCRIPT ScriptGetOldestScene( void );
|
|
|
|
virtual HSCRIPT ScriptGetSceneByIndex( int index );
|
|
|
|
|
2013-12-03 07:31:46 +04:00
|
|
|
virtual int GetSpecialDSP( void ) { return 0; }
|
|
|
|
|
2020-11-26 05:26:55 +03:00
|
|
|
#ifdef MAPBASE
|
|
|
|
virtual bool GetGameTextSpeechParams( hudtextparms_t ¶ms );
|
|
|
|
#endif
|
|
|
|
|
2013-12-03 07:31:46 +04:00
|
|
|
protected:
|
|
|
|
// For handling .vfe files
|
|
|
|
// Search list, or add if not in list
|
|
|
|
const void *FindSceneFile( const char *filename );
|
|
|
|
|
|
|
|
// Find setting by name
|
|
|
|
const flexsetting_t *FindNamedSetting( const flexsettinghdr_t *pSettinghdr, const char *expr );
|
|
|
|
|
|
|
|
// Called at the lowest level to actually apply an expression
|
|
|
|
void AddFlexSetting( const char *expr, float scale, const flexsettinghdr_t *pSettinghdr, bool newexpression );
|
|
|
|
|
|
|
|
// Called at the lowest level to actually apply a flex animation
|
|
|
|
void AddFlexAnimation( CSceneEventInfo *info );
|
|
|
|
|
|
|
|
bool HasSceneEvents() const;
|
|
|
|
bool IsRunningSceneMoveToEvent();
|
|
|
|
|
|
|
|
LocalFlexController_t FlexControllerLocalToGlobal( const flexsettinghdr_t *pSettinghdr, int key );
|
|
|
|
|
|
|
|
private:
|
|
|
|
// Starting various expression types
|
|
|
|
|
|
|
|
bool RequestStartSequenceSceneEvent( CSceneEventInfo *info, CChoreoScene *scene, CChoreoEvent *event, CChoreoActor *actor, CBaseEntity *pTarget );
|
|
|
|
bool RequestStartGestureSceneEvent( CSceneEventInfo *info, CChoreoScene *scene, CChoreoEvent *event, CChoreoActor *actor, CBaseEntity *pTarget );
|
|
|
|
|
|
|
|
bool HandleStartSequenceSceneEvent( CSceneEventInfo *info, CChoreoScene *scene, CChoreoEvent *event, CChoreoActor *actor );
|
|
|
|
bool HandleStartGestureSceneEvent( CSceneEventInfo *info, CChoreoScene *scene, CChoreoEvent *event, CChoreoActor *actor );
|
|
|
|
bool StartFacingSceneEvent( CSceneEventInfo *info, CChoreoScene *scene, CChoreoEvent *event, CChoreoActor *actor, CBaseEntity *pTarget );
|
|
|
|
bool StartMoveToSceneEvent( CSceneEventInfo *info, CChoreoScene *scene, CChoreoEvent *event, CChoreoActor *actor, CBaseEntity *pTarget );
|
|
|
|
|
|
|
|
// Processing various expression types
|
|
|
|
bool ProcessFlexAnimationSceneEvent( CSceneEventInfo *info, CChoreoScene *scene, CChoreoEvent *event );
|
|
|
|
bool ProcessFlexSettingSceneEvent( CSceneEventInfo *info, CChoreoScene *scene, CChoreoEvent *event );
|
|
|
|
bool ProcessSequenceSceneEvent( CSceneEventInfo *info, CChoreoScene *scene, CChoreoEvent *event );
|
|
|
|
bool ProcessGestureSceneEvent( CSceneEventInfo *info, CChoreoScene *scene, CChoreoEvent *event );
|
|
|
|
bool ProcessFacingSceneEvent( CSceneEventInfo *info, CChoreoScene *scene, CChoreoEvent *event );
|
|
|
|
bool ProcessMoveToSceneEvent( CSceneEventInfo *info, CChoreoScene *scene, CChoreoEvent *event );
|
|
|
|
bool ProcessLookAtSceneEvent( CSceneEventInfo *info, CChoreoScene *scene, CChoreoEvent *event );
|
|
|
|
|
|
|
|
// Set playing the scene sequence
|
|
|
|
public:
|
|
|
|
bool EnterSceneSequence( CChoreoScene *scene, CChoreoEvent *event, bool bRestart = false );
|
|
|
|
private:
|
|
|
|
bool ExitSceneSequence( void );
|
|
|
|
|
|
|
|
private:
|
|
|
|
CNetworkArray( float, m_flexWeight, MAXSTUDIOFLEXCTRL ); // indexed by model local flexcontroller
|
|
|
|
|
|
|
|
// Vector from actor to eye target
|
|
|
|
CNetworkVector( m_viewtarget );
|
|
|
|
|
|
|
|
// Blink state
|
|
|
|
CNetworkVar( int, m_blinktoggle );
|
|
|
|
|
|
|
|
// Array of active SceneEvents, in order oldest to newest
|
|
|
|
CUtlVector < CSceneEventInfo > m_SceneEvents;
|
|
|
|
|
|
|
|
// Mapping for each loaded scene file used by this actor
|
|
|
|
struct FS_LocalToGlobal_t
|
|
|
|
{
|
|
|
|
explicit FS_LocalToGlobal_t() :
|
|
|
|
m_Key( 0 ),
|
|
|
|
m_nCount( 0 ),
|
|
|
|
m_Mapping( 0 )
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
explicit FS_LocalToGlobal_t( const flexsettinghdr_t *key ) :
|
|
|
|
m_Key( key ),
|
|
|
|
m_nCount( 0 ),
|
|
|
|
m_Mapping( 0 )
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetCount( int count )
|
|
|
|
{
|
|
|
|
Assert( !m_Mapping );
|
|
|
|
Assert( count > 0 );
|
|
|
|
m_nCount = count;
|
|
|
|
m_Mapping = new LocalFlexController_t[ m_nCount ];
|
|
|
|
Q_memset( m_Mapping, 0, m_nCount * sizeof( int ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
FS_LocalToGlobal_t( const FS_LocalToGlobal_t& src )
|
|
|
|
{
|
|
|
|
m_Key = src.m_Key;
|
|
|
|
delete m_Mapping;
|
|
|
|
m_Mapping = new LocalFlexController_t[ src.m_nCount ];
|
|
|
|
Q_memcpy( m_Mapping, src.m_Mapping, src.m_nCount * sizeof( int ) );
|
|
|
|
|
|
|
|
m_nCount = src.m_nCount;
|
|
|
|
}
|
|
|
|
|
|
|
|
~FS_LocalToGlobal_t()
|
|
|
|
{
|
|
|
|
delete m_Mapping;
|
|
|
|
m_nCount = 0;
|
|
|
|
m_Mapping = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
const flexsettinghdr_t *m_Key;
|
|
|
|
int m_nCount;
|
|
|
|
LocalFlexController_t *m_Mapping;
|
|
|
|
};
|
|
|
|
|
|
|
|
static bool FlexSettingLessFunc( const FS_LocalToGlobal_t& lhs, const FS_LocalToGlobal_t& rhs );
|
|
|
|
|
|
|
|
CUtlRBTree< FS_LocalToGlobal_t, unsigned short > m_LocalToGlobal;
|
|
|
|
|
|
|
|
// The NPC is in a scene, but another .vcd (such as a short wave to say in response to the player doing something )
|
|
|
|
// can be layered on top of this actor (assuming duration matches, etc.
|
|
|
|
float m_flAllowResponsesEndTime;
|
|
|
|
|
|
|
|
// List of actively playing scenes
|
|
|
|
CUtlVector < CChoreoScene * > m_ActiveChoreoScenes;
|
|
|
|
bool m_bUpdateLayerPriorities;
|
|
|
|
|
|
|
|
public:
|
|
|
|
bool IsSuppressedFlexAnimation( CSceneEventInfo *info );
|
|
|
|
|
|
|
|
private:
|
|
|
|
// last time a foreground flex animation was played
|
|
|
|
float m_flLastFlexAnimationTime;
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
void DoBodyLean( void );
|
|
|
|
|
|
|
|
virtual void Teleport( const Vector *newPosition, const QAngle *newAngles, const Vector *newVelocity );
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef HL2_DLL
|
|
|
|
Vector m_vecPrevOrigin;
|
|
|
|
Vector m_vecPrevVelocity;
|
|
|
|
CNetworkVector( m_vecLean );
|
|
|
|
CNetworkVector( m_vecShift );
|
|
|
|
#endif
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// For toggling blinking
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
inline void CBaseFlex::Blink()
|
|
|
|
{
|
|
|
|
m_blinktoggle = !m_blinktoggle;
|
|
|
|
}
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// Do we have active expressions?
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
inline bool CBaseFlex::HasSceneEvents() const
|
|
|
|
{
|
|
|
|
return m_SceneEvents.Count() != 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// Other inlines
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
inline const Vector &CBaseFlex::GetViewtarget( ) const
|
|
|
|
{
|
|
|
|
return m_viewtarget.Get(); // bah
|
|
|
|
}
|
|
|
|
|
|
|
|
inline void CBaseFlex::SetFlexWeight( char *szName, float value )
|
|
|
|
{
|
|
|
|
SetFlexWeight( FindFlexController( szName ), value );
|
|
|
|
}
|
|
|
|
|
|
|
|
inline float CBaseFlex::GetFlexWeight( char *szName )
|
|
|
|
{
|
|
|
|
return GetFlexWeight( FindFlexController( szName ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
EXTERN_SEND_TABLE(DT_BaseFlex);
|
|
|
|
|
|
|
|
|
|
|
|
#endif // BASEFLEX_H
|