pyscreeps-arena 0.5.8.2__tar.gz → 0.5.8.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/PKG-INFO +1 -1
- pyscreeps_arena-0.5.8.4/pyscreeps_arena/afters/__init__.py +6 -0
- pyscreeps_arena-0.5.8.4/pyscreeps_arena/afters/after_config.py +84 -0
- pyscreeps_arena-0.5.8.4/pyscreeps_arena/afters/after_custom.py +87 -0
- pyscreeps_arena-0.5.8.4/pyscreeps_arena/afters/after_empty.py +34 -0
- pyscreeps_arena-0.5.8.4/pyscreeps_arena/afters/after_prefab.py +67 -0
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/core/const.py +1 -1
- pyscreeps_arena-0.5.8.4/pyscreeps_arena/project.7z +0 -0
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/ui/project_ui.py +115 -2
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena.egg-info/PKG-INFO +1 -1
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena.egg-info/SOURCES.txt +5 -0
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/setup.py +1 -1
- pyscreeps_arena-0.5.8.2/pyscreeps_arena/project.7z +0 -0
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/__init__.py +0 -0
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/build.py +0 -0
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/compiler.py +0 -0
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/core/__init__.py +0 -0
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/core/basic.py +0 -0
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/core/config.py +0 -0
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/core/core.py +0 -0
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/core/main.py +0 -0
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/core/utils.py +0 -0
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/localization.py +0 -0
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/ui/P2PY.py +0 -0
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/ui/__init__.py +0 -0
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/ui/creeplogic_edit.py +0 -0
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/ui/map_render.py +0 -0
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/ui/mapviewer.py +0 -0
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/ui/qcreeplogic/__init__.py +0 -0
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/ui/qcreeplogic/model.py +0 -0
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/ui/qcreeplogic/qcreeplogic.py +0 -0
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/ui/qmapker/__init__.py +0 -0
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/ui/qmapker/qmapmarker.py +0 -0
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/ui/qmapker/qvariable.py +0 -0
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/ui/qmapker/test_compact_variable.py +0 -0
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/ui/qmapker/test_qmapmarker.py +0 -0
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/ui/qmapker/test_qvariable.py +0 -0
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/ui/qmapker/to_code.py +0 -0
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/ui/qmapv/__init__.py +0 -0
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/ui/qmapv/qcinfo.py +0 -0
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/ui/qmapv/qco.py +0 -0
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/ui/qmapv/qmapv.py +0 -0
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/ui/qmapv/test_array_drag.py +0 -0
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/ui/qmapv/test_drag.py +0 -0
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/ui/qmapv/test_qcinfo.py +0 -0
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/ui/qmapv/test_qco_drag.py +0 -0
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/ui/qmapv/test_qmapv.py +0 -0
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/ui/qmapv/test_simple_array.py +0 -0
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/ui/qrecipe/__init__.py +0 -0
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/ui/qrecipe/model.py +0 -0
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/ui/qrecipe/qrecipe.py +0 -0
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/ui/rs_icon.py +0 -0
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena.egg-info/dependency_links.txt +0 -0
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena.egg-info/entry_points.txt +0 -0
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena.egg-info/requires.txt +0 -0
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena.egg-info/top_level.txt +0 -0
- {pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/setup.cfg +0 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import re
|
|
3
|
+
import sys
|
|
4
|
+
|
|
5
|
+
def ToConfigAfter(path='.', language='cn', arena='gray', level='basic'):
|
|
6
|
+
# 验证参数是否在范围内
|
|
7
|
+
valid_languages = ['cn', 'en']
|
|
8
|
+
valid_arenas = ['green', 'blue', 'red', 'gray']
|
|
9
|
+
valid_levels = ['basic', 'advanced']
|
|
10
|
+
|
|
11
|
+
if language not in valid_languages:
|
|
12
|
+
print(f"错误: language 参数必须是 {valid_languages} 中的一个")
|
|
13
|
+
return False
|
|
14
|
+
|
|
15
|
+
if arena not in valid_arenas:
|
|
16
|
+
print(f"错误: arena 参数必须是 {valid_arenas} 中的一个")
|
|
17
|
+
return False
|
|
18
|
+
|
|
19
|
+
if level not in valid_levels:
|
|
20
|
+
print(f"错误: level 参数必须是 {valid_levels} 中的一个")
|
|
21
|
+
return False
|
|
22
|
+
|
|
23
|
+
# 检查 build.py 文件是否存在
|
|
24
|
+
build_py_path = os.path.join(path, 'build.py')
|
|
25
|
+
if not os.path.exists(build_py_path):
|
|
26
|
+
print("build.py 文件不存在,跳过修改操作")
|
|
27
|
+
return False
|
|
28
|
+
|
|
29
|
+
# 读取文件内容
|
|
30
|
+
with open(build_py_path, 'r', encoding='utf-8') as f:
|
|
31
|
+
content = f.read()
|
|
32
|
+
|
|
33
|
+
# 使用正则表达式替换配置语句
|
|
34
|
+
# 替换 language 配置
|
|
35
|
+
content = re.sub(
|
|
36
|
+
r'config\.language\s*=\s*[\'"]([^\'"]*)[\'"]\s*#\s*\'en\'\s+or\s+\'cn\'',
|
|
37
|
+
f"config.language = '{language}' # 'en' or 'cn'",
|
|
38
|
+
content
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
# 替换 arena 配置
|
|
42
|
+
content = re.sub(
|
|
43
|
+
r'config\.arena\s*=\s*[\'"]([^\'"]*)[\'"]\s*#\s*\'green\',\s*\'blue\',\s*\'red\',\s*\'gray\'',
|
|
44
|
+
f"config.arena = '{arena}' # 'green', 'blue', 'red', 'gray'",
|
|
45
|
+
content
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
# 替换 level 配置
|
|
49
|
+
content = re.sub(
|
|
50
|
+
r'config\.level\s*=\s*[\'"]([^\'"]*)[\'"]\s*#\s*\'basic\',\s*\'advanced\'',
|
|
51
|
+
f"config.level = '{level}' # 'basic', 'advanced'",
|
|
52
|
+
content
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
# 写回文件
|
|
56
|
+
with open(build_py_path, 'w', encoding='utf-8') as f:
|
|
57
|
+
f.write(content)
|
|
58
|
+
|
|
59
|
+
print(f"已更新 build.py 配置:")
|
|
60
|
+
print(f" language = {language}")
|
|
61
|
+
print(f" arena = {arena}")
|
|
62
|
+
print(f" level = {level}")
|
|
63
|
+
return True
|
|
64
|
+
|
|
65
|
+
if __name__ == "__main__":
|
|
66
|
+
# 解析命令行参数
|
|
67
|
+
# 默认值
|
|
68
|
+
path = '.'
|
|
69
|
+
language = 'cn'
|
|
70
|
+
arena = 'gray'
|
|
71
|
+
level = 'basic'
|
|
72
|
+
|
|
73
|
+
# 处理命令行参数
|
|
74
|
+
if len(sys.argv) > 1:
|
|
75
|
+
path = sys.argv[1]
|
|
76
|
+
if len(sys.argv) > 2:
|
|
77
|
+
language = sys.argv[2]
|
|
78
|
+
if len(sys.argv) > 3:
|
|
79
|
+
arena = sys.argv[3]
|
|
80
|
+
if len(sys.argv) > 4:
|
|
81
|
+
level = sys.argv[4]
|
|
82
|
+
|
|
83
|
+
# 执行更新
|
|
84
|
+
ToConfigAfter(path, language, arena, level)
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import re
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
def ToCustomAfter(path='.'):
|
|
6
|
+
# 检查 prefab 目录是否存在
|
|
7
|
+
prefab_dir = os.path.join(path, 'src', 'prefab')
|
|
8
|
+
if not os.path.exists(prefab_dir):
|
|
9
|
+
print("src/prefab 目录不存在,跳过处理")
|
|
10
|
+
return
|
|
11
|
+
|
|
12
|
+
# 创建 src/custom 目录
|
|
13
|
+
custom_dir = os.path.join(path, 'src', 'custom')
|
|
14
|
+
if not os.path.exists(custom_dir):
|
|
15
|
+
os.makedirs(custom_dir)
|
|
16
|
+
print("已创建 src/custom 目录")
|
|
17
|
+
else:
|
|
18
|
+
print("src/custom 目录已存在,跳过创建操作")
|
|
19
|
+
|
|
20
|
+
# 遍历 prefab 目录中的非 _ 开头的 .py 文件
|
|
21
|
+
for file_name in os.listdir(prefab_dir):
|
|
22
|
+
if file_name.startswith('_') or not file_name.endswith('.py'):
|
|
23
|
+
continue
|
|
24
|
+
|
|
25
|
+
file_path = os.path.join(prefab_dir, file_name)
|
|
26
|
+
print(f"处理文件: {file_path}")
|
|
27
|
+
|
|
28
|
+
# 读取文件内容
|
|
29
|
+
with open(file_path, 'r', encoding='utf-8') as f:
|
|
30
|
+
content = f.read()
|
|
31
|
+
|
|
32
|
+
# 检查是否存在 """$TEMPLATE...""" 的内容
|
|
33
|
+
template_match = re.search(r'"""(\$TEMPLATE.*?)"""', content, re.DOTALL)
|
|
34
|
+
if template_match:
|
|
35
|
+
template_content = template_match.group(1)
|
|
36
|
+
# 移除开头的 $TEMPLATE 标记
|
|
37
|
+
template_content = re.sub(r'^\s*\$TEMPLATE\s*', '', template_content)
|
|
38
|
+
|
|
39
|
+
# 在 custom 目录下创建同名文件
|
|
40
|
+
custom_file_path = os.path.join(custom_dir, file_name)
|
|
41
|
+
with open(custom_file_path, 'w', encoding='utf-8') as f:
|
|
42
|
+
f.write(template_content)
|
|
43
|
+
print(f"已在 custom 目录下创建 {file_name} 文件")
|
|
44
|
+
else:
|
|
45
|
+
print(f"{file_name} 中未找到模板内容,跳过")
|
|
46
|
+
|
|
47
|
+
# 检查并修改 src/main.py 文件,在导入语句末尾添加 from custom import *
|
|
48
|
+
main_py_path = os.path.join(path, 'src', 'main.py')
|
|
49
|
+
if not os.path.exists(main_py_path):
|
|
50
|
+
print("src/main.py 文件不存在,跳过导入语句添加操作")
|
|
51
|
+
return
|
|
52
|
+
|
|
53
|
+
# 读取文件内容
|
|
54
|
+
with open(main_py_path, 'r') as f:
|
|
55
|
+
lines = f.readlines()
|
|
56
|
+
|
|
57
|
+
# 检查是否存在 from custom import * 语句
|
|
58
|
+
has_custom_import = False
|
|
59
|
+
import_end_line = 0
|
|
60
|
+
|
|
61
|
+
for i, line in enumerate(lines):
|
|
62
|
+
if re.search(r'from\s+custom\s+import\s+\*', line):
|
|
63
|
+
has_custom_import = True
|
|
64
|
+
break
|
|
65
|
+
# 检查是否为导入语句
|
|
66
|
+
if re.match(r'^(from|import)\s+', line.strip()):
|
|
67
|
+
import_end_line = i + 1 # 记录导入语句的结束位置(下一行)
|
|
68
|
+
|
|
69
|
+
if not has_custom_import:
|
|
70
|
+
# 在导入语句的末尾插入 from custom import * 语句
|
|
71
|
+
if import_end_line > 0:
|
|
72
|
+
# 在导入语句末尾插入
|
|
73
|
+
lines.insert(import_end_line, '\nfrom custom import *\n')
|
|
74
|
+
else:
|
|
75
|
+
# 如果没有导入语句,在文件开头插入
|
|
76
|
+
lines.insert(0, 'from custom import *\n')
|
|
77
|
+
|
|
78
|
+
# 写回文件
|
|
79
|
+
with open(main_py_path, 'w') as f:
|
|
80
|
+
f.writelines(lines)
|
|
81
|
+
print("已在 src/main.py 中导入语句末尾追加 from custom import * 语句")
|
|
82
|
+
else:
|
|
83
|
+
print("src/main.py 中已存在 from custom import * 语句,跳过添加操作")
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
if __name__ == "__main__":
|
|
87
|
+
ToCustomAfter('.')
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import re
|
|
3
|
+
|
|
4
|
+
def ToEmptyAfter(path='.'):
|
|
5
|
+
# 删除 src/basic.py 文件
|
|
6
|
+
basic_path = os.path.join(path, 'src', 'basic.py')
|
|
7
|
+
if os.path.exists(basic_path):
|
|
8
|
+
os.remove(basic_path)
|
|
9
|
+
print("已删除 src/basic.py")
|
|
10
|
+
else:
|
|
11
|
+
print("src/basic.py 不存在,跳过删除操作")
|
|
12
|
+
|
|
13
|
+
# 修改 src/main.py 文件,将 from basic import * 改为 from builtin import *
|
|
14
|
+
main_path = os.path.join(path, 'src', 'main.py')
|
|
15
|
+
if os.path.exists(main_path):
|
|
16
|
+
with open(main_path, 'r') as f:
|
|
17
|
+
content = f.read()
|
|
18
|
+
|
|
19
|
+
# 使用正则表达式替换,处理各种可能的空白字符
|
|
20
|
+
modified_content = re.sub(r'from\s+basic\s+import\s+\*', 'from builtin import *', content)
|
|
21
|
+
|
|
22
|
+
# 检查是否发生了替换
|
|
23
|
+
if modified_content != content:
|
|
24
|
+
with open(main_path, 'w') as f:
|
|
25
|
+
f.write(modified_content)
|
|
26
|
+
print("已修改 src/main.py,将 from basic import * 改为 from builtin import *")
|
|
27
|
+
else:
|
|
28
|
+
print("src/main.py 中未找到 from basic import * 语句,跳过修改操作")
|
|
29
|
+
else:
|
|
30
|
+
print("src/main.py 不存在,跳过修改操作")
|
|
31
|
+
|
|
32
|
+
if __name__ == "__main__":
|
|
33
|
+
ToEmptyAfter('.')
|
|
34
|
+
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import shutil
|
|
3
|
+
import re
|
|
4
|
+
|
|
5
|
+
def ToPrefabAfter(path='.'):
|
|
6
|
+
# 检查 docs/prefab 目录是否存在
|
|
7
|
+
source_dir = os.path.join(path, 'docs', 'prefab')
|
|
8
|
+
if not os.path.exists(source_dir):
|
|
9
|
+
print("docs/prefab 目录不存在,跳过移动操作")
|
|
10
|
+
return
|
|
11
|
+
|
|
12
|
+
# 检查 src 目录是否存在
|
|
13
|
+
src_dir = os.path.join(path, 'src')
|
|
14
|
+
if not os.path.exists(src_dir):
|
|
15
|
+
os.makedirs(src_dir)
|
|
16
|
+
print("已创建 src 目录")
|
|
17
|
+
|
|
18
|
+
# 移动 docs/prefab 到 src/prefab
|
|
19
|
+
dest_dir = os.path.join(src_dir, 'prefab')
|
|
20
|
+
if os.path.exists(dest_dir):
|
|
21
|
+
# 如果目标目录已存在,先删除
|
|
22
|
+
shutil.rmtree(dest_dir)
|
|
23
|
+
print("已删除现有 src/prefab 目录")
|
|
24
|
+
|
|
25
|
+
shutil.move(source_dir, dest_dir)
|
|
26
|
+
print("已将 docs/prefab 移动到 src/prefab")
|
|
27
|
+
|
|
28
|
+
# 检查并修改 src/main.py 文件
|
|
29
|
+
main_py_path = os.path.join(src_dir, 'main.py')
|
|
30
|
+
if not os.path.exists(main_py_path):
|
|
31
|
+
print("src/main.py 文件不存在,跳过导入语句添加操作")
|
|
32
|
+
return
|
|
33
|
+
|
|
34
|
+
# 读取文件内容
|
|
35
|
+
with open(main_py_path, 'r') as f:
|
|
36
|
+
lines = f.readlines()
|
|
37
|
+
|
|
38
|
+
# 检查是否存在 from prefab import * 语句
|
|
39
|
+
has_prefab_import = False
|
|
40
|
+
import_end_line = 0
|
|
41
|
+
|
|
42
|
+
for i, line in enumerate(lines):
|
|
43
|
+
if re.search(r'from\s+prefab\s+import\s+\*', line):
|
|
44
|
+
has_prefab_import = True
|
|
45
|
+
break
|
|
46
|
+
# 检查是否为导入语句
|
|
47
|
+
if re.match(r'^(from|import)\s+', line.strip()):
|
|
48
|
+
import_end_line = i + 1 # 记录导入语句的结束位置(下一行)
|
|
49
|
+
|
|
50
|
+
if not has_prefab_import:
|
|
51
|
+
# 在导入语句的末尾插入 from prefab import * 语句
|
|
52
|
+
if import_end_line > 0:
|
|
53
|
+
# 在导入语句末尾插入
|
|
54
|
+
lines.insert(import_end_line, 'from prefab import *\n')
|
|
55
|
+
else:
|
|
56
|
+
# 如果没有导入语句,在文件开头插入
|
|
57
|
+
lines.insert(0, 'from prefab import *\n')
|
|
58
|
+
|
|
59
|
+
# 写回文件
|
|
60
|
+
with open(main_py_path, 'w') as f:
|
|
61
|
+
f.writelines(lines)
|
|
62
|
+
print("已在 src/main.py 中导入语句末尾追加 from prefab import * 语句")
|
|
63
|
+
else:
|
|
64
|
+
print("src/main.py 中已存在 from prefab import * 语句,跳过添加操作")
|
|
65
|
+
|
|
66
|
+
if __name__ == "__main__":
|
|
67
|
+
ToPrefabAfter('.')
|
|
Binary file
|
|
@@ -7,12 +7,14 @@ import os
|
|
|
7
7
|
from pathlib import Path
|
|
8
8
|
from PyQt6.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout,
|
|
9
9
|
QHBoxLayout, QLabel, QLineEdit, QPushButton,
|
|
10
|
-
QFileDialog, QMessageBox)
|
|
10
|
+
QFileDialog, QMessageBox, QComboBox)
|
|
11
11
|
from PyQt6.QtCore import Qt
|
|
12
12
|
from PyQt6.QtGui import QFont
|
|
13
13
|
from PyQt6.QtGui import QIcon
|
|
14
14
|
from pyscreeps_arena.core import const
|
|
15
15
|
from pyscreeps_arena.ui.rs_icon import get_pixmap
|
|
16
|
+
from pyscreeps_arena.afters import ToConfigAfter, ToEmptyAfter, ToPrefabAfter, ToCustomAfter
|
|
17
|
+
from PyQt6.QtWidgets import QRadioButton, QGroupBox
|
|
16
18
|
|
|
17
19
|
|
|
18
20
|
|
|
@@ -27,7 +29,7 @@ class ProjectCreatorUI(QMainWindow):
|
|
|
27
29
|
"""初始化UI界面"""
|
|
28
30
|
self.setWindowTitle("PyScreeps Arena - 项目创建器")
|
|
29
31
|
self.setWindowIcon(QIcon(get_pixmap()))
|
|
30
|
-
self.setFixedSize(500,
|
|
32
|
+
self.setFixedSize(500, 580)
|
|
31
33
|
|
|
32
34
|
# 主窗口部件
|
|
33
35
|
central_widget = QWidget()
|
|
@@ -85,6 +87,7 @@ class ProjectCreatorUI(QMainWindow):
|
|
|
85
87
|
self._name_input = QLineEdit()
|
|
86
88
|
self._name_input.setPlaceholderText("输入项目名称...")
|
|
87
89
|
self._name_input.textChanged.connect(self._on_name_changed)
|
|
90
|
+
self._name_input.returnPressed.connect(self._create_project)
|
|
88
91
|
name_layout.addWidget(name_label)
|
|
89
92
|
name_layout.addWidget(self._name_input)
|
|
90
93
|
input_layout.addLayout(name_layout)
|
|
@@ -113,6 +116,86 @@ class ProjectCreatorUI(QMainWindow):
|
|
|
113
116
|
input_layout.addLayout(path_layout)
|
|
114
117
|
layout.addWidget(input_widget)
|
|
115
118
|
|
|
119
|
+
# 分隔线
|
|
120
|
+
separator2 = QLabel("─" * 50)
|
|
121
|
+
separator2.setAlignment(Qt.AlignmentFlag.AlignCenter)
|
|
122
|
+
separator2.setStyleSheet("color: #ccc;")
|
|
123
|
+
layout.addWidget(separator2)
|
|
124
|
+
|
|
125
|
+
# 配置选项区域(左右布局)
|
|
126
|
+
config_container = QWidget()
|
|
127
|
+
config_container_layout = QHBoxLayout(config_container)
|
|
128
|
+
config_container_layout.setSpacing(20)
|
|
129
|
+
|
|
130
|
+
# 左侧:语言、竞技场、难度配置
|
|
131
|
+
left_config_widget = QWidget()
|
|
132
|
+
left_config_layout = QVBoxLayout(left_config_widget)
|
|
133
|
+
left_config_layout.setSpacing(10)
|
|
134
|
+
|
|
135
|
+
# 语言选择
|
|
136
|
+
lang_layout = QHBoxLayout()
|
|
137
|
+
lang_label = QLabel("语 言:")
|
|
138
|
+
lang_label.setFixedWidth(80)
|
|
139
|
+
self._lang_combo = QComboBox()
|
|
140
|
+
self._lang_combo.addItems(["中文 (cn)", "英文 (en)"])
|
|
141
|
+
self._lang_combo.setCurrentIndex(0)
|
|
142
|
+
lang_layout.addWidget(lang_label)
|
|
143
|
+
lang_layout.addWidget(self._lang_combo)
|
|
144
|
+
left_config_layout.addLayout(lang_layout)
|
|
145
|
+
|
|
146
|
+
# 竞技场选择
|
|
147
|
+
arena_layout = QHBoxLayout()
|
|
148
|
+
arena_label = QLabel("竞技场:")
|
|
149
|
+
arena_label.setFixedWidth(80)
|
|
150
|
+
self._arena_combo = QComboBox()
|
|
151
|
+
self._arena_combo.addItems(["灰色 (gray)", "绿色 (green)", "蓝色 (blue)", "红色 (red)"])
|
|
152
|
+
self._arena_combo.setCurrentIndex(0)
|
|
153
|
+
arena_layout.addWidget(arena_label)
|
|
154
|
+
arena_layout.addWidget(self._arena_combo)
|
|
155
|
+
left_config_layout.addLayout(arena_layout)
|
|
156
|
+
|
|
157
|
+
# 难度级别选择
|
|
158
|
+
level_layout = QHBoxLayout()
|
|
159
|
+
level_label = QLabel("难 度:")
|
|
160
|
+
level_label.setFixedWidth(80)
|
|
161
|
+
self._level_combo = QComboBox()
|
|
162
|
+
self._level_combo.addItems(["基础 (basic)", "高级 (advanced)"])
|
|
163
|
+
self._level_combo.setCurrentIndex(0)
|
|
164
|
+
level_layout.addWidget(level_label)
|
|
165
|
+
level_layout.addWidget(self._level_combo)
|
|
166
|
+
left_config_layout.addLayout(level_layout)
|
|
167
|
+
|
|
168
|
+
config_container_layout.addWidget(left_config_widget)
|
|
169
|
+
|
|
170
|
+
# 右侧:模式选择(单选框)
|
|
171
|
+
right_config_widget = QWidget()
|
|
172
|
+
right_config_layout = QVBoxLayout(right_config_widget)
|
|
173
|
+
right_config_layout.setSpacing(8)
|
|
174
|
+
|
|
175
|
+
# 模式选择标题
|
|
176
|
+
# mode_title = QLabel("模式选择")
|
|
177
|
+
# mode_title.setFont(QFont("Arial", 10, QFont.Weight.Bold))
|
|
178
|
+
# right_config_layout.addWidget(mode_title)
|
|
179
|
+
|
|
180
|
+
# 单选按钮
|
|
181
|
+
self._empty_radio = QRadioButton("空白 (Empty)")
|
|
182
|
+
self._basic_radio = QRadioButton("基础 (Basic)")
|
|
183
|
+
self._prefab_radio = QRadioButton("预设 (Prefab)")
|
|
184
|
+
self._pi_radio = QRadioButton("预设继承 (P&&I)")
|
|
185
|
+
|
|
186
|
+
# 默认选择基础模式
|
|
187
|
+
self._basic_radio.setChecked(True)
|
|
188
|
+
|
|
189
|
+
# 添加到布局
|
|
190
|
+
right_config_layout.addWidget(self._empty_radio)
|
|
191
|
+
right_config_layout.addWidget(self._basic_radio)
|
|
192
|
+
right_config_layout.addWidget(self._prefab_radio)
|
|
193
|
+
right_config_layout.addWidget(self._pi_radio)
|
|
194
|
+
|
|
195
|
+
config_container_layout.addWidget(right_config_widget)
|
|
196
|
+
|
|
197
|
+
layout.addWidget(config_container)
|
|
198
|
+
|
|
116
199
|
# 按钮区域
|
|
117
200
|
button_layout = QHBoxLayout()
|
|
118
201
|
button_layout.addStretch()
|
|
@@ -122,6 +205,7 @@ class ProjectCreatorUI(QMainWindow):
|
|
|
122
205
|
self._create_btn.setFixedSize(100, 35)
|
|
123
206
|
self._create_btn.clicked.connect(self._create_project)
|
|
124
207
|
self._create_btn.setEnabled(False)
|
|
208
|
+
self._create_btn.setDefault(True)
|
|
125
209
|
button_layout.addWidget(self._create_btn)
|
|
126
210
|
|
|
127
211
|
# 取消按钮
|
|
@@ -201,6 +285,35 @@ class ProjectCreatorUI(QMainWindow):
|
|
|
201
285
|
archive.extractall(path=target_path)
|
|
202
286
|
|
|
203
287
|
print(f"[DEBUG] 项目模板已解压到: {target_path}") # 调试输出
|
|
288
|
+
|
|
289
|
+
# 获取用户选择的配置
|
|
290
|
+
lang_text = self._lang_combo.currentText()
|
|
291
|
+
lang = lang_text.split('(')[1].strip(')')
|
|
292
|
+
|
|
293
|
+
arena_text = self._arena_combo.currentText()
|
|
294
|
+
arena = arena_text.split('(')[1].strip(')')
|
|
295
|
+
|
|
296
|
+
level_text = self._level_combo.currentText()
|
|
297
|
+
level = level_text.split('(')[1].strip(')')
|
|
298
|
+
|
|
299
|
+
# 调用配置方法
|
|
300
|
+
ToConfigAfter(path=target_path, language=lang, arena=arena, level=level)
|
|
301
|
+
print(f"[DEBUG] 项目配置已更新: language={lang}, arena={arena}, level={level}") # 调试输出
|
|
302
|
+
|
|
303
|
+
# 根据选择的模式执行相应的操作
|
|
304
|
+
if self._empty_radio.isChecked():
|
|
305
|
+
print(f"[DEBUG] 执行空白模式配置")
|
|
306
|
+
ToEmptyAfter(path=target_path)
|
|
307
|
+
elif self._basic_radio.isChecked():
|
|
308
|
+
print(f"[DEBUG] 执行基础模式配置(不操作)")
|
|
309
|
+
# 基础模式不执行任何操作
|
|
310
|
+
elif self._prefab_radio.isChecked():
|
|
311
|
+
print(f"[DEBUG] 执行预设模式配置")
|
|
312
|
+
ToPrefabAfter(path=target_path)
|
|
313
|
+
elif self._pi_radio.isChecked():
|
|
314
|
+
print(f"[DEBUG] 执行预设继承模式配置")
|
|
315
|
+
ToPrefabAfter(path=target_path)
|
|
316
|
+
ToCustomAfter(path=target_path)
|
|
204
317
|
|
|
205
318
|
|
|
206
319
|
def run_project_creator():
|
|
@@ -10,6 +10,11 @@ pyscreeps_arena.egg-info/dependency_links.txt
|
|
|
10
10
|
pyscreeps_arena.egg-info/entry_points.txt
|
|
11
11
|
pyscreeps_arena.egg-info/requires.txt
|
|
12
12
|
pyscreeps_arena.egg-info/top_level.txt
|
|
13
|
+
pyscreeps_arena/afters/__init__.py
|
|
14
|
+
pyscreeps_arena/afters/after_config.py
|
|
15
|
+
pyscreeps_arena/afters/after_custom.py
|
|
16
|
+
pyscreeps_arena/afters/after_empty.py
|
|
17
|
+
pyscreeps_arena/afters/after_prefab.py
|
|
13
18
|
pyscreeps_arena/core/__init__.py
|
|
14
19
|
pyscreeps_arena/core/basic.py
|
|
15
20
|
pyscreeps_arena/core/config.py
|
|
@@ -7,7 +7,7 @@ with open(r"T:\New_PC\Import_Project\uploads\pyscreeps-arena_upload\pyscreeps-ar
|
|
|
7
7
|
long_description = f.read()
|
|
8
8
|
setup(
|
|
9
9
|
name='pyscreeps-arena',
|
|
10
|
-
version='0.5.8.
|
|
10
|
+
version='0.5.8.4',
|
|
11
11
|
description='Python api|interface to play game: Screeps: Arena.',
|
|
12
12
|
long_description=long_description,
|
|
13
13
|
long_description_content_type='text/markdown',
|
|
Binary file
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/ui/qcreeplogic/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/ui/qcreeplogic/qcreeplogic.py
RENAMED
|
File without changes
|
|
File without changes
|
{pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/ui/qmapker/qmapmarker.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/ui/qmapker/test_qmapmarker.py
RENAMED
|
File without changes
|
{pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/ui/qmapker/test_qvariable.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/ui/qmapv/test_array_drag.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/ui/qmapv/test_qco_drag.py
RENAMED
|
File without changes
|
|
File without changes
|
{pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena/ui/qmapv/test_simple_array.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{pyscreeps_arena-0.5.8.2 → pyscreeps_arena-0.5.8.4}/pyscreeps_arena.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|