本文整理匯總了TypeScript中immview.Domain類的典型用法代碼示例。如果您正苦於以下問題:TypeScript Domain類的具體用法?TypeScript Domain怎麽用?TypeScript Domain使用的例子?那麽, 這裏精選的類代碼示例或許可以為您提供幫助。
在下文中一共展示了Domain類的5個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的TypeScript代碼示例。
示例1: randomBoardDistance
import {
Atom,
Domain
} from 'immview'
import { BOARD_SIZE } from '../config'
import Vector from './Vector'
function randomBoardDistance() {
return Math.floor(Math.random() * BOARD_SIZE)
}
export type Treat$V = Vector
const treat$ = new Atom<Treat$V>(new Vector(
randomBoardDistance(),
randomBoardDistance()
))
export default Domain.create(
treat$,
{
spawn() {
treat$.next(() => new Vector(
randomBoardDistance(),
randomBoardDistance()
))
}
}
)
示例2: Combine
direction$
.scan((allDirections: SnakeBodyV = snakeDefaultShape, direction) => {
if (direction === DIRECTIONS_RESET) {
return snakeDefaultShape
}
const lastPosition = allDirections[0]
const nextPosition = lastPosition.add(direction)
return [nextPosition, ...allDirections].slice(0, BOARD_SIZE * BOARD_SIZE)
}, snakeDefaultShape)
const snakeBody$ = new Combine({
snakePositions: snakePositions$,
round: Round$
}).map(function takeLastSnakePositions({ snakePositions, round }) {
return snakePositions.slice(0, (round.points + 1))
})
export default Domain.create(
snakeBody$,
{
increase() {
Round$.increase()
},
reset() {
direction$.next(DIRECTIONS_RESET)
Direction$.go(DIRECTIONS.NONE)
Round$.loose()
}
}
)
示例3:
/**
* 4. if head touches board borders
* respawn both snake and treat
*/
if (
snakeHead.x < 0 || snakeHead.x >= BOARD_SIZE ||
snakeHead.y < 0 || snakeHead.y >= BOARD_SIZE
) {
Snake$.reset()
Treat$.spawn()
return new Matrix<FIELD_TYPES>(FIELD_TYPES.EMPTY)
}
let board = new Matrix<FIELD_TYPES>(FIELD_TYPES.EMPTY)
snake.forEach((position) => {
board = board.set(position, FIELD_TYPES.SNAKE)
})
board = board.set(treat, FIELD_TYPES.TREAT)
return board
}
)
export default Domain.create(
board$,
{}
)
示例4: setTimeout
import {
Observable,
Domain,
} from 'immview'
import Round$ from './RoundDomain'
import { PULSE_IN_MS } from '../config'
export type TickerV = number
const ticker$ = new Observable<TickerV>()
const push = () => {
ticker$.next(Date.now())
setTimeout(push, PULSE_IN_MS / 2 / (Round$.deref().points + 1) + PULSE_IN_MS / 2)
}
push()
export default Domain.create(
ticker$,
{}
)
示例5: Combine
const directionDemand$ = new Atom<Vector>(directionVectors.NONE)
const direction$ = new Combine({ ticker: Ticker$, directionDemand: directionDemand$ })
.scan(function bufferTwo(result, item) {
return result.concat([item]).slice(-2)
}, [{ directionDemand: directionVectors.NONE }] as { ticker: number, directionDemand: Vector }[])
.filter(function isNextTick(value) {
return value[0].ticker !== value[1].ticker
})
.map(function pickDemandedDirection(value) {
return value[value.length - 1].directionDemand
})
.scan(function releaseAcceptableDirection(lastAcceptableDirection: Vector, requestedDirection) {
return (
isAcceptableNewDirection(lastAcceptableDirection, requestedDirection)
? requestedDirection
: lastAcceptableDirection
)
}, directionVectors.NONE)
export default Domain.create(
direction$,
{
go(requested: DIRECTIONS) {
if (directionDictionary[requested]) {
directionDemand$.next(directionDictionary[requested])
}
}
}
)