Functions_edit:
  open: |-
    界面变量.当前组件索引 = -1;
    界面变量.所有组件数组 = 方法.取所有组件;
    界面变量.当前组件名称 = "main";
    方法.执行方法('保存鼠标位置');
    方法.执行方法('设置当前组件');
    方法.消息('&a已切换到编辑模式!');
    return 方法.执行方法('操作提示');
  高精度数值相加: |-
    return (方法.取成员(局部变量.参数, 0) * 100000 + 方法.取成员(局部变量.参数, 1) * 100000) / 100000
  高精度数值相减: |-
    return (方法.取成员(局部变量.参数, 0) * 100000 - 方法.取成员(局部变量.参数, 1) * 100000) / 100000
  设置当前组件为鼠标悬浮组件: |-
    局部变量.x = 方法.取鼠标x;
    局部变量.y = 方法.取鼠标y;
    界面变量.当前组件 = 方法.取悬浮组件;
    界面变量.当前组件名称 == 界面变量.当前组件.name ? return 0 : 0;
    界面变量.当前组件名称 = 界面变量.当前组件.name;
    方法.执行方法('设置当前组件');
  设置当前组件: |-
    界面变量.当前组件名称 == "" ? return 方法.消息('未选取组件') : 0;
    界面变量.当前组件 = 方法.取组件(界面变量.当前组件名称);
    界面变量.当前组件X偏移变量 = 方法.合并文本(界面变量.当前组件名称, '_offsetX');
    界面变量.当前组件Y偏移变量 = 方法.合并文本(界面变量.当前组件名称, '_offsetY');
    方法.设置变量值(界面变量.当前组件X偏移变量, 方法.取组件值(界面变量.当前组件名称, 'x')-界面变量.x);
    方法.设置变量值(界面变量.当前组件Y偏移变量, 方法.取组件值(界面变量.当前组件名称, 'y')-界面变量.y);
    界面变量.当前组件.x = 方法.合并文本("界面变量.x+方法.取变量('", 界面变量.当前组件X偏移变量, "');");
    界面变量.当前组件.y = 方法.合并文本("界面变量.y+方法.取变量('", 界面变量.当前组件Y偏移变量, "');");
    方法.消息(方法.合并文本('&6已选择组件: &a', 界面变量.当前组件名称));
    方法.执行方法('操作提示');
  打印当前组件: |-
    界面变量.当前组件名称 == "" ? return 方法.消息('未选取组件') : 0;
    方法.消息('&6当前组件信息: ');
    方法.消息(方法.合并文本('&6名称: &c', 界面变量.当前组件名称));
    方法.消息(方法.合并文本('&6宽: &3', 方法.取组件值(界面变量.当前组件名称, 'width'), ' &6高: &3', 方法.取组件值(界面变量.当前组件名称, 'width')));
    方法.消息(方法.合并文本('&6X: &3', 方法.取组件值(界面变量.当前组件名称, 'x')-界面变量.x, ' &6Y: &3', 方法.取组件值(界面变量.当前组件名称, 'y')-界面变量.y));
    方法.消息(方法.合并文本('&6scale: &3', 界面变量.当前组件.scale));
  放大缩小组件: |-
    界面变量.当前组件名称 == "" ? return 方法.消息('未选取组件') : 0;
    界面变量.当前组件.scale = 方法.执行方法('高精度数值相加', 界面变量.当前组件.scale , 方法.取滚轮值 * 0.1);
    方法.执行方法('操作提示');
  mouse_move: |-
    方法.执行方法('鼠标移动', 方法.取鼠标X - 界面变量.当前鼠标X, 方法.取鼠标Y - 界面变量.当前鼠标Y);
    方法.执行方法('保存鼠标位置');
  保存鼠标位置: |-
    界面变量.当前鼠标X = 方法.取鼠标X;
    界面变量.当前鼠标Y = 方法.取鼠标Y;
  鼠标移动: |-
    界面变量.当前组件名称 == "" ? return 0 : 0;
    方法.键位是否按下('mouse_left') == 1 ? {
      (界面变量.当前组件名称 == ""  || 界面变量.当前组件名称 == "main")? return 0 : 0;
      局部变量.偏移X = 方法.取成员(局部变量.参数, 0);
      局部变量.偏移Y = 方法.取成员(局部变量.参数, 1);
      局部变量.偏移X != 0 ? 方法.设置变量值(界面变量.当前组件X偏移变量, 方法.取变量(界面变量.当前组件X偏移变量) + 局部变量.偏移X) : 0;
      局部变量.偏移Y != 0 ? 方法.设置变量值(界面变量.当前组件Y偏移变量, 方法.取变量(界面变量.当前组件Y偏移变量) + 局部变量.偏移Y) : 0;
      方法.执行方法('操作提示');
    } : 0;
  click_left: |-
    局部变量.组件名称 = 方法.取鼠标悬浮组件名;
    局部变量.组件名称 == "" ? return 1 : 0;
    方法.是否存在前缀(局部变量.组件名称, 'MiaoDragonCoreEditor') ? 0 : {
      方法.执行方法('设置当前组件为鼠标悬浮组件');
      return 1;
    };
    局部变量.组件名称 == 'MiaoDragonCoreEditorexit_label' ? return 方法.执行方法('退出编辑') : 0;
    局部变量.组件名称 == 'MiaoDragonCoreEditorupload_label' ? {
      方法.键位是否按下('LCONTROL') == 0 ? return 方法.消息('&c配置上传后将会覆盖服务器配置', '&d如需继续 请按住 &4Ctrl &d点击上传!') : 0;
      return 方法.执行方法('上传界面');
    } : 0;
    局部变量.组件名称 == 'MiaoDragonCoreEditorcreate_label' ? return 方法.执行方法('创建组件') : 0;
    局部变量.组件名称 == 'MiaoDragonCoreEditordelete_label' ? {
      界面变量.当前组件名称 == "main" ? return 方法.消息('&c删除失败 main 组件不允许删除!') : 0;
      方法.键位是否按下('LCONTROL') == 0 ? return 方法.消息(方法.合并文本('&6是否需要删除 &b', 界面变量.当前组件名称,' &6组件?'), '&c如需继续 请按住 &4Ctrl &c点击删除!') : 0;
      方法.消息(方法.合并文本('&6组件 &b', 界面变量.当前组件名称,' &c已删除!'));
      方法.删除组件(界面变量.当前组件名称);
      界面变量.当前组件名称 = "main";
      方法.执行方法('设置当前组件');
      return 1;
    } : 0;
    方法.是否存在前缀(局部变量.组件名称, 'MiaoDragonCoreEditor_') ? {
      局部变量.组件名称数组 = 方法.分割(局部变量.组件名称, '_');
      局部变量.操作属性 = 方法.取成员(局部变量.组件名称数组, 1);
      return 方法.执行方法('编辑组件', 局部变量.操作属性);
    } : 0;
    return 1;
  click_right: |-
    return 1;
  编辑组件: |-
    方法.切换方法集('Functions_getInput');
    方法.执行方法('open', 'Functions_edit', '设置组件', 方法.取组件值(界面变量.当前组件名称, 局部变量.参数[0]), 局部变量.参数[0]);
    return 1;
  组件居中: |-
    界面变量.当前组件名称 == "" ? return 方法.消息('未选取组件') : 0;
    界面变量.当前组件.center ? {
      方法.消息(方法.合并文本('&6组件: &3', 界面变量.当前组件名称, ' &c已取消居中...'))
    } : {
      方法.消息(方法.合并文本('&6组件: &3', 界面变量.当前组件名称, ' &a已居中...'))
    }
    界面变量.当前组件.center = !界面变量.当前组件.center;
  操作提示: |-
    方法.执行方法(
      '绘制操作提示',
      'exit=&6组件属性编辑模式 &c&l退出',
      '_name=&3组件名称: &r',
      'create=&3点击此行新增一个组件 &a&l新增',
      'delete=&c点击此行删除此组件 &4&l删除',
      '_x=&3位置 X: &r',
      '_y=&3位置 Y: &r',
      '_width=&3组件宽度: &r',
      '_height=&3组件高度: &r',
      '_scale=&3组件缩放: &r',
      '_texture=&3材质地址: &r',
      '_texts=&3文本内容: &r',
      '_identifier=&3插槽名称: &r',
      '_text=&3文本框内容: &r',
      '2=&c点击其他组件可进行切换',
      '3=&aWASD 移动位置 默认移动1像素',
      '31=&a按住Shift移动0.1像素 按住Ctrl移动10像素',
      '4=&2Ctrl + 鼠标滚轮 缩放组件',
      'upload=&d点击此处 上传配置到服务器 &a&l上传'
    );
  绘制操作提示: |-
    局部变量.起始偏移X = 80;
    局部变量.起始偏移Y = 80;
    局部变量.文本偏移 = 12;
    局部变量.组件Y偏移 = 局部变量.起始偏移Y;
    for_each(局部变量.提示, 局部变量.参数, {
      局部变量.组件名称数组 = 方法.分割(局部变量.提示, '=');
      局部变量.组件名称 = 局部变量.组件名称数组[0];
      局部变量.组件提示 = 局部变量.组件名称数组[1];
      局部变量.组件 = 方法.新建组件(方法.合并文本('MiaoDragonCoreEditor', 局部变量.组件名称, '_label'));
      局部变量.组件Y偏移 = 局部变量.组件Y偏移 + 局部变量.文本偏移;
      局部变量.组件.x = 局部变量.起始偏移X;
      局部变量.组件.y = 局部变量.组件Y偏移;
      方法.是否存在前缀(局部变量.组件名称, '_') ? {
        局部变量.属性名称 = 方法.分割(局部变量.组件名称, '_');
        局部变量.属性值 = 方法.取组件值(界面变量.当前组件, 局部变量.属性名称[1]);
        局部变量.组件.texts = 方法.合并文本(局部变量.组件提示, 局部变量.属性值, ' &b编辑');
      } : {
        局部变量.组件.texts = 局部变量.组件提示;
      };
      方法.添加组件(局部变量.组件);
    });
    return 1;
  设置组件: |-
    方法.设置组件值(界面变量.当前组件名称, 局部变量.参数[1], 局部变量.参数[0]);
    方法.执行方法('操作提示');
    return 1
  上传界面: |-
    界面变量.上传中 == 1 ? return 方法.消息('&c组件上传中 请稍候...') : 0;
    界面变量.上传中 = 1;
    方法.消息(方法.合并文本('&a开始上传 &3', 方法.取当前界面名, ' &a请稍候...'));
    方法.发包('MiaoDragonCoreEditor', 'upload', 'start', 方法.取当前界面名);
  上传组件: |-
    for_each(局部变量.组件, 方法.取所有组件, {
        方法.是否存在前缀(局部变量.组件.name, 'MiaoDragonCoreEditor') ? 0 : {
          方法.发包(
            'MiaoDragonCoreEditor', 
            'upload', 
            'component', 
            方法.取当前界面名, 
            局部变量.组件.name_, 
            局部变量.组件.width_, 
            局部变量.组件.height_, 
            局部变量.组件.x_, 
            局部变量.组件.y_, 
            局部变量.组件.scale_
          );
        }
    });
    方法.执行方法('上传结束');
  上传结束: |-
    方法.发包('MiaoDragonCoreEditor', 'upload', 'end', 方法.取当前界面名);
    界面变量.上传中 = 0;
    方法.消息(方法.合并文本('&a上传成功 重载龙核后即可生效...'));
  wheel: |-
    方法.键位是否按下('LCONTROL') == 1 ? return 方法.执行方法('放大缩小组件') : 0;
  移动组件: |-
    界面变量.当前组件名称 == "" ? return 方法.消息('未选取组件') : 0;
    局部变量.移动距离 = 1;
    局部变量.移动距离 = 方法.键位是否按下("LCONTROL") ? 10 : 局部变量.移动距离;
    局部变量.移动距离 = 方法.键位是否按下("LSHIFT") ? 0.1 : 局部变量.移动距离;
    方法.取当前按下键 == "A" ? 方法.设置变量值(界面变量.当前组件X偏移变量, 方法.执行方法('高精度数值相减', 方法.取变量(界面变量.当前组件X偏移变量), 局部变量.移动距离)) : 0;
    方法.取当前按下键 == "W" ? 方法.设置变量值(界面变量.当前组件Y偏移变量, 方法.执行方法('高精度数值相减', 方法.取变量(界面变量.当前组件Y偏移变量), 局部变量.移动距离)) : 0;
    方法.取当前按下键 == "D" ? 方法.设置变量值(界面变量.当前组件X偏移变量, 方法.执行方法('高精度数值相加', 方法.取变量(界面变量.当前组件X偏移变量), 局部变量.移动距离)) : 0;
    方法.取当前按下键 == "S" ? 方法.设置变量值(界面变量.当前组件Y偏移变量, 方法.执行方法('高精度数值相加', 方法.取变量(界面变量.当前组件Y偏移变量), 局部变量.移动距离)) : 0;
    方法.执行方法('操作提示');
  keyPress: |-
    方法.取当前按下键 == "ESCAPE" ? {
        方法.键位是否按下('LCONTROL') == 1 ? 方法.执行方法('退出编辑') : 方法.消息("&c请先退出编辑模式后关闭界面! &4Ctrl + ESC 强制退出!");
        return 1;
    } : 0;
    界面变量.当前组件名称 != "" ? return 方法.执行方法('移动组件') : 0;
    return 1;
  创建组件: |-
    方法.切换方法集('Functions_create', 0);
    方法.执行方法('open')};
    return 1;
  退出编辑: |-
    方法.删除组件('MiaoDragonCoreEditor', 1);
    方法.消息('&c已退出编辑组件模式!');
    方法.切换方法集('Functions', 1);
    return 1

