private void DestroyTiles(fix2 position, fix radius) { TileWorld tileWorld = CommonReads.GetTileWorld(Accessor); NativeList <int2> tiles = new NativeList <int2>(Allocator.Temp); var transformTileRequests = GetSingletonBuffer <SystemRequestTransformTile>(); Job.WithCode(() => { TilePhysics.GetAllTilesWithin(position, radius, tiles); for (int i = 0; i < tiles.Length; i++) { Entity tileEntity = tileWorld.GetEntity(tiles[i]); TileFlagComponent tileFlags = tileWorld.GetFlags(tileEntity); if (!tileFlags.IsOutOfGrid && tileFlags.IsDestructible) { // remove ladder and terrain flags tileFlags.Value &= ~(TileFlags.Ladder | TileFlags.Terrain); transformTileRequests.Add(new SystemRequestTransformTile() { Tile = tiles[i], NewTileFlags = tileFlags }); } } }).Run(); }
public TileFlagComponent GetTileFlags() { TileFlagComponent flags = default; switch (_type) { case TileAuthType.Terrain: flags = TileFlagComponent.Terrain; break; case TileAuthType.Ladder: flags = TileFlagComponent.Ladder; break; case TileAuthType.Bedrock: flags = TileFlagComponent.Bedrock; break; } // reset shape flags.Value &= ~(TileFlags.Shape_Full | TileFlags.Shape_CornerAny); switch (_shape) { case ShapeAuthType.Full: flags.Value |= TileFlags.Shape_Full; break; case ShapeAuthType.CornerTopLeft: flags.Value |= TileFlags.Shape_CornerTopLeft; break; case ShapeAuthType.CornerTopRight: flags.Value |= TileFlags.Shape_CornerTopRight; break; case ShapeAuthType.CornerBottomLeft: flags.Value |= TileFlags.Shape_CornerBottomLeft; break; case ShapeAuthType.CornerBottomRight: flags.Value |= TileFlags.Shape_CornerBottomRight; break; } return(flags); }
protected override void OnUpdate() { var transformTileRequests = GetSingletonBuffer <SystemRequestTransformTile>(); TileWorld tileWorld = CommonReads.GetTileWorld(Accessor); Entities.ForEach((Entity entity, in DestroyTileOnOverlapTag destroyOnOverlapWithTile, in FixTranslation position) => { int2 tile = Helpers.GetTile(position); TileFlagComponent tileFlags = tileWorld.GetFlags(tile); if (tileFlags.IsDestructible && !tileFlags.IsEmpty) { transformTileRequests.Add(new SystemRequestTransformTile() { NewTileFlags = TileFlagComponent.Empty, Tile = tile }); } }).Run();