From 0a815f04d6f06e5775ec557ff065bb10532000df Mon Sep 17 00:00:00 2001 From: yyc12345 Date: Wed, 28 Dec 2022 21:40:51 +0800 Subject: [PATCH] [feat] change BMERevenge model read method - divided json into small pieces for easy management. - change json reading method for change (1) --- .gitattributes | 6 +- ballance_blender_plugin/UTILS_constants.py | 23 +- .../icons/floor/RibbonBorder.png | Bin 0 -> 12796 bytes ballance_blender_plugin/json/BasicBlock.json | 2664 ----------------- .../json/DerivedBlock.json | 608 ---- .../json/basic_blocks/misc.json | 483 +++ .../json/basic_blocks/normal_blocks.json | 680 +++++ .../json/basic_blocks/sink_blocks.json | 680 +++++ .../json/basic_blocks/trafos.json | 827 +++++ .../json/derived_blocks/normal_blocks.json | 345 +++ .../json/derived_blocks/sink_blocks.json | 265 ++ 11 files changed, 3300 insertions(+), 3281 deletions(-) create mode 100644 ballance_blender_plugin/icons/floor/RibbonBorder.png delete mode 100644 ballance_blender_plugin/json/BasicBlock.json delete mode 100644 ballance_blender_plugin/json/DerivedBlock.json create mode 100644 ballance_blender_plugin/json/basic_blocks/misc.json create mode 100644 ballance_blender_plugin/json/basic_blocks/normal_blocks.json create mode 100644 ballance_blender_plugin/json/basic_blocks/sink_blocks.json create mode 100644 ballance_blender_plugin/json/basic_blocks/trafos.json create mode 100644 ballance_blender_plugin/json/derived_blocks/normal_blocks.json create mode 100644 ballance_blender_plugin/json/derived_blocks/sink_blocks.json diff --git a/.gitattributes b/.gitattributes index bc62197..38a628f 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,2 +1,6 @@ # our generated mesh should be save as binary -*.bin binary \ No newline at end of file +*.bin binary +# json is data and not good for human reading(althought I edit it on my own hand.) +# so set it as binary +ballance_blender_plugin/json/basic_blocks/*.json binary +ballance_blender_plugin/json/derived_blocks/*.json binary \ No newline at end of file diff --git a/ballance_blender_plugin/UTILS_constants.py b/ballance_blender_plugin/UTILS_constants.py index 4df54b9..d2aa2dc 100644 --- a/ballance_blender_plugin/UTILS_constants.py +++ b/ballance_blender_plugin/UTILS_constants.py @@ -231,14 +231,21 @@ floor_materialStatistic = [ floor_blockDict = {} floor_basicBlockList = [] floor_derivedBlockList = [] -with open(os.path.join(os.path.dirname(__file__), "json", "BasicBlock.json")) as fp: - for item in json.load(fp): - floor_basicBlockList.append(item["Type"]) - floor_blockDict[item["Type"]] = item -with open(os.path.join(os.path.dirname(__file__), "json", "DerivedBlock.json")) as fp: - for item in json.load(fp): - floor_derivedBlockList.append(item["Type"]) - floor_blockDict[item["Type"]] = item +# read from json +for walk_root, walk_dirs, walk_files in os.walk(os.path.join(os.path.dirname(__file__), "json", "basic_blocks")): + for relfile in walk_files: + if not relfile.endswith('.json'): continue + with open(os.path.join(walk_root, relfile)) as fp: + for item in json.load(fp): + floor_basicBlockList.append(item["Type"]) + floor_blockDict[item["Type"]] = item +for walk_root, walk_dirs, walk_files in os.walk(os.path.join(os.path.dirname(__file__), "json", "derived_blocks")): + for relfile in walk_files: + if not relfile.endswith('.json'): continue + with open(os.path.join(walk_root, relfile)) as fp: + for item in json.load(fp): + floor_derivedBlockList.append(item["Type"]) + floor_blockDict[item["Type"]] = item icons_floor = None icons_floorDict = {} diff --git a/ballance_blender_plugin/icons/floor/RibbonBorder.png b/ballance_blender_plugin/icons/floor/RibbonBorder.png new file mode 100644 index 0000000000000000000000000000000000000000..3cdf885aa460fb3d3a6180d6ad714384f3595edf GIT binary patch literal 12796 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 O0000