//----------------------------------------------------------------------------- // // $Logfile:: /Code/DLLs/game/actor_combatsubsystem.h $ // $Revision:: 21 $ // $Author:: Steven $ // $Date:: 10/13/03 8:53a $ // // Copyright (C) 2001 by Ritual Entertainment, Inc. // All rights reserved. // // This source may not be distributed and/or modified without // expressly written permission by Ritual Entertainment, Inc. // // // DESCRIPTION: // Combat Related Classes // class CombatSubsystem; #ifndef __ACTOR_COMBAT_SUBSYSTEM_H__ #define __ACTOR_COMBAT_SUBSYSTEM_H__ //============================ // Class CombatSubsystem //============================ // // Encapsulates combat related data and functionality for the actor // class CombatSubsystem { public: CombatSubsystem(); explicit CombatSubsystem(Actor* actor); virtual ~CombatSubsystem(); bool CanAttackTarget(Entity* target); bool CanAttackTargetFrom(Entity* target, const Vector& startPos); bool IsTargetInWeaponRange(Entity* target); bool UsingWeaponNamed(const str& weaponName); bool WeaponIsFireType(firetype_t fire_type); bool HaveWeapon(); bool CanAttackEnemy(); void UseActorWeapon(const str& weaponName, weaponhand_t hand); void SetTraceInterval(float interval); void FireWeapon(); void StopFireWeapon(); void AimWeaponTag(Entity* target); void AimWeaponTag(const Vector& targetPos); void ClearAim(); void GetGunPositionData(Vector* pos, Vector* forward = nullptr, Vector* right = nullptr, Vector* up = nullptr); float GetAimGunYaw(const Vector& target); float GetAimGunPitch(const Vector& target); WeaponPtr GetBestAvailableWeapon(Entity* target); float GetActiveWeaponPowerRating(Entity* target); str GetActiveWeaponName(); str GetActiveWeaponArchetype(); bool GetProjectileLaunchAngles(Vector& launchAngles, const Vector& launchPoint, const float initialSpeed, const float gravity, const bool useHighTrajectory = false) const; bool shouldArcProjectile(); float GetLowArcRange(); void OverrideSpread(float spreadX, float spreadY); str GetAnimForMyWeapon(const str& property); float GetDataForMyWeapon(const str& property); Vector GetLeadingTargetPos(float projSpeed, Vector originalTargetPos, Entity* target); // Archiving void DoArchive(Archiver& arc, Actor* actor); virtual void Archive(Archiver& arc); protected: void _init(); bool _traceHitTarget(Entity* target, const Vector& startPos); float getModifiedPowerRating(Entity* target, Weapon* weapon); private: ActiveWeapon _activeWeapon; float _nextTimeTracedToTarget; float _traceInterval; bool _canShootTarget; float _yawDiff; Actor* act; }; #endif /* __ACTOR_COMBAT_SUBSYSTEM_H__ */