# 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. |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://rsb.inanevin.com/api/sniper-and-ballistics-system.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
