當前位置: 首頁>>代碼示例>>TypeScript>>正文


TypeScript immview.Domain類代碼示例

本文整理匯總了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()
            ))
        }
    }
)
開發者ID:arturkulig,項目名稱:immview-snake-demo,代碼行數:29,代碼來源:TreatDomain.ts

示例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()
        }
    }
)
開發者ID:arturkulig,項目名稱:immview-snake-demo,代碼行數:30,代碼來源:SnakeDomain.ts

示例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$,
    {}
)
開發者ID:arturkulig,項目名稱:immview-snake-demo,代碼行數:29,代碼來源:BoardDomain.ts

示例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$,
    {}
)
開發者ID:arturkulig,項目名稱:immview-snake-demo,代碼行數:21,代碼來源:TickerDomain.ts

示例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])
            }
        }
    }
)
開發者ID:arturkulig,項目名稱:immview-snake-demo,代碼行數:30,代碼來源:DirectionDomain.ts


注:本文中的immview.Domain類示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。