Beispiel #1
0
        ////////////////

        private void OnPlace()
        {
            var     mymod    = OnARailMod.Instance;
            Point16 exit_pos = TrainTunnelTileEntity.AwaitingExitTunnelPosition;

            if (exit_pos == default(Point16))
            {
                throw new HamstarException("No exit tunnel position available for tunnel " + this.ID + " at " + this.Position);
            }

            var exit_ent = TrainTunnelTileEntity.CreateTunnelEndpoint(this, exit_pos.X, exit_pos.Y);

            if (exit_ent == null)
            {
                throw new HamstarException("Could not create exit tunnel (at " + exit_pos + ") for tunnel " + this.ID + " at " + this.Position);
            }

            if (mymod.Config.DebugModeInfo)
            {
                LogHelpers.Log("OnARail.Tiles.TrainTunnelTileEntity.OnNetPlace - Creating train tunnel from " + this.Position + " to " + exit_pos + "...");
            }
        }
Beispiel #2
0
        ////////////////

        private static TrainTunnelTileEntity CreateTunnelEndpoint(TrainTunnelTileEntity start_tunnel_ent, int end_tile_x, int end_tile_y)
        {
            var mymod = OnARailMod.Instance;

            if (!TileHelpers.PlaceTile(end_tile_x + 2, end_tile_y + 2, mymod.TileType <TrainTunnelTile>()))
            {
                start_tunnel_ent.IsInitialized = true;                  // This destroys the tunnel
                Main.NewText("Error placing tunnel exit.", Color.Red);
                return(null);
            }

            var base_ent = mymod.GetTileEntity <TrainTunnelTileEntity>();

            if (base_ent == null)
            {
                throw new HamstarException("Could not find base tile entity.");
            }

            int id = base_ent.Place(end_tile_x, end_tile_y);
            var exit_tunnel_ent = (TrainTunnelTileEntity)ModTileEntity.ByID[id];

            if (exit_tunnel_ent == null)
            {
                throw new HamstarException("Cannot create tunnel exit - No train tunnel entity associated with id " + id + " at x:" + end_tile_x + ", y:" + end_tile_y);
            }

            start_tunnel_ent.ExitTileX = end_tile_x;
            start_tunnel_ent.ExitTileY = end_tile_y;
            exit_tunnel_ent.ExitTileX  = start_tunnel_ent.Position.X;
            exit_tunnel_ent.ExitTileY  = start_tunnel_ent.Position.Y;

            start_tunnel_ent.IsInitialized = true;
            exit_tunnel_ent.IsInitialized  = true;

            return(exit_tunnel_ent);
        }