Gothic Online Forums
gEditor - drawTextures - Printable Version

+- Gothic Online Forums (https://archive.gothic-online.com)
+-- Forum: Community (https://archive.gothic-online.com/forum-18.html)
+--- Forum: Polish (Polski) (https://archive.gothic-online.com/forum-19.html)
+---- Forum: Skrypty (https://archive.gothic-online.com/forum-47.html)
+---- Thread: gEditor - drawTextures (/thread-1336.html)



gEditor - drawTextures - KimiorV - 10.04.2016

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);
});

Mały skrypt pozwalający na rozmieszczanie drawów i tekstur na ekranie. Zapis projektu każdy musi stworzyć we własny zakresie.

Pastebin: http://pastebin.com/mssziNqC


RE: gEditor - drawTextures - Quarchodron - 10.04.2016

Świetne Big Grin