# Client vs. simulator logic

### Am I a simulator?

Ask `Coherence.SimulatorUtility.IsSimulator`.

```csharp
using Coherence;

if (SimulatorUtility.IsSimulator)
{
    // I'm a simulator!
}
```

There are a few ways you can tell coherence if the instance should behave as a simulator:

* Specifying a `ConnectionType` when connecting via `Coherence.Network.Connect`.
* `COHERENCE_SIMULATOR` preprocessor define.
* `--coherence-simulation-server` command-line argument.
* Toggling on *Simulator* in the sample connection dialog.

#### `Connect` and `ConnectionType`

The `Connect` method on `Coherence.Network` accepts a `ConnectionType` parameter.

```csharp
using Network = Coherence.Network;
using ConnectionType = Replication.Client.Unity.Ecs.ConnectionType;

public class ConnectAsSimulator : MonoBehaviour
{
    void Start()
    {
        if (Network.Connect("127.0.0.1:32001", ConnectionType.Simulator))
        {
            // Connection successful
        }
        else 
        {
            // Connection failed
        }
    }
}
```

#### **COHERENCE\_SIMULATOR**

```csharp
#if COHERENCE_SIMULATOR

// simulator-specific code

#endif
```

Whenever the project compiles with the `COHERENCE_SIMULATOR` preprocessor define, coherence understands that the game will act as a simulator.&#x20;

<div align="left"><img src="/files/-MYgJGldGsRlo85C5I-v" alt="The custom build pipeline lets us define preprocessor defines like COHERENCE_SIMULATOR"></div>

#### **Command-line argument**

Launching the game with  `--coherence-simulation-server` will let coherence know that the loaded instance must act as a simulator.

{% hint style="info" %}
You can supply **additional parameters** to a simulator that define its area of responsibility, e.g. a sector/quadrant to simulate entities in and take authority over entities wandering into it.

You can also build a special simulator for AI, physics, etc.
{% endhint %}

### Server-side simulation

You can define who simulates the object in the **CoherenceSync** inspector.&#x20;

![](/files/-M_LW8y2rn7vcBaXRMKc)

{% hint style="info" %}
Automatic simulator adoption of CoherenceSync objects is work in progress and will be available in one of the future releases of **coherence.**
{% endhint %}

### **Auto-reconnect**

The [sample UI](/0.5.2/api-reference/network-sdk/sample-ui.md) provided includes auto-reconnect behaviour out of the box for simulators. The root GameObject has an AutoReconnect component attached to it.

![AutoReconnect in the sample UI](/files/-M__G8V97h10tp9jlu4_)

{% hint style="info" %}
If the simulator is invoked with the `--coherence-play-region` parameter, AutoReconnect will try to reconnect to the server located in that region.
{% endhint %}

If you need a different solution, take a look at its implementation use plug your own.


---

# 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://docs.coherence.io/0.5.2/simulators/client-vs-simulator-logic.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.
