本文整理汇总了TypeScript中immview.Domain.create方法的典型用法代码示例。如果您正苦于以下问题:TypeScript Domain.create方法的具体用法?TypeScript Domain.create怎么用?TypeScript Domain.create使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类immview.Domain
的用法示例。
在下文中一共展示了Domain.create方法的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])
}
}
}
)