Sahli/16col/tundra.js

90 lines
2.8 KiB
JavaScript
Raw Normal View History

// Generated by CoffeeScript 1.7.1
(function() {
var __hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
this.ImageTextModeTundra = (function(_super) {
__extends(ImageTextModeTundra, _super);
function ImageTextModeTundra(options) {
var k, v;
ImageTextModeTundra.__super__.constructor.apply(this, arguments);
for (k in options) {
if (!__hasProp.call(options, k)) continue;
v = options[k];
this[k] = v;
}
}
ImageTextModeTundra.prototype.parse = function(content) {
var bg, ch, colors, command, fg, palidx, rgb, x, y, _i;
colors = [[0, 0, 0]];
palidx = 1;
x = 0;
y = 0;
fg = 0;
bg = 0;
this.screen[y] = [];
content = content.substr(8).split('');
while (command = content.shift()) {
if (command === "\x1a") {
break;
}
command = command.charCodeAt(0);
if (command === 1) {
y = this.unpackLong(content.splice(0, 4).join(''));
x = this.unpackLong(content.splice(0, 4).join(''));
if (this.screen[y] == null) {
this.screen[y] = [];
}
continue;
}
ch = null;
if (command === 2) {
ch = content.shift();
rgb = this.unpackLong(content.splice(0, 4).join(''));
fg = palidx++;
colors.push([(rgb >> 16) & 0x000000ff, (rgb >> 8) & 0x000000ff, rgb & 0x000000ff]);
} else if (command === 4) {
ch = content.shift();
rgb = this.unpackLong(content.splice(0, 4).join(''));
bg = palidx++;
colors.push([(rgb >> 16) & 0x000000ff, (rgb >> 8) & 0x000000ff, rgb & 0x000000ff]);
} else if (command === 6) {
ch = content.shift();
fg = palidx++;
bg = palidx++;
for (_i = 0; _i <= 1; _i++) {
rgb = this.unpackLong(content.splice(0, 4).join(''));
colors.push([(rgb >> 16) & 0x000000ff, (rgb >> 8) & 0x000000ff, rgb & 0x000000ff]);
}
}
if (ch == null) {
ch = String.fromCharCode(command);
}
this.screen[y][x] = {
'ch': ch,
'fg': fg,
'bg': bg
};
x++;
if (x === 80) {
x = 0;
y++;
this.screen[y] = [];
}
}
if (this.screen[y].length === 0) {
this.screen.pop();
}
return this.palette = new ImageTextModePalette({
colors: colors
});
};
return ImageTextModeTundra;
})(this.ImageTextMode);
}).call(this);