//-----------------------------------------------------------------------------
        // Bridge Methods
        //-----------------------------------------------------------------------------
        public void CreateBridge(bool instantaneous = false, bool rememberState = false)
        {
            if (bridgeDirection >= 0 && (state == TileBridgeState.Destroyed || state == TileBridgeState.Destroying)) {

                if (state == TileBridgeState.Destroying) {
                    pieceLocation += Directions.ToPoint(bridgeDirection);
                }
                else {
                    pieceLocation = Location + Directions.ToPoint(bridgeDirection);
                }

                state = TileBridgeState.Creating;
                timer = 0;
            }

            if (instantaneous) {
                while (state == TileBridgeState.Creating) {
                    if (RoomControl.IsTileInBounds(pieceLocation) && GetConnectedTile(pieceLocation) == null) {
                        TileData pieceTileData = Resources.GetResource<TileData>(
                            isVertical ? "bridge_vertical" : "bridge_horizontal");
                        Tile pieceTile = Tile.CreateTile(pieceTileData);
                        RoomControl.PlaceTileOnHighestLayer(pieceTile, pieceLocation);
                        pieceLocation += Directions.ToPoint(bridgeDirection);
                    }
                    else {
                        state = TileBridgeState.Created;
                        break;
                    }
                }
            }

            if (state == TileBridgeState.Created || state == TileBridgeState.Creating) {
                Properties.Set("built", true);
            }
        }
Exemple #2
0
        public void DestroyBridge(bool instantaneous = false, bool rememberState = false)
        {
            if (bridgeDirection >= 0 && (state == TileBridgeState.Created || state == TileBridgeState.Creating))
            {
                if (state == TileBridgeState.Creating)
                {
                    pieceLocation -= Directions.ToPoint(bridgeDirection);
                    if (pieceLocation == Location)
                    {
                        return;
                    }
                }
                else
                {
                    // Find the second to last tile in the bridge.
                    pieceLocation = new Point2I(-1, -1);
                    TileBridge pieceTile = GetConnectedTile(bridgeDirection);

                    while (pieceTile != null)
                    {
                        TileBridge nextTile = pieceTile.GetConnectedTile(bridgeDirection);
                        if (nextTile == null)
                        {
                            break;
                        }
                        pieceLocation = pieceTile.Location;
                        pieceTile     = nextTile;
                    }
                }

                if (pieceLocation.X > 0 && pieceLocation.Y > 0)
                {
                    state = TileBridgeState.Destroying;
                    timer = 0;
                }
            }

            if (instantaneous)
            {
                while (state == TileBridgeState.Destroying)
                {
                    TileBridge pieceTile = GetConnectedTile(pieceLocation);
                    if (pieceTile != null)
                    {
                        RoomControl.RemoveTile(pieceTile);
                    }
                    pieceLocation -= Directions.ToPoint(bridgeDirection);
                    if (pieceLocation == Location)
                    {
                        state = TileBridgeState.Destroyed;
                        break;
                    }
                }
            }

            if (state == TileBridgeState.Destroyed || state == TileBridgeState.Destroying)
            {
                Properties.Set("built", false);
            }
        }
Exemple #3
0
        public override void Update()
        {
            base.Update();

            if (state == TileBridgeState.Creating)
            {
                timer++;
                if (timer >= 10)
                {
                    timer = 0;

                    if (RoomControl.IsTileInBounds(pieceLocation) && GetConnectedTile(pieceLocation) == null)
                    {
                        AudioSystem.PlaySound(GameData.SOUND_BARRIER);
                        TileData pieceTileData = Resources.GetResource <TileData>(
                            isVertical ? "bridge_vertical" : "bridge_horizontal");
                        Tile pieceTile = Tile.CreateTile(pieceTileData);
                        RoomControl.PlaceTileOnHighestLayer(pieceTile, pieceLocation);
                        pieceLocation += Directions.ToPoint(bridgeDirection);
                    }
                    else
                    {
                        state = TileBridgeState.Created;
                    }
                }
            }
            else if (state == TileBridgeState.Destroying)
            {
                timer++;
                if (timer >= 10)
                {
                    timer = 0;
                    TileBridge pieceTile = GetConnectedTile(pieceLocation);

                    if (pieceTile != null)
                    {
                        RoomControl.RemoveTile(pieceTile);
                        AudioSystem.PlaySound(GameData.SOUND_BARRIER);
                    }

                    pieceLocation -= Directions.ToPoint(bridgeDirection);

                    if (pieceLocation == Location)
                    {
                        state = TileBridgeState.Destroyed;
                    }
                }
            }
        }
