Code:
local GDIT = {};
class GDIT.gEditor
{
constructor()
{
objects = [];
fonts = [ "FONT_10_BOOK.TGA",
"FONT_10_BOOK_HI.TGA",
"FONT_20_BOOK.TGA",
"FONT_20_BOOK_HI.TGA",
"FONT_DEFAULT.TGA",
"FONT_OLD_10_WHITE.TGA",
"FONT_OLD_10_WHITE_HI.TGA",
"FONT_OLD_20_WHITE.TGA",
"FONT_OLD_20_WHITE_HI.TGA",
];
textures = [ "DLG_CONVERSATION.TGA",
"MENU_INGAME.TGA",
"INV_SLOT_FOCUS.TGA",
"INV_SLOT_HIGHLIGHTED_FOCUS.TGA",
"PROGRESS.TGA",
"LOG_BACK.TGA",
"LOG_PAPER.TGA",
"MENU_CHOICE_BACK.TGA",
"MENU_SLIDER_BACK.TGA",
"INV_TITEL.TGA",
"LETTERS.TGA",
"INV_SLOT_EQUIPPED_HIGHLIGHTED_FOCUS.TGA",
"INV_SLOT_EQUIPPED_FOCUS.TGA",
"CONSOLE.TGA",
"FOCUS_HIGHLIGHT.TGA",
];
drawInfo = {
drawName = createDraw("gEditor: ver.Test", "Font_Old_10_White_Hi.TGA", 5750, 800, 250, 250, 250, false),
drawCmd_0 = createDraw("Komendy:", "Font_Old_10_White_Hi.TGA", 5750, 1200, 250, 250, 250, false),
drawCmd_1 = createDraw("/draw <R> <G> <B> <ID_FONT> <TEXT>", "Font_Old_10_White_Hi.TGA", 5750, 1400, 250, 250, 250, false),
drawCmd_2 = createDraw("/texture <WIDTH> <HEIGHT> <ID_TEXTURE>", "Font_Old_10_White_Hi.TGA", 5750, 1600, 250, 250, 250, false),
drawCmd_4 = createDraw("/size <ID> <WIDTH> <HEIGHT>, /tex <ID> <ID_TEXTURE>", "Font_Old_10_White_Hi.TGA", 5750, 1800, 250, 250, 250, false),
drawCmd_5 = createDraw("/text <ID> <TEXT>, /color <ID> <R> <G> <B>, /font <ID <ID_FONT>", "Font_Old_10_White_Hi.TGA", 5750, 2000, 250, 250, 250, false),
drawCmd_6 = createDraw("/delobj <ID>", "Font_Old_10_White_Hi.TGA", 5750, 2200, 250, 250, 250, false),
drawCmd_7 = createDraw("Kliknij prawy przycisk myszy by sprawdzić ID!", "Font_Old_10_White_Hi.TGA", 5750, 2400, 250, 250, 250, false),
};
id_draw = createDraw("NULL", "Font_Old_10_White_Hi.TGA", 0, 0, 255, 0, 0, true);
start = false;
editID = null;
timer = null;
};
function editor()
{
setCursorVisible(start = start?false:true);
enableCameraMovement(start?false:true);
setFreeze(start);
foreach(key in drawInfo)
setDrawVisible(key, start);
};
function draw(params)
{
local drw = sscanf("dddds", params);
if(drw) {
objects.push({ id = createDraw(drw[4], fonts[drw[3]], 4096, 4096, drw[0], drw[1], drw[2], true), type = "draw" });
setDrawVisible(objects[objects.len() - 1].id, true);
} else
addMessage(255, 0, 0, "(gEditor): Poprawna składnia to: /draw <R> <G> <B> <ID_FONT> <TEXT>");
};
function texture(params)
{
local tex = sscanf("ddd", params);
if(tex) {
objects.push({ id = createTexture(4096, 4096, tex[0], tex[1], textures[tex[2]]), type = "texture" });
setTextureVisible(objects[objects.len() - 1].id, true);
} else
addMessage(255, 0, 0, "(gEditor): Poprawna składnia to: /texture <WIDTH> <HEIGHT> <ID_TEXTURE>");
};
function delObj(params)
{
local del = sscanf("d", params);
if(del) {
if(objects[del[0]].type == "draw")
destroyDraw(objects[del[0]].id);
else
destroyTexture(objects[del[0]].id);
objects.remove(del[0]);
} else
addMessage(255, 0, 0, "(gEditor): Poprawna składnia to: /delobj <ID>");
};
function drawText(params)
{
local drw = sscanf("ds", params);
if(drw) {
if(objects[drw[0]].type == "draw")
setDrawText(objects[drw[0]].id, drw[1]);
} else
addMessage(255, 0, 0, "(gEditor): Poprawna składnia to: /text <ID> <TEXT>");
};
function drawColor(params)
{
local drw = sscanf("dddd", params);
if(drw) {
if(objects[drw[0]].type == "draw")
setDrawColor(objects[drw[0]].id, drw[1], drw[2], drw[3]);
} else
addMessage(255, 0, 0, "(gEditor): Poprawna składnia to: /color <ID> <R> <G> <B>");
};
function drawFont(params)
{
local drw = sscanf("dd", params);
if(drw) {
if(objects[drw[0]].type == "draw")
setDrawFont(objects[drw[0]].id, fonts[drw[1]]);
} else
addMessage(255, 0, 0, "(gEditor): Poprawna składnia to: /font <ID <ID_FONT>");
};
function textureSize(params)
{
local drw = sscanf("ddd", params);
if(drw) {
if(objects[drw[0]].type == "texture")
setTextureSize(objects[drw[0]].id, drw[1], drw[2]);
} else
addMessage(255, 0, 0, "(gEditor): Poprawna składnia to: /size <ID> <WIDTH> <HEIGHT>");
};
function textureTex(params)
{
local drw = sscanf("dd", params);
if(drw) {
if(objects[drw[0]].type == "texture")
setTexture(objects[drw[0]].id, textures[drw[1]]);
} else
addMessage(255, 0, 0, "(gEditor): Poprawna składnia to: /tex <ID> <ID_TEXTURE>");
};
function changeObjPos(x, y)
{
if(editID) {
killTimer(timer);
editID = null;
} else {
local objID = getObjID(x, y);
local objPos; local disparity;
if(objID != null) {
editID = { id = objects[objID].id, type = objects[objID].type };
if(editID.type == "draw")
objPos = getDrawPosition(editID.id);
else
objPos = getTexturePosition(editID.id);
disparity = { x = (x - objPos.x), y = (y - objPos.y) };
timer = setTimer(function(object)
{
if(object.editID) {
local mousePos = getCursorPosition();
if(object.editID.type == "draw") {
objPos = getDrawPosition(object.editID.id);
setDrawPosition(object.editID.id, mousePos.x - disparity.x, mousePos.y - disparity.y);
} else {
objPos = getTexturePosition(object.editID.id);
setTexturePosition(object.editID.id, mousePos.x - disparity.x, mousePos.y - disparity.y);
}
}
}, 25, true, this);
}
}
};
function showID(x, y)
{
setDrawVisible(id_draw, isDrawVisible(id_draw)?false:true);
setDrawText(id_draw, "ID: " + getObjID(x, y));
setDrawPosition(id_draw, x + 150, y + 150);
};
function getObjID(x, y)
{
local value;
foreach(val, key in objects) {
if(key.type == "draw") {
local drawPos = getDrawPosition(key.id); local resolution = getResolution();
if((drawPos.x <= x && (drawPos.x + ((8192.0 / resolution.width) * getTextWidth(getDrawFont(key.id), getDrawText(key.id)))) >= x)
&& (drawPos.y <= y && (drawPos.y + 100) >= y))
value = val;
} else {
local texPos = getTexturePosition(key.id); local texSiz = getTextureSize(key.id);
if((texPos.x <= x && (texPos.x + texSiz.width) >= x)
&& (texPos.y <= y && (texPos.y + texSiz.height) >= y))
value = val;
}
}
return value;
};
function createDraw(text, font, x, y, r, g, b, cursor)
{
local draw = _createDraw(text, font, x, y, r, g, b, cursor);
if(draw)
draws[draw] <- { text = text, font = font, color = { r = r, g = g, b = b } };
return draw;
};
function setDrawText(drawID, text)
{
if(drawID)
draws[drawID].text = text;
return _setDrawText(drawID, text);
};
function setDrawFont(drawID, font)
{
if(drawID)
draws[drawID].font = font;
return _setDrawFont(drawID, font);
};
function setDrawColor(drawID, r, g, b)
{
if(drawID) {
draws[drawID].color.r = r;
draws[drawID].color.g = g;
draws[drawID].color.b = b;
}
return _setDrawColor(drawID, r, g, b);
};
function getDrawText(drawID)
{
if(drawID)
return draws[drawID].text;
};
function getDrawFont(drawID)
{
if(drawID)
return draws[drawID].font;
};
function getDrawColor(drawID)
{
if(drawID)
return draws[drawID].color;
};
function destroyDraw(drawID)
{
if(drawID)
draws.rawdelete(drawID);
return _destroyDraw(drawID);
};
// Zapis musisz stworzyć sobie sam
function saveProject(params)
{
foreach(val, key in objects) {
if(key.type == "draw") {
local pos = getDrawPosition(key.id); local col = getDrawColor(key.id);
print("createDraw('" + getDrawText(key.id) + "', '" + getDrawFont(key.id) + "', " + pos.x + ", " + pos.y + ", " + col.r + ", " + col.g + ", " + col.b + ", true);");
} else {
local pos = getTexturePosition(key.id); local siz = getTextureSize(key.id);
print("createTexture(" + pos.x + ", " + pos.y + ", " + siz.width + ", " + siz.height + ", " + getTexture(key.id) + ");");
}
}
};
draws = {};
_createDraw = createDraw;
_setDrawText = setDrawText;
_setDrawFont = setDrawFont;
_setDrawColor = setDrawColor;
_destroyDraw = destroyDraw;
fonts = null;
textures = null;
objects = null;
drawInfo = null;
id_draw = null;
start = false;
editID = null;
timer = null;
};
local gEditTex = GDIT.gEditor();
addEvent("onClick", function(button, x, y, wheel)
{
switch(button) {
case "LEFT_DOWN": gEditTex.changeObjPos(x, y); break;
case "LEFT_UP": gEditTex.changeObjPos(x, y); break;
case "RIGHT_DOWN": gEditTex.showID(x, y); break;
case "RIGHT_UP": gEditTex.showID(x, y); break;
}
});
addEvent("onCommand", function(cmd, params)
{
switch(cmd) {
case "draw": gEditTex.draw(params); break;
case "texture": gEditTex.texture(params); break;
case "delobj": gEditTex.delObj(params); break;
case "size": gEditTex.textureSize(params); break;
case "tex": gEditTex.textureTex(params); break;
case "text": gEditTex.drawText(params); break;
case "color": gEditTex.drawColor(params); break;
case "font": gEditTex.drawFont(params); break;
case "save": gEditTex.saveProject(params); break;
}
});
addEvent("onInit", function()
{
gEditTex.editor();
enableDebugMode(true);
});