/// <reference path="../runtime.d.ts" />

"use strict";

function icons () {
    this._init();
}

icons.prototype._init = function () {
    this.icons = icons_4665ee12_3a1f_44a4_bea3_0fccba634dc1;
    //delete(icons_4665ee12_3a1f_44a4_bea3_0fccba634dc1);

    // tileset的起点
    this.tilesetStartOffset = 10000;
}

icons.prototype.getIcons = function () {
    var icons = core.clone(this.icons);
    icons.hero.leftup = icons.hero.leftdown = icons.hero.left;
    icons.hero.rightup = icons.hero.rightdown = icons.hero.right;
    return icons;
}

////// 根据道具ID获得其cls //////
icons.prototype.getClsFromId = function (id) {
    for (var cls in core.material.icons) {
        if (cls != 'hero' && id in core.material.icons[cls])
            return cls;
    }
    return null;
}

icons.prototype.getAllIconIds = function () {
    if (this.allIconIds) return this.allIconIds;
    this.allIconIds = [];
    for (var type in this.icons) {
        this.allIconIds = this.allIconIds.concat(Object.keys(this.icons[type]));
    }
    return this.allIconIds;
}

icons.prototype._getAnimateFrames = function (cls) {
    if (cls == 'enemys' || cls == 'npcs') {
        return 2;
    }
    if (cls == 'animates' || cls == 'enemy48' || cls == 'npc48') {
        return 4;
    }
    return 1;
}

////// 根据图块数字或ID获得所在的tileset和坐标信息 //////
icons.prototype.getTilesetOffset = function (id) {

    if (typeof id == 'string') {
        id = core.getIdOfThis(id);
        // Tileset的ID必须是 X+数字 的形式
        if (!/^X\d+$/.test(id)) return null;
        id = parseInt(id.substring(1));
    }
    else if (typeof id != 'number') {
        return null;
    }

    core.tilesets = core.tilesets || [];
    var startOffset = this.tilesetStartOffset;
    for (var i in core.tilesets) {
        var imgName = core.tilesets[i];
        var img = core.material.images.tilesets[imgName];
        var width = Math.floor(parseInt(img.getAttribute('_width')) / 32), height = Math.floor(parseInt(img.getAttribute('_height')) / 32);
        if (id >= startOffset && id < startOffset + width * height) {
            var x = (id - startOffset) % width, y = parseInt((id - startOffset) / width);
            return { "image": imgName, "x": x, "y": y };
        }
        startOffset += this.tilesetStartOffset;
    }
    return null;
}
