
#   00000000    0000000    0000000
#   000   000  000   000  000     
#   00000000   000   000  0000000 
#   000        000   000       000
#   000         0000000   0000000 

Vector = require './vector'

class Pos

    constructor: (x=0, y=0, z=0) ->
        
        if x.x? and x.y?
            @x = Math.round x.x
            @y = Math.round x.y
            @z = Math.round x.z ? 0
        else if Array.isArray x
            @x = Math.floor x[0]
            @y = Math.floor x[1]
            @z = Math.floor x[2]
        else
            @x = Math.floor x
            @y = Math.floor y
            @z = Math.floor z
        # log "Pos #{@x} #{@y} #{@z}"
        if Number.isNaN @x
            throw new Error

    length:    -> Math.sqrt @x*@x + @y*@y + @z*@z
    vector:    -> new Vector @x, @y, @z 
    minus: (p) -> new Pos @x-p.x, @y-p.y, @z-p.z
    to:    (p) -> new Pos p.x-@x, p.y-@y, p.z-@z
    plus:  (p) -> new Pos @x+p.x, @y+p.y, @z+p.z
    mul:   (f) -> new Pos @x*f, @y*f, @z*f
    div:   (d) -> new Pos Math.floor(@x/d), Math.floor(@y/d), Math.floor(@z/d)
    eql:   (p) -> @x==p.x and @y==p.y and @z==p.z
    str:       -> "#{@x} #{@y} #{@z}"

    reset: -> 
        @x = @y = @z = 0
        @
    
    add: (p) -> 
        @x = Math.round @x + p.x 
        @y = Math.round @y + p.y 
        @z = Math.round @z + p.z
        @
        
    sub: (p) -> 
        @x = Math.round @x - p.x 
        @y = Math.round @y - p.y 
        @z = Math.round @z - p.z
        @

module.exports = Pos
