# Scripting: Client vs Simulator

### Am I a Simulator ?

Ask `Coherence.SimulatorUtility.IsSimulator`.

```csharp
using Coherence;
using UnityEngine;

public class SimulatorClass : MonoBehaviour
{
    public void Awake()
    {
        if (SimulatorUtility.IsSimulator)
        {
            // I'm a simulator!
        }
    }
}
```

There are two ways you can tell **coherence** if the game build should behave as a Simulator:

* `COHERENCE_SIMULATOR` preprocessor define.
* `--coherence-simulation-server` command-line argument.

#### `Connect` and `ConnectionType`

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

```csharp
using Coherence;
using Coherence.Connection;
using Coherence.Toolkit;
using UnityEngine;

public class ConnectAsSimulator : MonoBehaviour
{
    void Start()
    {
        var endpoint = new EndpointData
        {
            region = EndpointData.LocalRegion,
            host = "127.0.0.1",
            port = 32001,
            schemaId = RuntimeSettings.instance.SchemaID,
        };

        var bridge = FindAnyObjectByType<CoherenceBridge>();
        bridge.Connect(endpoint, ConnectionType.Simulator);
    }
}
```

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

![The custom build pipeline lets us define preprocessor defines like COHERENCE\_SIMULATOR](/files/-MYgJGldGsRlo85C5I-v)

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

![](/files/-M_LW8y2rn7vcBaXRMKc)

### **Connecting Simulators automatically to RS: AutoSimulatorConnection Component**

**coherence** includes an auto-connect MonoBehaviour out of the box for Room- and World-based Simulators. The Component its called AutoSimulatorConnection.

<figure><img src="/files/Gi1wYbcb5dW1tK1EffiW" alt=""><figcaption></figcaption></figure>

When you add the Component, it will parse the connection data passed with [Command-line arguments](/manual/simulation-server/simulator-cli-arguments.md) to connect to the given Replication Server automatically. This will also work for Simulators you upload to the coherence Cloud.

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


---

# 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/manual/simulation-server/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.
