MCPcopy Create free account
hub / github.com/BohemiaInteractive/CWR / GetCost

Method GetCost

engine/Poseidon/Game/OperMap.cpp:840–890  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

838#define FC(x, z) GetFieldCost(x, z, locks, veh, soldier)
839
840float 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
892float OperMap::GetFieldCost(int x, int z, bool locks, EntityAI* veh, bool soldier)
893{

Callers 3

DrawInfoMethod · 0.45
DrawCostMethod · 0.45
CreateFieldMethod · 0.45

Calls

no outgoing calls

Tested by

no test coverage detected