Browse Source

add the bounce primitive

tags/2.4.0
Caven Chen 4 years ago
parent
commit
46d855a2fe

+ 2
- 0
modules/overlay/index.js View File

* primitive * primitive
*/ */
export { default as BillboardPrimitive } from './primitive/BillboardPrimitive.js' export { default as BillboardPrimitive } from './primitive/BillboardPrimitive.js'
export { default as BounceBillboardPrimitive } from './primitive/BounceBillboardPrimitive'
export { default as BounceLabelPrimitive } from './primitive/BounceLabelPrimitive'
export { default as DiffuseWallPrimitive } from './primitive/DiffuseWallPrimitive.js' export { default as DiffuseWallPrimitive } from './primitive/DiffuseWallPrimitive.js'
export { default as ElecEllipsoidPrimitive } from './primitive/ElecEllipsoidPrimitive' export { default as ElecEllipsoidPrimitive } from './primitive/ElecEllipsoidPrimitive'
export { default as FlowLinePrimitive } from './primitive/FlowLinePrimitive' export { default as FlowLinePrimitive } from './primitive/FlowLinePrimitive'

+ 96
- 0
modules/overlay/primitive/BounceBillboardPrimitive.js View File

/**
* @Author: Caven
* @Date: 2021-06-03 21:06:17
*/

import { Cesium } from '@dc-modules/namespace'
import State from '@dc-modules/state/State'
import { Util } from '@dc-modules/utils'
import Overlay from '../Overlay'
import BillboardPrimitive from './BillboardPrimitive'

const DEF_STYLE = {
maxOffsetY: 10,
offsetAmount: 0.1
}

class BounceBillboardPrimitive extends BillboardPrimitive {
constructor(position, icon) {
super(position, icon)
this._currentOffset = new Cesium.Cartesian2(0, 0)
this._isUp = true
this.type = Overlay.getOverlayType('bounce_billboard_primitive')
this._state = State.INITIALIZED
}

/**
*
* @param layer
* @private
*/
_onAdd(layer) {
if (!layer) {
return
}
this._layer = layer
this._mountedHook && this._mountedHook()
if (this._layer?.delegate?.add && this._delegate) {
this._delegate = this._layer.billboards.add(this._delegate)
this._layer.delegate.add(this)
}
this._addedHook && this._addedHook()
this._state = State.ADDED
}

_onRemove() {
if (!this._layer || !this._delegate) {
return
}
if (this._layer?.delegate?.remove) {
this._layer.billboards.remove(this._delegate)
this._layer.delegate.remove(this)
}
this._removedHook && this._removedHook()
this._state = State.REMOVED
}

/**
*
*/
update() {
if (!this._show) {
return
}
let maxOffsetY = this._style?.maxOffsetY || DEF_STYLE.maxOffsetY
let offsetAmount = this._style?.offsetAmount || DEF_STYLE.offsetAmount
if (this._currentOffset.y >= 0) {
this._isUp = true
} else if (this._currentOffset.y <= -maxOffsetY) {
this._isUp = false
}
this._currentOffset.y += offsetAmount * (this._isUp ? -1 : 1)
this._delegate.pixelOffset = this._currentOffset
}

/**
*
* @param style
* @returns {BounceBillboardPrimitive}
*/
setStyle(style) {
if (!style || Object.keys(style).length === 0) {
return this
}
delete style['position'] &&
delete style['image'] &&
delete style['width'] &&
delete style['height']
this._style = style
Util.merge(this._delegate, this._style)
return this
}
}

Overlay.registerType('bounce_billboard_primitive')

export default BounceBillboardPrimitive

+ 93
- 0
modules/overlay/primitive/BounceLabelPrimitive.js View File

/**
* @Author: Caven
* @Date: 2021-06-03 21:06:17
*/

import { Cesium } from '@dc-modules/namespace'
import State from '@dc-modules/state/State'
import { Util } from '@dc-modules/utils'
import Overlay from '../Overlay'
import LabelPrimitive from './LabelPrimitive'

const DEF_STYLE = {
maxOffsetY: 10,
offsetAmount: 0.1
}

class BounceLabelPrimitive extends LabelPrimitive {
constructor(position, text) {
super(position, text)
this._currentOffset = new Cesium.Cartesian2(0, 0)
this._isUp = true
this.type = Overlay.getOverlayType('bounce_label_primitive')
this._state = State.INITIALIZED
}

/**
*
* @param layer
* @private
*/
_onAdd(layer) {
if (!layer) {
return
}
this._layer = layer
this._mountedHook && this._mountedHook()
if (this._layer?.delegate?.add && this._delegate) {
this._delegate = this._layer.labels.add(this._delegate)
this._layer.delegate.add(this)
}
this._addedHook && this._addedHook()
this._state = State.ADDED
}

_onRemove() {
if (!this._layer || !this._delegate) {
return
}
if (this._layer?.delegate?.remove) {
this._layer.labels.remove(this._delegate)
this._layer.delegate.remove(this)
}
this._removedHook && this._removedHook()
this._state = State.REMOVED
}

/**
*
*/
update() {
if (!this._show) {
return
}
let maxOffsetY = this._style?.maxOffsetY || DEF_STYLE.maxOffsetY
let offsetAmount = this._style?.offsetAmount || DEF_STYLE.offsetAmount
if (this._currentOffset.y >= 0) {
this._isUp = true
} else if (this._currentOffset.y <= -maxOffsetY) {
this._isUp = false
}
this._currentOffset.y += offsetAmount * (this._isUp ? -1 : 1)
this._delegate.pixelOffset = this._currentOffset
}

/**
*
* @param style
* @returns {BounceLabelPrimitive}
*/
setStyle(style) {
if (!style || Object.keys(style).length === 0) {
return this
}
delete style['position'] && delete style['text']
this._style = style
Util.merge(this._delegate, this._style)
return this
}
}

Overlay.registerType('bounce_label_primitive')

export default BounceLabelPrimitive

+ 4
- 0
packages/core/src/components.js View File

GatheringPlace, GatheringPlace,
TailedAttackArrow, TailedAttackArrow,
BillboardPrimitive, BillboardPrimitive,
BounceBillboardPrimitive,
BounceLabelPrimitive,
DiffuseWallPrimitive, DiffuseWallPrimitive,
ElecEllipsoidPrimitive, ElecEllipsoidPrimitive,
FlowLinePrimitive, FlowLinePrimitive,
GatheringPlace, GatheringPlace,
TailedAttackArrow, TailedAttackArrow,
BillboardPrimitive, BillboardPrimitive,
BounceBillboardPrimitive,
BounceLabelPrimitive,
DiffuseWallPrimitive, DiffuseWallPrimitive,
ElecEllipsoidPrimitive, ElecEllipsoidPrimitive,
FlowLinePrimitive, FlowLinePrimitive,

Loading…
Cancel
Save