KUDr@3900: /* $Id$ */ KUDr@3900: KUDr@3900: #include "../stdafx.h" KUDr@3900: KUDr@3900: #include "yapf.hpp" KUDr@3900: #include "follow_track.hpp" KUDr@3900: #include "yapf_node_rail.hpp" KUDr@3900: #include "yapf_costbase.hpp" KUDr@3900: #include "yapf_costcache.hpp" KUDr@3900: KUDr@3910: /** translate tileh to the bitset of up-hill trackdirs */ KUDr@3900: const TrackdirBits CYapfCostBase::c_upwards_slopes[] = { KUDr@3900: TRACKDIR_BIT_NONE , // no tileh KUDr@3900: TRACKDIR_BIT_X_SW | TRACKDIR_BIT_Y_NW, // 1 KUDr@3900: TRACKDIR_BIT_X_SW | TRACKDIR_BIT_Y_SE, // 2 KUDr@3900: TRACKDIR_BIT_X_SW , // 3 KUDr@3900: TRACKDIR_BIT_X_NE | TRACKDIR_BIT_Y_SE, // 4 KUDr@3900: TRACKDIR_BIT_NONE , // 5 KUDr@3900: TRACKDIR_BIT_Y_SE , // 6 KUDr@3900: TRACKDIR_BIT_NONE , // 7 KUDr@3900: TRACKDIR_BIT_X_NE | TRACKDIR_BIT_Y_NW, // 8, KUDr@3900: TRACKDIR_BIT_Y_NW , // 9 KUDr@3900: TRACKDIR_BIT_NONE , //10 KUDr@3900: TRACKDIR_BIT_NONE , //11, KUDr@3900: TRACKDIR_BIT_X_NE , //12 KUDr@3900: TRACKDIR_BIT_NONE , //13 KUDr@3900: TRACKDIR_BIT_NONE , //14 KUDr@3900: TRACKDIR_BIT_NONE , //15 KUDr@3900: }; KUDr@5626: KUDr@5626: const char* GetTrackdirName(Trackdir td) KUDr@5626: { KUDr@5626: static const char * const td_names[] = { KUDr@5626: "INVALID_TRACKDIR", KUDr@5626: "X_NE", KUDr@5626: "Y_SE", KUDr@5626: "UPPER_E", KUDr@5626: "LOWER_E", KUDr@5626: "LEFT_S", KUDr@5626: "RIGHT_S", KUDr@5626: "<6>", KUDr@5626: "<7>", KUDr@5626: "X_SW", KUDr@5626: "Y_NW", KUDr@5626: "UPPER_W", KUDr@5626: "LOWER_W", KUDr@5626: "LEFT_N", KUDr@5626: "RIGHT_N", KUDr@5626: "TRACKDIR_END" KUDr@5626: }; KUDr@5626: if (((int)td <= (int)TRACKDIR_END)) { KUDr@5626: int idx = ((int8)td) + 1; KUDr@5626: return td_names[idx]; KUDr@5626: } KUDr@5626: return ""; KUDr@5626: } KUDr@5626: KUDr@5626: CStrA GetTrackdirBitsName(TrackdirBits td_bits) KUDr@5626: { KUDr@5626: CStrA name; KUDr@5626: for(int tdb = td_bits; tdb != 0; tdb = KillFirstBit2x64(tdb)) { KUDr@5626: name.Format("%s%s", name.Size() > 0 ? "+" : "", GetTrackdirName((Trackdir)FindFirstBit2x64(tdb))); KUDr@5626: } KUDr@5626: return name.Transfer(); KUDr@5626: }