Functions_create:
  open: |-
    方法.消息('&a已切换到新建组件模式!');
    方法.消息('&6请按键选择需要新建的组件:');
    方法.消息('&61: &a新建 &3界面(texture)');
    方法.消息('&62: &a新建 &3插槽(slot)');
    方法.消息('&63: &a新建 &3文本(label)');
    方法.消息('&64: &a新建 &3文本框(textbox)');
  keyPress: |-
    方法.取当前按下键 == "1" ? return 方法.执行方法('新建组件', '新建界面') : 0;
    方法.取当前按下键 == "2" ? return 方法.执行方法('新建组件', '新建插槽') : 0;
    方法.取当前按下键 == "3" ? return 方法.执行方法('新建组件', '新建文本') : 0;
    方法.取当前按下键 == "4" ? return 方法.执行方法('新建组件', '新建文本框') : 0;
    return 1;
  新建组件: |-
    方法.切换方法集('Functions_getInput', 0);
    方法.执行方法('open', 'Functions_create', 局部变量.参数[0], '请输入组件名称 按回车确认');
    return 1
  新建界面: |-
    局部变量.组件 = 方法.新建组件(方法.合并文本(局部变量.参数[0], '_texture'));
    局部变量.组件.x = 方法.合并文本("main.x");
    局部变量.组件.y = 方法.合并文本("main.y");
    局部变量.组件.width = 16;
    局部变量.组件.height = 16;
    局部变量.组件.texture = "huan/h1.png";
    方法.添加组件(局部变量.组件);
    方法.执行方法('完成新建', 局部变量.组件.name);
  新建插槽: |-
    局部变量.组件 = 方法.新建组件(方法.合并文本(局部变量.参数[0], '_slot'));
    局部变量.组件.x = 方法.合并文本("main.x");
    局部变量.组件.y = 方法.合并文本("main.y");
    局部变量.组件.width = 16;
    局部变量.组件.height = 16;
    局部变量.组件.identifier = "container_36";
    方法.添加组件(局部变量.组件);
    方法.执行方法('完成新建', 局部变量.组件.name);
  新建文本: |-
    局部变量.组件 = 方法.新建组件(方法.合并文本(局部变量.参数[0], '_label'));
    局部变量.组件.x = 方法.合并文本("main.x");
    局部变量.组件.y = 方法.合并文本("main.y");
    局部变量.组件.texts = 局部变量.组件[1] ? 局部变量.组件[1] : 局部变量.组件.name;
    方法.添加组件(局部变量.组件);
    方法.执行方法('完成新建', 局部变量.组件.name);
  新建文本框: |-
    局部变量.组件 = 方法.新建组件(方法.合并文本(局部变量.参数[0], '_textbox'));
    局部变量.组件.x = 方法.合并文本("main.x");
    局部变量.组件.y = 方法.合并文本("main.y");
    局部变量.组件.width = 200;
    局部变量.组件.height = 20;
    局部变量.组件.texts = 局部变量.组件.name;
    方法.添加组件(局部变量.组件);
    方法.执行方法('完成新建', 局部变量.组件.name);
  完成新建: |-
    方法.切换方法集('Functions_edit', 0);
    界面变量.当前组件名称 = 局部变量.参数[0];
    方法.执行方法('设置当前组件');

