[2.13.0]修正视角变换相关bug

This commit is contained in:
renwj
2022-12-13 19:46:09 +08:00
parent c81963b54e
commit 07f11215c9

View File

@@ -17,7 +17,6 @@ import com.mogo.eagle.core.function.call.map.CallerVisualAngleManager.Scene.*
import com.mogo.eagle.core.utilcode.kotlin.lifeCycleOwner
import com.mogo.eagle.core.utilcode.kotlin.safeCancel
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
import com.mogo.eagle.core.utilcode.mogo.logger.*
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_DEVA
import com.mogo.map.uicontroller.VisualAngleMode
import kotlinx.coroutines.*
@@ -84,6 +83,7 @@ object CallerVisualAngleManager {
val beginLoc = beginLocation.get()
val endLoc = CallerMapLocationListenerManager.getCurrentLocation()
if (beginLoc != null && endLoc != null && abs(beginLoc.bearing - endLoc.bearing) >= 170) {
Log.d("RWJ", "-- onRoadIdInfo XX--: prev: ${this.roadId} -> curr: $roadId")
hasCrossRoad = false
changeVisualAngle(CrossRoad(false))
}
@@ -94,7 +94,7 @@ object CallerVisualAngleManager {
override fun onStopLineInfo(info: StopLine) {
Log.d("RWJ", "-- onStopLineInfo --: $info")
Log.d("RWJ", "-- onStopLineInfo --: ${info.distanceOfCarToStopLine}")
if (!hasCrossRoad && info.distanceOfCarToStopLine <= 30.0) {
hasCrossRoad = true
beginLocation.set(CallerMapLocationListenerManager.getCurrentLocation())
@@ -156,6 +156,10 @@ object CallerVisualAngleManager {
override val displayThreshold: Long
get() = -1
override fun toString(): String {
return "Turning(open: ${open}, priority=$priority, displayThreshold: $displayThreshold, priority=$priority)"
}
}
/**
@@ -169,6 +173,10 @@ object CallerVisualAngleManager {
override val displayThreshold: Long
get() = SECONDS.toMillis(8)
override fun toString(): String {
return "TooClose(priority=$priority, displayThreshold: $displayThreshold, priority=$priority)"
}
}
/**
@@ -182,6 +190,10 @@ object CallerVisualAngleManager {
override val displayThreshold: Long
get() = SECONDS.toMillis(8)
override fun toString(): String {
return "RoadEvent(priority=${priority}, displayThreshold: ${displayThreshold}, priority=${priority})"
}
}
@@ -193,6 +205,10 @@ object CallerVisualAngleManager {
override val priority: Int = 4
override val displayThreshold: Long
get() = -1
override fun toString(): String {
return "CrossRoad(open: ${open}, priority=${priority}, displayThreshold: ${displayThreshold}, priority=${priority})"
}
}
}
@@ -222,72 +238,88 @@ object CallerVisualAngleManager {
}
val triggerTime = SystemClock.elapsedRealtime()
scope.launch {
Logger.d("${M_DEVA}${TAG}", "触发场景:${scene} --- 1 ---")
Log.d("${M_DEVA}${TAG}", "--- 1 ---")
val displayed = getDisplayed()
if (displayed == null) {
Logger.d("${M_DEVA}${TAG}", "触发场景:${scene} --- 2 ---")
Log.d("${M_DEVA}${TAG}", "--- 2 ---")
val top = getTop() //堆顶
if (top != null) {
if (top.target.priority >= scene.priority) {
Logger.d("${M_DEVA}${TAG}", "触发场景:${scene} --- 3 ---")
Log.d("${M_DEVA}${TAG}", "--- 3 ---")
top.triggerTime = triggerTime
doChangeAngle(top)
synchronized(heap){
heap += Record(scene, triggerTime = -1)
}
} else {
Logger.d("${M_DEVA}${TAG}", "触发场景:${scene} --- 4 ---")
Log.d("${M_DEVA}${TAG}", "--- 4 ---")
doChangeAngle(Record(scene, triggerTime = triggerTime))
}
} else {
Logger.d("${M_DEVA}${TAG}", "触发场景:${scene} --- 4 ---")
Log.d("${M_DEVA}${TAG}", "--- 5 ---")
doChangeAngle(Record(scene, triggerTime = triggerTime))
}
} else {
val prev = displayed.target
Log.d("${M_DEVA}${TAG}", "--- 6 --- old: $prev -> cur: $scene")
val prevTriggerTime = displayed.triggerTime
if (scene !is Default && prev.priority >= scene.priority && (prev is RoadEvent || prev is TooClose)) {
val displayDuration = triggerTime - prevTriggerTime
Log.d("${M_DEVA}${TAG}", "--- 7 ---:duration: $displayDuration")
if (displayDuration < prev.displayThreshold) {
Log.d("${M_DEVA}${TAG}", "--- 8 --- old: $prev -> cur: $scene")
return@launch
}
}
if (prev.priority > scene.priority) {
Log.d("${M_DEVA}${TAG}", "--- 9 --- old: $prev -> cur: $scene")
if (prev.displayThreshold < 0) {
return@launch
}
}
if (scene is Turning) {
val isOpen = scene.open
if (!isOpen) {
Log.d("${M_DEVA}${TAG}", "--- 10 --- old: $prev -> cur: $scene")
changeVisualAngle(Default())
heap -= displayed
return@launch
}
}
if (scene is CrossRoad) {
val isOpen = scene.open
if (!isOpen) {
Log.d("${M_DEVA}${TAG}", "--- 11 --- old: $prev -> cur: $scene")
changeVisualAngle(Default())
heap -= displayed
return@launch
}
}
if (scene !is Default && prev.priority >= scene.priority && (prev is RoadEvent || prev is TooClose)) {
val displayDuration = triggerTime - prevTriggerTime
if (displayDuration < prev.displayThreshold) {
return@launch
}
}
if (scene is Default) {
Logger.d("${M_DEVA}${TAG}", "触发场景:${scene} --- 6 ---")
Log.d("${M_DEVA}${TAG}", "--- 12 ---")
defaultDelayJob?.safeCancel()
launch {
val delay = scene.unit.toMillis(scene.delay)
Logger.d("${M_DEVA}${TAG}", "触发场景:${scene} --- 7 ---")
Log.d("${M_DEVA}${TAG}", "--- 13 ---")
delay(delay)
Logger.d("${M_DEVA}${TAG}", "触发场景:${scene} --- 8 ---")
Log.d("${M_DEVA}${TAG}", "--- 14 ---")
doChangeAngle(Record(scene, triggerTime = triggerTime))
heap -= displayed
}.also { itx ->
itx.invokeOnCompletion {
if (it is CancellationException) {
Logger.d("${M_DEVA}${TAG}", "触发场景:${scene} --- 9 ---")
Log.d("${M_DEVA}${TAG}", "--- 15 ---")
}
}
defaultDelayJob = itx
}
} else {
Logger.d("${M_DEVA}${TAG}", "触发场景:${scene} --- 10 ---")
Log.d("${M_DEVA}${TAG}", "--- 16 ---")
defaultDelayJob?.safeCancel()
if (displayed.target.priority < scene.priority) {
Log.d("${M_DEVA}${TAG}", "--- 17 ---")
doChangeAngle(Record(scene, triggerTime = triggerTime))
}
}
@@ -299,14 +331,13 @@ object CallerVisualAngleManager {
private fun doChangeAngle(record: Record) {
val angle = record.target.angle
CallerMapUIServiceManager.getMapUIController()?.also {
Logger.d("${M_DEVA}${TAG}", "触发场景:${record.target} --- 13 ---")
Log.d("${M_DEVA}${TAG}", "--- doChangeAngle --- ${record.target}")
if (record.target !is Default) {
record.isDisplay = true
synchronized(heap) {
heap += record
}
}
Logger.d("${M_DEVA}${TAG}", "触发场景:${record.target} --- 15 ---> angle: $angle")
it.changeMapVisualAngle(angle, null)
}
}