Commit 82269164 authored by p x's avatar p x
Browse files

泊车本地化

parent c0af16dd
This diff is collapsed.
...@@ -15,11 +15,11 @@ data class BindCarBean( ...@@ -15,11 +15,11 @@ data class BindCarBean(
data class BindResult( data class BindResult(
val id: Int, val id: Int,
val lastLatitude: Any, // val lastLatitude: Any,
val lastLongitude: Any, // val lastLongitude: Any,
val placeId: Int, // val placeId: Int,
val plateNumber: String, val plateNumber: String,
val vehicleBusinessType: String, // val vehicleBusinessType: String,
val vehicleCode: String, // val vehicleCode: String,
val vin: String // val vin: String
) )
\ No newline at end of file
...@@ -4,20 +4,20 @@ package com.sd.cavphmi.bean ...@@ -4,20 +4,20 @@ package com.sd.cavphmi.bean
* {"id":"39846582477537280","objects":[{"id":"267","name":"Vehicle","longitude":117.3461065,"latitude":38.9985969,"elevation":500.0},{"id":"1600009","name":"Participants","longitude":117.3463289,"latitude":38.9986373,"elevation":500.0}],"type":1,"typeName":"前向碰撞预警","level":1,"startTime":1755582898300,"reportTime":1755582898300} * {"id":"39846582477537280","objects":[{"id":"267","name":"Vehicle","longitude":117.3461065,"latitude":38.9985969,"elevation":500.0},{"id":"1600009","name":"Participants","longitude":117.3463289,"latitude":38.9986373,"elevation":500.0}],"type":1,"typeName":"前向碰撞预警","level":1,"startTime":1755582898300,"reportTime":1755582898300}
* ***/ * ***/
class V2xStartBean { class V2xStartBean {
var id: String = "" // var id: String = ""
var level: Int = 1 // var level: Int = 1
var objects: List<VObject>? = null var objects: List<VObject>? = null
var reportTime: Long = 0L // var reportTime: Long = 0L
var startTime: Long = 0L // var startTime: Long = 0L
var type: Int = -1 var type: Int = -1
var typeName: String = "" var typeName: String = ""
} }
//第一个是自己的车 第二个是预警 //第一个是自己的车 第二个是预警物体
data class VObject( data class VObject(
var elevation: Double, // var elevation: Double,
var id: String, var id: String,
var latitude: Double, // var latitude: Double,
var longitude: Double, // var longitude: Double,
var name: String // var name: String
) )
\ No newline at end of file
...@@ -8,6 +8,7 @@ import androidx.lifecycle.Lifecycle ...@@ -8,6 +8,7 @@ import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle import androidx.lifecycle.repeatOnLifecycle
import com.jakewharton.rxbinding4.view.clicks import com.jakewharton.rxbinding4.view.clicks
import com.sd.cavphmi.bean.BindResult
import com.sd.cavphmi.databinding.ActivityLoginBinding import com.sd.cavphmi.databinding.ActivityLoginBinding
import com.sd.cavphmi.ui.dialog.SeleBindCarDialog import com.sd.cavphmi.ui.dialog.SeleBindCarDialog
import com.sd.cavphmi.utils.MMKVUtil import com.sd.cavphmi.utils.MMKVUtil
...@@ -98,35 +99,35 @@ class LoginActivity : AppCompatActivity() { ...@@ -98,35 +99,35 @@ class LoginActivity : AppCompatActivity() {
//获取可绑定车辆 //获取可绑定车辆
private fun getBinderCars() { private fun getBinderCars() {
// seleBindCarDialog = SeleBindCarDialog.newInstance() if (mainVm.isMock) {
mainVm.getBindCar().observe(this) { bindCars -> //id = 27
var bindCars = listOf(BindResult(27, "皖BDJ1106"))
var plateNumbers = bindCars.map { it.plateNumber } var plateNumbers = bindCars.map { it.plateNumber }
seleBindCarDialog.setPlates(plateNumbers) seleBindCarDialog.setPlates(plateNumbers)
seleBindCarDialog.itemClickListener = object : SeleBindCarDialog.OnItemClickListener { seleBindCarDialog.itemClickListener =
override fun onItemClick(position: Int) { object : SeleBindCarDialog.OnItemClickListener {
MyContants.VEHICLEID = bindCars.get(position).id override fun onItemClick(position: Int) {
startActivity(Intent(this@LoginActivity, MainActivity::class.java)) MyContants.VEHICLEID = bindCars.get(position).id
finish() startActivity(Intent(this@LoginActivity, MainActivity::class.java))
finish()
}
} }
} else {
mainVm.getBindCar().observe(this) { bindCars ->
var plateNumbers = bindCars.map { it.plateNumber }
seleBindCarDialog.itemClickListener =
object : SeleBindCarDialog.OnItemClickListener {
override fun onItemClick(position: Int) {
MyContants.VEHICLEID = bindCars.get(position).id
startActivity(Intent(this@LoginActivity, MainActivity::class.java))
finish()
}
}
seleBindCarDialog.setPlates(plateNumbers)
} }
if (!seleBindCarDialog.isAdded) { }
seleBindCarDialog.showNow(supportFragmentManager, "seleBindCarDialog") if (!seleBindCarDialog.isAdded) {
} seleBindCarDialog.showNow(supportFragmentManager, "seleBindCarDialog")
// val dialog = CustomListDialog(this, "选择车辆", plateNumbers)
// dialog.setOnItemClickListener(object : CustomListDialog.OnItemClickListener {
// override fun onItemClick(position: Int, selectedItem: String) {
//// Toast.makeText(
//// this@LoginActivity,
//// "点击了第${position + 1}项: $selectedItem",
//// Toast.LENGTH_SHORT
//// ).show()
// MyContants.VEHICLEID = bindCars.get(position).id
// startActivity(Intent(this@LoginActivity, MainActivity::class.java))
// finish()
// }
// })
// dialog.show()
} }
} }
......
...@@ -32,6 +32,7 @@ import com.sd.cavphmi.ui.fragment.CarPanelFragment ...@@ -32,6 +32,7 @@ import com.sd.cavphmi.ui.fragment.CarPanelFragment
import com.sd.cavphmi.ui.fragment.ExoPlayFragment import com.sd.cavphmi.ui.fragment.ExoPlayFragment
import com.sd.cavphmi.utils.AvpContants import com.sd.cavphmi.utils.AvpContants
import com.sd.cavphmi.utils.DisplayUtil import com.sd.cavphmi.utils.DisplayUtil
import com.sd.cavphmi.utils.ToastHelper
import com.sd.cavphmi.viewmodels.MainVm import com.sd.cavphmi.viewmodels.MainVm
import com.sd.cavphmi.viewmodels.MapOpt import com.sd.cavphmi.viewmodels.MapOpt
import com.sd.cavphmi.viewmodels.MockVM import com.sd.cavphmi.viewmodels.MockVM
...@@ -164,13 +165,15 @@ class MainActivity : BaseActivity<ActivityMainBinding, MyBaseViewModel>() { ...@@ -164,13 +165,15 @@ class MainActivity : BaseActivity<ActivityMainBinding, MyBaseViewModel>() {
override fun getToData() { override fun getToData() {
if (!mainVm.isMock) { if (!mainVm.isMock) {
//开启websocket //开启AVP状态(HTTP SSE)
getTarget()
getV2x()
//开启2个HTTP sse
getCarVehicle()
getAvpStatus() getAvpStatus()
} }
//开启V2X预警
getV2x()
//开启感知物websocket
getTarget()
//开启车辆位姿
getCarVehicle()
//获取车位占用情况 //获取车位占用情况
// getSpaceInfo() // getSpaceInfo()
} }
...@@ -240,12 +243,42 @@ class MainActivity : BaseActivity<ActivityMainBinding, MyBaseViewModel>() { ...@@ -240,12 +243,42 @@ class MainActivity : BaseActivity<ActivityMainBinding, MyBaseViewModel>() {
mapOpt.showParkLight(businessType, businessStatus, avpStatu.space) mapOpt.showParkLight(businessType, businessStatus, avpStatu.space)
//判断在泊车状态下的倒挡绘制倒车路线,改变镜头视角,,判断车是否到达停车点 //判断在泊车状态下的倒挡绘制倒车路线,改变镜头视角,,判断车是否到达停车点
mapOpt.drawReversePark(businessType, businessStatus, gearType, avpStatu.space) mapOpt.drawReversePark(businessType, businessStatus, gearType, avpStatu.space)
//显示提示
tip(businessType, businessStatus)
//重置变量 //重置变量
resetVariable(businessStatus) resetVariable(businessStatus)
//根据AVP任务状态判停车特效是否关闭 //根据AVP任务状态判停车特效是否关闭
// mapOpt.showEffectAvpStatu(businessType, businessStatus) // mapOpt.showEffectAvpStatu(businessType, businessStatus)
} }
/***重置变量**/
private fun resetVariable(businessStatus: String) {
if (businessStatus == AvpContants.TRANSPORT_COMPLETED || businessStatus == AvpContants.TRANSPORT_CANCELED) {
mainVm.isGetVehDetail = false
// mapOpt.smallMapLine = false
mapOpt.sliceIndex = 0
// mapOpt.isDrawAreaCount = false
}
}
/***提示业务完成状态**/
private fun tip(businessType: String, businessStatus: String) {
if (businessType == AvpContants.PARK_TYPE) {
when (businessStatus) {
AvpContants.PARK_COMPLETED -> {
ToastHelper.showShort(this, "泊车完成")
}
}
} else if (businessType == AvpContants.CALL_TYPE) {
when (businessStatus) {
AvpContants.TRANSPORT_COMPLETED -> {
ToastHelper.showShort(this, "召车完成")
}
}
}
}
/***是否展示车内视频****/ /***是否展示车内视频****/
private fun isCarVideo(businessStatus: String) { private fun isCarVideo(businessStatus: String) {
if (businessStatus == AvpContants.TRANSPORT_PROGRESS) { if (businessStatus == AvpContants.TRANSPORT_PROGRESS) {
...@@ -256,15 +289,6 @@ class MainActivity : BaseActivity<ActivityMainBinding, MyBaseViewModel>() { ...@@ -256,15 +289,6 @@ class MainActivity : BaseActivity<ActivityMainBinding, MyBaseViewModel>() {
} }
} }
/***重置变量**/
private fun resetVariable(businessStatus: String) {
if (businessStatus == AvpContants.TRANSPORT_COMPLETED || businessStatus == AvpContants.TRANSPORT_CANCELED) {
mainVm.isGetVehDetail = false
// mapOpt.smallMapLine = false
mapOpt.sliceIndex = 0
// mapOpt.isDrawAreaCount = false
}
}
//联网车辆位姿数据 //联网车辆位姿数据
private fun getCarVehicle() { private fun getCarVehicle() {
...@@ -276,9 +300,9 @@ class MainActivity : BaseActivity<ActivityMainBinding, MyBaseViewModel>() { ...@@ -276,9 +300,9 @@ class MainActivity : BaseActivity<ActivityMainBinding, MyBaseViewModel>() {
} }
} }
//召车的时候临时开一下 //召车的时候临时开一下
mainVm.targetPre.observe(this) { /* mainVm.targetPre.observe(this) {
showPre(it) showPre(it)
} }*/
} }
//显示车辆位姿UI //显示车辆位姿UI
...@@ -291,7 +315,7 @@ class MainActivity : BaseActivity<ActivityMainBinding, MyBaseViewModel>() { ...@@ -291,7 +315,7 @@ class MainActivity : BaseActivity<ActivityMainBinding, MyBaseViewModel>() {
mapOpt.drawSmallCar(car) mapOpt.drawSmallCar(car)
//刷新右下角小车位置 //刷新右下角小车位置
mapOpt.showNavingCarPosition(car) mapOpt.showNavingCarPosition(car)
//生成车前方矩形 //车四周生成矩形
mapOpt.genFronArea(car) mapOpt.genFronArea(car)
//刷新右下角小地图路径 //刷新右下角小地图路径
mapOpt.upSmallMapLine() mapOpt.upSmallMapLine()
......
...@@ -100,7 +100,7 @@ class DistantTipFragment : Fragment() { ...@@ -100,7 +100,7 @@ class DistantTipFragment : Fragment() {
// endPoint.longitude // endPoint.longitude
// ).toInt() // ).toInt()
if (businessType == AvpContants.Park_TYPE) { if (businessType == AvpContants.PARK_TYPE) {
when (businessStatus) { when (businessStatus) {
AvpContants.TRANSPORT_PROGRESS -> { AvpContants.TRANSPORT_PROGRESS -> {
takeStr(distance, 1) takeStr(distance, 1)
......
...@@ -15,7 +15,6 @@ import com.unity3d.player.IUnityPlayerLifecycleEvents ...@@ -15,7 +15,6 @@ import com.unity3d.player.IUnityPlayerLifecycleEvents
import com.unity3d.player.UnityPlayer import com.unity3d.player.UnityPlayer
class UnityFragment : Fragment() { class UnityFragment : Fragment() {
// region Lifecycle Management - MUST BE FORWARDED TO UnityPlayer
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
mUnityPlayer.onResume() mUnityPlayer.onResume()
...@@ -66,21 +65,8 @@ class UnityFragment : Fragment() { ...@@ -66,21 +65,8 @@ class UnityFragment : Fragment() {
frameLayout.addView(unityPlayer, layoutParams) frameLayout.addView(unityPlayer, layoutParams)
} }
return frameLayout return frameLayout
// return inflater.inflate(R.layout.fragment_unity, container, false)
} }
// override fun onUnityPlayerUnloaded() {
// Log.d("UnityFragment", "-----------------onUnityPlayerUnloaded")
// // Unity 玩家未加载时调用
// activity?.finish()
// }
//
// override fun onUnityPlayerQuitted() {
// Log.d("UnityFragment", "-----------------onUnityPlayerQuitted")
// }
// UnityPlayer 实例 // UnityPlayer 实例
private lateinit var mUnityPlayer: UnityPlayer private lateinit var mUnityPlayer: UnityPlayer
...@@ -98,8 +84,6 @@ class UnityFragment : Fragment() { ...@@ -98,8 +84,6 @@ class UnityFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
// 视图创建完成后,可以在这里进行最终设置 // 视图创建完成后,可以在这里进行最终设置
// mUnityPlayer.windowFocusChanged(true)
// 视图创建完成后,可以在这里进行最终设置
mUnityPlayer.requestFocus() mUnityPlayer.requestFocus()
mUnityPlayer.setFocusableInTouchMode(true) mUnityPlayer.setFocusableInTouchMode(true)
//使用拼接服务器资源加载地图 //使用拼接服务器资源加载地图
...@@ -107,8 +91,6 @@ class UnityFragment : Fragment() { ...@@ -107,8 +91,6 @@ class UnityFragment : Fragment() {
// mUnityPlayer.postDelayed({ // mUnityPlayer.postDelayed({
// try { // try {
HighMapApi.setCarBottomCircle(true) HighMapApi.setCarBottomCircle(true)
// HighMapApi.setCameraAngle(90f)
// HighMapApi.setCameraDistance(80f)
HighMapApi.setCameraAngle(30f) HighMapApi.setCameraAngle(30f)
HighMapApi.setCameraDistance(8f) HighMapApi.setCameraDistance(8f)
// } catch (e: Exception) { // } catch (e: Exception) {
......
...@@ -5,7 +5,7 @@ object AvpContants { ...@@ -5,7 +5,7 @@ object AvpContants {
//业务类型 //业务类型
val NIL_TYPE = "NIL" val NIL_TYPE = "NIL"
val CALL_TYPE = "Call" val CALL_TYPE = "Call"
val Park_TYPE = "Park" val PARK_TYPE = "Park"
//档位 //档位
val GEAR_REVERSE = "REVERSE" val GEAR_REVERSE = "REVERSE"
......
...@@ -102,7 +102,7 @@ class MainVm @Inject constructor( ...@@ -102,7 +102,7 @@ class MainVm @Inject constructor(
lateinit var mockVM: MockVM lateinit var mockVM: MockVM
//是否需要模拟 //是否需要模拟
var isMock = false var isMock = true
//车辆位姿数据 //车辆位姿数据
// var carVehicle = MutableLiveData<CarVehicle>() // var carVehicle = MutableLiveData<CarVehicle>()
...@@ -254,8 +254,13 @@ class MainVm @Inject constructor( ...@@ -254,8 +254,13 @@ class MainVm @Inject constructor(
fun subVehicle(): StateFlow<CarVehicle> { fun subVehicle(): StateFlow<CarVehicle> {
if (isMock) { if (isMock) {
// mockVM.subVehicle(carVehicle) // mockVM.subVehicle(carVehicle)
// mockVM.onVehicleMockPark(carVehicle) viewModelScope.launch {
mockVM.onVehicleMockCall(carVehicle, targetPre) delay(20000)
//模拟泊车
mockVM.onVehicleMockPark(carVehicle, v2xStartBean)
delay(3000)
}
// mockVM.onVehicleMockCall(carVehicle, targetPre,v2xStartBean)
} else { } else {
var url = "${MyContants.HOST}/api/avpweb/hmi/monitor/v1/monitorDrivenStatus" var url = "${MyContants.HOST}/api/avpweb/hmi/monitor/v1/monitorDrivenStatus"
carCb.url = url carCb.url = url
...@@ -416,6 +421,7 @@ class MainVm @Inject constructor( ...@@ -416,6 +421,7 @@ class MainVm @Inject constructor(
//开启预警特效 //开启预警特效
fun startWarning(ptcId: String) { fun startWarning(ptcId: String) {
viewModelScope.launch { viewModelScope.launch {
toggleCircleRadar(2)
var warnPtc = WarnPtc().apply { var warnPtc = WarnPtc().apply {
ptcid = ptcId ptcid = ptcId
isRed = true isRed = true
...@@ -426,7 +432,6 @@ class MainVm @Inject constructor( ...@@ -426,7 +432,6 @@ class MainVm @Inject constructor(
warnPtc.isRed = false warnPtc.isRed = false
HighMapApi.setWarnPtc(warns) HighMapApi.setWarnPtc(warns)
} }
toggleCircleRadar(2)
} }
/**开启预警(光圈和雷达) /**开启预警(光圈和雷达)
......
...@@ -64,11 +64,7 @@ class MapOpt @Inject constructor( ...@@ -64,11 +64,7 @@ class MapOpt @Inject constructor(
//车四周矩形 //车四周矩形
private var roundArea: Polygon? = null private var roundArea: Polygon? = null
//锁 //小地图线
// private var cenAreaLock = CenAreaLock()
// 小地图路径坐标点串 (02坐标系)
// private var coordinateSeries = ArrayList<DoubleArray>()
private var sPolyline: Polyline? = null private var sPolyline: Polyline? = null
//是否进入泊车倒车状态 //是否进入泊车倒车状态
...@@ -175,8 +171,6 @@ class MapOpt @Inject constructor( ...@@ -175,8 +171,6 @@ class MapOpt @Inject constructor(
return return
} }
// if (smallMapLine) // if (smallMapLine)
// return
// if (coordinateSeries.count() > 0)
// return // return
if (drivenDecision.trajectory.points.count() > 0) { if (drivenDecision.trajectory.points.count() > 0) {
// smallMapLine = true // smallMapLine = true
...@@ -205,7 +199,7 @@ class MapOpt @Inject constructor( ...@@ -205,7 +199,7 @@ class MapOpt @Inject constructor(
//当前车辆位置 //当前车辆位置
// var latlng = LatLng(carVehicle.vehiclePos!!.get(1), carVehicle.vehiclePos.get(0)) // var latlng = LatLng(carVehicle.vehiclePos!!.get(1), carVehicle.vehiclePos.get(0))
viewModelScope.launch(Dispatchers.Default) { viewModelScope.launch(Dispatchers.Default) {
//算出线段与车辆四周面的相交 //算出线段与车辆四周面的相交的下标
var crossIndex = MyGeoTools.cauLineContainsArea(roundArea, lineString) var crossIndex = MyGeoTools.cauLineContainsArea(roundArea, lineString)
//点没有平均分配,前三分一8个点,后三分之一3个点 //点没有平均分配,前三分一8个点,后三分之一3个点
// println("-----------相交线段下标 crossIndex = ${crossIndex}") // println("-----------相交线段下标 crossIndex = ${crossIndex}")
...@@ -246,10 +240,10 @@ class MapOpt @Inject constructor( ...@@ -246,10 +240,10 @@ class MapOpt @Inject constructor(
val MU = 100000 val MU = 100000
var minLat = Math.min(lat1, lat2).times(MU).toInt() - 10 var minLat = Math.min(lat1, lat2).times(MU).toInt() - 20
var maxLat = Math.max(lat1, lat2).times(MU).toInt() + 10 var maxLat = Math.max(lat1, lat2).times(MU).toInt() + 20
var minLon = Math.min(lon1, lon2).times(MU).toInt() - 10 var minLon = Math.min(lon1, lon2).times(MU).toInt() - 20
var maxLon = Math.max(lon1, lon2).times(MU).toInt() + 10 var maxLon = Math.max(lon1, lon2).times(MU).toInt() + 20
var rect = Rect( var rect = Rect(
minLon, minLat, maxLon, maxLat minLon, minLat, maxLon, maxLat
...@@ -264,12 +258,14 @@ class MapOpt @Inject constructor( ...@@ -264,12 +258,14 @@ class MapOpt @Inject constructor(
/**画路径起终点***/ /**画路径起终点***/
fun addEndMarker(endPoint: EndPoint, businessStatus: String) { fun addEndMarker(endPoint: EndPoint, businessStatus: String) {
if (businessStatus == AvpContants.TRANSPORT_COMPLETED || businessStatus == AvpContants.TRANSPORT_CANCELED) { if (businessStatus == AvpContants.TRANSPORT_COMPLETED || businessStatus == AvpContants.TRANSPORT_CANCELED ||
businessStatus == AvpContants.PARK_COMPLETED
) {
//删除终点marker //删除终点marker
deleteEndMarker() deleteEndMarker()
return return
} }
if (pEndMarker == null) { if (pEndMarker == null && endPoint != null) {
var mEndPoint = LatLng(endPoint.latitude, endPoint.longitude) var mEndPoint = LatLng(endPoint.latitude, endPoint.longitude)
val end_icon = BitmapFactory.decodeResource(context.resources, R.drawable.plan_end) val end_icon = BitmapFactory.decodeResource(context.resources, R.drawable.plan_end)
pEndMarker = mMineMap?.addMarker( pEndMarker = mMineMap?.addMarker(
...@@ -283,7 +279,7 @@ class MapOpt @Inject constructor( ...@@ -283,7 +279,7 @@ class MapOpt @Inject constructor(
fun drawReversePark( fun drawReversePark(
businessType: String, businessStatus: String, gearType: String, space: Space businessType: String, businessStatus: String, gearType: String, space: Space
) { ) {
if (businessType == AvpContants.Park_TYPE) { if (businessType == AvpContants.PARK_TYPE) {
if (businessStatus == AvpContants.TRANSPORT_COMPLETED) {//到达停车点 if (businessStatus == AvpContants.TRANSPORT_COMPLETED) {//到达停车点
HighMapApi.setCameraDistance(30f) HighMapApi.setCameraDistance(30f)
HighMapApi.setCameraAngle(60f) HighMapApi.setCameraAngle(60f)
...@@ -316,15 +312,17 @@ class MapOpt @Inject constructor( ...@@ -316,15 +312,17 @@ class MapOpt @Inject constructor(
//是否显示车位流光效果 //是否显示车位流光效果
fun showParkLight(businessType: String, businessStatus: String, space: Space) { fun showParkLight(businessType: String, businessStatus: String, space: Space) {
if (businessType == AvpContants.Park_TYPE) { if (businessType == AvpContants.PARK_TYPE) {
if (businessStatus == AvpContants.PARK_COMPLETED) { if (businessStatus == AvpContants.PARK_COMPLETED) {
//消除车位流光特效 //消除车位流光特效
HighMapApi.parkRoundLight("") HighMapApi.parkRoundLight("")
} else if (space == null) {
HighMapApi.parkRoundLight("")
} else { } else {
HighMapApi.parkRoundLight(space.name) HighMapApi.parkRoundLight(space.name)
} }
} else { } else {
// HighMapApi.parkRoundLight("") HighMapApi.parkRoundLight("")
} }
} }
......
...@@ -25,6 +25,7 @@ import com.sd.cavphmi.bean.CarPanelBean ...@@ -25,6 +25,7 @@ import com.sd.cavphmi.bean.CarPanelBean
import com.sd.cavphmi.bean.CarVehicle import com.sd.cavphmi.bean.CarVehicle
import com.sd.cavphmi.bean.PerceptionBean import com.sd.cavphmi.bean.PerceptionBean
import com.sd.cavphmi.bean.V2xStartBean import com.sd.cavphmi.bean.V2xStartBean
import com.sd.cavphmi.bean.VObject
import com.sd.cavphmi.bean.mock.MRoutes import com.sd.cavphmi.bean.mock.MRoutes
import com.sd.cavphmi.bean.mock.ParkPath import com.sd.cavphmi.bean.mock.ParkPath
import com.sd.cavphmi.highmap.AllLine import com.sd.cavphmi.highmap.AllLine
...@@ -76,7 +77,7 @@ class MockVM @Inject constructor( ...@@ -76,7 +77,7 @@ class MockVM @Inject constructor(
* @param binding 里的速度 * @param binding 里的速度
* **/ * **/
fun onVehicleMockPark( fun onVehicleMockPark(
carVehicle: MutableStateFlow<CarVehicle> carVehicle: MutableStateFlow<CarVehicle>, v2xStartBean: MutableLiveData<V2xStartBean>
) { ) {
// HighMapApi.setCameraAngle(30f) // HighMapApi.setCameraAngle(30f)
viewModelScope.launch { viewModelScope.launch {
...@@ -121,9 +122,34 @@ class MockVM @Inject constructor( ...@@ -121,9 +122,34 @@ class MockVM @Inject constructor(
var bearing = 0f var bearing = 0f
val random = Random val random = Random
mRoutes.rs.forEachIndexed { index, it -> mRoutes.rs.forEachIndexed { index, it ->
if (index == 8) {//紧急制动预警
var v2x = V2xStartBean().apply {
type = 6
objects =
listOf(VObject(""), VObject("f117fdfa-feff-0100-85dc-35850000acb0"))
}
v2xStartBean.postValue(v2x)
} else if (index == 30) {
//前向碰撞
var v2x = V2xStartBean().apply {
type = 1
objects =
listOf(VObject(""), VObject("f117fdfa-feff-0100-85dc-35850000acb0"))
}
v2xStartBean.postValue(v2x)
} else if (index == 60) {
//弱势交通参与者
var v2x = V2xStartBean().apply {
type = 12
objects =
listOf(VObject(""), VObject("50332456-3030-3030-3530-303334533955"))
}
v2xStartBean.postValue(v2x)
}
//变速 //变速
CarPanelBean.instance.speed.set(random.nextInt(10..15)) CarPanelBean.instance.speed.set(random.nextInt(10..15))
//一边移动一把你计算航向角
if (index > 0 && index < mRoutes.rs.count()) { if (index > 0 && index < mRoutes.rs.count()) {
var p1 = mRoutes.rs.get(index - 1) var p1 = mRoutes.rs.get(index - 1)
var pc = mRoutes.rs.get(index) var pc = mRoutes.rs.get(index)
...@@ -261,7 +287,8 @@ class MockVM @Inject constructor( ...@@ -261,7 +287,8 @@ class MockVM @Inject constructor(
//召车 航向角 238.38134765625 //召车 航向角 238.38134765625
fun onVehicleMockCall( fun onVehicleMockCall(
carVehicle: MutableStateFlow<CarVehicle>, carVehicle: MutableStateFlow<CarVehicle>,
targetPre: MutableLiveData<PerceptionBean>? targetPre: MutableLiveData<PerceptionBean>,
v2xStartBean: MutableLiveData<V2xStartBean>
) { ) {
viewModelScope.launch { viewModelScope.launch {
//初始镜头角度 //初始镜头角度
...@@ -320,7 +347,7 @@ class MockVM @Inject constructor( ...@@ -320,7 +347,7 @@ class MockVM @Inject constructor(
if (index <= 139) { if (index <= 139) {
//正在小心翼翼的出库 //正在小心翼翼的出库
CarPanelBean.instance.speed.set(random.nextInt(1..5)) CarPanelBean.instance.speed.set(random.nextInt(1..5))
}else { } else {
//开起来了 //开起来了
CarPanelBean.instance.speed.set(random.nextInt(10..16)) CarPanelBean.instance.speed.set(random.nextInt(10..16))
} }
...@@ -523,6 +550,7 @@ class MockVM @Inject constructor( ...@@ -523,6 +550,7 @@ class MockVM @Inject constructor(
//感知目标物 //感知目标物
fun onSubTargetMock(targetPre: MutableLiveData<PerceptionBean>) { fun onSubTargetMock(targetPre: MutableLiveData<PerceptionBean>) {
viewModelScope.launch { viewModelScope.launch {
delay(20000)
val parts = mutableListOf<String>() val parts = mutableListOf<String>()
FileIoUtils.getAssetMock(context, "mock/PerTarget.txt", parts) FileIoUtils.getAssetMock(context, "mock/PerTarget.txt", parts)
var temp = "" var temp = ""
......
...@@ -153,7 +153,7 @@ ...@@ -153,7 +153,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_horizontal" android:layout_gravity="center_horizontal"
android:text="直接到首页" android:text="直接到首页"
android:visibility="visible"/> android:visibility="gone"/>
</LinearLayout> </LinearLayout>
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment