33 lines
631 B
CoffeeScript
33 lines
631 B
CoffeeScript
import {Mixin, Property} from '@avocado/composition'
|
|
import {Vector as Vector_} from '@avocado/math'
|
|
import {setterName} from '@avocado/string'
|
|
|
|
export VectorMixin = (
|
|
vector = 'vector', x = 'x', y = 'y', meta = {}
|
|
) -> (Superclass) ->
|
|
|
|
setX = setterName x
|
|
setY = setterName y
|
|
|
|
Base = Mixin(Superclass).with(
|
|
|
|
Property x, meta[x] ? {}
|
|
Property y, meta[y] ? {}
|
|
|
|
Property vector, Object.assign {
|
|
|
|
set: (vector) ->
|
|
|
|
this[setX] vector[0]
|
|
this[setY] vector[1]
|
|
|
|
return
|
|
|
|
get: -> [@[x](), @[y]()]
|
|
|
|
eq: (l, r) -> Vector_.equals l, r
|
|
|
|
}, meta
|
|
)
|
|
class Vector extends Base
|