Advertisement
575

6 - hit_zx

575
Apr 22nd, 2023
808
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 20.05 KB | None | 0 0
  1. #pragma once
  2.  
  3. #ifndef HITZX_H
  4. #define HITZX_H
  5.  
  6. #include <vector>
  7. #include <random>
  8. #include <chrono>
  9. #include <cmath>
  10. #include <numbers>
  11. #include "file_structs.h"
  12. #include "functions.h"
  13.  
  14. double ZXDistance(auto T1, auto T2) {
  15.     return std::sqrt(std::pow(T1.x - T2.x, 2) + std::pow(T1.z - T2.z, 2));
  16. }
  17.  
  18. /*
  19. res interpretation:
  20. 0   ->  hit none
  21. 1   ->  hit body
  22. 2   ->  hit wings
  23. 3   ->  hit empennage
  24. 4   ->  hit cam
  25. 5   ->  hit armament
  26. 6   ->  hit navigation
  27. 7   ->  hit flaps
  28. 8   ->  hit elevator
  29. 9   ->  hit engine
  30. 10  ->  hit propeller
  31. 11  ->  hit fuel tank
  32. */
  33.  
  34. unsigned HitTargetNaviCamZX(target_data T, coordinates point) {
  35.     unsigned res = 0;
  36.     std::vector <coordinates> polygon_vertices;
  37.     coordinates temp;
  38.     bool is_hit;
  39.  
  40.     temp.x = 5.5;
  41.     temp.z = 0.49;
  42.     temp = MakeRotation(temp, T.path_obj, 0.0);
  43.     temp.x += T.coord_n_obj.x;
  44.     temp.z += T.coord_n_obj.z;
  45.     polygon_vertices.push_back(temp);
  46.  
  47.     temp.x = 5.5;
  48.     temp.z = -0.49;
  49.     temp = MakeRotation(temp, T.path_obj, 0.0);
  50.     temp.x += T.coord_n_obj.x;
  51.     temp.z += T.coord_n_obj.z;
  52.     polygon_vertices.push_back(temp);
  53.  
  54.     temp.x = 3.0;
  55.     temp.z = -0.49;
  56.     temp = MakeRotation(temp, T.path_obj, 0.0);
  57.     temp.x += T.coord_n_obj.x;
  58.     temp.z += T.coord_n_obj.z;
  59.     polygon_vertices.push_back(temp);
  60.  
  61.     temp.x = 3.0;
  62.     temp.z = 0.49;
  63.     temp = MakeRotation(temp, T.path_obj, 0.0);
  64.     temp.x += T.coord_n_obj.x;
  65.     temp.z += T.coord_n_obj.z;
  66.     polygon_vertices.push_back(temp);
  67.  
  68.     is_hit = CrossingNumberAlgo(polygon_vertices, point);
  69.  
  70.     if (is_hit) {
  71.         coordinates cam_center;
  72.         cam_center.x = 4.5;
  73.         cam_center.z = 0.0;
  74.         cam_center = MakeRotation(cam_center, T.path_obj, 0.0);
  75.         cam_center.x += T.coord_n_obj.x;
  76.         cam_center.z += T.coord_n_obj.z;
  77.         if (ZXDistance(point, cam_center) < 0.2)
  78.             res = 4; //hit cam
  79.         else
  80.             res = 6; //hit navigation
  81.     }
  82.     return res;
  83. }
  84.  
  85. unsigned HitTargetFuelTankZX(target_data T, coordinates point) {
  86.     unsigned res = 0;
  87.     std::vector <coordinates> polygon_vertices;
  88.     coordinates temp;
  89.     bool is_hit;
  90.  
  91.     temp.x = -1.0;
  92.     temp.z = -0.2;
  93.     temp = MakeRotation(temp, T.path_obj, 0.0);
  94.     temp.x += T.coord_n_obj.x;
  95.     temp.z += T.coord_n_obj.z;
  96.     polygon_vertices.push_back(temp);
  97.  
  98.     temp.x = -1.0;
  99.     temp.z = 0.2;
  100.     temp = MakeRotation(temp, T.path_obj, 0.0);
  101.     temp.x += T.coord_n_obj.x;
  102.     temp.z += T.coord_n_obj.z;
  103.     polygon_vertices.push_back(temp);
  104.  
  105.     temp.x = -2.5;
  106.     temp.z = 0.2;
  107.     temp = MakeRotation(temp, T.path_obj, 0.0);
  108.     temp.x += T.coord_n_obj.x;
  109.     temp.z += T.coord_n_obj.z;
  110.     polygon_vertices.push_back(temp);
  111.  
  112.     temp.x = -2.5;
  113.     temp.z = -0.2;
  114.     temp = MakeRotation(temp, T.path_obj, 0.0);
  115.     temp.x += T.coord_n_obj.x;
  116.     temp.z += T.coord_n_obj.z;
  117.     polygon_vertices.push_back(temp);
  118.  
  119.     is_hit = CrossingNumberAlgo(polygon_vertices, point);
  120.  
  121.     if (is_hit)
  122.         res = 11; //hit fuel tank
  123.  
  124.     return res;
  125. }
  126.  
  127. unsigned HitTargetLowerEmpZX(target_data T, coordinates point) {
  128.     unsigned res = 0;
  129.     std::vector <coordinates> polygon_vertices;
  130.     coordinates temp;
  131.     bool is_hit;
  132.  
  133.     temp.x = -3.0;
  134.     temp.z = -0.05;
  135.     temp = MakeRotation(temp, T.path_obj, 0.0);
  136.     temp.x += T.coord_n_obj.x;
  137.     temp.z += T.coord_n_obj.z;
  138.     polygon_vertices.push_back(temp);
  139.  
  140.     temp.x = -3.0;
  141.     temp.z = 0.05;
  142.     temp = MakeRotation(temp, T.path_obj, 0.0);
  143.     temp.x += T.coord_n_obj.x;
  144.     temp.z += T.coord_n_obj.z;
  145.     polygon_vertices.push_back(temp);
  146.  
  147.     temp.x = -4.2;
  148.     temp.z = 0.05;
  149.     temp = MakeRotation(temp, T.path_obj, 0.0);
  150.     temp.x += T.coord_n_obj.x;
  151.     temp.z += T.coord_n_obj.z;
  152.     polygon_vertices.push_back(temp);
  153.  
  154.     temp.x = -4.2;
  155.     temp.z = -0.05;
  156.     temp = MakeRotation(temp, T.path_obj, 0.0);
  157.     temp.x += T.coord_n_obj.x;
  158.     temp.z += T.coord_n_obj.z;
  159.     polygon_vertices.push_back(temp);
  160.  
  161.     is_hit = CrossingNumberAlgo(polygon_vertices, point);
  162.  
  163.     if (is_hit)
  164.         res = 3; //hit empennage
  165.  
  166.     return res;
  167. }
  168.  
  169. unsigned HitTargetPropZX(target_data T, coordinates point) {
  170.     unsigned res = 0;
  171.     std::vector <coordinates> polygon_vertices;
  172.     coordinates temp;
  173.     bool is_hit;
  174.  
  175.     temp.x = -4.98;
  176.     temp.z = -1.402;
  177.     temp = MakeRotation(temp, T.path_obj, 0.0);
  178.     temp.x += T.coord_n_obj.x;
  179.     temp.z += T.coord_n_obj.z;
  180.     polygon_vertices.push_back(temp);
  181.  
  182.     temp.x = -5.02;
  183.     temp.z = -1.402;
  184.     temp = MakeRotation(temp, T.path_obj, 0.0);
  185.     temp.x += T.coord_n_obj.x;
  186.     temp.z += T.coord_n_obj.z;
  187.     polygon_vertices.push_back(temp);
  188.  
  189.     temp.x = -5.02;
  190.     temp.z = 1.402;
  191.     temp = MakeRotation(temp, T.path_obj, 0.0);
  192.     temp.x += T.coord_n_obj.x;
  193.     temp.z += T.coord_n_obj.z;
  194.     polygon_vertices.push_back(temp);
  195.  
  196.     temp.x = -4.98;
  197.     temp.z = 1.402;
  198.     temp = MakeRotation(temp, T.path_obj, 0.0);
  199.     temp.x += T.coord_n_obj.x;
  200.     temp.z += T.coord_n_obj.z;
  201.     polygon_vertices.push_back(temp);
  202.  
  203.     is_hit = CrossingNumberAlgo(polygon_vertices, point);
  204.  
  205.     if (is_hit)
  206.         res = 10; //hit propeller
  207.  
  208.     return res;
  209. }
  210.  
  211. unsigned HitTargetEngineEmpPropZX(target_data T, coordinates point) {
  212.     unsigned res = 0;
  213.     std::vector <coordinates> polygon_vertices;
  214.     coordinates temp;
  215.     bool is_hit;
  216.  
  217.     temp.x = -3.0;
  218.     temp.z = -0.49;
  219.     temp = MakeRotation(temp, T.path_obj, 0.0);
  220.     temp.x += T.coord_n_obj.x;
  221.     temp.z += T.coord_n_obj.z;
  222.     polygon_vertices.push_back(temp);
  223.  
  224.     temp.x = -3.0;
  225.     temp.z = 0.49;
  226.     temp = MakeRotation(temp, T.path_obj, 0.0);
  227.     temp.x += T.coord_n_obj.x;
  228.     temp.z += T.coord_n_obj.z;
  229.     polygon_vertices.push_back(temp);
  230.  
  231.     temp.x = -4.2;
  232.     temp.z = 0.49;
  233.     temp = MakeRotation(temp, T.path_obj, 0.0);
  234.     temp.x += T.coord_n_obj.x;
  235.     temp.z += T.coord_n_obj.z;
  236.     polygon_vertices.push_back(temp);
  237.  
  238.     temp.x = -5.4;
  239.     temp.z = 0.2;
  240.     temp = MakeRotation(temp, T.path_obj, 0.0);
  241.     temp.x += T.coord_n_obj.x;
  242.     temp.z += T.coord_n_obj.z;
  243.     polygon_vertices.push_back(temp);
  244.  
  245.     temp.x = -5.5;
  246.     temp.z = 0.0;
  247.     temp = MakeRotation(temp, T.path_obj, 0.0);
  248.     temp.x += T.coord_n_obj.x;
  249.     temp.z += T.coord_n_obj.z;
  250.     polygon_vertices.push_back(temp);
  251.  
  252.     temp.x = -5.4;
  253.     temp.z = -0.2;
  254.     temp = MakeRotation(temp, T.path_obj, 0.0);
  255.     temp.x += T.coord_n_obj.x;
  256.     temp.z += T.coord_n_obj.z;
  257.     polygon_vertices.push_back(temp);
  258.  
  259.     temp.x = -4.2;
  260.     temp.z = -0.49;
  261.     temp = MakeRotation(temp, T.path_obj, 0.0);
  262.     temp.x += T.coord_n_obj.x;
  263.     temp.z += T.coord_n_obj.z;
  264.     polygon_vertices.push_back(temp);
  265.  
  266.     is_hit = CrossingNumberAlgo(polygon_vertices, point);
  267.  
  268.     if (is_hit) {
  269.         res = HitTargetLowerEmpZX(T, point);
  270.  
  271.         if (!res)
  272.             res = HitTargetPropZX(T, point);
  273.  
  274.         if (!res)
  275.             res = 9; // hit propeller
  276.     }
  277.     return res;
  278. }
  279.  
  280. unsigned HitTargetBodyZX(target_data T, coordinates point) {
  281.     unsigned res = 0;
  282.     bool is_hit;
  283.     std::vector <coordinates> polygon_vertices;
  284.     coordinates temp, a;
  285.  
  286.     a.x = 5.01;
  287.  
  288.     a = MakeRotation(a, T.path_obj, 0.0);
  289.     a.x += T.coord_n_obj.x;
  290.     a.z += T.coord_n_obj.z;
  291.  
  292.     temp.x = 5.5;
  293.     temp.z = 0.49;
  294.     temp = MakeRotation(temp, T.path_obj, 0.0);
  295.     temp.x += T.coord_n_obj.x;
  296.     temp.z += T.coord_n_obj.z;
  297.     polygon_vertices.push_back(temp);
  298.  
  299.     temp.x = 5.5;
  300.     temp.z = -0.49;
  301.     temp = MakeRotation(temp, T.path_obj, 0.0);
  302.     temp.x += T.coord_n_obj.x;
  303.     temp.z += T.coord_n_obj.z;
  304.     polygon_vertices.push_back(temp);
  305.  
  306.     temp.x = -4.2;
  307.     temp.z = -0.49;
  308.     temp = MakeRotation(temp, T.path_obj, 0.0);
  309.     temp.x += T.coord_n_obj.x;
  310.     temp.z += T.coord_n_obj.z;
  311.     polygon_vertices.push_back(temp);
  312.  
  313.     temp.x = -5.4;
  314.     temp.z = -0.2;
  315.     temp = MakeRotation(temp, T.path_obj, 0.0);
  316.     temp.x += T.coord_n_obj.x;
  317.     temp.z += T.coord_n_obj.z;
  318.     polygon_vertices.push_back(temp);
  319.  
  320.     temp.x = -5.5;
  321.     temp.z = 0.0;
  322.     temp = MakeRotation(temp, T.path_obj, 0.0);
  323.     temp.x += T.coord_n_obj.x;
  324.     temp.z += T.coord_n_obj.z;
  325.     polygon_vertices.push_back(temp);
  326.  
  327.     temp.x = -5.4;
  328.     temp.z = 0.2;
  329.     temp = MakeRotation(temp, T.path_obj, 0.0);
  330.     temp.x += T.coord_n_obj.x;
  331.     temp.z += T.coord_n_obj.z;
  332.     polygon_vertices.push_back(temp);
  333.  
  334.     temp.x = -4.2;
  335.     temp.z = 0.49;
  336.     temp = MakeRotation(temp, T.path_obj, 0.0);
  337.     temp.x += T.coord_n_obj.x;
  338.     temp.z += T.coord_n_obj.z;
  339.     polygon_vertices.push_back(temp);
  340.  
  341.     is_hit = CrossingNumberAlgo(polygon_vertices, point);
  342.    
  343.     if (is_hit) {
  344.         res = HitTargetNaviCamZX(T, point);
  345.        
  346.         if (!res)
  347.             res = HitTargetFuelTankZX(T, point);
  348.  
  349.         if (!res)
  350.             res = HitTargetEngineEmpPropZX(T, point);
  351.  
  352.         if (!res)
  353.             res = 1; // hit body
  354.     }
  355.  
  356.     return res;
  357. }
  358.  
  359. unsigned HitTargetLFlapZX(target_data T, coordinates point) {
  360.     unsigned res = 0;
  361.     std::vector <coordinates> polygon_vertices;
  362.     coordinates temp;
  363.     bool is_hit;
  364.  
  365.     temp.x = -0.413;
  366.     temp.z = -9.0;
  367.     temp = MakeRotation(temp, T.path_obj, 0.0);
  368.     temp.x += T.coord_n_obj.x;
  369.     temp.z += T.coord_n_obj.z;
  370.     polygon_vertices.push_back(temp);
  371.    
  372.  
  373.     temp.x = -0.113;
  374.     temp.z = -9.0;
  375.     temp = MakeRotation(temp, T.path_obj, 0.0);
  376.     temp.x += T.coord_n_obj.x;
  377.     temp.z += T.coord_n_obj.z;
  378.     polygon_vertices.push_back(temp);
  379.    
  380.     temp.x = -0.404;
  381.     temp.z = -3.0;
  382.     temp = MakeRotation(temp, T.path_obj, 0.0);
  383.     temp.x += T.coord_n_obj.x;
  384.     temp.z += T.coord_n_obj.z;
  385.     polygon_vertices.push_back(temp);
  386.  
  387.  
  388.     temp.x = -0.704;
  389.     temp.z = -3.0;
  390.     temp = MakeRotation(temp, T.path_obj, 0.0);
  391.     temp.x += T.coord_n_obj.x;
  392.     temp.z += T.coord_n_obj.z;
  393.     polygon_vertices.push_back(temp);
  394.  
  395.  
  396.     is_hit = CrossingNumberAlgo(polygon_vertices, point);
  397.  
  398.     if (is_hit)
  399.         res = 7; //hit flap
  400.  
  401.     return res;
  402. }
  403.  
  404. unsigned HitTargetRFlapZX(target_data T, coordinates point) {
  405.     unsigned res = 0;
  406.     std::vector <coordinates> polygon_vertices;
  407.     coordinates temp;
  408.     bool is_hit;
  409.  
  410.     temp.x = -0.413;
  411.     temp.z = 9.0;
  412.     temp = MakeRotation(temp, T.path_obj, 0.0);
  413.     temp.x += T.coord_n_obj.x;
  414.     temp.z += T.coord_n_obj.z;
  415.     polygon_vertices.push_back(temp);
  416.  
  417.     temp.x = -0.113;
  418.     temp.z = 9.0;
  419.     temp = MakeRotation(temp, T.path_obj, 0.0);
  420.     temp.x += T.coord_n_obj.x;
  421.     temp.z += T.coord_n_obj.z;
  422.     polygon_vertices.push_back(temp);
  423.  
  424.     temp.x = -0.404;
  425.     temp.z = 3.0;
  426.     temp = MakeRotation(temp, T.path_obj, 0.0);
  427.     temp.x += T.coord_n_obj.x;
  428.     temp.z += T.coord_n_obj.z;
  429.     polygon_vertices.push_back(temp);
  430.  
  431.     temp.x = -0.704;
  432.     temp.z = 3.0;
  433.     temp = MakeRotation(temp, T.path_obj, 0.0);
  434.     temp.x += T.coord_n_obj.x;
  435.     temp.z += T.coord_n_obj.z;
  436.     polygon_vertices.push_back(temp);
  437.  
  438.     is_hit = CrossingNumberAlgo(polygon_vertices, point);
  439.  
  440.     if (is_hit)
  441.         res = 7; //hit flap
  442.  
  443.     return res;
  444. }
  445.  
  446. unsigned HitTargetLargeRocketLeftZX(target_data T, coordinates point) {
  447.     unsigned res = 0;
  448.     std::vector <coordinates> polygon_vertices;
  449.     coordinates temp;
  450.     bool is_hit;
  451.  
  452.     temp.x = 1.0;
  453.     temp.z = -1.7;
  454.     temp = MakeRotation(temp, T.path_obj, 0.0);
  455.     temp.x += T.coord_n_obj.x;
  456.     temp.z += T.coord_n_obj.z;
  457.     polygon_vertices.push_back(temp);
  458.    
  459.  
  460.     temp.x = 1.3;
  461.     temp.z = -1.5;
  462.     temp = MakeRotation(temp, T.path_obj, 0.0);
  463.     temp.x += T.coord_n_obj.x;
  464.     temp.z += T.coord_n_obj.z;
  465.     polygon_vertices.push_back(temp);
  466.  
  467.     temp.x = 1.0;
  468.     temp.z = -1.3;
  469.     temp = MakeRotation(temp, T.path_obj, 0.0);
  470.     temp.x += T.coord_n_obj.x;
  471.     temp.z += T.coord_n_obj.z;
  472.     polygon_vertices.push_back(temp);
  473.  
  474.     temp.x = -1.0;
  475.     temp.z = -1.3;
  476.     temp = MakeRotation(temp, T.path_obj, 0.0);
  477.     temp.x += T.coord_n_obj.x;
  478.     temp.z += T.coord_n_obj.z;
  479.     polygon_vertices.push_back(temp);
  480.  
  481.     temp.x = -1.0;
  482.     temp.z = -1.7;
  483.     temp = MakeRotation(temp, T.path_obj, 0.0);
  484.     temp.x += T.coord_n_obj.x;
  485.     temp.z += T.coord_n_obj.z;
  486.     polygon_vertices.push_back(temp);
  487.  
  488.     is_hit = CrossingNumberAlgo(polygon_vertices, point);
  489.  
  490.     if (is_hit)
  491.         res = 5; //hit armament
  492.  
  493.     return res;
  494. }
  495.  
  496. unsigned HitTargetLargeRocketRightZX(target_data T, coordinates point) {
  497.     unsigned res = 0;
  498.     std::vector <coordinates> polygon_vertices;
  499.     coordinates temp;
  500.     bool is_hit;
  501.  
  502.     temp.x = 1.0;
  503.     temp.z = 1.7;
  504.     temp = MakeRotation(temp, T.path_obj, 0.0);
  505.     temp.x += T.coord_n_obj.x;
  506.     temp.z += T.coord_n_obj.z;
  507.     polygon_vertices.push_back(temp);
  508.    
  509.     temp.x = 1.3;
  510.     temp.z = 1.5;
  511.     temp = MakeRotation(temp, T.path_obj, 0.0);
  512.     temp.x += T.coord_n_obj.x;
  513.     temp.z += T.coord_n_obj.z;
  514.     polygon_vertices.push_back(temp);
  515.  
  516.     temp.x = 1.0;
  517.     temp.z = 1.3;
  518.     temp = MakeRotation(temp, T.path_obj, 0.0);
  519.     temp.x += T.coord_n_obj.x;
  520.     temp.z += T.coord_n_obj.z;
  521.     polygon_vertices.push_back(temp);
  522.  
  523.     temp.x = -1.0;
  524.     temp.z = 1.3;
  525.     temp = MakeRotation(temp, T.path_obj, 0.0);
  526.     temp.x += T.coord_n_obj.x;
  527.     temp.z += T.coord_n_obj.z;
  528.     polygon_vertices.push_back(temp);
  529.  
  530.     temp.x = -1.0;
  531.     temp.z = 1.7;
  532.     temp = MakeRotation(temp, T.path_obj, 0.0);
  533.     temp.x += T.coord_n_obj.x;
  534.     temp.z += T.coord_n_obj.z;
  535.     polygon_vertices.push_back(temp);
  536.  
  537.     is_hit = CrossingNumberAlgo(polygon_vertices, point);
  538.  
  539.     if (is_hit)
  540.         res = 5; //hit armament
  541.  
  542.     return res;
  543. }
  544.  
  545. unsigned HitTargetSmallRocketLeftZX(target_data T, coordinates point) {
  546.     unsigned res = 0;
  547.     std::vector <coordinates> polygon_vertices;
  548.     coordinates temp;
  549.     bool is_hit;
  550.  
  551.     temp.x = 0.5;
  552.     temp.z = -2.3;
  553.     temp = MakeRotation(temp, T.path_obj, 0.0);
  554.     temp.x += T.coord_n_obj.x;
  555.     temp.z += T.coord_n_obj.z;
  556.     polygon_vertices.push_back(temp);
  557.    
  558.     temp.x = 0.7;
  559.     temp.z = -2.45;
  560.     temp = MakeRotation(temp, T.path_obj, 0.0);
  561.     temp.x += T.coord_n_obj.x;
  562.     temp.z += T.coord_n_obj.z;
  563.     polygon_vertices.push_back(temp);
  564.  
  565.     temp.x = 0.5;
  566.     temp.z = -2.6;
  567.     temp = MakeRotation(temp, T.path_obj, 0.0);
  568.     temp.x += T.coord_n_obj.x;
  569.     temp.z += T.coord_n_obj.z;
  570.     polygon_vertices.push_back(temp);
  571.  
  572.     temp.x = -0.7;
  573.     temp.z = -2.6;
  574.     temp = MakeRotation(temp, T.path_obj, 0.0);
  575.     temp.x += T.coord_n_obj.x;
  576.     temp.z += T.coord_n_obj.z;
  577.     polygon_vertices.push_back(temp);
  578.  
  579.     temp.x = -0.7;
  580.     temp.z = -2.3;
  581.     temp = MakeRotation(temp, T.path_obj, 0.0);
  582.     temp.x += T.coord_n_obj.x;
  583.     temp.z += T.coord_n_obj.z;
  584.     polygon_vertices.push_back(temp);
  585.  
  586.     is_hit = CrossingNumberAlgo(polygon_vertices, point);
  587.  
  588.     if (is_hit)
  589.         res = 5; //hit armament
  590.  
  591.     return res;
  592. }
  593.  
  594. unsigned HitTargetSmallRocketRightZX(target_data T, coordinates point) {
  595.     unsigned res = 0;
  596.     std::vector <coordinates> polygon_vertices;
  597.     coordinates temp;
  598.     bool is_hit;
  599.  
  600.     temp.x = 0.5;
  601.     temp.z = 2.3;
  602.     temp = MakeRotation(temp, T.path_obj, 0.0);
  603.     temp.x += T.coord_n_obj.x;
  604.     temp.z += T.coord_n_obj.z;
  605.     polygon_vertices.push_back(temp);
  606.    
  607.     temp.x = 0.7;
  608.     temp.z = 2.45;
  609.     temp = MakeRotation(temp, T.path_obj, 0.0);
  610.     temp.x += T.coord_n_obj.x;
  611.     temp.z += T.coord_n_obj.z;
  612.     polygon_vertices.push_back(temp);
  613.  
  614.     temp.x = 0.5;
  615.     temp.z = 2.6;
  616.     temp = MakeRotation(temp, T.path_obj, 0.0);
  617.     temp.x += T.coord_n_obj.x;
  618.     temp.z += T.coord_n_obj.z;
  619.     polygon_vertices.push_back(temp);
  620.  
  621.     temp.x = -0.7;
  622.     temp.z = 2.6;
  623.     temp = MakeRotation(temp, T.path_obj, 0.0);
  624.     temp.x += T.coord_n_obj.x;
  625.     temp.z += T.coord_n_obj.z;
  626.     polygon_vertices.push_back(temp);
  627.  
  628.     temp.x = -0.7;
  629.     temp.z = 2.3;
  630.     temp = MakeRotation(temp, T.path_obj, 0.0);
  631.     temp.x += T.coord_n_obj.x;
  632.     temp.z += T.coord_n_obj.z;
  633.     polygon_vertices.push_back(temp);
  634.  
  635.     is_hit = CrossingNumberAlgo(polygon_vertices, point);
  636.  
  637.     if (is_hit)
  638.         res = 5; //hit armament
  639.  
  640.     return res;
  641. }
  642.  
  643. unsigned HitTargetWingsZX(target_data T, coordinates point) {
  644.     unsigned res = 0;
  645.     bool is_hit;
  646.     std::vector <coordinates> polygon_vertices;
  647.     coordinates temp;
  648.  
  649.     temp.x = 0.825;
  650.     temp.z = 0.49;
  651.     temp = MakeRotation(temp, T.path_obj, 0.0);
  652.     temp.x += T.coord_n_obj.x;
  653.     temp.z += T.coord_n_obj.z;
  654.     polygon_vertices.push_back(temp); //1
  655.  
  656.     temp.x = 0.825;
  657.     temp.z = -0.49;
  658.     temp = MakeRotation(temp, T.path_obj, 0.0);
  659.     temp.x += T.coord_n_obj.x;
  660.     temp.z += T.coord_n_obj.z;
  661.     polygon_vertices.push_back(temp); //2
  662.  
  663.     temp.x = 0.365;
  664.     temp.z = -10.0;
  665.     temp = MakeRotation(temp, T.path_obj, 0.0);
  666.     temp.x += T.coord_n_obj.x;
  667.     temp.z += T.coord_n_obj.z;
  668.     polygon_vertices.push_back(temp); //3
  669.  
  670.     temp.x = -0.365;
  671.     temp.z = -10.0;
  672.     temp = MakeRotation(temp, T.path_obj, 0.0);
  673.     temp.x += T.coord_n_obj.x;
  674.     temp.z += T.coord_n_obj.z;
  675.     polygon_vertices.push_back(temp); //4
  676.  
  677.     temp.x = -0.825;
  678.     temp.z = -0.49;
  679.     temp = MakeRotation(temp, T.path_obj, 0.0);
  680.     temp.x += T.coord_n_obj.x;
  681.     temp.z += T.coord_n_obj.z;
  682.     polygon_vertices.push_back(temp); //5
  683.  
  684.     temp.x = -0.825;
  685.     temp.z = 0.49;
  686.     temp = MakeRotation(temp, T.path_obj, 0.0);
  687.     temp.x += T.coord_n_obj.x;
  688.     temp.z += T.coord_n_obj.z;
  689.     polygon_vertices.push_back(temp); //6
  690.  
  691.     temp.x = -0.365;
  692.     temp.z = 10.0;
  693.     temp = MakeRotation(temp, T.path_obj, 0.0);
  694.     temp.x += T.coord_n_obj.x;
  695.     temp.z += T.coord_n_obj.z;
  696.     polygon_vertices.push_back(temp); //7
  697.  
  698.     temp.x = 0.365;
  699.     temp.z = 10.0;
  700.     temp = MakeRotation(temp, T.path_obj, 0.0);
  701.     temp.x += T.coord_n_obj.x;
  702.     temp.z += T.coord_n_obj.z;
  703.     polygon_vertices.push_back(temp); //8
  704.  
  705.     is_hit = CrossingNumberAlgo(polygon_vertices, point);
  706.  
  707.     if (is_hit) {
  708.         res = HitTargetLFlapZX(T, point);
  709.  
  710.         if (!res)
  711.             res = HitTargetRFlapZX(T, point);
  712.  
  713.         if (!res)
  714.             res = HitTargetLargeRocketLeftZX(T, point);
  715.  
  716.         if (!res)
  717.             res = HitTargetLargeRocketRightZX(T, point);
  718.  
  719.         if (!res)
  720.             res = HitTargetSmallRocketLeftZX(T, point);
  721.  
  722.         if (!res)
  723.             res = HitTargetSmallRocketRightZX(T, point);
  724.  
  725.         if (!res)
  726.             res = 2; //hit wings
  727.     }
  728.  
  729.     return res;
  730. }
  731.  
  732. unsigned HitTargetLElevZX(target_data T, coordinates point) {
  733.     unsigned res = 0;
  734.     std::vector <coordinates> polygon_vertices;
  735.     coordinates temp;
  736.     bool is_hit;
  737.  
  738.     temp.x = -4.2;
  739.     temp.z = -0.49;
  740.     temp = MakeRotation(temp, T.path_obj, 0.0);
  741.     temp.x += T.coord_n_obj.x;
  742.     temp.z += T.coord_n_obj.z;
  743.     polygon_vertices.push_back(temp);
  744.    
  745.     temp.x = -4.0;
  746.     temp.z = -0.49;
  747.     temp = MakeRotation(temp, T.path_obj, 0.0);
  748.     temp.x += T.coord_n_obj.x;
  749.     temp.z += T.coord_n_obj.z;
  750.     polygon_vertices.push_back(temp);
  751.  
  752.     temp.x = -4.0;
  753.     temp.z = -3.4;
  754.     temp = MakeRotation(temp, T.path_obj, 0.0);
  755.     temp.x += T.coord_n_obj.x;
  756.     temp.z += T.coord_n_obj.z;
  757.     polygon_vertices.push_back(temp);
  758.  
  759.     temp.x = -4.2;
  760.     temp.z = -3.4;
  761.     temp = MakeRotation(temp, T.path_obj, 0.0);
  762.     temp.x += T.coord_n_obj.x;
  763.     temp.z += T.coord_n_obj.z;
  764.     polygon_vertices.push_back(temp);
  765.  
  766.     is_hit = CrossingNumberAlgo(polygon_vertices, point);
  767.  
  768.     if (is_hit)
  769.         res = 8; //hit elevator
  770.  
  771.     return res;
  772. }
  773.  
  774. unsigned HitTargetRElevZX(target_data T, coordinates point) {
  775.     unsigned res = 0;
  776.     std::vector <coordinates> polygon_vertices;
  777.     coordinates temp;
  778.     bool is_hit;
  779.  
  780.     temp.x = -4.2;
  781.     temp.z = 0.49;
  782.     temp = MakeRotation(temp, T.path_obj, 0.0);
  783.     temp.x += T.coord_n_obj.x;
  784.     temp.z += T.coord_n_obj.z;
  785.     polygon_vertices.push_back(temp);
  786.    
  787.     temp.x = -4.0;
  788.     temp.z = 0.49;
  789.     temp = MakeRotation(temp, T.path_obj, 0.0);
  790.     temp.x += T.coord_n_obj.x;
  791.     temp.z += T.coord_n_obj.z;
  792.     polygon_vertices.push_back(temp);
  793.  
  794.     temp.x = -4.0;
  795.     temp.z = 3.4;
  796.     temp = MakeRotation(temp, T.path_obj, 0.0);
  797.     temp.x += T.coord_n_obj.x;
  798.     temp.z += T.coord_n_obj.z;
  799.     polygon_vertices.push_back(temp);
  800.  
  801.     temp.x = -4.2;
  802.     temp.z = 3.4;
  803.     temp = MakeRotation(temp, T.path_obj, 0.0);
  804.     temp.x += T.coord_n_obj.x;
  805.     temp.z += T.coord_n_obj.z;
  806.     polygon_vertices.push_back(temp);
  807.  
  808.     is_hit = CrossingNumberAlgo(polygon_vertices, point);
  809.  
  810.     if (is_hit)
  811.         res = 8; //hit elevator
  812.  
  813.     return res;
  814. }
  815.  
  816. unsigned HitTargetEmpennageZX(target_data T, coordinates point) {
  817.     unsigned res = 0;
  818.     bool is_hit;
  819.     std::vector <coordinates> polygon_vertices;
  820.     coordinates temp;
  821.  
  822.     temp.x = -3.0;
  823.     temp.z = 0.49;
  824.     temp = MakeRotation(temp, T.path_obj, 0.0);
  825.     temp.x += T.coord_n_obj.x;
  826.     temp.z += T.coord_n_obj.z;
  827.     polygon_vertices.push_back(temp); //1
  828.    
  829.     temp.x = -3.0;
  830.     temp.z = -0.49;
  831.     temp = MakeRotation(temp, T.path_obj, 0.0);
  832.     temp.x += T.coord_n_obj.x;
  833.     temp.z += T.coord_n_obj.z;
  834.     polygon_vertices.push_back(temp); //2
  835.  
  836.     temp.x = -3.6;
  837.     temp.z = -3.4;
  838.     temp = MakeRotation(temp, T.path_obj, 0.0);
  839.     temp.x += T.coord_n_obj.x;
  840.     temp.z += T.coord_n_obj.z;
  841.     polygon_vertices.push_back(temp); //3
  842.  
  843.     temp.x = -4.2;
  844.     temp.z = -3.4;
  845.     temp = MakeRotation(temp, T.path_obj, 0.0);
  846.     temp.x += T.coord_n_obj.x;
  847.     temp.z += T.coord_n_obj.z;
  848.     polygon_vertices.push_back(temp); //4
  849.  
  850.     temp.x = -4.2;
  851.     temp.z = 3.4;
  852.     temp = MakeRotation(temp, T.path_obj, 0.0);
  853.     temp.x += T.coord_n_obj.x;
  854.     temp.z += T.coord_n_obj.z;
  855.     polygon_vertices.push_back(temp); //5
  856.  
  857.     temp.x = -3.6;
  858.     temp.z = 3.4;
  859.     temp = MakeRotation(temp, T.path_obj, 0.0);
  860.     temp.x += T.coord_n_obj.x;
  861.     temp.z += T.coord_n_obj.z;
  862.     polygon_vertices.push_back(temp); //6
  863.  
  864.     is_hit = CrossingNumberAlgo(polygon_vertices, point);
  865.  
  866.     if (is_hit) {
  867.         res = HitTargetLElevZX(T, point);
  868.  
  869.         if (!res)
  870.             res = HitTargetRElevZX(T, point);
  871.  
  872.         if (!res)
  873.             res = 3; //hit empennage
  874.     }
  875.  
  876.     return res;
  877. }
  878.  
  879. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement