[6.5.0][道路事件] 优化路口视角切换逻辑
This commit is contained in:
@@ -17,6 +17,7 @@ import com.mogo.eagle.core.function.api.map.road.IMoGoMapRoadListener
|
|||||||
import com.mogo.eagle.core.function.call.autopilot.*
|
import com.mogo.eagle.core.function.call.autopilot.*
|
||||||
import com.mogo.eagle.core.function.call.map.*
|
import com.mogo.eagle.core.function.call.map.*
|
||||||
import com.mogo.eagle.core.utilcode.kotlin.*
|
import com.mogo.eagle.core.utilcode.kotlin.*
|
||||||
|
import com.mogo.map.MapDataWrapper
|
||||||
import com.zhidaoauto.map.data.road.StopLine
|
import com.zhidaoauto.map.data.road.StopLine
|
||||||
import com.zhidaoauto.map.sdk.open.common.tools.MapTools
|
import com.zhidaoauto.map.sdk.open.common.tools.MapTools
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.*
|
||||||
@@ -45,14 +46,15 @@ class MoGoVisualAngleChangeProvider: IMoGoVisualAngleChangeProvider {
|
|||||||
private val listener = object : IMoGoMapRoadListener {
|
private val listener = object : IMoGoMapRoadListener {
|
||||||
private val roadId = AtomicReference<String>()
|
private val roadId = AtomicReference<String>()
|
||||||
private val triggerRoadId = AtomicReference<String>()
|
private val triggerRoadId = AtomicReference<String>()
|
||||||
|
private var inCrossRoad = false
|
||||||
override fun onRoadIdInfo(roadId: String) {
|
override fun onRoadIdInfo(roadId: String) {
|
||||||
this.roadId.set(roadId)
|
this.roadId.set(roadId)
|
||||||
Log.d(TAG, "-- onRoadIdInfo --: prev: ${this.triggerRoadId.get()} -> curr: $roadId")
|
Log.d(TAG, "-- onRoadIdInfo --: prev: ${this.triggerRoadId.get()} -> curr: $roadId")
|
||||||
val loc = CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02()
|
val loc = CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84()
|
||||||
var triggerClose = false
|
var triggerClose = false
|
||||||
val distance = distanceOfCarToStopLine.get() + 5
|
var distance = distanceOfCarToStopLine.get()
|
||||||
if (hasCrossRoad && distance > 0) {
|
if (hasCrossRoad && distance > 0) {
|
||||||
|
distance += 3.0
|
||||||
val prev = triggerLocation.get()
|
val prev = triggerLocation.get()
|
||||||
if (prev != null) {
|
if (prev != null) {
|
||||||
travelled.set(MapTools.distance(loc.longitude, loc.latitude, prev.longitude, prev.latitude) + travelled.get())
|
travelled.set(MapTools.distance(loc.longitude, loc.latitude, prev.longitude, prev.latitude) + travelled.get())
|
||||||
@@ -60,19 +62,34 @@ class MoGoVisualAngleChangeProvider: IMoGoVisualAngleChangeProvider {
|
|||||||
}
|
}
|
||||||
val oldRoadId = triggerRoadId.get()
|
val oldRoadId = triggerRoadId.get()
|
||||||
Log.d(TAG, "-- onRoadIdInfo --: travelled --: ${travelled.get()}")
|
Log.d(TAG, "-- onRoadIdInfo --: travelled --: ${travelled.get()}")
|
||||||
if ((travelled.get() > distance) && oldRoadId != roadId) {
|
if ((travelled.get() > distance)) {
|
||||||
distanceOfCarToStopLine.set(0.0)
|
val cross = MapDataWrapper.getCrossRoad(loc.longitude, loc.latitude, loc.heading)
|
||||||
hasCrossRoad = false
|
Log.d(TAG, "-- onRoadIdInfo --: cross --: ${cross?.status}")
|
||||||
triggerRoadId.set(null)
|
if (cross?.status == 1) {
|
||||||
travelled.set(0.0)
|
if (!inCrossRoad) {
|
||||||
triggerLocation.set(null)
|
inCrossRoad = true
|
||||||
Log.d(TAG, "-- onRoadIdInfo --: trigger close --")
|
}
|
||||||
triggerClose = true
|
} else {
|
||||||
|
if (inCrossRoad) {
|
||||||
|
triggerClose = true
|
||||||
|
}
|
||||||
|
if (!triggerClose && roadId != "0" && oldRoadId != null && oldRoadId != roadId) {
|
||||||
|
triggerClose = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (triggerClose) {
|
||||||
|
Log.d(TAG, "-- onRoadIdInfo --: trigger close --")
|
||||||
|
distanceOfCarToStopLine.set(0.0)
|
||||||
|
hasCrossRoad = false
|
||||||
|
triggerRoadId.set(null)
|
||||||
|
travelled.set(0.0)
|
||||||
|
triggerLocation.set(null)
|
||||||
|
inCrossRoad = false
|
||||||
|
changeScene(Default())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (triggerClose) {
|
|
||||||
changeScene(Default())
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -80,11 +97,16 @@ class MoGoVisualAngleChangeProvider: IMoGoVisualAngleChangeProvider {
|
|||||||
Log.d(TAG, "-- onStopLineInfo --: ${info.distance}")
|
Log.d(TAG, "-- onStopLineInfo --: ${info.distance}")
|
||||||
if (!hasCrossRoad && info.distance <= 80.0) {
|
if (!hasCrossRoad && info.distance <= 80.0) {
|
||||||
hasCrossRoad = true
|
hasCrossRoad = true
|
||||||
triggerRoadId.set(this.roadId.get())
|
|
||||||
distanceOfCarToStopLine.set(info.distance)
|
|
||||||
triggerLocation.set(CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02())
|
|
||||||
changeScene(CrossRoad(2))
|
changeScene(CrossRoad(2))
|
||||||
}
|
}
|
||||||
|
if (hasCrossRoad && triggerRoadId.get() == null && info.distance <= 20) {
|
||||||
|
val roadId = this.roadId.get()
|
||||||
|
if (roadId != null && roadId != "0") {
|
||||||
|
triggerRoadId.set(this.roadId.get())
|
||||||
|
distanceOfCarToStopLine.set(info.distance)
|
||||||
|
triggerLocation.set(CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84())
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user