## About weapons implementation
Loading weapons is easy, just load weapons.dat, and their models, and that's pretty much it.
***
What is difficult, is to integrate weapons with animations.
We need the following functionality:
- When player aims, he needs to switch to another anim, and he needs to **lean his head** (how to do this, is there a separate anim for this ?). - Found the anims that were needed.
- When player aims, his head and hands should rotate in that direction (including up and down), so we would need to somehow **rotate spine** or something
- When player has a weapon in his hand, the **weapon should be attached to fingers** (maybe with a little adjustment for fingers) - this way player can do all anims (jump, run, etc), and weapon will remain on the proper place. This should only be done for specific anims.
- There are cases when we need to **play 2 anims at the same time**. Examples: reloading a weapon, aim and move at the same time. How to do this ? Tried with anim blending, but it looked ugly. Try avatar mask ?
***
Each weapon has it's own anim group. So, anims will be played based on what weapon is held.
But **how to determine position of weapon ?** Each weapon has firing offset, and aiming offset (maybe this is actually the position of weapon). - This can be done by testing.
**Where to place hands ?** There is nothing in weapons.dat saying about this. Is it hardcoded ? Or shall we just play weaponaim anim, and somehow adjust hands/fingers based on type of the weapon (or his aim offset) ? - Looks like that this is handled by anim.
***
These are the useful parameters in weapons.dat :
- fire offset (this could be just the location of bullet when it's fired ?)
- aim offset (this could be position of weapon when it's held, or position of where the other hand should be ?)
- anim group
***
### TODO
- play separate anim for tec9 ?
- let aim anim to control head (or spine ?), in order to better simulate bullet firing ?
- improve aiming with AIMWITHARM weapons - upper arm should follow right vector of aiming, when aiming to side
- reloading
- when lerping upper arm transform toward player forward vector, arm is going on the opposite side - it seems that it depends on world rotation of player
- spine should be rotated locally, not globally ? - some models have different rotation of spine in the idle anim, which means that their spine will not look at the same place - possible solution would be to play the same idle anim on all models
- right after the model is loaded, reset model state - it's already done ?
- rotate the pelvis instead of spine (because thighs look ugly)
- rotate neck instead of spine, when following direction of aiming
- play separate anim for: minigun and flame thrower,
#### Damage system
- particles on place of hit
- display inflicted damage as on-screen message
- die animation ; ped needs to have IsDead bool variable - code has to be adapted ;
- we need to raycast against ped mesh, not capsule collider ; also need to detect which part of body was hit
- adapt vehicles to damage system
- decals