dirty initial commit
This commit is contained in:
commit
2351c93677
24 changed files with 2203 additions and 0 deletions
78
game/Bitmap.js
Normal file
78
game/Bitmap.js
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
import BoundingRectangle from './BoundingRectangle.js'
|
||||
|
||||
export default class Bitmap {
|
||||
constructor(width, height, rgba = null) {
|
||||
this._w = width
|
||||
this._h = height
|
||||
this._com = 4 // number of components per pixel (RGBA)
|
||||
this._boundingRect = new BoundingRectangle(0, this._w - 1, 0, this._h -1)
|
||||
const len = this._w * this._h * this._com
|
||||
this._data = new Uint8ClampedArray(len)
|
||||
if (rgba) {
|
||||
for (let i = 0; i < len; i+=4) {
|
||||
this._data[i] = rgba[0]
|
||||
this._data[i + 1] = rgba[1]
|
||||
this._data[i + 2] = rgba[2]
|
||||
this._data[i + 3] = rgba[3]
|
||||
}
|
||||
}
|
||||
|
||||
// public
|
||||
this.width = this._w
|
||||
this.height = this._h
|
||||
}
|
||||
|
||||
toImage() {
|
||||
const canvas = document.createElement('canvas');
|
||||
const ctx = canvas.getContext('2d');
|
||||
|
||||
canvas.width = this._w;
|
||||
canvas.height = this._h;
|
||||
|
||||
const imgData = ctx.createImageData(canvas.width, canvas.height);
|
||||
imgData.data.set(this._data);
|
||||
ctx.putImageData(imgData, 0, 0);
|
||||
|
||||
|
||||
return new Promise((resolve) => {
|
||||
|
||||
const img = document.createElement('img')
|
||||
img.onload = () => {
|
||||
resolve(img)
|
||||
}
|
||||
img.src = canvas.toDataURL()
|
||||
return img
|
||||
})
|
||||
}
|
||||
|
||||
getPix(x, y, out) {
|
||||
if (x < 0 || y < 0 || x >= this._w || y >= this._h) {
|
||||
return false;
|
||||
}
|
||||
x = Math.round(x)
|
||||
y = Math.round(y)
|
||||
const idx = (y * 4 * this._w) + (x * 4)
|
||||
out[0] = this._data[idx]
|
||||
out[1] = this._data[idx + 1]
|
||||
out[2] = this._data[idx + 2]
|
||||
out[3] = this._data[idx + 3]
|
||||
return true
|
||||
}
|
||||
|
||||
putPix(x, y, rgba) {
|
||||
if (x < 0 || y < 0 || x >= this._w || y >= this._h) {
|
||||
return;
|
||||
}
|
||||
x = Math.round(x)
|
||||
y = Math.round(y)
|
||||
const idx = (y * this._com * this._w) + (x * this._com)
|
||||
this._data[idx] = rgba[0]
|
||||
this._data[idx + 1] = rgba[1]
|
||||
this._data[idx + 2] = rgba[2]
|
||||
this._data[idx + 3] = rgba[3]
|
||||
}
|
||||
|
||||
getBoundingRect() {
|
||||
return this._boundingRect
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue