From 24428a1b69afcf113883e9cede1159443201a1b8 Mon Sep 17 00:00:00 2001
From: yy1717 <fctom1215@outlook.com>
Date: 星期四, 02 四月 2020 18:57:07 +0800
Subject: [PATCH] 进出科目二区域调整

---
 lib/src/main/cpp/test_items/park_bottom.cpp |   38 +++++++++++++++++++++++++++++++-------
 1 files changed, 31 insertions(+), 7 deletions(-)

diff --git a/lib/src/main/cpp/test_items/park_bottom.cpp b/lib/src/main/cpp/test_items/park_bottom.cpp
index b0a598b..3a59252 100644
--- a/lib/src/main/cpp/test_items/park_bottom.cpp
+++ b/lib/src/main/cpp/test_items/park_bottom.cpp
@@ -9,6 +9,7 @@
 #include "../jni_log.h"
 #include "../driver_test.h"
 #include "../utils/xconvert.h"
+#include "../master/comm_if.h"
 #include <vector>
 #include <cstdlib>
 
@@ -27,7 +28,8 @@
 
 const int PARK_TIMEOUT = D_SEC(210);
 
-static bool testing = false;
+static bool testing = false, reverseCar = false;
+static int mapIndex = 0;
 
 const uint32_t STOP_CAR_TIME = D_SEC(2);
 static uint32_t stopTimepoint;
@@ -44,13 +46,15 @@
 
 static char CrossCtrlLine(const Polygon *map, const car_model *car, const car_model *prev_car);
 static bool EnterParking(const Polygon *map, const car_model *car);
-static bool CrashRedLine(const Polygon *map, const car_model *car);
+static bool CrashRedLine(const Polygon *map, const car_model *car, int &who);
 static bool ExitParkArea(const Polygon *map, const car_model *car);
 
-void StartParkBottom(int moveDirect, const struct RtkTime *rtkTime)
+void StartParkBottom(int index, int moveDirect, const struct RtkTime *rtkTime)
 {
     DEBUG("StartParkBottom");
     testing = true;
+    reverseCar = false;
+    mapIndex = index;
     memset(carray, 0, sizeof(carray));
     memset(darray, 0, sizeof(darray));
     memset(parkStatus, 0, sizeof(parkStatus));
@@ -69,12 +73,13 @@
 {
     char crossCtrlLine = 0;
     uint32_t tp = TimeMakeComposite(rtkTime->hh, rtkTime->mm, rtkTime->ss, rtkTime->mss*10);
+    int who = 0;
 
     if (ExitParkArea(map, car)) {
         DEBUG("绂诲紑鍦哄湴");
         // 绂诲紑鍦哄湴
         testing = false;
-        if ((parkStatus[0] != 1 || parkStatus[1] != 1) && !reportParkFail) {
+        if ((parkStatus[0] != 1 || parkStatus[1] != 1) && !reportParkFail && reverseCar) {
             // 鍊掑簱涓嶅叆锛屼笉鍚堟牸
             reportParkFail = true;
             AddExamFault(8, rtkTime);
@@ -83,12 +88,18 @@
         goto TEST_END;
     }
 
-    if (CrashRedLine(map, car)) {
+
+    if (CrashRedLine(map, car, who)) {
         if (!occurCrashRedLine) {
             occurCrashRedLine = true;
             // 杞﹁韩鍑虹嚎锛屼笉鍚堟牸
             AddExamFault(7, rtkTime);
             DEBUG("杞﹁疆鍘嬬嚎");
+            if (who == 1) {
+                PlayTTS("鍘嬪乏搴撲綅绾�");
+            } else if (who == 2) {
+                PlayTTS("鍘嬪彸搴撲綅绾�");
+            }
         }
     } else {
         occurCrashRedLine = false;
@@ -153,6 +164,10 @@
                 }
             } else if (moveDirect == -1) {
                 // 鍒囨崲涓哄�掕溅
+                if (!reverseCar) {
+                    reverseCar = true;
+                    MA_EnterMap(mapIndex, MAP_TYPE_PARK_BUTTOM, 1);
+                }
                 if (darray[parkCount] == 0) {
                     if (!crossCtrlLineSw) {
                         // 鍊掕溅鍓嶏紝鍓嶈疆鏈┒杩囨帶鍒剁嚎
@@ -160,7 +175,7 @@
                         DEBUG("鍊掕溅鍓嶏紝鍓嶈疆鏈┒杩囨帶鍒剁嚎");
                     }
                     darray[parkCount] = 1;
-                    firstReverseTimepoint = tp;
+                    firstReverseTimepoint = tp;         // 棣栨鍊掕溅锛屾墠鎰忓懗鐫�姝ら」鐩紑濮�
                 }
             } else {
                 // 鍒囨崲涓哄墠杩�
@@ -209,6 +224,9 @@
     }
 
 TEST_END:
+    if (!testing && reverseCar) {
+        MA_EnterMap(mapIndex, MAP_TYPE_PARK_BUTTOM, 0);
+    }
     return testing ? 1 : 0;
 }
 
@@ -258,7 +276,7 @@
     return succ;
 }
 
-static bool CrashRedLine(const Polygon *map, const car_model *car)
+static bool CrashRedLine(const Polygon *map, const car_model *car, int &who)
 {
     bool ret = false;
 
@@ -276,6 +294,12 @@
     for (int i = 0; i < sizeof(red_lines) / sizeof(red_lines[0]); ++i) {
         MakeLine(&red_line, &(map->point[red_lines[i][0]]), &(map->point[red_lines[i][1]]));
         if (IntersectionOf(red_line, &car_body) != GM_None) {
+            if (i == 2 || i == 1) {
+                who = 1;
+            } else if (i == 4 || i == 5) {
+                who = 2;
+            }
+
             ret = true;
             break;
         }

--
Gitblit v1.8.0