Ejemplo n.º 1
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;
                    }
                }
            }
        }
Ejemplo n.º 2
0
        //-----------------------------------------------------------------------------
        // Internal methods
        //-----------------------------------------------------------------------------

        private void Crumble()
        {
            RoomControl.RemoveTile(this);
            RoomControl.SpawnEntity(new EffectFallingObject(DepthLayer.EffectCrackedFloorCrumble), Center);

            // Play crumble sound
            AudioSystem.PlaySound(GameData.SOUND_FLOOR_CRUMBLE);

            // Create a pit tile if this tile is on the bottom layer.
            if (Layer == 0)
            {
                TileData pitTileData = Resources.GetResource <TileData>("pit");
                Tile     pitTile     = Tile.CreateTile(pitTileData);
                RoomControl.PlaceTile(pitTile, Location, Layer);
            }
        }
Ejemplo n.º 3
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);
            }
        }
Ejemplo n.º 4
0
        // Called when the player digs the tile with the shovel.
        public virtual bool OnDig(int direction)
        {
            if (isMoving || !IsDigable)
            {
                return(false);
            }

            // Remove/dig the tile.
            if (layer == 0)
            {
                roomControl.RemoveTile(this);

                // Spawn the a "dug" tile in this tile's place.
                TileData data    = Resources.GetResource <TileData>("dug");
                Tile     dugTile = Tile.CreateTile(data);
                roomControl.PlaceTile(dugTile, location, layer);
                Graphics.PlaySprite(GameData.SPR_TILE_DUG);
            }
            else
            {
                roomControl.RemoveTile(this);
            }

            if (properties.GetBoolean("disable_on_destroy", false))
            {
                Properties.Set("enabled", false);                 // TODO: this won't exactly work anymore.
            }
            // Spawn drops.
            Entity dropEntity = SpawnDrop();

            if (dropEntity != null)
            {
                if (dropEntity is Collectible)
                {
                    (dropEntity as Collectible).PickupableDelay = GameSettings.COLLECTIBLE_DIG_PICKUPABLE_DELAY;
                }
                dropEntity.Physics.Velocity = Directions.ToVector(direction) * GameSettings.DROP_ENTITY_DIG_VELOCITY;
            }

            return(true);
        }
Ejemplo n.º 5
0
        //-----------------------------------------------------------------------------
        // Overridden methods
        //-----------------------------------------------------------------------------

        public override void OnInitialize()
        {
            if (IsRaised)
            {
                Graphics.PlayAnimation(GameData.ANIM_TILE_CROSSING_GATE_RAISE);
            }
            else
            {
                Graphics.PlayAnimation(GameData.ANIM_TILE_CROSSING_GATE_LOWER);
            }

            bool isFacingLeft = Properties.GetBoolean("face_left", false);

            Graphics.AnimationPlayer.SkipToEnd();
            Graphics.SubStripIndex = (isFacingLeft ? 1 : 0);

            CollisionModel = (isFacingLeft ? GameData.MODEL_EDGE_W : GameData.MODEL_EDGE_E);

            Point2I trackLocation = Location;

            if (isFacingLeft)
            {
                trackLocation.X -= 1;
            }
            else
            {
                trackLocation.X += 1;
            }

            // Create the dummy tile to serve as the solid
            dummySolidTile = Tile.CreateTile(new TileData());
            dummySolidTile.CollisionModel   = new CollisionModel(new Rectangle2I(0, 0, 16, 8));
            dummySolidTile.ClingWhenStabbed = false;
            dummySolidTile.SolidType        = TileSolidType.Solid;
            dummySolidTile.IsSolid          = !IsRaised;
            RoomControl.PlaceTile(dummySolidTile, trackLocation, Layer);
        }