110 lines
2.3 KiB
Plaintext
110 lines
2.3 KiB
Plaintext
// TODO: this needs totally rearchitected
|
|
|
|
var sprite = {}
|
|
|
|
var graphics = use('graphics')
|
|
var render = use('render')
|
|
var draw2d = use('draw2d')
|
|
var sprite = use('sprite')
|
|
|
|
var SPRITE = key() /* raw C sprite */
|
|
var POS = key() /* cached JS copies of simple data */
|
|
var ROT = key()
|
|
var SCALE = key()
|
|
var SKEW = key()
|
|
var CENTER = key()
|
|
var COLOR = key()
|
|
var IMAGE = key()
|
|
|
|
var ursprite = {
|
|
get pos() { return this[POS] },
|
|
set pos(v) {
|
|
this[POS] = v
|
|
this[SPRITE].pos = v
|
|
},
|
|
|
|
get center() { return this[CENTER] },
|
|
set center(v){
|
|
this[CENTER] = v
|
|
this[SPRITE].center = v
|
|
},
|
|
|
|
get rotation() { return this[ROT] },
|
|
set rotation(t){
|
|
this[ROT] = t
|
|
this[SPRITE].rotation = t * 2*Math.PI /* C expects radians */
|
|
this[SPRITE].set_affine()
|
|
},
|
|
|
|
get scale() { return this[SCALE] },
|
|
set scale(v){
|
|
this[SCALE] = v
|
|
this[SPRITE].scale = v
|
|
this[SPRITE].set_affine()
|
|
},
|
|
|
|
get skew() { return this[SKEW] },
|
|
set skew(v){
|
|
this[SKEW] = v
|
|
this[SPRITE].skew = v
|
|
this[SPRITE].set_affine()
|
|
},
|
|
|
|
get layer() { return this[SPRITE].layer },
|
|
set layer(n){ this[SPRITE].layer = n },
|
|
|
|
get color() { return this[COLOR] },
|
|
set color(v){
|
|
this[COLOR] = v
|
|
this[SPRITE].color = v
|
|
},
|
|
|
|
move(mv) { this[SPRITE].move(mv) },
|
|
moveto(p){
|
|
this.pos = p
|
|
},
|
|
|
|
get image() { return this[IMAGE] },
|
|
set image(img) {
|
|
this[IMAGE] = img
|
|
this[SPRITE].set_image(img)
|
|
}
|
|
}
|
|
|
|
var _sprites = []
|
|
|
|
var def_sprite = stone({
|
|
pos: [0,0],
|
|
rotation: 0,
|
|
scale: [1,1],
|
|
center: [0,0],
|
|
color: [1,1,1,1],
|
|
skew: [0,0],
|
|
layer: 0,
|
|
})
|
|
|
|
sprite.create = function(image, info) {
|
|
info.__proto__ = def_sprite
|
|
var sp = meme(ursprite)
|
|
sp[SPRITE] = new sprite(info)
|
|
sp.image = graphics.texture(image)
|
|
|
|
_sprites.push(sp)
|
|
return sp
|
|
}
|
|
|
|
sprite.forEach = fn => { for (let s of _sprites) fn(s) }
|
|
sprite.values = () => _sprites.slice()
|
|
sprite.geometry= () => graphics.make_sprite_mesh(_sprites)
|
|
|
|
var raws = []
|
|
sprite.queue = function() {
|
|
if (raws.length != _sprites.length)
|
|
raws.length = _sprites.length
|
|
|
|
for (var i = 0; i < _sprites.length; i++) raws[i] = _sprites[i]
|
|
return graphics.make_sprite_queue(_sprites.map(x => x[SPRITE]))
|
|
}
|
|
|
|
return sprite
|