summaryrefslogtreecommitdiff
path: root/src/weapons/Weapon.h
diff options
context:
space:
mode:
authorSergeanur <s.anureev@yandex.ua>2020-04-26 22:03:15 +0300
committerSergeanur <s.anureev@yandex.ua>2020-04-26 22:03:15 +0300
commitf0890b11122291a22d6a65f349281cf1aed49bd0 (patch)
tree3b418b522c5fd097abac916693e59808ea4f5b4f /src/weapons/Weapon.h
parent3e460d94acd6e08301b0be2d4de58fe8f65aff57 (diff)
parent4dc2f307910c6d5dcf3c910b3da2e2d943ac1003 (diff)
Merge branch 'master' into MoreLanguages
# Conflicts: # src/core/Frontend.cpp # src/core/MenuScreens.h # src/render/Font.cpp # src/render/Font.h # src/text/Messages.cpp # src/text/Text.cpp
Diffstat (limited to 'src/weapons/Weapon.h')
-rw-r--r--src/weapons/Weapon.h106
1 files changed, 47 insertions, 59 deletions
diff --git a/src/weapons/Weapon.h b/src/weapons/Weapon.h
index 84760550..2c3a9657 100644
--- a/src/weapons/Weapon.h
+++ b/src/weapons/Weapon.h
@@ -1,55 +1,15 @@
#pragma once
-enum eWeaponType
-{
- WEAPONTYPE_UNARMED,
- WEAPONTYPE_BASEBALLBAT,
- WEAPONTYPE_COLT45,
- WEAPONTYPE_UZI,
- WEAPONTYPE_SHOTGUN,
- WEAPONTYPE_AK47,
- WEAPONTYPE_M16,
- WEAPONTYPE_SNIPERRIFLE,
- WEAPONTYPE_ROCKETLAUNCHER,
- WEAPONTYPE_FLAMETHROWER,
- WEAPONTYPE_MOLOTOV,
- WEAPONTYPE_GRENADE,
- WEAPONTYPE_DETONATOR,
- WEAPONTYPE_HELICANNON,
- WEAPONTYPE_LAST_WEAPONTYPE,
- WEAPONTYPE_ARMOUR,
- WEAPONTYPE_RAMMEDBYCAR,
- WEAPONTYPE_RUNOVERBYCAR,
- WEAPONTYPE_EXPLOSION,
- WEAPONTYPE_UZI_DRIVEBY,
- WEAPONTYPE_DROWNING,
- WEAPONTYPE_FALL,
- WEAPONTYPE_UNIDENTIFIED,
-
- WEAPONTYPE_TOTALWEAPONS = WEAPONTYPE_LAST_WEAPONTYPE,
- WEAPONTYPE_TOTAL_INVENTORY_WEAPONS = 13,
-};
+#include "WeaponType.h"
-enum eWeaponFire {
- WEAPON_FIRE_MELEE,
- WEAPON_FIRE_INSTANT_HIT,
- WEAPON_FIRE_PROJECTILE,
- WEAPON_FIRE_AREA_EFFECT,
- WEAPON_FIRE_USE
-};
-
-// Taken from MTA SA, seems it's unchanged
-enum eWeaponState
-{
- WEAPONSTATE_READY,
- WEAPONSTATE_FIRING,
- WEAPONSTATE_RELOADING,
- WEAPONSTATE_OUT_OF_AMMO,
- WEAPONSTATE_MELEE_MADECONTACT
-};
+#define DRIVEBYAUTOAIMING_MAXDIST (2.5f)
+#define DOOMAUTOAIMING_MAXDIST (9000.0f)
class CEntity;
+class CPhysical;
class CAutomobile;
+struct CColPoint;
+class CWeaponInfo;
class CWeapon
{
@@ -64,22 +24,50 @@ public:
CWeapon() {
m_bAddRotOffset = false;
}
+
+ CWeaponInfo *GetInfo();
- static void ShutdownWeapons(void);
- void Initialise(eWeaponType type, int ammo);
- void Update(int32 audioEntity);
+ static void InitialiseWeapons(void);
+ static void ShutdownWeapons (void);
+ static void UpdateWeapons (void);
+
+ void Initialise(eWeaponType type, int32 ammo);
+
+ bool Fire (CEntity *shooter, CVector *fireSource);
+ bool FireFromCar (CAutomobile *shooter, bool left);
+ bool FireMelee (CEntity *shooter, CVector &fireSource);
+ bool FireInstantHit(CEntity *shooter, CVector *fireSource);
+
+ void AddGunshell (CEntity *shooter, CVector const &source, CVector2D const &direction, float size);
+ void DoBulletImpact(CEntity *shooter, CEntity *victim, CVector *source, CVector *target, CColPoint *point, CVector2D ahead);
+
+ bool FireShotgun (CEntity *shooter, CVector *fireSource);
+ bool FireProjectile(CEntity *shooter, CVector *fireSource, float power);
+
+ static void GenerateFlameThrowerParticles(CVector pos, CVector dir);
+
+ bool FireAreaEffect (CEntity *shooter, CVector *fireSource);
+ bool FireSniper (CEntity *shooter);
+ bool FireM16_1stPerson (CEntity *shooter);
+ bool FireInstantHitFromCar(CAutomobile *shooter, bool left);
+
+ static void DoDoomAiming (CEntity *shooter, CVector *source, CVector *target);
+ static void DoTankDoomAiming (CEntity *shooter, CEntity *driver, CVector *source, CVector *target);
+ static void DoDriveByAutoAiming(CEntity *shooter, CVector *source, CVector *target);
+
void Reload(void);
- bool Fire(CEntity*, CVector*);
- void FireFromCar(CAutomobile *car, bool left);
- void AddGunshell(CEntity*, CVector const&, CVector2D const&, float);
- bool IsTypeMelee(void);
+ void Update(int32 audioEntity);
+ bool IsTypeMelee (void);
bool IsType2Handed(void);
- static void DoTankDoomAiming(CEntity *playerVehicle, CEntity *playerPed, CVector *start, CVector *end);
- bool HitsGround(CEntity* holder, CVector* firePos, CEntity* aimingTo);
+
+ static void MakePedsJumpAtShot(CPhysical *shooter, CVector *source, CVector *target);
+
+ bool HitsGround(CEntity *holder, CVector *fireSource, CEntity *aimingTo);
+ static void BlowUpExplosiveThings(CEntity *thing);
bool HasWeaponAmmoToBeUsed(void);
- static void InitialiseWeapons(void);
- static void UpdateWeapons(void);
+
+ static bool ProcessLineOfSight(CVector const &point1, CVector const &point2, CColPoint &point, CEntity *&entity, eWeaponType type, CEntity *shooter, bool checkBuildings, bool checkVehicles, bool checkPeds, bool checkObjects, bool checkDummies, bool ignoreSeeThrough, bool ignoreSomeObjects);
};
-static_assert(sizeof(CWeapon) == 0x18, "CWeapon: error");
+VALIDATE_SIZE(CWeapon, 0x18);
-void FireOneInstantHitRound(CVector* shotSource, CVector* shotTarget, int32 damage); \ No newline at end of file
+void FireOneInstantHitRound(CVector *source, CVector *target, int32 damage); \ No newline at end of file