Game_Actor.prototype.SetPoseBitmap = function (poseId) {
var actor1 = this;
var entries = this.getSpriteEntries($dataCharAnim[poseId]);
//console.log(entries);
var fs = require('fs');
path = StorageManager.localPathToDynSprite();
this._counter = 0;
$ActorPose.bitmaps[actor1._actorId] = new Bitmap(1, 1);
$ActorPose.itemBitmaps[actor1._actorId] = [];
var colors = [];
var transparent = [];
index = 0;
function hexToRGB(hex) {
var bigint = parseInt(hex, 16);
var r = (bigint >> 16) & 255;
var g = (bigint >> 8) & 255;
var b = bigint & 255;
return [r / 255, g / 255, b / 255];
}
var amountOfBitmaps = 0
for (key in entries) {
var list = entries[key];
for (var i = 0; i < list.length; i++) {
if (fs.existsSync(path + list[i].folderName + "" + list[i].layerSpritePath + ".png")) {
amountOfBitmaps++;
}
}
}
$ActorPose.renderTex[actor1._actorId] = null;
$ActorPose.container[actor1._actorId] = new PIXI.Container();
for (key in entries) {
var list = entries[key];
for (var i = 0; i < list.length; i++) {
if (fs.existsSync(path + list[i].folderName + "" + list[i].layerSpritePath + ".png")) {
$ActorPose.itemBitmaps[actor1._actorId][index] = ImageManager.LoadDynamicSprite(list[i].folderName, list[i].layerSpritePath);
colors[index] = list[i].colors;
transparent[index] = list[i].transparent;
index++;
this._counter++;
$ActorPose.itemBitmaps[actor1._actorId][index - 1].addLoadListener(function () {
this._counter--;
//var renderTex = null
if (this._counter === 0 && $ActorPose.itemBitmaps[actor1._actorId].length === amountOfBitmaps) {
for (var j = 0; j < $ActorPose.itemBitmaps[actor1._actorId].length; j++) {
var bit = $ActorPose.itemBitmaps[actor1._actorId][j];
if (bit) {
if (!$ActorPose.renderTex[actor1._actorId]) {
$ActorPose.renderTex[actor1._actorId] = PIXI.RenderTexture.create(bit.width, bit.height)
//console.log(bit.width);
}
var usedColors = [];
var newColors = [];
for (var i = 0; i < 10; i++) {
if (colors[j] && colors[j].UsedColors && colors[j].UsedColors.length > i) {
usedColors.push(new Float32Array(hexToRGB(colors[j].UsedColors[i])));
newColors.push(new Float32Array(hexToRGB(colors[j].NewColors[i])));
} else {
usedColors.push(new Float32Array(1, 1, 1));
newColors.push(new Float32Array(1, 1, 1));
}
}
var text = bit._baseTexture;
var texture = new PIXI.Texture(text);
var mySprite = new PIXI.Sprite(texture);
var shader = new ChangeColorPallete(usedColors, newColors, 0.00001);
mySprite.filters = [shader];
if (transparent[j]) {
var pixels = Graphics._renderer.extract.canvas($ActorPose.renderTex[actor1._actorId]);
$ActorPose.bitmaps[actor1._actorId]._context.drawImage(pixels, 0, 0);
$ActorPose.container[actor1._actorId].removeChildren();
$ActorPose.container[actor1._actorId].addChild(mySprite);
Graphics._renderer.render($ActorPose.container[actor1._actorId], $ActorPose.renderTex[actor1._actorId], true);
var pixels = Graphics._renderer.extract.canvas($ActorPose.renderTex[actor1._actorId]);
$ActorPose.bitmaps[actor1._actorId]._context.drawImage(pixels, 0, 0);
$ActorPose.container[actor1._actorId].removeChildren();
} else {
$ActorPose.container[actor1._actorId].addChild(mySprite);
Graphics._renderer.render($ActorPose.container[actor1._actorId], $ActorPose.renderTex[actor1._actorId], true);
}
if ($ActorPose.bitmaps[actor1._actorId].height == 1) {
$ActorPose.bitmaps[actor1._actorId] = new Bitmap(bit.width, bit.height);
}
}
if (amountOfBitmaps - 1 === j) {
var pixels = Graphics._renderer.extract.canvas($ActorPose.renderTex[actor1._actorId]);
$ActorPose.bitmaps[actor1._actorId]._context.drawImage(pixels, 0, 0);
StorageManager.saveDynamicSprite($ActorPose.bitmaps[actor1._actorId], this.currentBitmapPath, this);
//$ActorPose.getBitmap(actor1._actorId) = bitmap;
//$ActorPose.bitmaps[actor1._actorId] = bitmap;
//console.log(actor1._actorId)
$ActorPose.itemBitmaps[actor1._actorId] = [];
$ActorPose.renderTex[actor1._actorId] = null;
$ActorPose.container[actor1._actorId] = null;
this.refreshed = true;
this.needRefresh = false;
this.beingRefreshed = false;
}
}
}
}.bind(this));
}
}
}
}