# 独立方法 用于获取用户输入内容
# 参数1 回调方法集
# 参数2 回调方法
# 参数3 输入提示
# 参数4 默认值
Functions_getInput:
  open: |-
    界面变量.MiaoDragonCoreEditorInputCallbackFunctions = 局部变量.参数[0];
    界面变量.MiaoDragonCoreEditorInputCallbackFunction = 局部变量.参数[1];
    界面变量.MiaoDragonCoreEditorInputDefaultValue = 局部变量.参数[2];
    界面变量.MiaoDragonCoreEditorInputCallbackParams = 局部变量.参数[3];
    局部变量.组件 = 方法.新建组件('MiaoDragonCoreEditor_textbox');
    局部变量.组件.x = (方法.取屏幕宽度 - 200) / 2;
    局部变量.组件.y = 30;
    局部变量.组件.width = 200;
    局部变量.组件.height = 20;
    局部变量.组件.length = 256;
    局部变量.组件.text = 界面变量.MiaoDragonCoreEditorInputDefaultValue;
    局部变量.组件.focused = true;
    方法.添加组件(局部变量.组件);
    局部变量.组件 = 方法.新建组件('MiaoDragonCoreEditor_label');
    局部变量.组件.x = (方法.取屏幕宽度 - 200) / 2;
    局部变量.组件.y = 20;
    局部变量.组件.width = 200;
    局部变量.组件.height = 20;
    局部变量.组件.texts = "&6请在下面修改内容后 按 &c回车 &a确认 &6按 &rESC &c取消";
    方法.添加组件(局部变量.组件);
  click: |-
    方法.取鼠标悬浮组件名 != "MiaoDragonCoreEditor_textbox" ? return 1 : 0;
  keyPress: |-
    方法.取当前按下键 == "ESCAPE" ? return 方法.执行方法('移除组件并退出') : 0;
    界面变量.MiaoDragonCoreEditorInputText = 方法.取组件值('MiaoDragonCoreEditor_textbox','text');
    (方法.取当前按下键 == "RETURN") ? {
      方法.执行方法('移除组件并退出');
      方法.执行方法(界面变量.MiaoDragonCoreEditorInputCallbackFunction, 界面变量.MiaoDragonCoreEditorInputText, 界面变量.MiaoDragonCoreEditorInputCallbackParams);
      return 1;
    } : 0;
  移除组件并退出: |-
    方法.删除组件('MiaoDragonCoreEditor_label');
    方法.删除组件('MiaoDragonCoreEditor_textbox');
    方法.切换方法集(界面变量.MiaoDragonCoreEditorInputCallbackFunctions, 0);
