#include "../PScriptLib/AsHelper.as"

// 图片精灵，用来在屏幕上显示图片
class AsSprite{
    /*
    屏幕内的相对大小，这是个相对值 最小值为(0, 0) 最大值 为 (1, 1)
    如果想设置成屏幕大小，就填 (1, 1)
    */
    Vector2 Size = Vector2(1, 1);
    /*
    屏幕内的相对位置，这是个相对值 最小值为(0, 0) 最大值 为 (1, 1)
    如果要放置在屏幕左上角，就填 (0, 0)
    如果要放置在屏幕右下角，就填 (1, 1)
    */
    Vector2 Position;
    // 背景色, rgba , 0.0~1.0
    Vector4 BgColor;
    /* 
    锚点，最小值为(0, 0) 最大值 为 (1, 1)
    其中 (0, 0) 指的是左上角，
    其中 (1, 1) 指的是右下角，
    */
    Vector2 Anchor;

    // 图片资源
    private Image@ _previousImage; // 用来持有上一张图片的句柄，避免某些因素导致游戏崩溃
    private Image@ _image;
    private string _filename;

    private int _id;

    // 载入图片，参数为Image
    void Load(Image@ inputImage){
        @_previousImage = _image;
        @_image = inputImage;
        _filename = "";
    }

    // 载入图片，参数为文件名
    void Load(string filename){
        if (_filename == filename){
            return;
        }
        Image @itempImage = AsLoadImageFile(filename);
        if (@itempImage == null){
            Print("读取图片失败 " + filename);
            PrintSystemText("读取图片失败 " + filename);
            return;
        }
        @_previousImage = _image;
        @_image = itempImage;
        _filename = filename;
    }

    // 画图，调用一次就画一帧
    void Draw(){
        if (@_image == null){
            return;
        }
        
        // 设置窗口大小和位置
        auto screenSize = ImGui_GetDisplaySize();
        ImGui_SetNextWindowSize(screenSize * Size);
        ImGui_SetNextWindowPos(screenSize * (Position - Size * Anchor));

        // 窗口基本属性
        int windowFlags = 
            ImGuiWindowFlags_NoTitleBar | // 无标题栏
            ImGuiWindowFlags_NoMove |  // 禁止拖动
            ImGuiWindowFlags_NoResize |  // 禁止手动调整窗口大小
            ImGuiWindowFlags_AlwaysAutoResize |  // 总是自动调整窗口大小
            ImGuiWindowFlags_NoInputs | // 穿透鼠标
            ImGuiWindowFlags_NoScrollbar | // 无滚动条
            0;
        ImGui_PushStyleColor(ImGuiCol_WindowBg, BgColor);

        // 窗口边框宽度为0
        ImGui_PushStyleVar(ImGuiStyleVar_WindowPadding,  Vector2(0,0));
        ImGui_PushStyleVar(ImGuiStyleVar_IndentSpacing,  0);
        ImGui_PushStyleVar(ImGuiStyleVar_WindowBorderSize, 0.0f);
        
        // 画窗口
        bool open = true;
        if (_id == 0){
            _id = Rand(10000000);
        }
        if (ImGui_Begin("图片精灵" + _id, open, windowFlags)){
            ImGui_Image(_image, screenSize * Size);
        }

        ImGui_PopStyleVar();
        ImGui_PopStyleVar();
        ImGui_PopStyleVar();
        ImGui_PopStyleColor();

        ImGui_End();
    }
}