[6.6.0][视角切换] 逻辑优化

This commit is contained in:
renwj
2024-09-05 16:29:12 +08:00
parent 538e99d020
commit 08b00f65db
9 changed files with 135 additions and 107 deletions

View File

@@ -152,7 +152,7 @@ class MoGoVisualAngleChangeProvider: IMoGoVisualAngleChangeProvider {
override fun changeScene(scene: Scene) {
prevJob?.safeCancel()
scope.launch {
val delay = scene.delay
val delay = scene.getDelay()
if (delay > 0) {
delay(delay)
}
@@ -165,8 +165,8 @@ class MoGoVisualAngleChangeProvider: IMoGoVisualAngleChangeProvider {
verifyPrior = false
}
if (verifyPrior) {
val lastPriority = prev?.priority ?: Int.MIN_VALUE
val currentPriority = scene.priority
val lastPriority = prev?.getPriority() ?: Int.MIN_VALUE
val currentPriority = scene.getPriority()
if (lastPriority > currentPriority) {
return@launch
}
@@ -182,18 +182,19 @@ class MoGoVisualAngleChangeProvider: IMoGoVisualAngleChangeProvider {
}
private fun doChangeAngle(target: Scene) {
val angle = target.angle
val angle = target.getVisualAngleMode()
CallerMapUIServiceManager.getMapUIController()?.also {
Log.d(TAG, "--- doChangeAngle --- $target")
val prev = prevScene.get()
try {
if (!target.isCanTouch) {
if (!target.isCanTouch()) {
CallerMapUIServiceManager.getMapUIController()?.setAllGesturesEnabled(false)
} else {
CallerMapUIServiceManager.getMapUIController()?.setAllGesturesEnabled(true)
}
val screenToOriginDis = target.getScreenToOriginDis()
when(screenToOriginDis) {
ScreenToOriginDis.NONE -> {}
DEFAULT -> CallerMapUIServiceManager.getMapUIController()?.setScreenToOriginDis(4.0f)
UP -> CallerMapUIServiceManager.getMapUIController()?.setScreenToOriginDis(3.0f)
DOWN -> CallerMapUIServiceManager.getMapUIController()?.setScreenToOriginDis(5.0f)
@@ -206,9 +207,9 @@ class MoGoVisualAngleChangeProvider: IMoGoVisualAngleChangeProvider {
notifyChanged(target)
}
prevScene.set(target)
if (target.displayThreshold > 0) {
if (target.getDisplayThreshold() > 0) {
scope.launch {
delay(target.displayThreshold)
delay(target.getDisplayThreshold())
doChangeAngle(Default())
}
}

View File

@@ -1,8 +1,11 @@
package com.mogo.eagle.core.function.angle.scenes
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.function.api.map.angle.Scene
import com.mogo.eagle.core.function.api.map.angle.ScreenToOriginDis
import com.mogo.eagle.core.function.api.map.angle.ScreenToOriginDis.DOWN
import com.mogo.eagle.core.function.api.map.angle.ScreenToOriginDis.NONE
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
import com.mogo.map.uicontroller.VisualAngleMode
import com.mogo.map.uicontroller.VisualAngleMode.MAP_STYLE_VR_ANGLE_CROSS_NEW
import java.util.concurrent.TimeUnit
@@ -10,28 +13,32 @@ import java.util.concurrent.TimeUnit
/**
* 十字路口
*/
class CrossRoad(private val delayTime: Long = 0, private val unit: TimeUnit = TimeUnit.SECONDS): Scene {
override val angle: VisualAngleMode
get() = MAP_STYLE_VR_ANGLE_CROSS_NEW
class CrossRoad(private val delayTime: Long = 0, unit: TimeUnit = TimeUnit.SECONDS) :
Scene(delayTime, unit) {
override val priority: Int = 0
override val displayThreshold: Long
get() = -1
override fun getVisualAngleMode(): VisualAngleMode {
if (AppIdentityModeUtils.isB2(FunctionBuildConfig.appIdentityMode)) {
return VisualAngleMode.MAP_STYLE_VR_ANGLE_CROSS
}
return MAP_STYLE_VR_ANGLE_CROSS_NEW
}
override val delay: Long
get() = unit.toMillis(delayTime)
override fun isCanTouch(): Boolean {
return false
}
override val isCanSwitch: Boolean
get() = false
override val isCanTouch: Boolean
get() = false
override fun isCanSwitch(): Boolean {
return false
}
override fun toString(): String {
return "CrossRoad(delayTime=${delayTime}, priority=${priority}, displayThreshold: ${displayThreshold}, priority=${priority})"
return "CrossRoad(delayTime=${delayTime}, priority=${getPriority()}, displayThreshold: ${getDisplayThreshold()}, priority=${getPriority()})"
}
override fun getScreenToOriginDis(): ScreenToOriginDis {
if (AppIdentityModeUtils.isB2(FunctionBuildConfig.appIdentityMode)) {
return NONE
}
return DOWN
}
}

View File

@@ -1,37 +1,29 @@
package com.mogo.eagle.core.function.angle.scenes
import android.util.Log
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.function.api.map.angle.Scene
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
import com.mogo.map.uicontroller.VisualAngleMode
import com.mogo.map.uicontroller.VisualAngleMode.MODE_MEDIUM_SIGHT
import java.util.concurrent.TimeUnit
/**
* 默认视图
* @param delay: 表示多少稍后默认值为2
* @param unit: 时间单位,默认为秒
*/
class Default(val delayTime: Long = 0, val unit: TimeUnit = TimeUnit.SECONDS, val forceClosePrev: Boolean = false): Scene(delayTime, unit) {
class Default(val delayTime: Long = 0, val unit: TimeUnit = TimeUnit.SECONDS, val forceClosePrev: Boolean = false): Scene {
override val angle: VisualAngleMode
get() = CallerMapUIServiceManager.getMapUIController()?.getVrAngleDefaultMode() ?: MODE_MEDIUM_SIGHT
override val priority: Int = 0
override val displayThreshold: Long
get() = 0
override val delay: Long
get() = unit.toMillis(delayTime)
override val isCanSwitch: Boolean
get() = true
override val isCanTouch: Boolean
get() = true
override fun getVisualAngleMode(): VisualAngleMode {
Log.d("Default", "---- 1 --------------")
if (AppIdentityModeUtils.isB2(FunctionBuildConfig.appIdentityMode)) {
Log.d("Default", "---- 2 --------------")
return VisualAngleMode.MAP_STYLE_VR_ERHAI_B2
}
return CallerMapUIServiceManager.getMapUIController()?.getVrAngleDefaultMode() ?: MODE_MEDIUM_SIGHT
}
override fun toString(): String {
return "Default(delay=$delay, unit=$unit, angle=$angle, priority=$priority, closePrevious=$forceClosePrev)"
return "Default(delay=${getDelay()}, unit=$unit, angle=${getVisualAngleMode()}, priority=${getPriority()}, closePrevious=$forceClosePrev)"
}
}

View File

@@ -5,21 +5,13 @@ import com.mogo.map.uicontroller.VisualAngleMode
import com.mogo.map.uicontroller.VisualAngleMode.MODE_LONG_SIGHT
import java.util.concurrent.TimeUnit
class LongSight(private val delayTime: Long = 0, private val unit: TimeUnit = TimeUnit.SECONDS): Scene {
class LongSight(private val delayTime: Long = 0, private val unit: TimeUnit = TimeUnit.SECONDS): Scene(delayTime, unit) {
override val angle: VisualAngleMode
get() = MODE_LONG_SIGHT
override val priority: Int
get() = 0
override val displayThreshold: Long
get() = -1
override fun getVisualAngleMode(): VisualAngleMode {
return MODE_LONG_SIGHT
}
override val delay: Long
get() = unit.toMillis(delayTime)
override val isCanSwitch: Boolean
get() = true
override val isCanTouch: Boolean
get() = true
override fun toString(): String {
return "LongSight(delayTime=${delayTime}, priority=${getPriority()}, displayThreshold: ${getDisplayThreshold()}, priority=${getPriority()})"
}
}

View File

@@ -1,33 +1,27 @@
package com.mogo.eagle.core.function.angle.scenes
import com.mogo.eagle.core.data.config.FunctionBuildConfig
import com.mogo.eagle.core.function.api.map.angle.Scene
import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager
import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils
import com.mogo.map.uicontroller.VisualAngleMode
import com.mogo.map.uicontroller.VisualAngleMode.MAP_STYLE_VR_ERHAI_B2
import com.mogo.map.uicontroller.VisualAngleMode.MODE_MEDIUM_SIGHT
import java.util.concurrent.TimeUnit
/**
* 道路事件
*/
class RoadEvent(private val delayTime: Long, private val unit: TimeUnit): Scene {
class RoadEvent(delayTime: Long, unit: TimeUnit): Scene(delayTime, unit) {
override val angle: VisualAngleMode = CallerMapUIServiceManager.getMapUIController()?.getVrAngleDefaultMode() ?: MODE_MEDIUM_SIGHT
override val priority: Int = 0
override val displayThreshold: Long
get() = -1
override val delay: Long
get() = unit.toMillis(delayTime)
override fun toString(): String {
return "RoadEvent(priority=${priority}, displayThreshold: ${displayThreshold}, priority=${priority}"
override fun getVisualAngleMode(): VisualAngleMode {
if (AppIdentityModeUtils.isB2(FunctionBuildConfig.appIdentityMode)) {
return MAP_STYLE_VR_ERHAI_B2
}
return CallerMapUIServiceManager.getMapUIController()?.getVrAngleDefaultMode() ?: MODE_MEDIUM_SIGHT
}
override val isCanSwitch: Boolean
get() = true
override val isCanTouch: Boolean
get() = true
override fun toString(): String {
return "RoadEvent(mode: ${getVisualAngleMode()}, priority=${getPriority()}, displayThreshold: ${getDisplayThreshold()},"
}
}

View File

@@ -8,18 +8,21 @@ import java.util.concurrent.TimeUnit
/**
* 漫游场景
*/
class Roma(val delayTime: Long = 2, val unit: TimeUnit = TimeUnit.SECONDS): Scene {
class Roma(val delayTime: Long = 2, val unit: TimeUnit = TimeUnit.SECONDS): Scene(delayTime, unit) {
override val angle: VisualAngleMode
get() = MAP_STYLE_VR_ROMA
override val priority: Int
get() = 1
override val displayThreshold: Long
get() = -1
override val delay: Long
get() = unit.toMillis(delayTime)
override val isCanSwitch: Boolean
get() = false
override val isCanTouch: Boolean
get() = false
override fun getVisualAngleMode(): VisualAngleMode {
return MAP_STYLE_VR_ROMA
}
override fun isCanTouch(): Boolean {
return false
}
override fun isCanSwitch(): Boolean {
return false
}
override fun getPriority(): Int {
return 1
}
}