src/rail_cmd.cpp
branchcpp_gui
changeset 6308 646711c5feaa
parent 6307 f40e88cff863
equal deleted inserted replaced
6307:f40e88cff863 6308:646711c5feaa
   228 /* Validate functions for rail building */
   228 /* Validate functions for rail building */
   229 static inline bool ValParamTrackOrientation(Track track) {return IsValidTrack(track);}
   229 static inline bool ValParamTrackOrientation(Track track) {return IsValidTrack(track);}
   230 
   230 
   231 /** Build a single piece of rail
   231 /** Build a single piece of rail
   232  * @param tile tile  to build on
   232  * @param tile tile  to build on
       
   233  * @param flags operation to perform
   233  * @param p1 railtype of being built piece (normal, mono, maglev)
   234  * @param p1 railtype of being built piece (normal, mono, maglev)
   234  * @param p2 rail track to build
   235  * @param p2 rail track to build
   235  */
   236  */
   236 int32 CmdBuildSingleRail(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
   237 int32 CmdBuildSingleRail(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
   237 {
   238 {
   330 	return cost + _price.build_rail;
   331 	return cost + _price.build_rail;
   331 }
   332 }
   332 
   333 
   333 /** Remove a single piece of track
   334 /** Remove a single piece of track
   334  * @param tile tile to remove track from
   335  * @param tile tile to remove track from
       
   336  * @param flags operation to perform
   335  * @param p1 unused
   337  * @param p1 unused
   336  * @param p2 rail orientation
   338  * @param p2 rail orientation
   337  */
   339  */
   338 int32 CmdRemoveSingleRail(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
   340 int32 CmdRemoveSingleRail(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
   339 {
   341 {
   475 	return 0;
   477 	return 0;
   476 }
   478 }
   477 
   479 
   478 /** Build a stretch of railroad tracks.
   480 /** Build a stretch of railroad tracks.
   479  * @param tile start tile of drag
   481  * @param tile start tile of drag
       
   482  * @param flags operation to perform
   480  * @param p1 end tile of drag
   483  * @param p1 end tile of drag
   481  * @param p2 various bitstuffed elements
   484  * @param p2 various bitstuffed elements
   482  * - p2 = (bit 0-3) - railroad type normal/maglev (0 = normal, 1 = mono, 2 = maglev)
   485  * - p2 = (bit 0-3) - railroad type normal/maglev (0 = normal, 1 = mono, 2 = maglev)
   483  * - p2 = (bit 4-6) - track-orientation, valid values: 0-5 (Track enum)
   486  * - p2 = (bit 4-6) - track-orientation, valid values: 0-5 (Track enum)
   484  * - p2 = (bit 7)   - 0 = build, 1 = remove tracks
   487  * - p2 = (bit 7)   - 0 = build, 1 = remove tracks
   524 	return (total_cost == 0) ? CMD_ERROR : total_cost;
   527 	return (total_cost == 0) ? CMD_ERROR : total_cost;
   525 }
   528 }
   526 
   529 
   527 /** Build rail on a stretch of track.
   530 /** Build rail on a stretch of track.
   528  * Stub for the unified rail builder/remover
   531  * Stub for the unified rail builder/remover
       
   532  * @param tile start tile of drag
       
   533  * @param flags operation to perform
       
   534  * @param p1 end tile of drag
       
   535  * @param p2 various bitstuffed elements
       
   536  * - p2 = (bit 0-3) - railroad type normal/maglev (0 = normal, 1 = mono, 2 = maglev)
       
   537  * - p2 = (bit 4-6) - track-orientation, valid values: 0-5 (Track enum)
       
   538  * - p2 = (bit 7)   - 0 = build, 1 = remove tracks
   529  * @see CmdRailTrackHelper
   539  * @see CmdRailTrackHelper
   530  */
   540  */
   531 int32 CmdBuildRailroadTrack(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
   541 int32 CmdBuildRailroadTrack(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
   532 {
   542 {
   533 	return CmdRailTrackHelper(tile, flags, p1, CLRBIT(p2, 7));
   543 	return CmdRailTrackHelper(tile, flags, p1, CLRBIT(p2, 7));
   534 }
   544 }
   535 
   545 
   536 /** Build rail on a stretch of track.
   546 /** Build rail on a stretch of track.
   537  * Stub for the unified rail builder/remover
   547  * Stub for the unified rail builder/remover
       
   548  * @param tile start tile of drag
       
   549  * @param flags operation to perform
       
   550  * @param p1 end tile of drag
       
   551  * @param p2 various bitstuffed elements
       
   552  * - p2 = (bit 0-3) - railroad type normal/maglev (0 = normal, 1 = mono, 2 = maglev)
       
   553  * - p2 = (bit 4-6) - track-orientation, valid values: 0-5 (Track enum)
       
   554  * - p2 = (bit 7)   - 0 = build, 1 = remove tracks
   538  * @see CmdRailTrackHelper
   555  * @see CmdRailTrackHelper
   539  */
   556  */
   540 int32 CmdRemoveRailroadTrack(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
   557 int32 CmdRemoveRailroadTrack(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
   541 {
   558 {
   542 	return CmdRailTrackHelper(tile, flags, p1, SETBIT(p2, 7));
   559 	return CmdRailTrackHelper(tile, flags, p1, SETBIT(p2, 7));
   543 }
   560 }
   544 
   561 
   545 /** Build a train depot
   562 /** Build a train depot
   546  * @param tile position of the train depot
   563  * @param tile position of the train depot
       
   564  * @param flags operation to perform
   547  * @param p1 rail type
   565  * @param p1 rail type
   548  * @param p2 bit 0..1 entrance direction (DiagDirection)
   566  * @param p2 bit 0..1 entrance direction (DiagDirection)
   549  *
   567  *
   550  * @todo When checking for the tile slope,
   568  * @todo When checking for the tile slope,
   551  * distingush between "Flat land required" and "land sloped in wrong direction"
   569  * distingush between "Flat land required" and "land sloped in wrong direction"
   607 
   625 
   608 /** Build signals, alternate between double/single, signal/semaphore,
   626 /** Build signals, alternate between double/single, signal/semaphore,
   609  * pre/exit/combo-signals, and what-else not. If the rail piece does not
   627  * pre/exit/combo-signals, and what-else not. If the rail piece does not
   610  * have any signals, bit 4 (cycle signal-type) is ignored
   628  * have any signals, bit 4 (cycle signal-type) is ignored
   611  * @param tile tile where to build the signals
   629  * @param tile tile where to build the signals
       
   630  * @param flags operation to perform
   612  * @param p1 various bitstuffed elements
   631  * @param p1 various bitstuffed elements
   613  * - p1 = (bit 0-2) - track-orientation, valid values: 0-5 (Track enum)
   632  * - p1 = (bit 0-2) - track-orientation, valid values: 0-5 (Track enum)
   614  * - p1 = (bit 3)   - 1 = override signal/semaphore, or pre/exit/combo signal (CTRL-toggle)
   633  * - p1 = (bit 3)   - 1 = override signal/semaphore, or pre/exit/combo signal (CTRL-toggle)
   615  * - p1 = (bit 4)   - 0 = signals, 1 = semaphores
   634  * - p1 = (bit 4)   - 0 = signals, 1 = semaphores
   616  * @param p2 used for CmdBuildManySignals() to copy direction of first signal
   635  * @param p2 used for CmdBuildManySignals() to copy direction of first signal
   701 	return cost;
   720 	return cost;
   702 }
   721 }
   703 
   722 
   704 /** Build many signals by dragging; AutoSignals
   723 /** Build many signals by dragging; AutoSignals
   705  * @param tile start tile of drag
   724  * @param tile start tile of drag
       
   725  * @param flags operation to perform
   706  * @param p1  end tile of drag
   726  * @param p1  end tile of drag
   707  * @param p2 various bitstuffed elements
   727  * @param p2 various bitstuffed elements
   708  * - p2 = (bit  0- 2) - track-orientation, valid values: 0-5 (Track enum)
   728  * - p2 = (bit  0- 2) - track-orientation, valid values: 0-5 (Track enum)
   709  * - p2 = (bit  3)    - 1 = override signal/semaphore, or pre/exit/combo signal (CTRL-toggle)
   729  * - p2 = (bit  3)    - 1 = override signal/semaphore, or pre/exit/combo signal (CTRL-toggle)
   710  * - p2 = (bit  4)    - 0 = signals, 1 = semaphores
   730  * - p2 = (bit  4)    - 0 = signals, 1 = semaphores
   788 	return error ? CMD_ERROR : total_cost;
   808 	return error ? CMD_ERROR : total_cost;
   789 }
   809 }
   790 
   810 
   791 /** Build signals on a stretch of track.
   811 /** Build signals on a stretch of track.
   792  * Stub for the unified signal builder/remover
   812  * Stub for the unified signal builder/remover
       
   813  * @param tile start tile of drag
       
   814  * @param flags operation to perform
       
   815  * @param p1  end tile of drag
       
   816  * @param p2 various bitstuffed elements
       
   817  * - p2 = (bit  0- 2) - track-orientation, valid values: 0-5 (Track enum)
       
   818  * - p2 = (bit  3)    - 1 = override signal/semaphore, or pre/exit/combo signal (CTRL-toggle)
       
   819  * - p2 = (bit  4)    - 0 = signals, 1 = semaphores
       
   820  * - p2 = (bit  5)    - 0 = build, 1 = remove signals
       
   821  * - p2 = (bit 24-31) - user defined signals_density
   793  * @see CmdSignalTrackHelper
   822  * @see CmdSignalTrackHelper
   794  */
   823  */
   795 int32 CmdBuildSignalTrack(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
   824 int32 CmdBuildSignalTrack(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
   796 {
   825 {
   797 	return CmdSignalTrackHelper(tile, flags, p1, p2);
   826 	return CmdSignalTrackHelper(tile, flags, p1, p2);
   798 }
   827 }
   799 
   828 
   800 /** Remove signals
   829 /** Remove signals
   801  * @param tile coordinates where signal is being deleted from
   830  * @param tile coordinates where signal is being deleted from
   802  * @param various bitstuffed elements, only track information is used
   831  * @param flags operation to perform
   803  * - p1 = (bit  0- 2) - track-orientation, valid values: 0-5 (Track enum)
   832  * @param p1 various bitstuffed elements, only track information is used
   804  * - p1 = (bit  3)    - override signal/semaphore, or pre/exit/combo signal (CTRL-toggle)
   833  *           - (bit  0- 2) - track-orientation, valid values: 0-5 (Track enum)
   805  * - p1 = (bit  4)    - 0 = signals, 1 = semaphores
   834  *           - (bit  3)    - override signal/semaphore, or pre/exit/combo signal (CTRL-toggle)
       
   835  *           - (bit  4)    - 0 = signals, 1 = semaphores
       
   836  * @param p2 unused
   806  */
   837  */
   807 int32 CmdRemoveSingleSignal(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
   838 int32 CmdRemoveSingleSignal(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
   808 {
   839 {
   809 	Track track = (Track)GB(p1, 0, 3);
   840 	Track track = (Track)GB(p1, 0, 3);
   810 
   841 
   840 	return _price.remove_signals;
   871 	return _price.remove_signals;
   841 }
   872 }
   842 
   873 
   843 /** Remove signals on a stretch of track.
   874 /** Remove signals on a stretch of track.
   844  * Stub for the unified signal builder/remover
   875  * Stub for the unified signal builder/remover
       
   876  * @param tile start tile of drag
       
   877  * @param flags operation to perform
       
   878  * @param p1  end tile of drag
       
   879  * @param p2 various bitstuffed elements
       
   880  * - p2 = (bit  0- 2) - track-orientation, valid values: 0-5 (Track enum)
       
   881  * - p2 = (bit  3)    - 1 = override signal/semaphore, or pre/exit/combo signal (CTRL-toggle)
       
   882  * - p2 = (bit  4)    - 0 = signals, 1 = semaphores
       
   883  * - p2 = (bit  5)    - 0 = build, 1 = remove signals
       
   884  * - p2 = (bit 24-31) - user defined signals_density
   845  * @see CmdSignalTrackHelper
   885  * @see CmdSignalTrackHelper
   846  */
   886  */
   847 int32 CmdRemoveSignalTrack(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
   887 int32 CmdRemoveSignalTrack(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
   848 {
   888 {
   849 	return CmdSignalTrackHelper(tile, flags, p1, SETBIT(p2, 5)); // bit 5 is remove bit
   889 	return CmdSignalTrackHelper(tile, flags, p1, SETBIT(p2, 5)); // bit 5 is remove bit
   906 extern int32 DoConvertTunnelBridgeRail(TileIndex tile, RailType totype, bool exec);
   946 extern int32 DoConvertTunnelBridgeRail(TileIndex tile, RailType totype, bool exec);
   907 
   947 
   908 /** Convert one rail type to the other. You can convert normal rail to
   948 /** Convert one rail type to the other. You can convert normal rail to
   909  * monorail/maglev easily or vice-versa.
   949  * monorail/maglev easily or vice-versa.
   910  * @param tile end tile of rail conversion drag
   950  * @param tile end tile of rail conversion drag
       
   951  * @param flags operation to perform
   911  * @param p1 start tile of drag
   952  * @param p1 start tile of drag
   912  * @param p2 new railtype to convert to
   953  * @param p2 new railtype to convert to
   913  */
   954  */
   914 int32 CmdConvertRail(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
   955 int32 CmdConvertRail(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
   915 {
   956 {
  1175 
  1216 
  1176 /**
  1217 /**
  1177  * Draw ground sprite and track bits
  1218  * Draw ground sprite and track bits
  1178  * @param ti TileInfo
  1219  * @param ti TileInfo
  1179  * @param track TrackBits to draw
  1220  * @param track TrackBits to draw
  1180  * @param earth Draw as earth
       
  1181  * @param snow Draw as snow
       
  1182  * @param flat Always draw foundation
       
  1183  */
  1221  */
  1184 static void DrawTrackBits(TileInfo* ti, TrackBits track)
  1222 static void DrawTrackBits(TileInfo* ti, TrackBits track)
  1185 {
  1223 {
  1186 	const RailtypeInfo *rti = GetRailTypeInfo(GetRailType(ti->tile));
  1224 	const RailtypeInfo *rti = GetRailTypeInfo(GetRailType(ti->tile));
  1187 	SpriteID image;
  1225 	SpriteID image;