lr-core
Version:
Line Rider core library
98 lines (81 loc) • 1.66 kB
JavaScript
import {Interface, ArrayOf, Optional} from '../abstract-interface.js'
class State extends Interface {
get id () {
return null
}
get collidable () {
return Boolean
}
get steppable () {
return Boolean
}
step (stepOptions = Object) {
return State
}
}
export class Constraint extends Interface {
get iterating () {
return Boolean
}
resolve (state = State) {
return ArrayOf(State)
}
}
class Cell extends Interface {}
export class Grid extends Interface {
add (line = Line) {
return undefined
}
remove (line = Line) {
return undefined
}
getCellsNearEntity (entity = State) {
return ArrayOf(Cell)
}
getLinesNearEntity (entity = State) {
return ArrayOf(Line)
}
}
export class Line extends Interface {
collide (entity = State) {
return Optional(State)
}
collidesWith (entity = State) {
return Boolean
}
}
export class LineEngine extends Interface {
get iterations () { return Number }
get stepOptions () { return Object }
makeGrid () {
return Grid
}
getLastFrameIndex () {
return Number
}
getLastFrame () {
return Object // Frame
}
// step -> (resolve <-> collide) -> endResolve
getStateMapAtFrame (index = Number) {
return Map
}
getUpdatesAtFrame (index = Number) {
return ArrayOf(Object) // Update
}
getLine (id = Number) {
return Line
}
addLine (line = Line) {
return LineEngine
}
removeLine (line = Line) {
return LineEngine
}
setInitialStates (stateArray = ArrayOf(State)) {
return LineEngine
}
setConstraints (constraints = ArrayOf(Constraint)) {
return LineEngine
}
}