# Sniper and Ballistics System

Central singleton instance for accessing ballistics functionality.

## Public Variables

| Type                      | Name                                     | Description                                                                                     | Access     |
| ------------------------- | ---------------------------------------- | ----------------------------------------------------------------------------------------------- | ---------- |
| **float**                 | `CurrentZeroDistance`                    | Current selected zero distance.                                                                 | Read Only  |
| **float**                 | `BulletTimeChance`                       | Bullet time chance percentage between \[0,1].                                                   | Read-Write |
| **float**                 | `BulletTimeVirtualTimescale`             | Virtual timescale used in bullet time events. It affects the bullet's interpolation speed.      | Read-Write |
| **float**                 | `BulletTimeWaitBeforeResettingTimescale` | Amount of time waited before resetting timescale when bullet time path has finished.            | Read-Write |
| **float**                 | `BulletTimeWaitBeforeEnding`             | Amount of time waited after timescale has been reset at the end of bullet time.                 | Read-Write |
| **bool**                  | `UseTracers`                             | Enables/disables use of tracers.                                                                | Read-Write |
| **bool**                  | `UseBulletTime`                          | Enables/disables use of bullet time.                                                            | Read-Write |
| **bool**                  | `UseInGameTrajectory`                    | Enables/disables use of in-game trajectory rendering.                                           | Read-Write |
| **bool**                  | `BulletTimeRunning`                      | Returns whether bullet time is active or not.                                                   | Read Only  |
| **bool**                  | `BulletTimeSkipPoint`                    | If true, bullet will travel immediately without waiting during bullet time, until set to false. | Read-Write |
| **EnvironmentProperties** | `GlobalEnvironmentProperties`            | Returns the current environment properties assigned to this scene.                              | Read Only  |

## Static Variables

| Type             | Name       | Description                       | Access    |
| ---------------- | ---------- | --------------------------------- | --------- |
| **static float** | `instance` | Singleton instance of this class. | Read-Only |

## Public Events

| Type                      | Name                      | Description                                                                    |
| ------------------------- | ------------------------- | ------------------------------------------------------------------------------ |
| **BulletHitEvent**        | `EPenetrationInHit`       | Called when the bullet penetrates a surface.                                   |
| **BulletHitEvent**        | `EPenetrationOutHit`      | Called when the bullet exits a penetrated surface.                             |
| **BulletHitEvent**        | `ERicochetHit`            | Called when the bullet ricochets off a surface.                                |
| **BulletHitEvent**        | `ENormalHit`              | Called when the bullet hits a surface, but doesn't penetrate or ricochet.      |
| **BulletHitEvent**        | `EAnyHit`                 | Called when any type of hit occurs.                                            |
| **BulletTimeStartEvent**  | `EBulletTimeStarted`      | Called when bullet time starts.                                                |
| **BulletTimeUpdateEvent** | `EBulletTimeUpdated`      | Called continuously when bullet is travelling during bullet time.              |
| **BulletTimeEndEvent**    | `EBulletTimePathFinished` | Called when bullet finishes it's path to it's target in bullet time.           |
| **BulletTimeEndEvent**    | `EBulletTimeEnded`        | Called after the timescale and everything is resetted, finalizing bullet time. |
| **BulletPropertiesEvent** | `EBulletActivated`        | Called when a bullet gets activated.                                           |
| **ZeroDistanceEvent**     | `EZeroDistanceChanged`    | Called when zero distance is cycled.                                           |

## Public Methods

| Return Type | Name                    | Signature                                | Description                                                                                                                   |
| ----------- | ----------------------- | ---------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| **void**    | `CycleZeroDistanceUp`   | ()                                       | Cycles zero distance up to the next in the m\_zeroDistances list.                                                             |
| **void**    | `CycleZeroDistanceDown` | ()                                       | Cycles zero distance down to the previous in the m\_zeroDistances list.                                                       |
| **void**    | `ActivateBullet`        | (BulletProperties)                       | Activates the given bullet properties so that it can be used in the simulation.                                               |
| **void**    | `FireBallisticsBullet`  | (BulletProperties, Transform, Transform) | Triggers the system to fire the given bullet properties, simulating it's trajectory, triggering hit & bullet time events etc. |
