private Entity CreateTileEntity(StartingTileElement tileData) { // Create Tile Entity newTileEntity = EntityManager.CreateEntity(TileArchetype); SetComponent(newTileEntity, new TileFlagComponent() { Value = tileData.TileFlags }); SetComponent(newTileEntity, new TileId(tileData.Position)); SetComponent(newTileEntity, tileData.AssetId); #if UNITY_EDITOR EntityManager.SetName(newTileEntity, $"Tile_Entity {tileData.Position.x}, {tileData.Position.y}"); #endif return(newTileEntity); }
protected override void OnUpdate() { var gridInfo = GetSingleton <GridInfo>(); Entity gridInfoEntity = GetSingletonEntity <GridInfo>(); NativeArray <StartingTileActorElement> startingTileActors = EntityManager.GetBufferReadOnly <StartingTileActorElement>(gridInfoEntity).ToNativeArray(Allocator.Temp); NativeArray <StartingTileElement> startingTiles = EntityManager.GetBufferReadOnly <StartingTileElement>(gridInfoEntity).ToNativeArray(Allocator.Temp); // Spawn Actors for (int i = 0; i < startingTileActors.Length; i++) { if (!gridInfo.Contains(startingTileActors[i].Position)) { Log.Warning($"Tile actor at position {startingTileActors[i].Position} is outside of the grid. It will not be spawned."); continue; } Entity tileActor = EntityManager.Instantiate(startingTileActors[i].Prefab); SetComponent <FixTranslation>(tileActor, Helpers.GetTileCenter(startingTileActors[i].Position)); } // Creating singleton with a buffer of all tile entities (container of tiles) // middle row and same amount on each side NativeList <GridTileReference> tiles = new NativeList <GridTileReference>(Allocator.Temp); for (int y = gridInfo.TileMin.y; y <= gridInfo.TileMax.y; y++) { for (int x = gridInfo.TileMin.x; x <= gridInfo.TileMax.x; x++) { int2 pos = int2(x, y); StartingTileElement tileData = FindStartingTileData(startingTiles, pos); GridTileReference gridTileReference = CreateTileEntity(tileData); tiles.Add(gridTileReference); } } EntityManager.RemoveComponent <StartingTileActorElement>(gridInfoEntity); EntityManager.AddBuffer <GridTileReference>(gridInfoEntity).AddRange(tiles); }