Exemple #4
0
        //-----------------------------------------------------------------------------
        // Bridge Methods
        //-----------------------------------------------------------------------------

        public void CreateBridge(bool instantaneous = false, bool rememberState = false)
        {
            if (bridgeDirection >= 0 && (state == TileBridgeState.Destroyed || state == TileBridgeState.Destroying))
            {
                if (state == TileBridgeState.Destroying)
                {
                    pieceLocation += Directions.ToPoint(bridgeDirection);
                }
                else
                {
                    pieceLocation = Location + Directions.ToPoint(bridgeDirection);
                }

                state = TileBridgeState.Creating;
                timer = 0;
            }

            if (instantaneous)
            {
                while (state == TileBridgeState.Creating)
                {
                    if (RoomControl.IsTileInBounds(pieceLocation) && GetConnectedTile(pieceLocation) == null)
                    {
                        TileData pieceTileData = Resources.GetResource <TileData>(
                            isVertical ? "bridge_vertical" : "bridge_horizontal");
                        Tile pieceTile = Tile.CreateTile(pieceTileData);
                        RoomControl.PlaceTileOnHighestLayer(pieceTile, pieceLocation);
                        pieceLocation += Directions.ToPoint(bridgeDirection);
                    }
                    else
                    {
                        state = TileBridgeState.Created;
                        break;
                    }
                }
            }

            if (state == TileBridgeState.Created || state == TileBridgeState.Creating)
            {
                Properties.Set("built", true);
            }
        }
Exemple #5
0
        public override void OnPostInitialize()
        {
            base.OnPostInitialize();

            // Check if the bridge is built.
            if (bridgeDirection >= 0 && GetConnectedTile(bridgeDirection) != null)
            {
                state = TileBridgeState.Created;
            }
            else
            {
                state = TileBridgeState.Destroyed;
            }

            if (Properties.GetBoolean("built", false))
            {
                CreateBridge(true);
            }
            else
            {
                DestroyBridge(true);
            }
        }
        public override void Update()
        {
            base.Update();

            if (state == TileBridgeState.Creating) {
                timer++;
                if (timer >= 10) {
                    timer = 0;

                    if (RoomControl.IsTileInBounds(pieceLocation) && GetConnectedTile(pieceLocation) == null) {
                        AudioSystem.PlaySound(GameData.SOUND_BARRIER);
                        TileData pieceTileData = Resources.GetResource<TileData>(
                            isVertical ? "bridge_vertical" : "bridge_horizontal");
                        Tile pieceTile = Tile.CreateTile(pieceTileData);
                        RoomControl.PlaceTileOnHighestLayer(pieceTile, pieceLocation);
                        pieceLocation += Directions.ToPoint(bridgeDirection);
                    }
                    else {
                        state = TileBridgeState.Created;
                    }
                }
            }
            else if (state == TileBridgeState.Destroying) {
                timer++;
                if (timer >= 10) {
                    timer = 0;
                    TileBridge pieceTile = GetConnectedTile(pieceLocation);

                    if (pieceTile != null) {
                        RoomControl.RemoveTile(pieceTile);
                        AudioSystem.PlaySound(GameData.SOUND_BARRIER);
                    }

                    pieceLocation -= Directions.ToPoint(bridgeDirection);

                    if (pieceLocation == Location) {
                        state = TileBridgeState.Destroyed;
                    }
                }
            }
        }
        public override void OnPostInitialize()
        {
            base.OnPostInitialize();

            // Check if the bridge is built.
            if (bridgeDirection >= 0 && GetConnectedTile(bridgeDirection) != null)
                state = TileBridgeState.Created;
            else
                state = TileBridgeState.Destroyed;

            if (Properties.GetBoolean("built", false))
                CreateBridge(true);
            else
                DestroyBridge(true);
        }
        public void DestroyBridge(bool instantaneous = false, bool rememberState = false)
        {
            if (bridgeDirection >= 0 && (state == TileBridgeState.Created || state == TileBridgeState.Creating)) {

                if (state == TileBridgeState.Creating) {
                    pieceLocation -= Directions.ToPoint(bridgeDirection);
                    if (pieceLocation == Location)
                        return;
                }
                else {
                    // Find the second to last tile in the bridge.
                    pieceLocation = new Point2I(-1, -1);
                    TileBridge pieceTile = GetConnectedTile(bridgeDirection);

                    while (pieceTile != null) {
                        TileBridge nextTile = pieceTile.GetConnectedTile(bridgeDirection);
                        if (nextTile == null)
                            break;
                        pieceLocation = pieceTile.Location;
                        pieceTile = nextTile;
                    }
                }

                if (pieceLocation.X > 0 && pieceLocation.Y > 0) {
                    state = TileBridgeState.Destroying;
                    timer = 0;
                }
            }

            if (instantaneous) {
                while (state == TileBridgeState.Destroying) {
                    TileBridge pieceTile = GetConnectedTile(pieceLocation);
                    if (pieceTile != null)
                        RoomControl.RemoveTile(pieceTile);
                    pieceLocation -= Directions.ToPoint(bridgeDirection);
                    if (pieceLocation == Location) {
                        state = TileBridgeState.Destroyed;
                        break;
                    }
                }
            }

            if (state == TileBridgeState.Destroyed || state == TileBridgeState.Destroying) {
                Properties.Set("built", false);
            }
        }