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);
    }
Example #3
0
    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();