protected override void OnUpdate()
    {
        DestroyOldGameObjects();

        if (SimAssetBankInstance.Ready)
        {
            CreateNewGameObjects(SimAssetBankInstance.GetLookup());
        }
    }
    protected override void OnUpdate()
    {
        if (!SimAssetBankInstance.Ready)
        {
            return;
        }

        _simWorldReplaceVersion.Set(SimWorldAccessor.ReplaceVersion);
        _simWorldTickId.Set(SimWorldAccessor.ExpectedNewTickId);

        if (!_simWorldTickId.IsDirty && !_simWorldReplaceVersion.IsDirty) // only continue if sim has changed since last update
        {
            return;
        }

        _simWorldTickId.ClearDirty();

        if (_simWorldReplaceVersion.ClearDirty()) // world replaced!
        {
            // update cached sim queries since world got replaced
            // NB: No need to dispose of these queries because the world gets disposed ...
            _updatedSimEntitiesQ = SimWorldAccessor.CreateEntityQuery(ComponentType.ReadOnly <SimAssetId>());
            _updatedSimEntitiesQ.SetChangedVersionFilter(ComponentType.ReadOnly <SimAssetId>());

            // Destroy all view
            DestroyAllViewEntities();
        }
        else
        {
            // Destroy dangling view
            DestroyDanglingViewEntities();
        }

        // update map
        UpdateSim2ViewMap();

        // destroy then create view for entities that had their SimAssetId modified
        UpdateViewEntities(SimAssetBankInstance.GetJobLookup(), _updatedSimEntitiesQ);

        _updatedSimEntitiesQ.SetChangedFilterRequiredVersion(SimWorldAccessor.GlobalSystemVersion);

        _ecb.AddJobHandleForProducer(Dependency);
    }
 public static GameObject FindSimAssetPrefab(SimAssetId simAssetId)
 {
     return(SimAssetBankInstance.GetLookup().GetSimAsset(simAssetId)?.gameObject);
 }