[3.4.0][视角] 优化远景视角旋转动画;将到路口触发近景视角逻辑加回来
This commit is contained in:
@@ -11,9 +11,11 @@ import com.mogo.eagle.core.function.api.datacenter.obu.IMoGoObuWarningMapListene
|
||||
import com.mogo.eagle.core.function.api.datacenter.obu.IMoGoObuWarningRsiListener
|
||||
import com.mogo.eagle.core.function.api.datacenter.obu.IMoGoObuWarningRsmListener
|
||||
import com.mogo.eagle.core.function.api.datacenter.obu.IMoGoObuWarningSpatListener
|
||||
import com.mogo.eagle.core.function.api.hmi.warning.*
|
||||
import com.mogo.eagle.core.function.api.map.angle.*
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager
|
||||
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager
|
||||
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager
|
||||
import com.mogo.eagle.core.function.call.map.*
|
||||
import com.mogo.eagle.core.function.call.obu.*
|
||||
import com.mogo.eagle.core.function.call.v2x.CallerLimitingVelocityListenerManager
|
||||
import com.mogo.eagle.core.function.call.v2x.CallerTrafficLightListenerManager
|
||||
@@ -397,7 +399,17 @@ class MogoObuDcCombineManager private constructor() : IMoGoObuWarningRsiListener
|
||||
return
|
||||
}
|
||||
saveObuToDcData(v2xType, alertContent, ttsContent)
|
||||
showWarning(v2xType, alertContent, ttsContent, direction)
|
||||
showWarning(v2xType, alertContent, ttsContent, direction, object : IMoGoWarningStatusListener {
|
||||
|
||||
override fun onShow() {
|
||||
CallerVisualAngleManager.changeAngle(CrossRoad(true))
|
||||
}
|
||||
|
||||
override fun onDismiss() {
|
||||
super.onDismiss()
|
||||
CallerVisualAngleManager.changeAngle(CrossRoad(false))
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
MogoObuShowConstants.STATUS.UPDATE -> {// 更新
|
||||
@@ -680,9 +692,10 @@ class MogoObuDcCombineManager private constructor() : IMoGoObuWarningRsiListener
|
||||
type: String,
|
||||
content: String,
|
||||
tts: String,
|
||||
direction: WarningDirectionEnum
|
||||
direction: WarningDirectionEnum,
|
||||
listener: IMoGoWarningStatusListener? = null
|
||||
) {
|
||||
CallerHmiManager.warningV2X(type, content, tts, null, direction, isFromObu = true)
|
||||
CallerHmiManager.warningV2X(type, content, tts, listener, direction, isFromObu = true)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import com.mogo.eagle.core.data.config.HmiBuildConfig
|
||||
import com.mogo.eagle.core.data.enums.*
|
||||
import com.mogo.eagle.core.data.obu.MogoObuConst
|
||||
import com.mogo.eagle.core.function.api.hmi.warning.IMoGoWarningStatusListener
|
||||
import com.mogo.eagle.core.function.api.map.angle.*
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager
|
||||
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager
|
||||
import com.mogo.eagle.core.function.call.devatools.CallerDevaToolsManager
|
||||
@@ -801,7 +802,6 @@ class MogoPrivateObuNewManager private constructor() : OnUpgradeListener {
|
||||
var alertContent = ""
|
||||
var ttsContent = ""
|
||||
var v2xType = appId
|
||||
var changeVisualAngle = false
|
||||
when (appId) {
|
||||
//前向碰撞预警
|
||||
MogoObuShowConstants.V2X_WARNING_TYPE.FCW.toString() -> {
|
||||
@@ -847,7 +847,6 @@ class MogoPrivateObuNewManager private constructor() : OnUpgradeListener {
|
||||
direction == WarningDirectionEnum.ALERT_WARNING_TOP_LEFT ||
|
||||
direction == WarningDirectionEnum.ALERT_WARNING_BOTTOM_LEFT
|
||||
) { //左后
|
||||
changeVisualAngle = true
|
||||
ttsContent = String.format(ttsContent, "左")
|
||||
alertContent = String.format(alertContent, "左")
|
||||
} else if (
|
||||
@@ -855,7 +854,6 @@ class MogoPrivateObuNewManager private constructor() : OnUpgradeListener {
|
||||
direction == WarningDirectionEnum.ALERT_WARNING_TOP_RIGHT ||
|
||||
direction == WarningDirectionEnum.ALERT_WARNING_BOTTOM_RIGHT
|
||||
) { //右后
|
||||
changeVisualAngle = true
|
||||
ttsContent = String.format(ttsContent, "右")
|
||||
alertContent = String.format(alertContent, "右")
|
||||
}
|
||||
@@ -947,7 +945,21 @@ class MogoPrivateObuNewManager private constructor() : OnUpgradeListener {
|
||||
CallerHmiManager.warningV2X(v2xType,
|
||||
alertContent,
|
||||
ttsContent,// 只有第一次才tts,防止更新的时候不断的提醒
|
||||
null,
|
||||
object : IMoGoWarningStatusListener {
|
||||
override fun onShow() {
|
||||
if (appId == MogoObuShowConstants.V2X_WARNING_TYPE.BSW.toString()) {
|
||||
//盲区预警,展示近视角
|
||||
CallerVisualAngleManager.changeAngle(CrossRoad(true))
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDismiss() {
|
||||
if (appId == MogoObuShowConstants.V2X_WARNING_TYPE.BSW.toString()) {
|
||||
//盲区预警,取消近视角
|
||||
CallerVisualAngleManager.changeAngle(CrossRoad(false))
|
||||
}
|
||||
}
|
||||
},
|
||||
direction,
|
||||
isFromObu = true
|
||||
)
|
||||
|
||||
@@ -8,13 +8,19 @@ import androidx.lifecycle.Lifecycle.Event
|
||||
import androidx.lifecycle.Lifecycle.Event.ON_DESTROY
|
||||
import com.alibaba.android.arouter.facade.annotation.Route
|
||||
import com.mogo.eagle.core.data.constants.MogoServicePaths
|
||||
import com.mogo.eagle.core.data.map.*
|
||||
import com.mogo.eagle.core.data.map.MapRoadInfo.StopLine
|
||||
import com.mogo.eagle.core.function.api.map.angle.*
|
||||
import com.mogo.eagle.core.function.api.map.angle.Scene
|
||||
import com.mogo.eagle.core.function.call.autopilot.*
|
||||
import com.mogo.eagle.core.function.call.map.*
|
||||
import com.mogo.eagle.core.function.call.map.CallerMapRoadListenerManager.OnRoadListener
|
||||
import com.mogo.eagle.core.utilcode.kotlin.*
|
||||
import com.zhidaoauto.map.sdk.open.tools.*
|
||||
import kotlinx.coroutines.*
|
||||
import kotlinx.coroutines.android.*
|
||||
import java.util.*
|
||||
import java.util.concurrent.atomic.*
|
||||
|
||||
@Route(path = MogoServicePaths.PATH_VISUAL_ANGLE)
|
||||
class MoGoVisualAngleChangeProvider: IMoGoVisualAngleChangeProvider {
|
||||
@@ -23,8 +29,14 @@ class MoGoVisualAngleChangeProvider: IMoGoVisualAngleChangeProvider {
|
||||
private const val TAG = "VisualAngleChange"
|
||||
}
|
||||
|
||||
private val triggerLocation = AtomicReference<MogoLocation>()
|
||||
|
||||
private val distanceOfCarToStopLine = AtomicReference(0.0)
|
||||
|
||||
private val travelled by lazy { AtomicReference(0.0) }
|
||||
|
||||
@Volatile
|
||||
private var roadEventFlag: Boolean = false
|
||||
private var roadEventFlag = false
|
||||
|
||||
/**
|
||||
* 业务实体,不对外暴露
|
||||
@@ -43,6 +55,52 @@ class MoGoVisualAngleChangeProvider: IMoGoVisualAngleChangeProvider {
|
||||
PriorityQueue<Record>()
|
||||
}
|
||||
|
||||
private val listener = object : OnRoadListener {
|
||||
private val roadId = AtomicReference<String>()
|
||||
private val triggerRoadId = AtomicReference<String>()
|
||||
|
||||
override fun onRoadIdInfo(roadId: String) {
|
||||
this.roadId.set(roadId)
|
||||
Log.d(TAG, "-- onRoadIdInfo --: prev: ${this.triggerRoadId.get()} -> curr: $roadId")
|
||||
val loc = CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02()
|
||||
var triggerClose = false
|
||||
val distance = distanceOfCarToStopLine.get() + 5
|
||||
if (hasCrossRoad && distance > 0) {
|
||||
val prev = triggerLocation.get()
|
||||
if (prev != null) {
|
||||
travelled.set(MapTools.distance(loc.longitude, loc.latitude, prev.longitude, prev.latitude) + travelled.get())
|
||||
triggerLocation.set(loc)
|
||||
}
|
||||
val oldRoadId = triggerRoadId.get()
|
||||
Log.d(TAG, "-- onRoadIdInfo --: travelled --: ${travelled.get()}")
|
||||
if ((travelled.get() > distance) && oldRoadId != roadId) {
|
||||
distanceOfCarToStopLine.set(0.0)
|
||||
hasCrossRoad = false
|
||||
triggerRoadId.set(null)
|
||||
travelled.set(0.0)
|
||||
triggerLocation.set(null)
|
||||
Log.d(TAG, "-- onRoadIdInfo --: trigger close --")
|
||||
triggerClose = true
|
||||
}
|
||||
}
|
||||
if (triggerClose) {
|
||||
changeAngle(CrossRoad(false))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
override fun onStopLineInfo(info: StopLine) {
|
||||
Log.d(TAG, "-- onStopLineInfo --: ${info.distanceOfCarToStopLine}")
|
||||
if (!hasCrossRoad && info.distanceOfCarToStopLine <= 30.0) {
|
||||
hasCrossRoad = true
|
||||
triggerRoadId.set(this.roadId.get())
|
||||
distanceOfCarToStopLine.set(info.distanceOfCarToStopLine)
|
||||
triggerLocation.set(CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02())
|
||||
changeAngle(CrossRoad(true))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun init(context: Context?) {
|
||||
if (Thread.currentThread() != Looper.getMainLooper().thread) {
|
||||
scope.launch {
|
||||
@@ -62,8 +120,13 @@ class MoGoVisualAngleChangeProvider: IMoGoVisualAngleChangeProvider {
|
||||
}
|
||||
}
|
||||
})
|
||||
CallerMapRoadListenerManager.registerRoadListener("VisualAngleChange", listener)
|
||||
}
|
||||
|
||||
@Volatile
|
||||
private var hasCrossRoad = false
|
||||
|
||||
|
||||
private var scope: CoroutineScope = acquireScope()
|
||||
@Synchronized
|
||||
get() {
|
||||
@@ -204,7 +267,7 @@ class MoGoVisualAngleChangeProvider: IMoGoVisualAngleChangeProvider {
|
||||
it.setLockMode(false)
|
||||
roadEventFlag = true
|
||||
scope.launch {
|
||||
it.animateTo(0.0 ,0.0,1f, 0f ,11.5f,28f,3000,true)
|
||||
it.animateTo(0.0 ,0.0,1f, - record.target.poi_angle.toFloat(),11.5f,28f,3000,record.target.isGps)
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user