| 838 | #define FC(x, z) GetFieldCost(x, z, locks, veh, soldier) |
| 839 | |
| 840 | float OperMap::GetCost(int xf, int zf, int dir, bool locks, EntityAI* veh, bool soldier) |
| 841 | { |
| 842 | const float H_SQRT5 = 2.2360679775; |
| 843 | const float H_SQRT5_4 = 0.25 * H_SQRT5; |
| 844 | const float H_SQRT2_2 = 0.5 * H_SQRT2; |
| 845 | switch (dir) |
| 846 | { |
| 847 | case 0: |
| 848 | return 0.5 * (FC(xf, zf) + FC(xf, zf - 1)); |
| 849 | case 1: |
| 850 | return H_SQRT5_4 * (FC(xf, zf) + FC(xf, zf - 1) + FC(xf - 1, zf - 1) + FC(xf - 1, zf - 2)); |
| 851 | case 2: |
| 852 | return H_SQRT2_2 * (FC(xf, zf) + FC(xf - 1, zf - 1)); |
| 853 | case 3: |
| 854 | return H_SQRT5_4 * (FC(xf, zf) + FC(xf - 1, zf) + FC(xf - 1, zf - 1) + FC(xf - 2, zf - 1)); |
| 855 | case 4: |
| 856 | return 0.5 * (FC(xf, zf) + FC(xf - 1, zf)); |
| 857 | case 5: |
| 858 | return H_SQRT5_4 * (FC(xf, zf) + FC(xf - 1, zf) + FC(xf - 1, zf + 1) + FC(xf - 2, zf + 1)); |
| 859 | case 6: |
| 860 | return H_SQRT2_2 * (FC(xf, zf) + FC(xf - 1, zf + 1)); |
| 861 | case 7: |
| 862 | return H_SQRT5_4 * (FC(xf, zf) + FC(xf, zf + 1) + FC(xf - 1, zf + 1) + FC(xf - 1, zf + 2)); |
| 863 | case 8: |
| 864 | return 0.5 * (FC(xf, zf) + FC(xf, zf + 1)); |
| 865 | case 9: |
| 866 | return H_SQRT5_4 * (FC(xf, zf) + FC(xf, zf + 1) + FC(xf + 1, zf + 1) + FC(xf + 1, zf + 2)); |
| 867 | case 10: |
| 868 | return H_SQRT2_2 * (FC(xf, zf) + FC(xf + 1, zf + 1)); |
| 869 | case 11: |
| 870 | return H_SQRT5_4 * (FC(xf, zf) + FC(xf + 1, zf) + FC(xf + 1, zf + 1) + FC(xf + 2, zf + 1)); |
| 871 | case 12: |
| 872 | return 0.5 * (FC(xf, zf) + FC(xf + 1, zf)); |
| 873 | case 13: |
| 874 | return H_SQRT5_4 * (FC(xf, zf) + FC(xf + 1, zf) + FC(xf + 1, zf - 1) + FC(xf + 2, zf - 1)); |
| 875 | case 14: |
| 876 | return H_SQRT2_2 * (FC(xf, zf) + FC(xf + 1, zf - 1)); |
| 877 | case 15: |
| 878 | return H_SQRT5_4 * (FC(xf, zf) + FC(xf, zf - 1) + FC(xf + 1, zf - 1) + FC(xf + 1, zf - 2)); |
| 879 | case 16: |
| 880 | return 0.5 * (FC(xf, zf) + FC(xf, zf - 2)) + FC(xf, zf - 1); |
| 881 | case 17: |
| 882 | return 0.5 * (FC(xf, zf) + FC(xf - 2, zf)) + FC(xf - 1, zf); |
| 883 | case 18: |
| 884 | return 0.5 * (FC(xf, zf) + FC(xf, zf + 2)) + FC(xf, zf + 1); |
| 885 | case 19: |
| 886 | return 0.5 * (FC(xf, zf) + FC(xf + 2, zf)) + FC(xf + 1, zf); |
| 887 | } |
| 888 | Fail("Unaccessible for 20 directions."); |
| 889 | return 0; |
| 890 | } |
| 891 | |
| 892 | float OperMap::GetFieldCost(int x, int z, bool locks, EntityAI* veh, bool soldier) |
| 893 | { |
no outgoing calls
no test coverage detected