All pages
Powered by GitBook
1 of 1

Loading...

Scripting: Client vs Simulator

When scripting Simulators, we need mechanisms to tell them apart.

Am I a Simulator ?

Ask Coherence.SimulatorUtility.IsSimulator.

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.

COHERENCE_SIMULATOR

Whenever the project compiles with the COHERENCE_SIMULATOR preprocessor define, coherence understands that the game will act as a Simulator.

Command-line argument

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

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.

Server-side simulation

You can define who simulates the object in the CoherenceSync inspector.

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.

When you add the Component, it will parse the connection data passed with to connect to the given Replication Server automatically. This will also work for Simulators you upload to the coherence Cloud.

If the Simulator is invoked with the --coherence-play-region parameter, AutoSimulatorConnection will try to reconnect to the Server located in that region.

using Coherence;
using UnityEngine;

public class SimulatorClass : MonoBehaviour
{
    public void Awake()
    {
        if (SimulatorUtility.IsSimulator)
        {
            // I'm a simulator!
        }
    }
}
Command-line arguments
The custom build pipeline lets us define preprocessor defines like COHERENCE_SIMULATOR
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);
    }
}
#if COHERENCE_SIMULATOR

// simulator-specific code

#endif