From 747d229d50611841ffa743ef6da9fa1d281b5f22 Mon Sep 17 00:00:00 2001 From: obiwac Date: Fri, 4 Feb 2022 16:28:52 +0100 Subject: [PATCH 01/45] ep13: copy code --- episode-13/block_type.py | 71 ++++++ episode-13/chunk.py | 183 ++++++++++++++++ episode-13/collider.py | 67 ++++++ episode-13/data/blocks.mcpy | 91 ++++++++ episode-13/entity.py | 146 +++++++++++++ episode-13/frag.glsl | 18 ++ episode-13/hit.py | 105 +++++++++ episode-13/main.py | 205 ++++++++++++++++++ episode-13/matrix.py | 139 ++++++++++++ episode-13/models/__init__.py | 28 +++ episode-13/models/button.py | 32 +++ episode-13/models/cactus.py | 37 ++++ episode-13/models/crop.py | 38 ++++ episode-13/models/cube.py | 37 ++++ episode-13/models/door.py | 32 +++ episode-13/models/fire.py | 26 +++ episode-13/models/flat.py | 20 ++ episode-13/models/glass.py | 37 ++++ episode-13/models/ladder.py | 26 +++ episode-13/models/leaves.py | 37 ++++ episode-13/models/lever.py | 32 +++ episode-13/models/liquid.py | 35 +++ episode-13/models/plant.py | 26 +++ episode-13/models/pressure_plate.py | 20 ++ episode-13/models/sign.py | 26 +++ episode-13/models/sign_post.py | 26 +++ episode-13/models/slab.py | 37 ++++ episode-13/models/snow.py | 25 +++ episode-13/models/soil.py | 37 ++++ episode-13/models/stairs.py | 37 ++++ episode-13/models/tinted_glass.py | 38 ++++ episode-13/models/torch.py | 32 +++ episode-13/player.py | 73 +++++++ episode-13/save.py | 95 ++++++++ episode-13/save/0/0/c.0.0.dat | Bin 0 -> 4654 bytes episode-13/save/0/1/c.0.1.dat | Bin 0 -> 2982 bytes episode-13/save/0/1o/c.0.-4.dat | Bin 0 -> 2925 bytes episode-13/save/0/1p/c.0.-3.dat | Bin 0 -> 2879 bytes episode-13/save/0/1q/c.0.-2.dat | Bin 0 -> 3118 bytes episode-13/save/0/1r/c.0.-1.dat | Bin 0 -> 5049 bytes episode-13/save/0/2/c.0.2.dat | Bin 0 -> 2456 bytes episode-13/save/0/3/c.0.3.dat | Bin 0 -> 2437 bytes episode-13/save/1/0/c.1.0.dat | Bin 0 -> 4931 bytes episode-13/save/1/1/c.1.1.dat | Bin 0 -> 2814 bytes episode-13/save/1/1o/c.1.-4.dat | Bin 0 -> 2765 bytes episode-13/save/1/1p/c.1.-3.dat | Bin 0 -> 2964 bytes episode-13/save/1/1q/c.1.-2.dat | Bin 0 -> 3489 bytes episode-13/save/1/1r/c.1.-1.dat | Bin 0 -> 4441 bytes episode-13/save/1/2/c.1.2.dat | Bin 0 -> 2676 bytes episode-13/save/1/3/c.1.3.dat | Bin 0 -> 2688 bytes episode-13/save/1o/0/c.-4.0.dat | Bin 0 -> 2875 bytes episode-13/save/1o/1/c.-4.1.dat | Bin 0 -> 3195 bytes episode-13/save/1o/1o/c.-4.-4.dat | Bin 0 -> 2985 bytes episode-13/save/1o/1p/c.-4.-3.dat | Bin 0 -> 2493 bytes episode-13/save/1o/1q/c.-4.-2.dat | Bin 0 -> 3195 bytes episode-13/save/1o/1r/c.-4.-1.dat | Bin 0 -> 3154 bytes episode-13/save/1o/2/c.-4.2.dat | Bin 0 -> 3161 bytes episode-13/save/1o/3/c.-4.3.dat | Bin 0 -> 3046 bytes episode-13/save/1p/0/c.-3.0.dat | Bin 0 -> 3549 bytes episode-13/save/1p/1/c.-3.1.dat | Bin 0 -> 4020 bytes episode-13/save/1p/1o/c.-3.-4.dat | Bin 0 -> 3005 bytes episode-13/save/1p/1p/c.-3.-3.dat | Bin 0 -> 3445 bytes episode-13/save/1p/1q/c.-3.-2.dat | Bin 0 -> 3557 bytes episode-13/save/1p/1r/c.-3.-1.dat | Bin 0 -> 3532 bytes episode-13/save/1p/2/c.-3.2.dat | Bin 0 -> 3275 bytes episode-13/save/1p/3/c.-3.3.dat | Bin 0 -> 3179 bytes episode-13/save/1q/0/c.-2.0.dat | Bin 0 -> 3242 bytes episode-13/save/1q/1/c.-2.1.dat | Bin 0 -> 4691 bytes episode-13/save/1q/1o/c.-2.-4.dat | Bin 0 -> 3181 bytes episode-13/save/1q/1p/c.-2.-3.dat | Bin 0 -> 3455 bytes episode-13/save/1q/1q/c.-2.-2.dat | Bin 0 -> 3462 bytes episode-13/save/1q/1r/c.-2.-1.dat | Bin 0 -> 4244 bytes episode-13/save/1q/2/c.-2.2.dat | Bin 0 -> 4194 bytes episode-13/save/1q/3/c.-2.3.dat | Bin 0 -> 3635 bytes episode-13/save/1r/0/c.-1.0.dat | Bin 0 -> 3403 bytes episode-13/save/1r/1/c.-1.1.dat | Bin 0 -> 3780 bytes episode-13/save/1r/1o/c.-1.-4.dat | Bin 0 -> 2902 bytes episode-13/save/1r/1p/c.-1.-3.dat | Bin 0 -> 2589 bytes episode-13/save/1r/1q/c.-1.-2.dat | Bin 0 -> 3150 bytes episode-13/save/1r/1r/c.-1.-1.dat | Bin 0 -> 3231 bytes episode-13/save/1r/2/c.-1.2.dat | Bin 0 -> 3575 bytes episode-13/save/1r/3/c.-1.3.dat | Bin 0 -> 3297 bytes episode-13/save/2/0/c.2.0.dat | Bin 0 -> 3104 bytes episode-13/save/2/1/c.2.1.dat | Bin 0 -> 3342 bytes episode-13/save/2/1o/c.2.-4.dat | Bin 0 -> 3534 bytes episode-13/save/2/1p/c.2.-3.dat | Bin 0 -> 3219 bytes episode-13/save/2/1q/c.2.-2.dat | Bin 0 -> 3080 bytes episode-13/save/2/1r/c.2.-1.dat | Bin 0 -> 3180 bytes episode-13/save/2/2/c.2.2.dat | Bin 0 -> 3201 bytes episode-13/save/2/3/c.2.3.dat | Bin 0 -> 2753 bytes episode-13/save/3/0/c.3.0.dat | Bin 0 -> 3648 bytes episode-13/save/3/1/c.3.1.dat | Bin 0 -> 4240 bytes episode-13/save/3/1o/c.3.-4.dat | Bin 0 -> 4104 bytes episode-13/save/3/1p/c.3.-3.dat | Bin 0 -> 3538 bytes episode-13/save/3/1q/c.3.-2.dat | Bin 0 -> 3027 bytes episode-13/save/3/1r/c.3.-1.dat | Bin 0 -> 2784 bytes episode-13/save/3/2/c.3.2.dat | Bin 0 -> 3168 bytes episode-13/save/3/3/c.3.3.dat | Bin 0 -> 2758 bytes episode-13/shader.py | 71 ++++++ episode-13/subchunk.py | 99 +++++++++ episode-13/texture_manager.py | 42 ++++ episode-13/textures/aqua_cloth.png | Bin 0 -> 1193 bytes episode-13/textures/bedrock.png | Bin 0 -> 833 bytes episode-13/textures/black_cloth.png | Bin 0 -> 1076 bytes episode-13/textures/blue_cloth.png | Bin 0 -> 1179 bytes episode-13/textures/bookshelf.png | Bin 0 -> 1070 bytes episode-13/textures/bricks.png | Bin 0 -> 1173 bytes episode-13/textures/brown_mushroom.png | Bin 0 -> 634 bytes episode-13/textures/cactus_bottom.png | Bin 0 -> 825 bytes episode-13/textures/cactus_side.png | Bin 0 -> 1015 bytes episode-13/textures/cactus_top.png | Bin 0 -> 1041 bytes episode-13/textures/chest_front.png | Bin 0 -> 1079 bytes episode-13/textures/chest_side.png | Bin 0 -> 1025 bytes episode-13/textures/chest_top.png | Bin 0 -> 1035 bytes episode-13/textures/clay.png | Bin 0 -> 1203 bytes episode-13/textures/coal_ore.png | Bin 0 -> 928 bytes episode-13/textures/cobblestone.png | Bin 0 -> 1360 bytes episode-13/textures/crafting_table_top.png | Bin 0 -> 1256 bytes episode-13/textures/crafting_table_x.png | Bin 0 -> 1171 bytes episode-13/textures/crafting_table_z.png | Bin 0 -> 1205 bytes episode-13/textures/crops.png | Bin 0 -> 1167 bytes episode-13/textures/cyan_cloth.png | Bin 0 -> 1289 bytes episode-13/textures/dead_bush.png | Bin 0 -> 739 bytes episode-13/textures/diamond_block.png | Bin 0 -> 984 bytes episode-13/textures/diamond_ore.png | Bin 0 -> 975 bytes episode-13/textures/dirt.png | Bin 0 -> 1059 bytes episode-13/textures/fire.png | Bin 0 -> 666 bytes episode-13/textures/furnace_front.png | Bin 0 -> 1238 bytes episode-13/textures/furnace_side.png | Bin 0 -> 1190 bytes episode-13/textures/furnace_y.png | Bin 0 -> 1221 bytes episode-13/textures/glass.png | Bin 0 -> 728 bytes episode-13/textures/gold_block.png | Bin 0 -> 1049 bytes episode-13/textures/gold_ore.png | Bin 0 -> 1008 bytes episode-13/textures/grass.png | Bin 0 -> 1349 bytes episode-13/textures/grass_side.png | Bin 0 -> 1152 bytes episode-13/textures/gravel.png | Bin 0 -> 1423 bytes episode-13/textures/green_cloth.png | Bin 0 -> 1071 bytes episode-13/textures/grey_cloth.png | Bin 0 -> 1055 bytes episode-13/textures/ice.png | Bin 0 -> 676 bytes episode-13/textures/indigo_cloth.png | Bin 0 -> 1112 bytes episode-13/textures/iron_block.png | Bin 0 -> 863 bytes episode-13/textures/iron_door.png | Bin 0 -> 1022 bytes episode-13/textures/iron_door_bottom_half.png | Bin 0 -> 1011 bytes episode-13/textures/iron_ore.png | Bin 0 -> 1007 bytes episode-13/textures/jukebox.png | Bin 0 -> 1191 bytes episode-13/textures/jukebox_top.png | Bin 0 -> 1031 bytes episode-13/textures/ladder.png | Bin 0 -> 996 bytes episode-13/textures/lava.png | Bin 0 -> 787 bytes episode-13/textures/leaves.png | Bin 0 -> 1269 bytes episode-13/textures/lever.png | Bin 0 -> 1360 bytes episode-13/textures/lime_cloth.png | Bin 0 -> 1221 bytes episode-13/textures/lit_furnace_front.png | Bin 0 -> 1260 bytes episode-13/textures/log_side.png | Bin 0 -> 1244 bytes episode-13/textures/log_y.png | Bin 0 -> 1085 bytes episode-13/textures/magenta_cloth.png | Bin 0 -> 1257 bytes episode-13/textures/mob_spawner.png | Bin 0 -> 962 bytes episode-13/textures/mossy_cobblestone.png | Bin 0 -> 1401 bytes episode-13/textures/obsidian.png | Bin 0 -> 1183 bytes episode-13/textures/off_redstone_torch.png | Bin 0 -> 659 bytes .../textures/off_redstone_torch_top.png | Bin 0 -> 588 bytes episode-13/textures/orange_cloth.png | Bin 0 -> 1181 bytes episode-13/textures/pink_cloth.png | Bin 0 -> 1294 bytes episode-13/textures/planks.png | Bin 0 -> 247 bytes episode-13/textures/purple_cloth.png | Bin 0 -> 1248 bytes episode-13/textures/rails.png | Bin 0 -> 869 bytes episode-13/textures/red_cloth.png | Bin 0 -> 1189 bytes episode-13/textures/red_mushroom.png | Bin 0 -> 702 bytes episode-13/textures/red_rose.png | Bin 0 -> 702 bytes episode-13/textures/redstone_ore.png | Bin 0 -> 946 bytes episode-13/textures/redstone_torch.png | Bin 0 -> 670 bytes episode-13/textures/redstone_torch_top.png | Bin 0 -> 604 bytes episode-13/textures/redstone_wire.png | Bin 0 -> 627 bytes episode-13/textures/sand.png | Bin 0 -> 1333 bytes episode-13/textures/sapling.png | Bin 0 -> 989 bytes episode-13/textures/slab_side.png | Bin 0 -> 896 bytes episode-13/textures/slab_y.png | Bin 0 -> 881 bytes episode-13/textures/snow.png | Bin 0 -> 770 bytes episode-13/textures/snowy_grass_side.png | Bin 0 -> 1036 bytes episode-13/textures/soil.png | Bin 0 -> 1170 bytes episode-13/textures/sponge.png | Bin 0 -> 1316 bytes episode-13/textures/stone.png | Bin 0 -> 841 bytes episode-13/textures/sugar_cane.png | Bin 0 -> 792 bytes episode-13/textures/tnt_bottom.png | Bin 0 -> 629 bytes episode-13/textures/tnt_side.png | Bin 0 -> 772 bytes episode-13/textures/tnt_top.png | Bin 0 -> 923 bytes episode-13/textures/torch.png | Bin 0 -> 660 bytes episode-13/textures/torch_top.png | Bin 0 -> 589 bytes episode-13/textures/unknown.png | Bin 0 -> 5519 bytes episode-13/textures/violet_cloth.png | Bin 0 -> 1264 bytes episode-13/textures/water.png | Bin 0 -> 760 bytes episode-13/textures/white_cloth.png | Bin 0 -> 1273 bytes episode-13/textures/wooden_door.png | Bin 0 -> 1132 bytes episode-13/textures/yellow_cloth.png | Bin 0 -> 1280 bytes episode-13/textures/yellow_flower.png | Bin 0 -> 694 bytes episode-13/vert.glsl | 18 ++ .../language-configuration.json | 33 +++ episode-13/vscode_mcpy_extension/package.json | 36 +++ .../syntaxes/mcpy_blocks.tmLanguage.json | 36 +++ episode-13/world.py | 176 +++++++++++++++ 199 files changed, 2425 insertions(+) create mode 100644 episode-13/block_type.py create mode 100644 episode-13/chunk.py create mode 100644 episode-13/collider.py create mode 100644 episode-13/data/blocks.mcpy create mode 100644 episode-13/entity.py create mode 100644 episode-13/frag.glsl create mode 100644 episode-13/hit.py create mode 100644 episode-13/main.py create mode 100644 episode-13/matrix.py create mode 100644 episode-13/models/__init__.py create mode 100644 episode-13/models/button.py create mode 100644 episode-13/models/cactus.py create mode 100644 episode-13/models/crop.py create mode 100644 episode-13/models/cube.py create mode 100644 episode-13/models/door.py create mode 100644 episode-13/models/fire.py create mode 100644 episode-13/models/flat.py create mode 100644 episode-13/models/glass.py create mode 100644 episode-13/models/ladder.py create mode 100644 episode-13/models/leaves.py create mode 100644 episode-13/models/lever.py create mode 100644 episode-13/models/liquid.py create mode 100644 episode-13/models/plant.py create mode 100644 episode-13/models/pressure_plate.py create mode 100644 episode-13/models/sign.py create mode 100644 episode-13/models/sign_post.py create mode 100644 episode-13/models/slab.py create mode 100644 episode-13/models/snow.py create mode 100644 episode-13/models/soil.py create mode 100644 episode-13/models/stairs.py create mode 100644 episode-13/models/tinted_glass.py create mode 100644 episode-13/models/torch.py create mode 100644 episode-13/player.py create mode 100644 episode-13/save.py create mode 100644 episode-13/save/0/0/c.0.0.dat create mode 100644 episode-13/save/0/1/c.0.1.dat create mode 100644 episode-13/save/0/1o/c.0.-4.dat create mode 100644 episode-13/save/0/1p/c.0.-3.dat create mode 100644 episode-13/save/0/1q/c.0.-2.dat create mode 100644 episode-13/save/0/1r/c.0.-1.dat create mode 100644 episode-13/save/0/2/c.0.2.dat create mode 100644 episode-13/save/0/3/c.0.3.dat create mode 100644 episode-13/save/1/0/c.1.0.dat create mode 100644 episode-13/save/1/1/c.1.1.dat create mode 100644 episode-13/save/1/1o/c.1.-4.dat create mode 100644 episode-13/save/1/1p/c.1.-3.dat create mode 100644 episode-13/save/1/1q/c.1.-2.dat create mode 100644 episode-13/save/1/1r/c.1.-1.dat create mode 100644 episode-13/save/1/2/c.1.2.dat create mode 100644 episode-13/save/1/3/c.1.3.dat create mode 100644 episode-13/save/1o/0/c.-4.0.dat create mode 100644 episode-13/save/1o/1/c.-4.1.dat create mode 100644 episode-13/save/1o/1o/c.-4.-4.dat create mode 100644 episode-13/save/1o/1p/c.-4.-3.dat create mode 100644 episode-13/save/1o/1q/c.-4.-2.dat create mode 100644 episode-13/save/1o/1r/c.-4.-1.dat create mode 100644 episode-13/save/1o/2/c.-4.2.dat create mode 100644 episode-13/save/1o/3/c.-4.3.dat create mode 100644 episode-13/save/1p/0/c.-3.0.dat create mode 100644 episode-13/save/1p/1/c.-3.1.dat create mode 100644 episode-13/save/1p/1o/c.-3.-4.dat create mode 100644 episode-13/save/1p/1p/c.-3.-3.dat create mode 100644 episode-13/save/1p/1q/c.-3.-2.dat create mode 100644 episode-13/save/1p/1r/c.-3.-1.dat create mode 100644 episode-13/save/1p/2/c.-3.2.dat create mode 100644 episode-13/save/1p/3/c.-3.3.dat create mode 100644 episode-13/save/1q/0/c.-2.0.dat create mode 100644 episode-13/save/1q/1/c.-2.1.dat create mode 100644 episode-13/save/1q/1o/c.-2.-4.dat create mode 100644 episode-13/save/1q/1p/c.-2.-3.dat create mode 100644 episode-13/save/1q/1q/c.-2.-2.dat create mode 100644 episode-13/save/1q/1r/c.-2.-1.dat create mode 100644 episode-13/save/1q/2/c.-2.2.dat create mode 100644 episode-13/save/1q/3/c.-2.3.dat create mode 100644 episode-13/save/1r/0/c.-1.0.dat create mode 100644 episode-13/save/1r/1/c.-1.1.dat create mode 100644 episode-13/save/1r/1o/c.-1.-4.dat create mode 100644 episode-13/save/1r/1p/c.-1.-3.dat create mode 100644 episode-13/save/1r/1q/c.-1.-2.dat create mode 100644 episode-13/save/1r/1r/c.-1.-1.dat create mode 100644 episode-13/save/1r/2/c.-1.2.dat create mode 100644 episode-13/save/1r/3/c.-1.3.dat create mode 100644 episode-13/save/2/0/c.2.0.dat create mode 100644 episode-13/save/2/1/c.2.1.dat create mode 100644 episode-13/save/2/1o/c.2.-4.dat create mode 100644 episode-13/save/2/1p/c.2.-3.dat create mode 100644 episode-13/save/2/1q/c.2.-2.dat create mode 100644 episode-13/save/2/1r/c.2.-1.dat create mode 100644 episode-13/save/2/2/c.2.2.dat create mode 100644 episode-13/save/2/3/c.2.3.dat create mode 100644 episode-13/save/3/0/c.3.0.dat create mode 100644 episode-13/save/3/1/c.3.1.dat create mode 100644 episode-13/save/3/1o/c.3.-4.dat create mode 100644 episode-13/save/3/1p/c.3.-3.dat create mode 100644 episode-13/save/3/1q/c.3.-2.dat create mode 100644 episode-13/save/3/1r/c.3.-1.dat create mode 100644 episode-13/save/3/2/c.3.2.dat create mode 100644 episode-13/save/3/3/c.3.3.dat create mode 100644 episode-13/shader.py create mode 100644 episode-13/subchunk.py create mode 100644 episode-13/texture_manager.py create mode 100644 episode-13/textures/aqua_cloth.png create mode 100644 episode-13/textures/bedrock.png create mode 100644 episode-13/textures/black_cloth.png create mode 100644 episode-13/textures/blue_cloth.png create mode 100644 episode-13/textures/bookshelf.png create mode 100644 episode-13/textures/bricks.png create mode 100644 episode-13/textures/brown_mushroom.png create mode 100644 episode-13/textures/cactus_bottom.png create mode 100644 episode-13/textures/cactus_side.png create mode 100644 episode-13/textures/cactus_top.png create mode 100644 episode-13/textures/chest_front.png create mode 100644 episode-13/textures/chest_side.png create mode 100644 episode-13/textures/chest_top.png create mode 100644 episode-13/textures/clay.png create mode 100644 episode-13/textures/coal_ore.png create mode 100644 episode-13/textures/cobblestone.png create mode 100644 episode-13/textures/crafting_table_top.png create mode 100644 episode-13/textures/crafting_table_x.png create mode 100644 episode-13/textures/crafting_table_z.png create mode 100644 episode-13/textures/crops.png create mode 100644 episode-13/textures/cyan_cloth.png create mode 100644 episode-13/textures/dead_bush.png create mode 100644 episode-13/textures/diamond_block.png create mode 100644 episode-13/textures/diamond_ore.png create mode 100644 episode-13/textures/dirt.png create mode 100644 episode-13/textures/fire.png create mode 100644 episode-13/textures/furnace_front.png create mode 100644 episode-13/textures/furnace_side.png create mode 100644 episode-13/textures/furnace_y.png create mode 100644 episode-13/textures/glass.png create mode 100644 episode-13/textures/gold_block.png create mode 100644 episode-13/textures/gold_ore.png create mode 100644 episode-13/textures/grass.png create mode 100644 episode-13/textures/grass_side.png create mode 100644 episode-13/textures/gravel.png create mode 100644 episode-13/textures/green_cloth.png create mode 100644 episode-13/textures/grey_cloth.png create mode 100644 episode-13/textures/ice.png create mode 100644 episode-13/textures/indigo_cloth.png create mode 100644 episode-13/textures/iron_block.png create mode 100644 episode-13/textures/iron_door.png create mode 100644 episode-13/textures/iron_door_bottom_half.png create mode 100644 episode-13/textures/iron_ore.png create mode 100644 episode-13/textures/jukebox.png create mode 100644 episode-13/textures/jukebox_top.png create mode 100644 episode-13/textures/ladder.png create mode 100644 episode-13/textures/lava.png create mode 100644 episode-13/textures/leaves.png create mode 100644 episode-13/textures/lever.png create mode 100644 episode-13/textures/lime_cloth.png create mode 100644 episode-13/textures/lit_furnace_front.png create mode 100644 episode-13/textures/log_side.png create mode 100644 episode-13/textures/log_y.png create mode 100644 episode-13/textures/magenta_cloth.png create mode 100644 episode-13/textures/mob_spawner.png create mode 100644 episode-13/textures/mossy_cobblestone.png create mode 100644 episode-13/textures/obsidian.png create mode 100644 episode-13/textures/off_redstone_torch.png create mode 100644 episode-13/textures/off_redstone_torch_top.png create mode 100644 episode-13/textures/orange_cloth.png create mode 100644 episode-13/textures/pink_cloth.png create mode 100644 episode-13/textures/planks.png create mode 100644 episode-13/textures/purple_cloth.png create mode 100644 episode-13/textures/rails.png create mode 100644 episode-13/textures/red_cloth.png create mode 100644 episode-13/textures/red_mushroom.png create mode 100644 episode-13/textures/red_rose.png create mode 100644 episode-13/textures/redstone_ore.png create mode 100644 episode-13/textures/redstone_torch.png create mode 100644 episode-13/textures/redstone_torch_top.png create mode 100644 episode-13/textures/redstone_wire.png create mode 100644 episode-13/textures/sand.png create mode 100644 episode-13/textures/sapling.png create mode 100644 episode-13/textures/slab_side.png create mode 100644 episode-13/textures/slab_y.png create mode 100644 episode-13/textures/snow.png create mode 100644 episode-13/textures/snowy_grass_side.png create mode 100644 episode-13/textures/soil.png create mode 100644 episode-13/textures/sponge.png create mode 100644 episode-13/textures/stone.png create mode 100644 episode-13/textures/sugar_cane.png create mode 100644 episode-13/textures/tnt_bottom.png create mode 100644 episode-13/textures/tnt_side.png create mode 100644 episode-13/textures/tnt_top.png create mode 100644 episode-13/textures/torch.png create mode 100644 episode-13/textures/torch_top.png create mode 100644 episode-13/textures/unknown.png create mode 100644 episode-13/textures/violet_cloth.png create mode 100644 episode-13/textures/water.png create mode 100644 episode-13/textures/white_cloth.png create mode 100644 episode-13/textures/wooden_door.png create mode 100644 episode-13/textures/yellow_cloth.png create mode 100644 episode-13/textures/yellow_flower.png create mode 100644 episode-13/vert.glsl create mode 100644 episode-13/vscode_mcpy_extension/language-configuration.json create mode 100644 episode-13/vscode_mcpy_extension/package.json create mode 100644 episode-13/vscode_mcpy_extension/syntaxes/mcpy_blocks.tmLanguage.json create mode 100644 episode-13/world.py diff --git a/episode-13/block_type.py b/episode-13/block_type.py new file mode 100644 index 00000000..8b0668bb --- /dev/null +++ b/episode-13/block_type.py @@ -0,0 +1,71 @@ +import collider + +import models.cube # default model + +class Block_type: + # new optional model argument (cube model by default) + def __init__(self, texture_manager, name = "unknown", block_face_textures = {"all": "cobblestone"}, model = models.cube): + self.name = name + self.block_face_textures = block_face_textures + self.model = model + + # create members based on model attributes + + self.transparent = model.transparent + self.is_cube = model.is_cube + self.glass = model.glass + + # create colliders + + self.colliders = [] + + for _collider in model.colliders: + self.colliders.append(collider.Collider(*_collider)) + + # replace data contained in numbers.py with model specific data + + self.vertex_positions = model.vertex_positions + self.tex_coords = model.tex_coords.copy() + self.shading_values = model.shading_values + + def set_block_face(face, texture): + # make sure we don't add inexistent faces + + if face > len(self.tex_coords) - 1: + return + + self.tex_coords[face] = self.tex_coords[face].copy() + + for vertex in range(4): + self.tex_coords[face][vertex * 3 + 2] = texture + + for face in block_face_textures: + texture = block_face_textures[face] + texture_manager.add_texture(texture) + + texture_index = texture_manager.textures.index(texture) + + if face == "all": + for i in range(len(self.tex_coords)): + set_block_face(i, texture_index) + + elif face == "sides": + set_block_face(0, texture_index) + set_block_face(1, texture_index) + set_block_face(4, texture_index) + set_block_face(5, texture_index) + + elif face == "x": + set_block_face(0, texture_index) + set_block_face(1, texture_index) + + elif face == "y": + set_block_face(2, texture_index) + set_block_face(3, texture_index) + + elif face == "z": + set_block_face(4, texture_index) + set_block_face(5, texture_index) + + else: + set_block_face(["right", "left", "top", "bottom", "front", "back"].index(face), texture_index) \ No newline at end of file diff --git a/episode-13/chunk.py b/episode-13/chunk.py new file mode 100644 index 00000000..7bb7fff3 --- /dev/null +++ b/episode-13/chunk.py @@ -0,0 +1,183 @@ +import ctypes +import math + +import pyglet.gl as gl + +import subchunk + +CHUNK_WIDTH = 16 +CHUNK_HEIGHT = 128 +CHUNK_LENGTH = 16 + +class Chunk: + def __init__(self, world, chunk_position): + self.world = world + + self.modified = False + self.chunk_position = chunk_position + + self.position = ( + self.chunk_position[0] * CHUNK_WIDTH, + self.chunk_position[1] * CHUNK_HEIGHT, + self.chunk_position[2] * CHUNK_LENGTH) + + self.blocks = [[[0 + for z in range(CHUNK_LENGTH)] + for y in range(CHUNK_HEIGHT)] + for x in range(CHUNK_WIDTH )] + + self.subchunks = {} + + for x in range(int(CHUNK_WIDTH / subchunk.SUBCHUNK_WIDTH)): + for y in range(int(CHUNK_HEIGHT / subchunk.SUBCHUNK_HEIGHT)): + for z in range(int(CHUNK_LENGTH / subchunk.SUBCHUNK_LENGTH)): + self.subchunks[(x, y, z)] = subchunk.Subchunk(self, (x, y, z)) + + # mesh variables + + self.mesh_vertex_positions = [] + self.mesh_tex_coords = [] + self.mesh_shading_values = [] + + self.mesh_index_counter = 0 + self.mesh_indices = [] + + # create VAO and VBO's + + self.vao = gl.GLuint(0) + gl.glGenVertexArrays(1, self.vao) + gl.glBindVertexArray(self.vao) + + self.vertex_position_vbo = gl.GLuint(0) + gl.glGenBuffers(1, self.vertex_position_vbo) + + self.tex_coord_vbo = gl.GLuint(0) + gl.glGenBuffers(1, self.tex_coord_vbo) + + self.shading_values_vbo = gl.GLuint(0) + gl.glGenBuffers(1, self.shading_values_vbo) + + self.ibo = gl.GLuint(0) + gl.glGenBuffers(1, self.ibo) + + def update_subchunk_meshes(self): + for subchunk_position in self.subchunks: + subchunk = self.subchunks[subchunk_position] + subchunk.update_mesh() + + def update_at_position(self, position): + x, y, z = position + + lx = int(x % subchunk.SUBCHUNK_WIDTH ) + ly = int(y % subchunk.SUBCHUNK_HEIGHT) + lz = int(z % subchunk.SUBCHUNK_LENGTH) + + clx, cly, clz = self.world.get_local_position(position) + + sx = math.floor(clx / subchunk.SUBCHUNK_WIDTH) + sy = math.floor(cly / subchunk.SUBCHUNK_HEIGHT) + sz = math.floor(clz / subchunk.SUBCHUNK_LENGTH) + + self.subchunks[(sx, sy, sz)].update_mesh() + + def try_update_subchunk_mesh(subchunk_position): + if subchunk_position in self.subchunks: + self.subchunks[subchunk_position].update_mesh() + + if lx == subchunk.SUBCHUNK_WIDTH - 1: try_update_subchunk_mesh((sx + 1, sy, sz)) + if lx == 0: try_update_subchunk_mesh((sx - 1, sy, sz)) + + if ly == subchunk.SUBCHUNK_HEIGHT - 1: try_update_subchunk_mesh((sx, sy + 1, sz)) + if ly == 0: try_update_subchunk_mesh((sx, sy - 1, sz)) + + if lz == subchunk.SUBCHUNK_LENGTH - 1: try_update_subchunk_mesh((sx, sy, sz + 1)) + if lz == 0: try_update_subchunk_mesh((sx, sy, sz - 1)) + + def update_mesh(self): + # combine all the small subchunk meshes into one big chunk mesh + + self.mesh_vertex_positions = [] + self.mesh_tex_coords = [] + self.mesh_shading_values = [] + + self.mesh_index_counter = 0 + self.mesh_indices = [] + + for subchunk_position in self.subchunks: + subchunk = self.subchunks[subchunk_position] + + self.mesh_vertex_positions.extend(subchunk.mesh_vertex_positions) + self.mesh_tex_coords.extend(subchunk.mesh_tex_coords) + self.mesh_shading_values.extend(subchunk.mesh_shading_values) + + mesh_indices = [index + self.mesh_index_counter for index in subchunk.mesh_indices] + + self.mesh_indices.extend(mesh_indices) + self.mesh_index_counter += subchunk.mesh_index_counter + + # send the full mesh data to the GPU and free the memory used client-side (we don't need it anymore) + # don't forget to save the length of 'self.mesh_indices' before freeing + + self.mesh_indices_length = len(self.mesh_indices) + self.send_mesh_data_to_gpu() + + del self.mesh_vertex_positions + del self.mesh_tex_coords + del self.mesh_shading_values + + del self.mesh_indices + + def send_mesh_data_to_gpu(self): # pass mesh data to gpu + if not self.mesh_index_counter: + return + + gl.glBindVertexArray(self.vao) + + gl.glBindBuffer(gl.GL_ARRAY_BUFFER, self.vertex_position_vbo) + gl.glBufferData( + gl.GL_ARRAY_BUFFER, + ctypes.sizeof(gl.GLfloat * len(self.mesh_vertex_positions)), + (gl.GLfloat * len(self.mesh_vertex_positions)) (*self.mesh_vertex_positions), + gl.GL_STATIC_DRAW) + + gl.glVertexAttribPointer(0, 3, gl.GL_FLOAT, gl.GL_FALSE, 0, 0) + gl.glEnableVertexAttribArray(0) + + gl.glBindBuffer(gl.GL_ARRAY_BUFFER, self.tex_coord_vbo) + gl.glBufferData( + gl.GL_ARRAY_BUFFER, + ctypes.sizeof(gl.GLfloat * len(self.mesh_tex_coords)), + (gl.GLfloat * len(self.mesh_tex_coords)) (*self.mesh_tex_coords), + gl.GL_STATIC_DRAW) + + gl.glVertexAttribPointer(1, 3, gl.GL_FLOAT, gl.GL_FALSE, 0, 0) + gl.glEnableVertexAttribArray(1) + + gl.glBindBuffer(gl.GL_ARRAY_BUFFER, self.shading_values_vbo) + gl.glBufferData( + gl.GL_ARRAY_BUFFER, + ctypes.sizeof(gl.GLfloat * len(self.mesh_shading_values)), + (gl.GLfloat * len(self.mesh_shading_values)) (*self.mesh_shading_values), + gl.GL_STATIC_DRAW) + + gl.glVertexAttribPointer(2, 1, gl.GL_FLOAT, gl.GL_FALSE, 0, 0) + gl.glEnableVertexAttribArray(2) + + gl.glBindBuffer(gl.GL_ELEMENT_ARRAY_BUFFER, self.ibo) + gl.glBufferData( + gl.GL_ELEMENT_ARRAY_BUFFER, + ctypes.sizeof(gl.GLuint * self.mesh_indices_length), + (gl.GLuint * self.mesh_indices_length) (*self.mesh_indices), + gl.GL_STATIC_DRAW) + + def draw(self): + if not self.mesh_index_counter: + return + + gl.glBindVertexArray(self.vao) + + gl.glDrawElements( + gl.GL_TRIANGLES, + self.mesh_indices_length, + gl.GL_UNSIGNED_INT, + None) \ No newline at end of file diff --git a/episode-13/collider.py b/episode-13/collider.py new file mode 100644 index 00000000..81f2aa89 --- /dev/null +++ b/episode-13/collider.py @@ -0,0 +1,67 @@ +class Collider: + def __init__(self, pos1 = (None,) * 3, pos2 = (None,) * 3): + # pos1: position of the collider vertex in the -X, -Y, -Z direction + # pos2: position of the collider vertex in the +X, +Y, +Z direction + + self.x1, self.y1, self.z1 = pos1 + self.x2, self.y2, self.z2 = pos2 + + def __add__(self, pos): + x, y, z = pos + + return Collider( + (self.x1 + x, self.y1 + y, self.z1 + z), + (self.x2 + x, self.y2 + y, self.z2 + z) + ) + + def __and__(self, collider): + x = min(self.x2, collider.x2) - max(self.x1, collider.x1) + y = min(self.y2, collider.y2) - max(self.y1, collider.y1) + z = min(self.z2, collider.z2) - max(self.z1, collider.z1) + + return x > 0 and y > 0 and z > 0 + + def collide(self, collider, velocity): + # self: the dynamic collider, which moves + # collider: the static collider, which stays put + + no_collision = 1, None + + # find entry & exit times for each axis + + vx, vy, vz = velocity + + time = lambda x, y: x / y if y else float('-' * (x > 0) + "inf") + + x_entry = time(collider.x1 - self.x2 if vx > 0 else collider.x2 - self.x1, vx) + x_exit = time(collider.x2 - self.x1 if vx > 0 else collider.x1 - self.x2, vx) + + y_entry = time(collider.y1 - self.y2 if vy > 0 else collider.y2 - self.y1, vy) + y_exit = time(collider.y2 - self.y1 if vy > 0 else collider.y1 - self.y2, vy) + + z_entry = time(collider.z1 - self.z2 if vz > 0 else collider.z2 - self.z1, vz) + z_exit = time(collider.z2 - self.z1 if vz > 0 else collider.z1 - self.z2, vz) + + # make sure we actually got a collision + + if x_entry < 0 and y_entry < 0 and z_entry < 0: + return no_collision + + if x_entry > 1 or y_entry > 1 or z_entry > 1: + return no_collision + + # on which axis did we collide first? + + entry = max(x_entry, y_entry, z_entry) + exit_ = min(x_exit, y_exit, z_exit ) + + if entry > exit_: + return no_collision + + # find normal of surface we collided with + + nx = (0, -1 if vx > 0 else 1)[entry == x_entry] + ny = (0, -1 if vy > 0 else 1)[entry == y_entry] + nz = (0, -1 if vz > 0 else 1)[entry == z_entry] + + return entry, (nx, ny, nz) \ No newline at end of file diff --git a/episode-13/data/blocks.mcpy b/episode-13/data/blocks.mcpy new file mode 100644 index 00000000..999194ba --- /dev/null +++ b/episode-13/data/blocks.mcpy @@ -0,0 +1,91 @@ +# block ID's from: +# https://www.minecraftforum.net/forums/minecraft-java-edition/discussion/114963-all-item-block-ids-in-one-place +# (with some slight modifications) + +1: name "Stone", texture.all stone +2: name "Grass", texture.top grass, texture.bottom dirt, texture.sides grass_side +3: name "Dirt", texture.all dirt +4: name "Cobblestone", texture.all cobblestone +5: name "Planks", texture.all planks +6: name "Sapling", model models.plant, texture.all sapling +7: name "Bedrock", texture.all bedrock +8: name "Water", model models.liquid, texture.all water +9: sameas 8, name "Stationary Water" +10: name "Lava", model models.liquid, texture.all lava +11: sameas 10, name "Stationary Lava" +12: name "Sand", texture.all sand +13: name "Gravel", texture.all gravel +14: name "Gold Ore", texture.all gold_ore +15: name "Iron Ore", texture.all iron_ore +16: name "Coal Ore", texture.all coal_ore +17: name "Log", texture.y log_y, texture.sides log_side +18: name "Leaves", model models.leaves, texture.all leaves +19: name "Sponge", texture.all sponge +20: name "Glass", model models.glass, texture.all glass +21: name "Red Cloth", texture.all red_cloth +22: name "Orange Cloth", texture.all orange_cloth +23: name "Yellow Cloth", texture.all yellow_cloth +24: name "Lime Cloth", texture.all lime_cloth +25: name "Green Cloth", texture.all green_cloth +26: name "Aqua Cloth", texture.all aqua_cloth +27: name "Cyan Cloth", texture.all cyan_cloth +28: name "Blue Cloth", texture.all blue_cloth +29: name "Purple Cloth", texture.all purple_cloth +30: name "Indigo Cloth", texture.all indigo_cloth +31: name "Violet Cloth", texture.all violet_cloth +32: name "Magenta Cloth", texture.all magenta_cloth +33: name "Pink Cloth", texture.all pink_cloth +34: name "Black Cloth", texture.all black_cloth +35: name "Grey Cloth", texture.all grey_cloth +36: name "White Cloth", texture.all white_cloth +37: name "Yellow Flower", model models.plant, texture.all yellow_flower +38: name "Red Rose", model models.plant, texture.all red_rose +39: name "Brown Mushroom", model models.plant, texture.all brown_mushroom +40: name "Red Mushroom", model models.plant, texture.all red_mushroom +41: name "Gold Block", texture.all gold_block +42: name "Iron Block", texture.all iron_block +43: name "Double Slab", texture.sides slab_side, texture.y slab_y +44: name "Slab", model models.slab, texture.sides slab_side, texture.y slab_y +45: name "Bricks", texture.all bricks +46: name "TNT", texture.top tnt_top, texture.bottom tnt_bottom, texture.sides tnt_side +47: name "Bookshelf", texture.y planks, texture.sides bookshelf +48: name "Mossy Cobblestone", texture.all mossy_cobblestone +49: name "Obsidian", texture.all obsidian +50: name "Torch", model models.torch, texture.top torch_top, texture.bottom torch, texture.sides torch +51: name "Fire", model models.fire, texture.all fire +# I know, the model name isn't great, but it's got the same graphical properties +52: name "Mob Spawner", model models.leaves, texture.all mob_spawner +53: name "Wooden Stairs", model models.stairs, texture.all planks +54: name "Chest", texture.y chest_top, texture.sides chest_side, texture.front chest_front +55: name "Redstone Wire", model models.flat, texture.all redstone_wire +56: name "Diamond Ore", texture.all diamond_ore +57: name "Diamond Block", texture.all diamond_block +58: name "Crafting Table", texture.top crafting_table_top, texture.bottom planks, texture.x crafting_table_x, texture.z crafting_table_z +59: name "Crops", model models.crop, texture.all crops +60: name "Soil", model models.soil, texture.all dirt, texture.top soil +61: name "Furnace", texture.y furnace_y, texture.sides furnace_side, texture.front furnace_front +62: name "Lit Furnace", texture.y furnace_y, texture.sides furnace_side, texture.front lit_furnace_front +63: name "Sign Post", model models.sign_post, texture.all planks +64: name "Wooden Door", model models.door, texture.all wooden_door +65: name "Ladder", model models.ladder, texture.all ladder +66: name "Rails", model models.flat, texture.all rails +67: name "Cobblestone Stairs", model models.stairs, texture.all cobblestone +68: name "Sign", model models.sign, texture.all planks +69: name "Lever", model models.lever, texture.all lever +70: name "Stone Pressure Plate", model models.pressure_plate, texture.all stone +71: name "Iron Door", model models.door, texture.all iron_door_bottom_half +72: name "Wooden Pressure Plate", model models.pressure_plate, texture.all planks +73: name "Redstone Ore", texture.all redstone_ore +# when we implement a lighting system, this will have some kind of "emissive" property +74: name "Lit Redstone Ore", texture.all redstone_ore +75: name "Redstone Torch", model models.torch, texture.top redstone_torch_top, texture.bottom redstone_torch, texture.sides redstone_torch +76: name "Redstone Torch (Off)", model models.torch, texture.top off_redstone_torch_top, texture.bottom off_redstone_torch, texture.sides off_redstone_torch +77: name "Stone Button", model models.button, texture.all stone +78: name "Snow", model models.snow, texture.all snow +# ditto as for mob spawners (52) +79: name "Ice", model models.tinted_glass, texture.all ice +80: name "Snow Block", texture.all snow +81: name "Cactus", model models.cactus, texture.top cactus_top, texture.bottom cactus_bottom, texture.sides cactus_side +82: name "Clay", texture.all clay +83: name "Sugar Cane", model models.plant, texture.all sugar_cane +84: name "Jukebox", texture.all jukebox, texture.top jukebox_top diff --git a/episode-13/entity.py b/episode-13/entity.py new file mode 100644 index 00000000..4ac51087 --- /dev/null +++ b/episode-13/entity.py @@ -0,0 +1,146 @@ +import math +import collider + +FLYING_ACCEL = (0, 0, 0) +GRAVITY_ACCEL = (0, -32, 0) + +class Entity: + def __init__(self, world): + self.world = world + + # physical variables + + self.jump_height = 1.25 + self.flying = False + + self.position = [0, 80, 0] + self.rotation = [-math.tau / 4, 0] + + self.velocity = [0, 0, 0] + + # collision variables + + self.width = 0.6 + self.height = 1.8 + + self.collider = collider.Collider() + self.grounded = False + + def update_collider(self): + x, y, z = self.position + + self.collider.x1 = x - self.width / 2 + self.collider.x2 = x + self.width / 2 + + self.collider.y1 = y + self.collider.y2 = y + self.height + + self.collider.z1 = z - self.width / 2 + self.collider.z2 = z + self.width / 2 + + def teleport(self, pos): + self.position = list(pos) + self.velocity = [0, 0, 0] # to prevent collisions + + def jump(self, height = None): + # obviously, we can't initiate a jump while in mid-air + + if not self.grounded: + return + + if height is None: + height = self.jump_height + + self.velocity[1] = math.sqrt(2 * height * -GRAVITY_ACCEL[1]) + + def update(self, delta_time): + # compute collisions + + self.update_collider() + self.grounded = False + + for _ in range(3): + adjusted_velocity = [v * delta_time for v in self.velocity] + vx, vy, vz = adjusted_velocity + + # find all the blocks we could potentially be colliding with + # this step is known as "broad-phasing" + + step_x = 1 if vx > 0 else -1 + step_y = 1 if vy > 0 else -1 + step_z = 1 if vz > 0 else -1 + + steps_xz = int(self.width / 2) + steps_y = int(self.height) + + x, y, z = map(int, self.position) + cx, cy, cz = [int(x + v) for x, v in zip(self.position, adjusted_velocity)] + + potential_collisions = [] + + for i in range(x - step_x * (steps_xz + 1), cx + step_x * (steps_xz + 2), step_x): + for j in range(y - step_y * (steps_y + 2), cy + step_y * (steps_y + 3), step_y): + for k in range(z - step_z * (steps_xz + 1), cz + step_z * (steps_xz + 2), step_z): + pos = (i, j, k) + num = self.world.get_block_number(pos) + + if not num: + continue + + for _collider in self.world.block_types[num].colliders: + entry_time, normal = self.collider.collide(_collider + pos, adjusted_velocity) + + if normal is None: + continue + + potential_collisions.append((entry_time, normal)) + + # get first collision + + if not potential_collisions: + break + + entry_time, normal = min(potential_collisions, key = lambda x: x[0]) + entry_time -= 0.001 + + if normal[0]: + self.velocity[0] = 0 + self.position[0] += vx * entry_time + + if normal[1]: + self.velocity[1] = 0 + self.position[1] += vy * entry_time + + if normal[2]: + self.velocity[2] = 0 + self.position[2] += vz * entry_time + + if normal[1] == 1: + self.grounded = True + + self.position = [x + v * delta_time for x, v in zip(self.position, self.velocity)] + + # process physics (apply acceleration, friction, & drag) + + acceleration = (GRAVITY_ACCEL, FLYING_ACCEL)[self.flying] + self.velocity = [v + a * delta_time for v, a in zip(self.velocity, acceleration)] + + if self.grounded or self.flying: + k = 0.05 ** (20 * delta_time) # takes 95% off of current velocity every 20th of a second + + self.velocity[0] *= k + self.velocity[1] *= k + self.velocity[2] *= k + + else: + k = 0.98 ** (20 * delta_time) # takes 2% off of current velocity every 20th of a second + + self.velocity[0] *= k + self.velocity[2] *= k + + if self.velocity[1] < 0: + self.velocity[1] *= k + + # make sure we can rely on the entity's collider outside of this function + + self.update_collider() \ No newline at end of file diff --git a/episode-13/frag.glsl b/episode-13/frag.glsl new file mode 100644 index 00000000..46c3d2a2 --- /dev/null +++ b/episode-13/frag.glsl @@ -0,0 +1,18 @@ +#version 330 + +out vec4 fragment_colour; + +uniform sampler2DArray texture_array_sampler; + +in vec3 local_position; +in vec3 interpolated_tex_coords; +in float interpolated_shading_value; + +void main(void) { + vec4 texture_colour = texture(texture_array_sampler, interpolated_tex_coords); + fragment_colour = texture_colour * interpolated_shading_value; + + if (texture_colour.a == 0.0) { // discard if texel's alpha component is 0 (texel is transparent) + discard; + } +} \ No newline at end of file diff --git a/episode-13/hit.py b/episode-13/hit.py new file mode 100644 index 00000000..88389510 --- /dev/null +++ b/episode-13/hit.py @@ -0,0 +1,105 @@ +import math + +HIT_RANGE = 3 + +class Hit_ray: + def __init__(self, world, rotation, starting_position): + self.world = world + + # get the ray unit vector based on rotation angles + # sqrt(ux ^ 2 + uy ^ 2 + uz ^ 2) must always equal 1 + + self.vector = ( + math.cos(rotation[0]) * math.cos(rotation[1]), + math.sin(rotation[1]), + math.sin(rotation[0]) * math.cos(rotation[1])) + + # point position + self.position = list(starting_position) + + # block position in which point currently is + self.block = tuple(map(lambda x: int(round(x)), self.position)) + + # current distance the point has travelled + self.distance = 0 + + # 'check' and 'step' both return 'True' if something is hit, and 'False' if not + + def check(self, hit_callback, distance, current_block, next_block): + if self.world.get_block_number(next_block): + hit_callback(current_block, next_block) + return True + + else: + self.position = list(map(lambda x: self.position[x] + self.vector[x] * distance, range(3))) + + self.block = next_block + self.distance += distance + + return False + + def step(self, hit_callback): + bx, by, bz = self.block + + # point position relative to block centre + local_position = list(map(lambda x: self.position[x] - self.block[x], range(3))) + + # we don't want to deal with negatives, so remove the sign + # this is also cool because it means we don't need to take into account the sign of our ray vector + # we do need to remember which components were negative for later on, however + + sign = [1, 1, 1] # '1' for positive, '-1' for negative + absolute_vector = list(self.vector) + + for component in range(3): + if self.vector[component] < 0: + sign[component] = -1 + + absolute_vector[component] = -absolute_vector[component] + local_position[component] = -local_position[component] + + lx, ly, lz = local_position + vx, vy, vz = absolute_vector + + # calculate intersections + # I only detail the math for the first component (X) because the rest is pretty self-explanatory + + # ray line (passing through the point) r ≡ (x - lx) / vx = (y - ly) / lz = (z - lz) / vz (parametric equation) + + # +x face fx ≡ x = 0.5 (y & z can be any real number) + # r ∩ fx ≡ (0.5 - lx) / vx = (y - ly) / vy = (z - lz) / vz + + # x: x = 0.5 + # y: (y - ly) / vy = (0.5 - lx) / vx IFF y = (0.5 - lx) / vx * vy + ly + # z: (z - lz) / vz = (0.5 - lx) / vx IFF z = (0.5 - lx) / vx * vz + lz + + if vx: + x = 0.5 + y = (0.5 - lx) / vx * vy + ly + z = (0.5 - lx) / vx * vz + lz + + if y >= -0.5 and y <= 0.5 and z >= -0.5 and z <= 0.5: + distance = math.sqrt((x - lx) ** 2 + (y - ly) ** 2 + (z - lz) ** 2) + + # we can return straight away here + # if we intersect with one face, we know for a fact we're not intersecting with any of the others + + return self.check(hit_callback, distance, (bx, by, bz), (bx + sign[0], by, bz)) + + if vy: + x = (0.5 - ly) / vy * vx + lx + y = 0.5 + z = (0.5 - ly) / vy * vz + lz + + if x >= -0.5 and x <= 0.5 and z >= -0.5 and z <= 0.5: + distance = math.sqrt((x - lx) ** 2 + (y - ly) ** 2 + (z - lz) ** 2) + return self.check(hit_callback, distance, (bx, by, bz), (bx, by + sign[1], bz)) + + if vz: + x = (0.5 - lz) / vz * vx + lx + y = (0.5 - lz) / vz * vy + ly + z = 0.5 + + if x >= -0.5 and x <= 0.5 and y >= -0.5 and y <= 0.5: + distance = math.sqrt((x - lx) ** 2 + (y - ly) ** 2 + (z - lz) ** 2) + return self.check(hit_callback, distance, (bx, by, bz), (bx, by, bz + sign[2])) \ No newline at end of file diff --git a/episode-13/main.py b/episode-13/main.py new file mode 100644 index 00000000..fefb347f --- /dev/null +++ b/episode-13/main.py @@ -0,0 +1,205 @@ + +import math +import ctypes +import random +import pyglet + +pyglet.options["shadow_window"] = False +pyglet.options["debug_gl"] = False + +import pyglet.gl as gl + +import matrix +import shader +import player + +import block_type +import texture_manager + +import chunk +import world + +import hit + +class Window(pyglet.window.Window): + def __init__(self, **args): + super().__init__(**args) + + # create world + + self.world = world.World() + + # create shader + + self.shader = shader.Shader("vert.glsl", "frag.glsl") + self.shader_sampler_location = self.shader.find_uniform(b"texture_array_sampler") + self.shader.use() + + # pyglet stuff + + pyglet.clock.schedule_interval(self.update, 1.0 / 60) + self.mouse_captured = False + + # player stuff + + self.player = player.Player(self.world, self.shader, self.width, self.height) + + # misc stuff + + self.holding = 44 # 5 + + def update(self, delta_time): + # print(f"FPS: {1.0 / delta_time}") + + if not self.mouse_captured: + self.player.input = [0, 0, 0] + + self.player.update(delta_time) + + def on_draw(self): + self.player.update_matrices() + + # bind textures + + gl.glActiveTexture(gl.GL_TEXTURE0) + gl.glBindTexture(gl.GL_TEXTURE_2D_ARRAY, self.world.texture_manager.texture_array) + gl.glUniform1i(self.shader_sampler_location, 0) + + # draw stuff + + gl.glEnable(gl.GL_DEPTH_TEST) + gl.glEnable(gl.GL_CULL_FACE) + + gl.glClearColor(0.0, 0.0, 0.0, 0.0) + self.clear() + self.world.draw() + + gl.glFinish() + + # input functions + + def on_resize(self, width, height): + print(f"Resize {width} * {height}") + gl.glViewport(0, 0, width, height) + + self.player.view_width = width + self.player.view_height = height + + def on_mouse_press(self, x, y, button, modifiers): + if not self.mouse_captured: + self.mouse_captured = True + self.set_exclusive_mouse(True) + + return + + # handle breaking/placing blocks + + def hit_callback(current_block, next_block): + if button == pyglet.window.mouse.RIGHT: self.world.try_set_block(current_block, self.holding, self.player.collider) + elif button == pyglet.window.mouse.LEFT: self.world.set_block(next_block, 0) + elif button == pyglet.window.mouse.MIDDLE: self.holding = self.world.get_block_number(next_block) + + x, y, z = self.player.position + y += self.player.eyelevel + + hit_ray = hit.Hit_ray(self.world, self.player.rotation, (x, y, z)) + + while hit_ray.distance < hit.HIT_RANGE: + if hit_ray.step(hit_callback): + break + + def on_mouse_motion(self, x, y, delta_x, delta_y): + if self.mouse_captured: + sensitivity = 0.004 + + self.player.rotation[0] += delta_x * sensitivity + self.player.rotation[1] += delta_y * sensitivity + + self.player.rotation[1] = max(-math.tau / 4, min(math.tau / 4, self.player.rotation[1])) + + def on_mouse_drag(self, x, y, delta_x, delta_y, buttons, modifiers): + self.on_mouse_motion(x, y, delta_x, delta_y) + + def on_key_press(self, key, modifiers): + if not self.mouse_captured: + return + + if key == pyglet.window.key.D: self.player.input[0] += 1 + elif key == pyglet.window.key.A: self.player.input[0] -= 1 + elif key == pyglet.window.key.W: self.player.input[2] += 1 + elif key == pyglet.window.key.S: self.player.input[2] -= 1 + + elif key == pyglet.window.key.SPACE : self.player.input[1] += 1 + elif key == pyglet.window.key.LSHIFT: self.player.input[1] -= 1 + elif key == pyglet.window.key.LCTRL : self.player.target_speed = player.SPRINTING_SPEED + + elif key == pyglet.window.key.F: + self.player.flying = not self.player.flying + + elif key == pyglet.window.key.G: + self.holding = random.randint(1, len(self.world.block_types) - 1) + + elif key == pyglet.window.key.O: + self.world.save.save() + + elif key == pyglet.window.key.R: + # how large is the world? + + max_y = 0 + + max_x, max_z = (0, 0) + min_x, min_z = (0, 0) + + for pos in self.world.chunks: + x, y, z = pos + + max_y = max(max_y, (y + 1) * chunk.CHUNK_HEIGHT) + + max_x = max(max_x, (x + 1) * chunk.CHUNK_WIDTH) + min_x = min(min_x, x * chunk.CHUNK_WIDTH) + + max_z = max(max_z, (z + 1) * chunk.CHUNK_LENGTH) + min_z = min(min_z, z * chunk.CHUNK_LENGTH) + + # get random X & Z coordinates to teleport the player to + + x = random.randint(min_x, max_x) + z = random.randint(min_z, max_z) + + # find height at which to teleport to, by finding the first non-air block from the top of the world + + for y in range(chunk.CHUNK_HEIGHT - 1, -1, -1): + if not self.world.get_block_number((x, y, z)): + continue + + self.player.teleport((x, y + 1, z)) + break + + elif key == pyglet.window.key.ESCAPE: + self.mouse_captured = False + self.set_exclusive_mouse(False) + + def on_key_release(self, key, modifiers): + if not self.mouse_captured: + return + + if key == pyglet.window.key.D: self.player.input[0] -= 1 + elif key == pyglet.window.key.A: self.player.input[0] += 1 + elif key == pyglet.window.key.W: self.player.input[2] -= 1 + elif key == pyglet.window.key.S: self.player.input[2] += 1 + + elif key == pyglet.window.key.SPACE : self.player.input[1] -= 1 + elif key == pyglet.window.key.LSHIFT: self.player.input[1] += 1 + elif key == pyglet.window.key.LCTRL : self.player.target_speed = player.WALKING_SPEED + +class Game: + def __init__(self): + self.config = gl.Config(major_version = 3, minor_version = 3, depth_size = 16) + self.window = Window(config = self.config, width = 800, height = 600, caption = "Minecraft clone", resizable = True, vsync = False) + + def run(self): + pyglet.app.run() + +if __name__ == "__main__": + game = Game() + game.run() diff --git a/episode-13/matrix.py b/episode-13/matrix.py new file mode 100644 index 00000000..f2a5c61c --- /dev/null +++ b/episode-13/matrix.py @@ -0,0 +1,139 @@ + +import copy +import ctypes +import math + +def copy_matrix(matrix): + return copy.deepcopy(matrix) # we need to use deepcopy since we're dealing with 2D arrays + +clean_matrix = [[0.0 for x in range(4)] for x in range(4)] +identity_matrix = copy_matrix(clean_matrix) + +identity_matrix[0][0] = 1.0 +identity_matrix[1][1] = 1.0 +identity_matrix[2][2] = 1.0 +identity_matrix[3][3] = 1.0 + +def multiply_matrices(x_matrix, y_matrix): + result_matrix = copy_matrix(clean_matrix) + + for i in range(4): + for j in range(4): + result_matrix[i][j] = \ + (x_matrix[0][j] * y_matrix[i][0]) + \ + (x_matrix[1][j] * y_matrix[i][1]) + \ + (x_matrix[2][j] * y_matrix[i][2]) + \ + (x_matrix[3][j] * y_matrix[i][3]) + + return result_matrix + +class Matrix: + def __init__(self, base = None): + if type(base) == Matrix: self.data = copy_matrix(base.data) + elif type(base) == list: self.data = copy_matrix(base) + else: self.data = copy_matrix(clean_matrix) + + def load_identity(self): + self.data = copy_matrix(identity_matrix) + + def __mul__(self, matrix): + return Matrix(multiply_matrices(self.data, matrix.data)) + + def __imul__(self, matrix): + self.data = multiply_matrices(self.data, matrix.data) + + def scale(self, x, y, z): + for i in range(4): self.data[0][i] *= scale_x + for i in range(4): self.data[1][i] *= scale_y + for i in range(4): self.data[2][i] *= scale_z + + def translate(self, x, y, z): + for i in range(4): + self.data[3][i] = self.data[3][i] + (self.data[0][i] * x + self.data[1][i] * y + self.data[2][i] * z) + + def rotate(self, angle, x, y, z): + magnitude = math.sqrt(x * x + y * y + z * z) + + x /= -magnitude + y /= -magnitude + z /= -magnitude + + sin_angle = math.sin(angle) + cos_angle = math.cos(angle) + one_minus_cos = 1.0 - cos_angle + + xx = x * x + yy = y * y + zz = z * z + + xy = x * y + yz = y * z + zx = z * x + + xs = x * sin_angle + ys = y * sin_angle + zs = z * sin_angle + + rotation_matrix = copy_matrix(clean_matrix) + + rotation_matrix[0][0] = (one_minus_cos * xx) + cos_angle + rotation_matrix[0][1] = (one_minus_cos * xy) - zs + rotation_matrix[0][2] = (one_minus_cos * zx) + ys + + rotation_matrix[1][0] = (one_minus_cos * xy) + zs + rotation_matrix[1][1] = (one_minus_cos * yy) + cos_angle + rotation_matrix[1][2] = (one_minus_cos * yz) - xs + + rotation_matrix[2][0] = (one_minus_cos * zx) - ys + rotation_matrix[2][1] = (one_minus_cos * yz) + xs + rotation_matrix[2][2] = (one_minus_cos * zz) + cos_angle + + rotation_matrix[3][3] = 1.0 + self.data = multiply_matrices(self.data, rotation_matrix) + + def rotate_2d(self, x, y): + self.rotate(x, 0, 1.0, 0) + self.rotate(-y, math.cos(x), 0, math.sin(x)) + + def frustum(self, left, right, bottom, top, near, far): + deltax = right - left + deltay = top - bottom + deltaz = far - near + + frustum_matrix = copy_matrix(clean_matrix) + + frustum_matrix[0][0] = 2 * near / deltax + frustum_matrix[1][1] = 2 * near / deltay + + frustum_matrix[2][0] = (right + left) / deltax + frustum_matrix[2][1] = (top + bottom) / deltay + frustum_matrix[2][2] = -(near + far) / deltaz + + frustum_matrix[2][3] = -1.0 + frustum_matrix[3][2] = -2 * near * far / deltaz + + self.data = multiply_matrices(self.data, frustum_matrix) + + def perspective(self, fovy, aspect, near, far): + frustum_y = math.tan(math.radians(fovy) / 2) + frustum_x = frustum_y * aspect + + self.frustum(-frustum_x * near, frustum_x * near, -frustum_y * near, frustum_y * near, near, far) + + def orthographic(self, left, right, bottom, top, near, far): + deltax = right - left + deltay = top - bottom + deltaz = far - near + + orthographic_matrix = copy_matrix(identity_matrix) + + orthographic_matrix[0][0] = 2.0 / deltax + orthographic_matrix[3][0] = -(right + left) / deltax + + orthographic_matrix[1][1] = 2.0 / deltay + orthographic_matrix[3][1] = -(top + bottom) / deltay + + orthographic_matrix[2][2] = 2.0 / deltax + orthographic_matrix[3][2] = -(near + far) / deltaz + + self.data = multiply_matrices(self.data, orthographic_matrix) diff --git a/episode-13/models/__init__.py b/episode-13/models/__init__.py new file mode 100644 index 00000000..a386bae7 --- /dev/null +++ b/episode-13/models/__init__.py @@ -0,0 +1,28 @@ +# all possible models + +__all__ = [ + "cube", + "plant", + "liquid", + "leaves", + "glass", + "slab", + "torch", + "fire", + "stairs", + "flat", + "crop", + "soil", + "sign_post", + "door", + "ladder", + "sign", + "lever", + "pressure_plate", + "button", + "snow", + "cactus", + "tinted_glass" +] + +from . import * diff --git a/episode-13/models/button.py b/episode-13/models/button.py new file mode 100644 index 00000000..c8d8731e --- /dev/null +++ b/episode-13/models/button.py @@ -0,0 +1,32 @@ +transparent = True +is_cube = False +glass = False + +colliders = [] + +vertex_positions = [ + [ 0.5, 0.0, 0.5, 0.5, -0.5, 0.5, 0.5, -0.5, -0.5, 0.5, 0.0, -0.5], # right + [-0.5, 0.0, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, 0.5, -0.5, 0.0, 0.5], # left + [ 0.5, 0.0, 0.5, 0.5, 0.0, -0.5, -0.5, 0.0, -0.5, -0.5, 0.0, 0.5], # top + [-0.5, -0.5, 0.5, -0.5, -0.5, -0.5, 0.5, -0.5, -0.5, 0.5, -0.5, 0.5], # bottom + [-0.5, 0.0, 0.5, -0.5, -0.5, 0.5, 0.5, -0.5, 0.5, 0.5, 0.0, 0.5], # front + [ 0.5, 0.0, -0.5, 0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, 0.0, -0.5], # back +] + +tex_coords = [ + [0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.5, 0.0], + [0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.5, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.5, 0.0], + [0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.5, 0.0], +] + +shading_values = [ + [0.6, 0.6, 0.6, 0.6], + [0.6, 0.6, 0.6, 0.6], + [1.0, 1.0, 1.0, 1.0], + [0.4, 0.4, 0.4, 0.4], + [0.8, 0.8, 0.8, 0.8], + [0.8, 0.8, 0.8, 0.8], +] \ No newline at end of file diff --git a/episode-13/models/cactus.py b/episode-13/models/cactus.py new file mode 100644 index 00000000..37baf785 --- /dev/null +++ b/episode-13/models/cactus.py @@ -0,0 +1,37 @@ +transparent = True +is_cube = False +glass = False + +colliders = [ + [ + (-0.4375, -0.5, -0.4375), + ( 0.4375, 0.5, 0.4375) + ] +] + +vertex_positions = [ + [ 0.4375, 0.5000, 0.5000, 0.4375, -0.5000, 0.5000, 0.4375, -0.5000, -0.5000, 0.4375, 0.5000, -0.5000], # right + [-0.4375, 0.5000, -0.5000, -0.4375, -0.5000, -0.5000, -0.4375, -0.5000, 0.5000, -0.4375, 0.5000, 0.5000], # left + [ 0.5000, 0.5000, 0.5000, 0.5000, 0.5000, -0.5000, -0.5000, 0.5000, -0.5000, -0.5000, 0.5000, 0.5000], # top + [-0.5000, -0.5000, 0.5000, -0.5000, -0.5000, -0.5000, 0.5000, -0.5000, -0.5000, 0.5000, -0.5000, 0.5000], # bottom + [-0.5000, 0.5000, 0.4375, -0.5000, -0.5000, 0.4375, 0.5000, -0.5000, 0.4375, 0.5000, 0.5000, 0.4375], # front + [ 0.5000, 0.5000, -0.4375, 0.5000, -0.5000, -0.4375, -0.5000, -0.5000, -0.4375, -0.5000, 0.5000, -0.4375], # back +] + +tex_coords = [ + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], +] + +shading_values = [ + [0.6, 0.6, 0.6, 0.6], + [0.6, 0.6, 0.6, 0.6], + [1.0, 1.0, 1.0, 1.0], + [0.4, 0.4, 0.4, 0.4], + [0.8, 0.8, 0.8, 0.8], + [0.8, 0.8, 0.8, 0.8], +] \ No newline at end of file diff --git a/episode-13/models/crop.py b/episode-13/models/crop.py new file mode 100644 index 00000000..e381cdb1 --- /dev/null +++ b/episode-13/models/crop.py @@ -0,0 +1,38 @@ +transparent = True +is_cube = False +glass = False + +colliders = [] + +vertex_positions = [ + [ 0.25, 0.4375, 0.50, 0.25, -0.5625, 0.50, 0.25, -0.5625, -0.50, 0.25, 0.4375, -0.50], # right + [ 0.25, 0.4375, -0.50, 0.25, -0.5625, -0.50, 0.25, -0.5625, 0.50, 0.25, 0.4375, 0.50], # right + [-0.25, 0.4375, -0.50, -0.25, -0.5625, -0.50, -0.25, -0.5625, 0.50, -0.25, 0.4375, 0.50], # left + [-0.25, 0.4375, 0.50, -0.25, -0.5625, 0.50, -0.25, -0.5625, -0.50, -0.25, 0.4375, -0.50], # left + [-0.50, 0.4375, 0.25, -0.50, -0.5625, 0.25, 0.50, -0.5625, 0.25, 0.50, 0.4375, 0.25], # front + [ 0.50, 0.4375, 0.25, 0.50, -0.5625, 0.25, -0.50, -0.5625, 0.25, -0.50, 0.4375, 0.25], # front + [ 0.50, 0.4375, -0.25, 0.50, -0.5625, -0.25, -0.50, -0.5625, -0.25, -0.50, 0.4375, -0.25], # back + [-0.50, 0.4375, -0.25, -0.50, -0.5625, -0.25, 0.50, -0.5625, -0.25, 0.50, 0.4375, -0.25], # back +] + +tex_coords = [ + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], +] + +shading_values = [ + [0.6, 0.6, 0.6, 0.6], + [0.6, 0.6, 0.6, 0.6], + [0.6, 0.6, 0.6, 0.6], + [0.6, 0.6, 0.6, 0.6], + [0.8, 0.8, 0.8, 0.8], + [0.8, 0.8, 0.8, 0.8], + [0.8, 0.8, 0.8, 0.8], + [0.8, 0.8, 0.8, 0.8], +] \ No newline at end of file diff --git a/episode-13/models/cube.py b/episode-13/models/cube.py new file mode 100644 index 00000000..314edd50 --- /dev/null +++ b/episode-13/models/cube.py @@ -0,0 +1,37 @@ +transparent = False +is_cube = True +glass = False + +colliders = [ + [ + (-0.5, -0.5, -0.5), + ( 0.5, 0.5, 0.5) + ] +] + +vertex_positions = [ + [ 0.5, 0.5, 0.5, 0.5, -0.5, 0.5, 0.5, -0.5, -0.5, 0.5, 0.5, -0.5], # right + [-0.5, 0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, 0.5, -0.5, 0.5, 0.5], # left + [ 0.5, 0.5, 0.5, 0.5, 0.5, -0.5, -0.5, 0.5, -0.5, -0.5, 0.5, 0.5], # top + [-0.5, -0.5, 0.5, -0.5, -0.5, -0.5, 0.5, -0.5, -0.5, 0.5, -0.5, 0.5], # bottom + [-0.5, 0.5, 0.5, -0.5, -0.5, 0.5, 0.5, -0.5, 0.5, 0.5, 0.5, 0.5], # front + [ 0.5, 0.5, -0.5, 0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, 0.5, -0.5], # back +] + +tex_coords = [ + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], +] + +shading_values = [ + [0.6, 0.6, 0.6, 0.6], + [0.6, 0.6, 0.6, 0.6], + [1.0, 1.0, 1.0, 1.0], + [0.4, 0.4, 0.4, 0.4], + [0.8, 0.8, 0.8, 0.8], + [0.8, 0.8, 0.8, 0.8], +] \ No newline at end of file diff --git a/episode-13/models/door.py b/episode-13/models/door.py new file mode 100644 index 00000000..24507a43 --- /dev/null +++ b/episode-13/models/door.py @@ -0,0 +1,32 @@ +transparent = False +is_cube = True +glass = False + +colliders = [] + +vertex_positions = [ + [ 0.5, 0.5, 0.5, 0.5, -0.5, 0.5, 0.5, -0.5, -0.5, 0.5, 0.5, -0.5], # right + [-0.5, 0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, 0.5, -0.5, 0.5, 0.5], # left + [ 0.5, 0.5, 0.5, 0.5, 0.5, -0.5, -0.5, 0.5, -0.5, -0.5, 0.5, 0.5], # top + [-0.5, -0.5, 0.5, -0.5, -0.5, -0.5, 0.5, -0.5, -0.5, 0.5, -0.5, 0.5], # bottom + [-0.5, 0.5, 0.5, -0.5, -0.5, 0.5, 0.5, -0.5, 0.5, 0.5, 0.5, 0.5], # front + [ 0.5, 0.5, -0.5, 0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, 0.5, -0.5], # back +] + +tex_coords = [ + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], +] + +shading_values = [ + [0.6, 0.6, 0.6, 0.6], + [0.6, 0.6, 0.6, 0.6], + [1.0, 1.0, 1.0, 1.0], + [0.4, 0.4, 0.4, 0.4], + [0.8, 0.8, 0.8, 0.8], + [0.8, 0.8, 0.8, 0.8], +] \ No newline at end of file diff --git a/episode-13/models/fire.py b/episode-13/models/fire.py new file mode 100644 index 00000000..4acc8adc --- /dev/null +++ b/episode-13/models/fire.py @@ -0,0 +1,26 @@ +transparent = True +is_cube = False +glass = False + +colliders = [] + +vertex_positions = [ + [-0.3536, 0.5000, 0.3536, -0.3536, -0.5000, 0.3536, 0.3536, -0.5000, -0.3536, 0.3536, 0.5000, -0.3536], + [-0.3536, 0.5000, -0.3536, -0.3536, -0.5000, -0.3536, 0.3536, -0.5000, 0.3536, 0.3536, 0.5000, 0.3536], + [ 0.3536, 0.5000, -0.3536, 0.3536, -0.5000, -0.3536, -0.3536, -0.5000, 0.3536, -0.3536, 0.5000, 0.3536], + [ 0.3536, 0.5000, 0.3536, 0.3536, -0.5000, 0.3536, -0.3536, -0.5000, -0.3536, -0.3536, 0.5000, -0.3536], +] + +tex_coords = [ + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], +] + +shading_values = [ + [1.0, 1.0, 1.0, 1.0], + [1.0, 1.0, 1.0, 1.0], + [1.0, 1.0, 1.0, 1.0], + [1.0, 1.0, 1.0, 1.0], +] \ No newline at end of file diff --git a/episode-13/models/flat.py b/episode-13/models/flat.py new file mode 100644 index 00000000..acfe6429 --- /dev/null +++ b/episode-13/models/flat.py @@ -0,0 +1,20 @@ +transparent = True +is_cube = False +glass = False + +colliders = [] + +vertex_positions = [ + [ 0.5, -0.4375, 0.5, 0.5, -0.4375, -0.5, -0.5, -0.4375, -0.5, -0.5, -0.4375, 0.5], # top + [-0.5, -0.4375, 0.5, -0.5, -0.4375, -0.5, 0.5, -0.4375, -0.5, 0.5, -0.4375, 0.5], # bottom +] + +tex_coords = [ + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], +] + +shading_values = [ + [1.0, 1.0, 1.0, 1.0], + [0.4, 0.4, 0.4, 0.4], +] \ No newline at end of file diff --git a/episode-13/models/glass.py b/episode-13/models/glass.py new file mode 100644 index 00000000..893731a0 --- /dev/null +++ b/episode-13/models/glass.py @@ -0,0 +1,37 @@ +transparent = True +is_cube = True +glass = True + +colliders = [ + [ + (-0.5, -0.5, -0.5), + ( 0.5, 0.5, 0.5) + ] +] + +vertex_positions = [ + [ 0.5, 0.5, 0.5, 0.5, -0.5, 0.5, 0.5, -0.5, -0.5, 0.5, 0.5, -0.5], # right + [-0.5, 0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, 0.5, -0.5, 0.5, 0.5], # left + [ 0.5, 0.5, 0.5, 0.5, 0.5, -0.5, -0.5, 0.5, -0.5, -0.5, 0.5, 0.5], # top + [-0.5, -0.5, 0.5, -0.5, -0.5, -0.5, 0.5, -0.5, -0.5, 0.5, -0.5, 0.5], # bottom + [-0.5, 0.5, 0.5, -0.5, -0.5, 0.5, 0.5, -0.5, 0.5, 0.5, 0.5, 0.5], # front + [ 0.5, 0.5, -0.5, 0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, 0.5, -0.5], # back +] + +tex_coords = [ + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], +] + +shading_values = [ + [0.6, 0.6, 0.6, 0.6], + [0.6, 0.6, 0.6, 0.6], + [1.0, 1.0, 1.0, 1.0], + [0.4, 0.4, 0.4, 0.4], + [0.8, 0.8, 0.8, 0.8], + [0.8, 0.8, 0.8, 0.8], +] \ No newline at end of file diff --git a/episode-13/models/ladder.py b/episode-13/models/ladder.py new file mode 100644 index 00000000..4acc8adc --- /dev/null +++ b/episode-13/models/ladder.py @@ -0,0 +1,26 @@ +transparent = True +is_cube = False +glass = False + +colliders = [] + +vertex_positions = [ + [-0.3536, 0.5000, 0.3536, -0.3536, -0.5000, 0.3536, 0.3536, -0.5000, -0.3536, 0.3536, 0.5000, -0.3536], + [-0.3536, 0.5000, -0.3536, -0.3536, -0.5000, -0.3536, 0.3536, -0.5000, 0.3536, 0.3536, 0.5000, 0.3536], + [ 0.3536, 0.5000, -0.3536, 0.3536, -0.5000, -0.3536, -0.3536, -0.5000, 0.3536, -0.3536, 0.5000, 0.3536], + [ 0.3536, 0.5000, 0.3536, 0.3536, -0.5000, 0.3536, -0.3536, -0.5000, -0.3536, -0.3536, 0.5000, -0.3536], +] + +tex_coords = [ + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], +] + +shading_values = [ + [1.0, 1.0, 1.0, 1.0], + [1.0, 1.0, 1.0, 1.0], + [1.0, 1.0, 1.0, 1.0], + [1.0, 1.0, 1.0, 1.0], +] \ No newline at end of file diff --git a/episode-13/models/leaves.py b/episode-13/models/leaves.py new file mode 100644 index 00000000..52b3aa8e --- /dev/null +++ b/episode-13/models/leaves.py @@ -0,0 +1,37 @@ +transparent = True +is_cube = True +glass = False + +colliders = [ + [ + (-0.5, -0.5, -0.5), + ( 0.5, 0.5, 0.5) + ] +] + +vertex_positions = [ + [ 0.5, 0.5, 0.5, 0.5, -0.5, 0.5, 0.5, -0.5, -0.5, 0.5, 0.5, -0.5], # right + [-0.5, 0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, 0.5, -0.5, 0.5, 0.5], # left + [ 0.5, 0.5, 0.5, 0.5, 0.5, -0.5, -0.5, 0.5, -0.5, -0.5, 0.5, 0.5], # top + [-0.5, -0.5, 0.5, -0.5, -0.5, -0.5, 0.5, -0.5, -0.5, 0.5, -0.5, 0.5], # bottom + [-0.5, 0.5, 0.5, -0.5, -0.5, 0.5, 0.5, -0.5, 0.5, 0.5, 0.5, 0.5], # front + [ 0.5, 0.5, -0.5, 0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, 0.5, -0.5], # back +] + +tex_coords = [ + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], +] + +shading_values = [ + [0.6, 0.6, 0.6, 0.6], + [0.6, 0.6, 0.6, 0.6], + [1.0, 1.0, 1.0, 1.0], + [0.4, 0.4, 0.4, 0.4], + [0.8, 0.8, 0.8, 0.8], + [0.8, 0.8, 0.8, 0.8], +] \ No newline at end of file diff --git a/episode-13/models/lever.py b/episode-13/models/lever.py new file mode 100644 index 00000000..c8d8731e --- /dev/null +++ b/episode-13/models/lever.py @@ -0,0 +1,32 @@ +transparent = True +is_cube = False +glass = False + +colliders = [] + +vertex_positions = [ + [ 0.5, 0.0, 0.5, 0.5, -0.5, 0.5, 0.5, -0.5, -0.5, 0.5, 0.0, -0.5], # right + [-0.5, 0.0, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, 0.5, -0.5, 0.0, 0.5], # left + [ 0.5, 0.0, 0.5, 0.5, 0.0, -0.5, -0.5, 0.0, -0.5, -0.5, 0.0, 0.5], # top + [-0.5, -0.5, 0.5, -0.5, -0.5, -0.5, 0.5, -0.5, -0.5, 0.5, -0.5, 0.5], # bottom + [-0.5, 0.0, 0.5, -0.5, -0.5, 0.5, 0.5, -0.5, 0.5, 0.5, 0.0, 0.5], # front + [ 0.5, 0.0, -0.5, 0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, 0.0, -0.5], # back +] + +tex_coords = [ + [0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.5, 0.0], + [0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.5, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.5, 0.0], + [0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.5, 0.0], +] + +shading_values = [ + [0.6, 0.6, 0.6, 0.6], + [0.6, 0.6, 0.6, 0.6], + [1.0, 1.0, 1.0, 1.0], + [0.4, 0.4, 0.4, 0.4], + [0.8, 0.8, 0.8, 0.8], + [0.8, 0.8, 0.8, 0.8], +] \ No newline at end of file diff --git a/episode-13/models/liquid.py b/episode-13/models/liquid.py new file mode 100644 index 00000000..fc7cce26 --- /dev/null +++ b/episode-13/models/liquid.py @@ -0,0 +1,35 @@ +# in the end, it'd be nice to have it so that liquids fill up the whole block when they have a block above them +# this would avoid the problems this solution has + +transparent = True +is_cube = True +glass = True + +colliders = [] + +vertex_positions = [ + [ 0.500, 0.375, 0.500, 0.500, -0.625, 0.500, 0.500, -0.625, -0.500, 0.500, 0.375, -0.500], # right + [-0.500, 0.375, -0.500, -0.500, -0.625, -0.500, -0.500, -0.625, 0.500, -0.500, 0.375, 0.500], # left + [ 0.500, 0.375, 0.500, 0.500, 0.375, -0.500, -0.500, 0.375, -0.500, -0.500, 0.375, 0.500], # top + [-0.500, -0.625, 0.500, -0.500, -0.625, -0.500, 0.500, -0.625, -0.500, 0.500, -0.625, 0.500], # bottom + [-0.500, 0.375, 0.500, -0.500, -0.625, 0.500, 0.500, -0.625, 0.500, 0.500, 0.375, 0.500], # front + [ 0.500, 0.375, -0.500, 0.500, -0.625, -0.500, -0.500, -0.625, -0.500, -0.500, 0.375, -0.500], # back +] + +tex_coords = [ + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], +] + +shading_values = [ + [0.6, 0.6, 0.6, 0.6], + [0.6, 0.6, 0.6, 0.6], + [1.0, 1.0, 1.0, 1.0], + [0.4, 0.4, 0.4, 0.4], + [0.8, 0.8, 0.8, 0.8], + [0.8, 0.8, 0.8, 0.8], +] diff --git a/episode-13/models/plant.py b/episode-13/models/plant.py new file mode 100644 index 00000000..4acc8adc --- /dev/null +++ b/episode-13/models/plant.py @@ -0,0 +1,26 @@ +transparent = True +is_cube = False +glass = False + +colliders = [] + +vertex_positions = [ + [-0.3536, 0.5000, 0.3536, -0.3536, -0.5000, 0.3536, 0.3536, -0.5000, -0.3536, 0.3536, 0.5000, -0.3536], + [-0.3536, 0.5000, -0.3536, -0.3536, -0.5000, -0.3536, 0.3536, -0.5000, 0.3536, 0.3536, 0.5000, 0.3536], + [ 0.3536, 0.5000, -0.3536, 0.3536, -0.5000, -0.3536, -0.3536, -0.5000, 0.3536, -0.3536, 0.5000, 0.3536], + [ 0.3536, 0.5000, 0.3536, 0.3536, -0.5000, 0.3536, -0.3536, -0.5000, -0.3536, -0.3536, 0.5000, -0.3536], +] + +tex_coords = [ + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], +] + +shading_values = [ + [1.0, 1.0, 1.0, 1.0], + [1.0, 1.0, 1.0, 1.0], + [1.0, 1.0, 1.0, 1.0], + [1.0, 1.0, 1.0, 1.0], +] \ No newline at end of file diff --git a/episode-13/models/pressure_plate.py b/episode-13/models/pressure_plate.py new file mode 100644 index 00000000..acfe6429 --- /dev/null +++ b/episode-13/models/pressure_plate.py @@ -0,0 +1,20 @@ +transparent = True +is_cube = False +glass = False + +colliders = [] + +vertex_positions = [ + [ 0.5, -0.4375, 0.5, 0.5, -0.4375, -0.5, -0.5, -0.4375, -0.5, -0.5, -0.4375, 0.5], # top + [-0.5, -0.4375, 0.5, -0.5, -0.4375, -0.5, 0.5, -0.4375, -0.5, 0.5, -0.4375, 0.5], # bottom +] + +tex_coords = [ + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], +] + +shading_values = [ + [1.0, 1.0, 1.0, 1.0], + [0.4, 0.4, 0.4, 0.4], +] \ No newline at end of file diff --git a/episode-13/models/sign.py b/episode-13/models/sign.py new file mode 100644 index 00000000..4acc8adc --- /dev/null +++ b/episode-13/models/sign.py @@ -0,0 +1,26 @@ +transparent = True +is_cube = False +glass = False + +colliders = [] + +vertex_positions = [ + [-0.3536, 0.5000, 0.3536, -0.3536, -0.5000, 0.3536, 0.3536, -0.5000, -0.3536, 0.3536, 0.5000, -0.3536], + [-0.3536, 0.5000, -0.3536, -0.3536, -0.5000, -0.3536, 0.3536, -0.5000, 0.3536, 0.3536, 0.5000, 0.3536], + [ 0.3536, 0.5000, -0.3536, 0.3536, -0.5000, -0.3536, -0.3536, -0.5000, 0.3536, -0.3536, 0.5000, 0.3536], + [ 0.3536, 0.5000, 0.3536, 0.3536, -0.5000, 0.3536, -0.3536, -0.5000, -0.3536, -0.3536, 0.5000, -0.3536], +] + +tex_coords = [ + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], +] + +shading_values = [ + [1.0, 1.0, 1.0, 1.0], + [1.0, 1.0, 1.0, 1.0], + [1.0, 1.0, 1.0, 1.0], + [1.0, 1.0, 1.0, 1.0], +] \ No newline at end of file diff --git a/episode-13/models/sign_post.py b/episode-13/models/sign_post.py new file mode 100644 index 00000000..4acc8adc --- /dev/null +++ b/episode-13/models/sign_post.py @@ -0,0 +1,26 @@ +transparent = True +is_cube = False +glass = False + +colliders = [] + +vertex_positions = [ + [-0.3536, 0.5000, 0.3536, -0.3536, -0.5000, 0.3536, 0.3536, -0.5000, -0.3536, 0.3536, 0.5000, -0.3536], + [-0.3536, 0.5000, -0.3536, -0.3536, -0.5000, -0.3536, 0.3536, -0.5000, 0.3536, 0.3536, 0.5000, 0.3536], + [ 0.3536, 0.5000, -0.3536, 0.3536, -0.5000, -0.3536, -0.3536, -0.5000, 0.3536, -0.3536, 0.5000, 0.3536], + [ 0.3536, 0.5000, 0.3536, 0.3536, -0.5000, 0.3536, -0.3536, -0.5000, -0.3536, -0.3536, 0.5000, -0.3536], +] + +tex_coords = [ + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], +] + +shading_values = [ + [1.0, 1.0, 1.0, 1.0], + [1.0, 1.0, 1.0, 1.0], + [1.0, 1.0, 1.0, 1.0], + [1.0, 1.0, 1.0, 1.0], +] \ No newline at end of file diff --git a/episode-13/models/slab.py b/episode-13/models/slab.py new file mode 100644 index 00000000..f3eed101 --- /dev/null +++ b/episode-13/models/slab.py @@ -0,0 +1,37 @@ +transparent = True +is_cube = False +glass = False + +colliders = [ + [ + (-0.5, -0.5, -0.5), + ( 0.5, 0.0, 0.5) + ] +] + +vertex_positions = [ + [ 0.5, 0.0, 0.5, 0.5, -0.5, 0.5, 0.5, -0.5, -0.5, 0.5, 0.0, -0.5], # right + [-0.5, 0.0, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, 0.5, -0.5, 0.0, 0.5], # left + [ 0.5, 0.0, 0.5, 0.5, 0.0, -0.5, -0.5, 0.0, -0.5, -0.5, 0.0, 0.5], # top + [-0.5, -0.5, 0.5, -0.5, -0.5, -0.5, 0.5, -0.5, -0.5, 0.5, -0.5, 0.5], # bottom + [-0.5, 0.0, 0.5, -0.5, -0.5, 0.5, 0.5, -0.5, 0.5, 0.5, 0.0, 0.5], # front + [ 0.5, 0.0, -0.5, 0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, 0.0, -0.5], # back +] + +tex_coords = [ + [0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.5, 0.0], + [0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.5, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.5, 0.0], + [0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.5, 0.0], +] + +shading_values = [ + [0.6, 0.6, 0.6, 0.6], + [0.6, 0.6, 0.6, 0.6], + [1.0, 1.0, 1.0, 1.0], + [0.4, 0.4, 0.4, 0.4], + [0.8, 0.8, 0.8, 0.8], + [0.8, 0.8, 0.8, 0.8], +] \ No newline at end of file diff --git a/episode-13/models/snow.py b/episode-13/models/snow.py new file mode 100644 index 00000000..80e6239b --- /dev/null +++ b/episode-13/models/snow.py @@ -0,0 +1,25 @@ +transparent = True +is_cube = False +glass = False + +colliders = [ + [ + (-0.5, -0.5000, -0.5), + ( 0.5, -0.4375, 0.5) + ] +] + +vertex_positions = [ + [ 0.5, -0.4375, 0.5, 0.5, -0.4375, -0.5, -0.5, -0.4375, -0.5, -0.5, -0.4375, 0.5], # top + [-0.5, -0.4375, 0.5, -0.5, -0.4375, -0.5, 0.5, -0.4375, -0.5, 0.5, -0.4375, 0.5], # bottom +] + +tex_coords = [ + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], +] + +shading_values = [ + [1.0, 1.0, 1.0, 1.0], + [0.4, 0.4, 0.4, 0.4], +] \ No newline at end of file diff --git a/episode-13/models/soil.py b/episode-13/models/soil.py new file mode 100644 index 00000000..447d963f --- /dev/null +++ b/episode-13/models/soil.py @@ -0,0 +1,37 @@ +transparent = True +is_cube = False +glass = False + +colliders = [ + [ + (-0.5, -0.5000, -0.5), + ( 0.5, 0.4375, 0.5) + ] +] + +vertex_positions = [ + [ 0.5, 0.4375, 0.5, 0.5, -0.5, 0.5, 0.5, -0.5, -0.5, 0.5, 0.4375, -0.5], # right + [-0.5, 0.4375, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, 0.5, -0.5, 0.4375, 0.5], # left + [ 0.5, 0.4375, 0.5, 0.5, 0.4375, -0.5, -0.5, 0.4375, -0.5, -0.5, 0.4375, 0.5], # top + [-0.5, -0.5, 0.5, -0.5, -0.5, -0.5, 0.5, -0.5, -0.5, 0.5, -0.5, 0.5], # bottom + [-0.5, 0.4375, 0.5, -0.5, -0.5, 0.5, 0.5, -0.5, 0.5, 0.5, 0.4375, 0.5], # front + [ 0.5, 0.4375, -0.5, 0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, 0.4375, -0.5], # back +] + +tex_coords = [ + [0.0, 0.9375, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.9375, 0.0], + [0.0, 0.9375, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.9375, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 0.9375, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.9375, 0.0], + [0.0, 0.9375, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.9375, 0.0], +] + +shading_values = [ + [0.6, 0.6, 0.6, 0.6], + [0.6, 0.6, 0.6, 0.6], + [1.0, 1.0, 1.0, 1.0], + [0.4, 0.4, 0.4, 0.4], + [0.8, 0.8, 0.8, 0.8], + [0.8, 0.8, 0.8, 0.8], +] \ No newline at end of file diff --git a/episode-13/models/stairs.py b/episode-13/models/stairs.py new file mode 100644 index 00000000..f3eed101 --- /dev/null +++ b/episode-13/models/stairs.py @@ -0,0 +1,37 @@ +transparent = True +is_cube = False +glass = False + +colliders = [ + [ + (-0.5, -0.5, -0.5), + ( 0.5, 0.0, 0.5) + ] +] + +vertex_positions = [ + [ 0.5, 0.0, 0.5, 0.5, -0.5, 0.5, 0.5, -0.5, -0.5, 0.5, 0.0, -0.5], # right + [-0.5, 0.0, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, 0.5, -0.5, 0.0, 0.5], # left + [ 0.5, 0.0, 0.5, 0.5, 0.0, -0.5, -0.5, 0.0, -0.5, -0.5, 0.0, 0.5], # top + [-0.5, -0.5, 0.5, -0.5, -0.5, -0.5, 0.5, -0.5, -0.5, 0.5, -0.5, 0.5], # bottom + [-0.5, 0.0, 0.5, -0.5, -0.5, 0.5, 0.5, -0.5, 0.5, 0.5, 0.0, 0.5], # front + [ 0.5, 0.0, -0.5, 0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, 0.0, -0.5], # back +] + +tex_coords = [ + [0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.5, 0.0], + [0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.5, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.5, 0.0], + [0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.5, 0.0], +] + +shading_values = [ + [0.6, 0.6, 0.6, 0.6], + [0.6, 0.6, 0.6, 0.6], + [1.0, 1.0, 1.0, 1.0], + [0.4, 0.4, 0.4, 0.4], + [0.8, 0.8, 0.8, 0.8], + [0.8, 0.8, 0.8, 0.8], +] \ No newline at end of file diff --git a/episode-13/models/tinted_glass.py b/episode-13/models/tinted_glass.py new file mode 100644 index 00000000..fbee5972 --- /dev/null +++ b/episode-13/models/tinted_glass.py @@ -0,0 +1,38 @@ +transparent = True +is_cube = True +glass = True +translucent = True + +colliders = [ + [ + (-0.5, -0.5, -0.5), + ( 0.5, 0.5, 0.5) + ] +] + +vertex_positions = [ + [ 0.5, 0.5, 0.5, 0.5, -0.5, 0.5, 0.5, -0.5, -0.5, 0.5, 0.5, -0.5], # right + [-0.5, 0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, 0.5, -0.5, 0.5, 0.5], # left + [ 0.5, 0.5, 0.5, 0.5, 0.5, -0.5, -0.5, 0.5, -0.5, -0.5, 0.5, 0.5], # top + [-0.5, -0.5, 0.5, -0.5, -0.5, -0.5, 0.5, -0.5, -0.5, 0.5, -0.5, 0.5], # bottom + [-0.5, 0.5, 0.5, -0.5, -0.5, 0.5, 0.5, -0.5, 0.5, 0.5, 0.5, 0.5], # front + [ 0.5, 0.5, -0.5, 0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, 0.5, -0.5], # back +] + +tex_coords = [ + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], +] + +shading_values = [ + [0.6, 0.6, 0.6, 0.6], + [0.6, 0.6, 0.6, 0.6], + [1.0, 1.0, 1.0, 1.0], + [0.4, 0.4, 0.4, 0.4], + [0.8, 0.8, 0.8, 0.8], + [0.8, 0.8, 0.8, 0.8], +] diff --git a/episode-13/models/torch.py b/episode-13/models/torch.py new file mode 100644 index 00000000..1dbcc5fb --- /dev/null +++ b/episode-13/models/torch.py @@ -0,0 +1,32 @@ +transparent = True +is_cube = False +glass = False + +colliders = [] + +vertex_positions = [ + [ 0.0625, 0.5, 0.5, 0.0625, -0.5, 0.5, 0.0625, -0.5, -0.5, 0.0625, 0.5, -0.5], # right + [-0.0625, 0.5, -0.5, -0.0625, -0.5, -0.5, -0.0625, -0.5, 0.5, -0.0625, 0.5, 0.5], # left + [ 0.5, 0.125, 0.5, 0.5, 0.125, -0.5, -0.5, 0.125, -0.5, -0.5, 0.125, 0.5], # top + [-0.5, -0.5, 0.5, -0.5, -0.5, -0.5, 0.5, -0.5, -0.5, 0.5, -0.5, 0.5], # bottom + [-0.5, 0.5, 0.0625, -0.5, -0.5, 0.0625, 0.5, -0.5, 0.0625, 0.5, 0.5, 0.0625], # front + [ 0.5, 0.5, -0.0625, 0.5, -0.5, -0.0625, -0.5, -0.5, -0.0625, -0.5, 0.5, -0.0625], # back +] + +tex_coords = [ + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], + [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], +] + +shading_values = [ + [0.6, 0.6, 0.6, 0.6], + [0.6, 0.6, 0.6, 0.6], + [1.0, 1.0, 1.0, 1.0], + [0.4, 0.4, 0.4, 0.4], + [0.8, 0.8, 0.8, 0.8], + [0.8, 0.8, 0.8, 0.8], +] diff --git a/episode-13/player.py b/episode-13/player.py new file mode 100644 index 00000000..dbb3f764 --- /dev/null +++ b/episode-13/player.py @@ -0,0 +1,73 @@ +import math +import entity +import matrix + +WALKING_SPEED = 4.317 +SPRINTING_SPEED = 7 # faster than in Minecraft, feels better + +class Player(entity.Entity): + def __init__(self, world, shader, width, height): + super().__init__(world) + + self.view_width = width + self.view_height = height + + # create matrices + + self.mv_matrix = matrix.Matrix() + self.p_matrix = matrix.Matrix() + + # shaders + + self.shader = shader + self.shader_matrix_location = self.shader.find_uniform(b"matrix") + + # camera variables + + self.eyelevel = self.height - 0.2 + self.input = [0, 0, 0] + + self.target_speed = WALKING_SPEED + self.speed = self.target_speed + + def update(self, delta_time): + # process input + + self.speed += (self.target_speed - self.speed) * delta_time * 20 + multiplier = self.speed + + if self.flying and self.input[1]: + self.velocity[1] = self.input[1] * multiplier + + if self.input[0] or self.input[2]: + angle = self.rotation[0] - math.atan2(self.input[2], self.input[0]) + math.tau / 4 + + self.velocity[0] = math.cos(angle) * multiplier + self.velocity[2] = math.sin(angle) * multiplier + + if not self.flying and self.input[1] > 0: + self.jump() + + # process physics & collisions &c + + super().update(delta_time) + + def update_matrices(self): + # create projection matrix + + self.p_matrix.load_identity() + + self.p_matrix.perspective( + 90 + 20 * (self.speed - WALKING_SPEED) / (SPRINTING_SPEED - WALKING_SPEED), + float(self.view_width) / self.view_height, 0.1, 500) + + # create modelview matrix + + self.mv_matrix.load_identity() + self.mv_matrix.rotate_2d(self.rotation[0] + math.tau / 4, self.rotation[1]) + self.mv_matrix.translate(-self.position[0], -self.position[1] - self.eyelevel, -self.position[2]) + + # modelviewprojection matrix + + mvp_matrix = self.p_matrix * self.mv_matrix + self.shader.uniform_matrix(self.shader_matrix_location, mvp_matrix) \ No newline at end of file diff --git a/episode-13/save.py b/episode-13/save.py new file mode 100644 index 00000000..6a9d9bb2 --- /dev/null +++ b/episode-13/save.py @@ -0,0 +1,95 @@ +import nbtlib as nbt +import base36 + +import chunk + +class Save: + def __init__(self, world, path = "save"): + self.world = world + self.path = path + + def chunk_position_to_path(self, chunk_position): + x, y, z = chunk_position + + chunk_path = '/'.join((self.path, + base36.dumps(x % 64), base36.dumps(z % 64), + f"c.{base36.dumps(x)}.{base36.dumps(z)}.dat")) + + return chunk_path + + def load_chunk(self, chunk_position): + # load the chunk file + + chunk_path = self.chunk_position_to_path(chunk_position) + + try: + chunk_blocks = nbt.load(chunk_path)["Level"]["Blocks"] + + except FileNotFoundError: + return + + # create chunk and fill it with the blocks from our chunk file + + self.world.chunks[chunk_position] = chunk.Chunk(self.world, chunk_position) + + for x in range(chunk.CHUNK_WIDTH): + for y in range(chunk.CHUNK_HEIGHT): + for z in range(chunk.CHUNK_LENGTH): + self.world.chunks[chunk_position].blocks[x][y][z] = chunk_blocks[ + x * chunk.CHUNK_LENGTH * chunk.CHUNK_HEIGHT + + z * chunk.CHUNK_HEIGHT + + y] + + def save_chunk(self, chunk_position): + x, y, z = chunk_position + + # try to load the chunk file + # if it doesn't exist, create a new one + + chunk_path = self.chunk_position_to_path(chunk_position) + + try: + chunk_data = nbt.load(chunk_path) + + except FileNotFoundError: + chunk_data = nbt.File({"": nbt.Compound({"Level": nbt.Compound()})}) + + chunk_data["Level"]["xPos"] = x + chunk_data["Level"]["zPos"] = z + + # fill the chunk file with the blocks from our chunk + + chunk_blocks = nbt.ByteArray([0] * (chunk.CHUNK_WIDTH * chunk.CHUNK_HEIGHT * chunk.CHUNK_LENGTH)) + + for x in range(chunk.CHUNK_WIDTH): + for y in range(chunk.CHUNK_HEIGHT): + for z in range(chunk.CHUNK_LENGTH): + chunk_blocks[ + x * chunk.CHUNK_LENGTH * chunk.CHUNK_HEIGHT + + z * chunk.CHUNK_HEIGHT + + y] = self.world.chunks[chunk_position].blocks[x][y][z] + + # save the chunk file + + chunk_data["Level"]["Blocks"] = chunk_blocks + chunk_data.save(chunk_path, gzipped = True) + + def load(self): + # for x in range(-16, 15): + # for y in range(-15, 16): + # self.load_chunk((x, 0, y)) + + for x in range(-1, 1): + for y in range(-1, 1): + self.load_chunk((x, 0, y)) + + def save(self): + for chunk_position in self.world.chunks: + if chunk_position[1] != 0: # reject all chunks above and below the world limit + continue + + chunk = self.world.chunks[chunk_position] + + if chunk.modified: + self.save_chunk(chunk_position) + chunk.modified = False diff --git a/episode-13/save/0/0/c.0.0.dat b/episode-13/save/0/0/c.0.0.dat new file mode 100644 index 0000000000000000000000000000000000000000..13d6d4b0c223f32133b738fb8c53e0b27e6457fa GIT binary patch literal 4654 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 I+Yt%>1N6ZHO#lD@ literal 0 HcmV?d00001 diff --git a/episode-13/save/0/1/c.0.1.dat b/episode-13/save/0/1/c.0.1.dat new file mode 100644 index 0000000000000000000000000000000000000000..dd61294b9b4f11d34a926e61e5c8885d08d8abe9 GIT binary patch literal 2982 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

CCu9`b4 zmqy?F*kvouI|!bbz>=?GB{vJs^zkgNk2Vi>@NS{ZThLaVa-EShP=wQkGRMeh7G#yT z9i;O)11jjBo%8P9$two|eRW+;S`H0_*VgwMm9zK2Tcg&tsDIBMgH7su+@bFRIg949 z7)0jMT2bjkun)XxMuLQ>`a2|<6ximU$!Ca*iN>$i0x3_ct`zQ#%g@qqS;Xh3ZtfOd zsmuMC-hs|gF{RpWNLM)O;Q{k8SACKX%V~qzn+9fRmo!;Gom1R#%-@i+4{)%8(S*=! zKb$F%BRg=l#q%55*uwkyFm^Q^9Yqf$w8UZa#~2hsm+$lDJ@S!NYc`myhDE2U7O-D# z0X0LSHl7KZ`J}uwblM+LO1N2$#9Me*Wq}Fpa2D}rc#)X*ilbR6VD2Y&CF-(htYbxU z6_btbJ`LK*aGLx1p=PS3jT9`A?v>W&mXJ|jD)` zR!|wZWU~-Mtt4=XjUI{5o;SoC;ROQe&}G`%Z+GEbGxPJDMrz{+Xg^7BY+iSy1r7Pp zy>X3s1m-D7AK(G`(e@fmqTT{fM5a&s^NMH4=YH$z!y=CW}w3FB3BY{MFE&G31_hbo=vV2ZJD2E_~qPP5A7cU$tQh1uBg=Di@X|HC-X9 za#{^CI@n;S60cTl+24_D;+#jki{>%@<{F}uGlYnt6I^@%0@}tr3WnmQv2Vikm25$)wSv(@;z!;4C*nk`%8_M?;0xo_KYg`TJh;^?9>jjA;}Yc1Pd=`e z;MRp>aIUNizguiI8xCd_XLzy#K=+X`STMas&Rc=eKLHxD55!}_2>X1f*9czi{#CUs zM_ILX;Yp(N8Hn~&!U9>p*llIaJoo_!I}iNQjdCv_VPIH}>mx#OOgF%mKrD*`g|^6; zbW5dvGr2o0$2@DiKqPx4%`g}ABXkwWkjVbP_CQ~I={&Hbs(FI)K{n&|rWVMAapTo% zc<(Sqb@~Y$Hj#z!4TcUXt~)gYtkBur1pbFDCbi00Qx2QLzMvPnJuC|0B6uXBY`#jm zNJ$^ZgrNgP*m3OK*da;tM?_*gL}VCXt(luCV@48h4QV}QB-s*{NPM|qRxgiieva74 z!Dp4KI|{N(TL;VYKoqx!+V+mHHtTH1ci)2WBEpndG=(uqj(&^CBe}p#uugw_((Fq>7|K2o?dBylqE<=yqsi_+V zC8`A@6`H@CC{z%ghwKmm5M$Z9Y11YVGGidoxc|xK-00+TXq+)#50{G)L+`g}(&dx- zGgWITNQ;AR!mNEjW2G#;Y3ex^hOiqE(c6fAQ(EaSUpYh0 z_9HhW=BJ((g~8wb_S$wcrG}MH2+)Pg6LM%+Qa(;^r=26Vf%+5di6o<8h+N6Bs4aXf z>Gtc$em>kVE7_=$t~|~qlS;tt*Tdk&NrxcB@>&iMzcfB;^D8>;+~#te_(%hP`=9#B z!v~)%f#I`fbHUvrm4h51QqO4xPoGx7bsKBE;oOb;cp&j)3Ze4wa`tkTi?Ad_ODFzX4*Gn7IG| literal 0 HcmV?d00001 diff --git a/episode-13/save/0/1p/c.0.-3.dat b/episode-13/save/0/1p/c.0.-3.dat new file mode 100644 index 0000000000000000000000000000000000000000..d9392f71fb34bd7021d88c81ddbb9302ec6fe746 GIT binary patch literal 2879 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 M29}!T`xKD>0)GBO0RR91 literal 0 HcmV?d00001 diff --git a/episode-13/save/0/1q/c.0.-2.dat b/episode-13/save/0/1q/c.0.-2.dat new file mode 100644 index 0000000000000000000000000000000000000000..a298fd6aa9623331cd2611aab10bf0c66fd62b20 GIT binary patch literal 3118 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 a`L5ZGGwbI{BD?w_spaQyI%+-0q<;fQyTK3u literal 0 HcmV?d00001 diff --git a/episode-13/save/0/1r/c.0.-1.dat b/episode-13/save/0/1r/c.0.-1.dat new file mode 100644 index 0000000000000000000000000000000000000000..a1e4b255e63e9191046ce78ff2273f21886d6078 GIT binary patch literal 5049 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 literal 0 HcmV?d00001 diff --git a/episode-13/save/0/2/c.0.2.dat b/episode-13/save/0/2/c.0.2.dat new file mode 100644 index 0000000000000000000000000000000000000000..29d57ca6cb5daf8d0bdc0fd6aaa60bcb570859be GIT binary patch literal 2456 zcmb7^X;)L{0)@lSfFeW?rGOZ0w1Qeda7H``MXeShT#HqPXwhP;7zULo>ID`&H* z`VS;BKpu4})gixsiD81~eNL{4>U$O?pU@_nD`v%KHk+r69ko#tkE3$bGbUMYnSg@U zJnAU|7oNrh-Rk(+c)#_jfg1I@@G0 z-6kJaf`xl?!a87@d#)_o2Zql@lN!hIbVv8@T-{&+(-3YIAv=~c;1MV(EG5cLnszL( z=z|J!NgY4Mm&9>=A)~H>UM!Z#5Q-z}o_+Ro!6Ungw92ZMTd3%?|rum6?27Q`2fGhgzqbPvK5}wPEI!dO0p-DGW$C zw*%XdV81dA=N0KSg@!>H)nUsNY%$(Bk*j7P$jj^&qx7QT^}4Hz)bMPQoSL_^v;}$o znBG?Lgt`-_`472bNQvkQXm1C$mh;8@(>Qa~z?5dE1@7Gza~xkf28kJY zqtsH%X)&04G${nIMolZPg3mQ&Og}<-pB>`O!*@p+d7xA6{M8v5bl%zre!>zg*p)Ca zqsOqqgp#D3mKI+@)e;rs9Cjz5&Y2%eJiaE|w=I}Gwm2PoaEL~%rxR-?*@%C5O$vcT zvNacx9{AR3gcYr&&`27FhZJg9(QyGqjnx?HZard>x@q>4lUGVFvqyC(8#6CwoOk;n zzPUD}6YZRGnP9IWKI?=b0sQ%}xD8glQG9G+=UQtXXdy^A^MUy=_HaNLcA{9=`2rU=M|nDi;*9!?if zlX8lUoLlZt?7--RKVenW@gY`BW;6JdJ^-xE6?&JOf=$T_m%Rju1>P>`I6p_6I0>Gm zpnPZOrn)yBTlPj@F6Bx{4{XR zXRKRtYN8K(Er)+A(C>+az&$76y2-BK`{Dw!t)|1sQ5C)A-qeC*-8z}Ox1Y3v^lk|?%|P;^fT?e4>v$_`4o%UY>jdl|SAoge4yxOEVg zsVkbqBRD;+{qR;kage%&CjF)Kw?} z0{cr8W!Hq#O)Ttmt_-QJH*RR!_chsi26eNn@9$gNBzE{<7+fexJ`U}JV5TuEgI=r- zwSRb>_9w-w+XPAh2a+50;1dDWvyw$)!3MeK3!#aTo-ZM1sNLd$HVDjLxE^xd{es@v zxFu&np;7o&IOo}irOX@P=sk{Bk1}%R38fRLIn`;@lxM{#)QN4iJgnUxxW7w%+PGtg}~vi!!ksJun-?wV2n7sB}e-22Kw6yg>(@M-~{r zgk866JpI)IC1cK;4Nf|q>$DvM_)I`qaaaz1L@%A5ac75Esf_fs7S1|Yct;rr!(`O% zR_ohA`B zD8k~T`MiYcUF`0W=&%(8hTJ~5!FZ}am7d*HOvayH_M zmO+O<`#a{D(ksczyQOt7ReOp-+T}6?e0*2@d~g%LZ$(mW`7lgwv@;_|#R=9ncc^!BW|~KYL+)ODV3fKaPfs3^ zwH;m_au5%Qn(zA>Em%|-pVhzbBNg^~ipm&R?-R+>=IKZtw6h0?B z_QRb#Fh=lz+1DK{-#Y6$0mD*K)+9ZzRVla$T=s}|gFxN!7uAE;Tr)2Ieiw#si(K}x zXNW@i(Qj}>w{O$N^Cf>Li8p?4C+?|E15E8Msd7vS3`hH7Djx`g3R3`^lG3v(42 z%!`3k&Z!o1)Fr4${T#ZAGMcIGBJ=xMBKE8LzBJ&*d)xB%zx_W}xTg8)x4I5~mTM!g zK7H3Wy3qyVYn#E-`UW#0QAi~GB?4cF@%GB;TxNX3XRKqEVUf=Nfb+*5pS1G&?!YdH zHN@A=aSr?BHsv|=p18dCUMGK0GG$mv`mWOJ|G)(9?ny+qpwDXgz2BO@f&@N2F{Ld_ rN8*&zdaiC)5G&t} literal 0 HcmV?d00001 diff --git a/episode-13/save/0/3/c.0.3.dat b/episode-13/save/0/3/c.0.3.dat new file mode 100644 index 0000000000000000000000000000000000000000..69d837c0898c530595f89a069fd2fbdfd938c356 GIT binary patch literal 2437 zcmb79YgAKb0t{~jAu0%1lt5R-)@ro8syr^#Qd^}WwJRW%;A^pAzPVrBv%mJop0hh=&YAf!XU+_za1rU> zkXH00t_pF^uN$!6cH!eIS@ul}9~T52s&)%`|7~OOvdBikdY?s+@?*y%=a>60a=AR4 zFk07k=H`3CR3G_yqb353?*4l^PxRB$u*Wwdxaltl> z9{Cke{r%B24x zKUz%9_CJlcXuW`g52#i8*3eYAF@_NzVE>Akau`@Zo+SMi#j2;9iFRdM9yg#}zN!b} z2x}$}O;KnRVW2dh)*_|m;kH+0+lrjK?s~f0xHk~8o-OZxf>ut!d)nsluf4yZ<<=Cb zS$*0KJz=-t`#FmRypCwXW;Ga%tb5Q&FM4hybNHo{6DG^?@XJJ;R(8sgG76^@;VN2! zt=pNLe!wmH@;3rgGEyRQR^*Gajc}lML)iAKW3#&KZw!7vUZ4tc2K3wiEP{S%73>6~ z`_ZL|@b+T@B>`8uC{K?STW|{SfHK7Mj6X=UayBoAj-{k`4~hPwB)ix1$*`i6VZh$x z%(&9M@dpHD6|_E~Ow}fxPokdl3Va6NT5m2|N6Si0q+^q~8k1+VS+eVhkjHSxiU2?! zFJvQCx)il3=_>r1UT8IkI606yn1aLE!T*H%`L($3x4AbP;E-kH6Kj$SoKS@=rpFr( zDkluE8X9zlfRErbsez`}AhCq+VIsWuh5VpFwzZ!ogauey=pZf}g4`bW0Sbr9E)`$; zlcPhk&G%iP3N4E|SO|P>lPkw&IuR>mzscAPn(gpwkkKHGv+6|x4gb)f)BPSHxNi!n z(Gj#t^pRIotaP)R69x@dmTQ0^dzbdX8zsks>n5xmXs^Gc15?j5t~Hn6g&hp->*Ei6 zU^k6a`t7N;UY2D{+R4b32UuL@LGRc4lcQAx1@P9Tv*O0Y>~jp`#F(BQ@kC?aXwgCzc6z2OBoE$ zN!K4~1up@2(&`Wql>$v>z&22avNl6`Hq3pM&=;&EEqP#*EAFcKg6%E=NSWhK4{BX>6A9 z3?@oGFSx$ul1ZMnB@IVvPwE<9DwDePzFsfDH7U{u`cI9`<1B9utTwVn33J89oI_h0 zHau=UeF)ipK2wA{h3>6OGL#HHqOzt3>J^ZZGmL(U4gLKW@$&>FepN|rs$ch zBn^NZ0ld0`;w9#9WIleGr}$^BO-h+M11k zP`@+XQ=or0Xwrv8=SFF0-|IBm$F{MpLC@9ftrnd|zQ_Zi+noS4M1Bu>l>StqW2~XH z!TMs4J+D`-X&}mDz+h@sP#-!h9hqeO&&Ibgd*_c+=m&zp81(h+s! zA_vzdcr{CFHU_9h(zobt1D9+$M3^RSY`=$Kz@#*`H~=xoMk z&j}>eq=Bn2%#y*&-DRFz%955p$cZ}}R0%>qA@RET3ff6XQDBkz95s}RBAzN!88i-5 zsWkTCehrC?Y!glo7@&fBgAA$<|TZTsBAci!~OPJRr^(AcJoZvgC?2!yZ`E$^lxaE^QtF1+^aL? zoR(!_F$YFQ=mz=d6KP{@Cl6}d9K&K_4xnccRkZ#3g6sbeKdjn+y#4OohvN|@ct*>; z!#NfoScHTpOuu+zQT4y~>PAYo4kd3TaHqcwOu7fA(drlqiBw(5H-m=vSbuRWQjs4 zhs4;2B+)WvWG`kg%$zyryuN+@f$!t~<@(|N;dM zk@Uxd%Ua4=R+M&X^wH|8ek-J>j2wiuF@}jzu|BB~Qvhr7k^C%X&APTzW|X(m1muENJktYGW+S0C&(`TEnlrC@k-llgdpR)*H5vr!kU zEn2)A9?I5TpzrZ75qbz6l=#=I^EJz>?r;yb;ka5DgaSNzhAHm!<~4J*C-n4-6DE3w05(e{PG@aLS!3JzjP1YC?VGwRo`u65R+ zSF7ua*Eb^DS<`jnkOE_l*ILUu7VRvhSy)@oW6aS#J1&3w^I}h+jqs%2+MT&&t}COR zJ(=)MQ3CPp&bcZH&4Dtxavxu-_Qu_dTNP;E$>+9aUyoeCi?i8ou*(Ol`Vq8PY0t`i zO2vY3(LTa2+dSPlN<_QGxEdWqhZ(=pGapMVuk&2${C0piQBn``XjNnunE0Jr?|KIz z^eJMlEd4lmlZ!k_ASQUwvJ*E9t@D80W8!KotqGCG7m9Y^=FR;v@O;Tylv_4KAFceP zx-9dgTq}+hKgf`#o{h~%vIu*j$)LFgwHwaGCcwv*chkvk$U}^HYd7g;`wG3RmAAITXIk|DzoE##&`d$u)3{s$SVu9)A zhxZ7JAKbfPo#gF9qsV0ZEd-&MeMLA=%e+Yfy59JOo z?+%zoEFXe)$iMwO4q}P849&&|PbrTGji*%4?4vm|qxz(+C^vqbYK)g>>=Nr(JWgovHA=ACni)3)8jn43&;GMNpVdVdHO#=Z!0f2XRsG$Y^E0*>?T=3SVHg z7HCNqPa0K5u*RqvOdl@%niZs$Q2zx?)I3zG#=1v0?VDYtE15wVN1zDDL^r)$?!Puq{QS z_phXn(L9FKkAbCvDlOLo;E_{p!djhqJv`y5$R|MelGbM;addR`bD~OeqVPtJpY3T~ zGD%F&;etv+)>I-#>7iDx`A2l@oZ99lhdiQx1VQB1e}MjrVod=m{*uKofL1Mor0TN3f_!k9bWxKRMf?=5h#xx-mB`U-e>r zoNF#H#%B0_iD$g%Mrjx)_7{{Yx!!I8&3PW^rY}LiHCZK`94~g*wI&Ni_K7U?h2AJb z4y9R=@Ams?)MlKuKMt4hcb_B5Y*CtEfZecd%_l9JV4|k+!?3<+KW?6&iX}LAthFvD zLdC@-Ua>0jpJ8p*IP4x7fwwu@U~&N!T3Q+bV9kF#UEDb!(w?HN_8H!Zsgh#_vT3sA zwIyGuj{Q~kUJs;uG=LR$0{5+*eU()g`h{&pVQUN|jYDqJlr;zDN51s2{Ar&Igoey> zX$TO85#VA}+i!T;$Vd*r`)aY=~nA*j&QhW-8Xc zyOz3gqa&!gM`#p5Nx6r!u(}n8L0?FmU6f5F{@@n(vJHrq3vdA{vs9ss+9gu&fj&d) zBRorq#XWF^RmjlcILOMj2|C|3`4QE6kJo7fZPpMqn}0zrB0GU-7~9{B!=FBkHv#S{3_1kch_{&@R(rvLoRqJ%6s|= z9>(5iMLvwCyD)#GFE$k3jAw8l>)Qn9*)?CBTL|T9J2}7Ek#m($%YY2sU>EfjI>@suMRx=6T`5rl1 zma3so+W3{wc@Jt`Nw|Y?%S^-Ri*~&IU<*#%ap?^er74S3BCoZ&dF}QQ&-IJgdf96 zAh9!wFfPLCcudBFJWG2j$u=2&m2d#vV2NvdmeH=DjD|(1nPtRoP$Q$4DlZmPq2vAG zsC_bg18wPE7-n+5xaiT;i`r<*V zGH$98`dF)Xinm(B+D*83hMoHYGzUicxXL5&bKk=jDFmlQsx zCnJ9h!6y^Q&?NcmD9XL>%8L}bYof)aHT9volmSs}oF$ybnPMdzj=jKnGw%t9;VZCr z@6WKjtijADYPd*nC{=xceGj5Q&yh1klJ-Cn+R_$FB>n*_M%_J5FR*s3XDlA2xh*24 z`A$&|{H^Cv!#c*ZWu(fi@4&pYt34sGQI4z~g8xw>QB8qP7jOR*>%3-79?Ce>43%=h zrGgRa8f#zNBk|wRz~sCI2?ybWB29g!E>K=~#R!j)F)Gm{T~g=55*wf{86oU9;zH5t zNRd=f$6o3+m#3o{h+XBV0dyHZ9l0o%uN0jVQyEyt_=#C z5{>Wt#fa<}f-JqsBQ8;u#059lP|Qo@<&Y}Z?i2IWytF&vVU7;dv0j7BJdo@}<@K=5 zb^!P1KUi*Ld>#9tC6RIJ5bT{=T#PKLPJ_P+oqFNi8n+=f8*Xhk80THS5H+B&bwuwA zBp4^BiIK;ydhr3}uij4J*;H1rlxavn{pDGny|Jzz&c*BC8h0QG*^sBONB8qe%)~j2u>g5>b{rY%;@35L6fm?`*`mb-516cPw`m zv!VHh9q^9xG%#{HaM7H&s4H0?F}3%?N8x7XI{zobW%p*Ju*-28$=>;U z#^|+3i-QRBp2xP8O)kaPd4Tk1yj$ndma}5>w~9+4*oMV5S+OOG#L6aKMoZ%8<^t`d zg~aLAByRid4j8U7y-(b4ul^77=ZM_x{BH2g_jcBaL$`v)RDWa4tbUsPuP+Lj;eK6{ zC(y2RM-3izi&+Z(-qx?kWcH_`-=Cf%<-RDg1*-o#n65F{a&j5CYt=fgoX!1JH!OoOVF)>*8u-xzQ>8*FL1&g(SMZPw~97$RhTS8#C;e3-^Fx3sK!pfqlGHubn{A z7W*R+`Gjk&KmxyQ1>>~{E-_vT5ew>B;&9*ldH*;rssYjQVOU-}e7Wu}b@_70tRhij zTxV91xl`or?_Y&V0{6;-q6Ro6rwMN&`KFkfKxK^$gYa-=LCnp1ib^Y#&xPMG&z9PE zORJdND-ANq4HMt%vB}q4K#Xh)0sUhP+IsmDgJAI> zG)9MjYcz39{ugj=1q}+zp^5JtZ1UQoDPTMVx|a`uw%K{p@KJLRqs|3y@nY8jjQXVo zekO&U%UC5$NDJfDiw5k}e*x7Y*BbZ;4fOtR-vTxT<8#z6BS3A0)&mxUL6kbh%Xs8N zq$rUFtP#=145(x)Sl7$T?}1C_D4Fx|&uHNQCuk7~jkZ!J7GQaM!dGQ`o#AhHlX}zG>seO6qE+__f|t0b`Gfb<*WeX2aR@ zhg;UUe5L)M1XwU59*5>v1b+fPOy-WAnFD!+5e{G^u#5#D>54A z?C-X7sSy8K@S*BQ>FLl!gic_)@vzFe?{oI=Tz`e;G^NB0%cZl~@x9t+(?f#p+Nu;T zZ4uh8r2QK-dzo;O-MAjNElp3Jd98V>5-R9LCWs1Gc0InjlaVSqC+OFf>4%$Mn5s}Bf~A&GG(RV%}-swTLIj;gy!4@on%$Ip#mnQaGf-1#ZxeR5Z-O z)iXdJVh3LYwQ_S5C5%s&D7_=C0Q=yEiBpOtLAFFyCj6ynR#9rcYmRCtVYy^|>yYZJ zSc7?)$nhA=6oi(6j{Fp4n{_Kd7h1vZ%PSfhD7~9m)TGt$i#4mDlF_aPVT@C{S>Pqj z74Q4b%=q{8MFjR;e%<{De_R2-`i8DN*LB1l%ahI0N^o^;Yt`~$iNLG#+S17KjF1ni zn>w7X6X7%ZAAiqIXUlG6yuC7g`sSvn=qy0)pr_xZ_T{@b^1f+laVITdi!{JZwjvL3 zC|+3Dad%nh)72#0!V8n+J(dC|&1NL`fm?bIW>c|pKfxF?D#>n$c6%U*F*{{zp1zNG z(p~g+Af~+2=>oy22f3zH(@*0uO{L#Xu&&>wUc~Snbh*I3S7*DPIsb+E|3&z$Q;C&- zu3K@lTSi%XD)C@LyyJ#kHyYjDbJYxY+TdI0>9cR(Q@$lzkB-qVxhyy9eFc6p<*Kmu zpA|I#Ll%knU{%NMk?Pa5(o5d-z=cun!<4uCkK~B+a@2ppB%&hvwbnXM>qt~id-Q7th{U2yP#ohn_ literal 0 HcmV?d00001 diff --git a/episode-13/save/1/1/c.1.1.dat b/episode-13/save/1/1/c.1.1.dat new file mode 100644 index 0000000000000000000000000000000000000000..20c7e221482219cb16fa590e20a37e89c5b1bdf6 GIT binary patch literal 2814 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 G%Krh{4iI$! literal 0 HcmV?d00001 diff --git a/episode-13/save/1/1p/c.1.-3.dat b/episode-13/save/1/1p/c.1.-3.dat new file mode 100644 index 0000000000000000000000000000000000000000..160702cf6b5f443f500bf4ddf9d7a532bf4db5d8 GIT binary patch literal 2964 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 literal 0 HcmV?d00001 diff --git a/episode-13/save/1/1q/c.1.-2.dat b/episode-13/save/1/1q/c.1.-2.dat new file mode 100644 index 0000000000000000000000000000000000000000..31ad02cafc4cd1a96d1707b2869f1feaefbeabbc GIT binary patch literal 3489 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 JP`Z^)`yY6Kyng@y literal 0 HcmV?d00001 diff --git a/episode-13/save/1/1r/c.1.-1.dat b/episode-13/save/1/1r/c.1.-1.dat new file mode 100644 index 0000000000000000000000000000000000000000..84fe36b0e48bc13a05d274fa198532fcc402d240 GIT binary patch literal 4441 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 JH|z8${{<&0fx-X) literal 0 HcmV?d00001 diff --git a/episode-13/save/1o/1/c.-4.1.dat b/episode-13/save/1o/1/c.-4.1.dat new file mode 100644 index 0000000000000000000000000000000000000000..cb2288847b190dfe7cd585d9436bc2cc1faa451e GIT binary patch literal 3195 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 literal 0 HcmV?d00001 diff --git a/episode-13/save/1o/3/c.-4.3.dat b/episode-13/save/1o/3/c.-4.3.dat new file mode 100644 index 0000000000000000000000000000000000000000..bde272ba9853c408fb038dc03f15ef9fa287283e GIT binary patch literal 3046 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 literal 0 HcmV?d00001 diff --git a/episode-13/save/1p/0/c.-3.0.dat b/episode-13/save/1p/0/c.-3.0.dat new file mode 100644 index 0000000000000000000000000000000000000000..549461daa46696c8ff6f7f207fcf31940ad95ac2 GIT binary patch literal 3549 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 T5LWdcR1jVk=E*7#sNnt&`UvAl literal 0 HcmV?d00001 diff --git a/episode-13/save/1p/1/c.-3.1.dat b/episode-13/save/1p/1/c.-3.1.dat new file mode 100644 index 0000000000000000000000000000000000000000..074d25b77b4cc077147ac71da523d86d15af6046 GIT binary patch literal 4020 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 Fe*xG<&g}pI literal 0 HcmV?d00001 diff --git a/episode-13/save/1p/1o/c.-3.-4.dat b/episode-13/save/1p/1o/c.-3.-4.dat new file mode 100644 index 0000000000000000000000000000000000000000..c9a6d415e70b0954c901ac5c96125d776525e7ba GIT binary patch literal 3005 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 literal 0 HcmV?d00001 diff --git a/episode-13/save/1p/1r/c.-3.-1.dat b/episode-13/save/1p/1r/c.-3.-1.dat new file mode 100644 index 0000000000000000000000000000000000000000..6c49de48119e5c61b5a57d1b145e6243925b1b30 GIT binary patch literal 3532 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 literal 0 HcmV?d00001 diff --git a/episode-13/save/1p/2/c.-3.2.dat b/episode-13/save/1p/2/c.-3.2.dat new file mode 100644 index 0000000000000000000000000000000000000000..d27fe8c0c85d458124e3797b322f6c4a143c25ea GIT binary patch literal 3275 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 literal 0 HcmV?d00001 diff --git a/episode-13/save/1p/3/c.-3.3.dat b/episode-13/save/1p/3/c.-3.3.dat new file mode 100644 index 0000000000000000000000000000000000000000..bec68c2c21fe2192f0d9e7eb446c79c64a66f70f GIT binary patch literal 3179 zcmb7DYc!O5`<|g~C>kB41BTS5RHIZRJUVJ`^!u{@6aKFz zjtyQk-)8)#|6S+JuCVdsOA8_s$8yX%58Pvt5-qRhEy_RRUTZ?-nFJ_^d7n)Q%AYJB zVYBTjVN{c3(?eO-d+F(!RWTRfk&?(5uf!O^1WyP(q4^3vQoUY2SzuM*Un772z1z=g zmW15&w@4`X0!jl{35OQv=bgKfx8RMZND;$eayJIEl$Q!#gNu4Nx1cZ<)wK1TR`Ue9 zXkqvKHmXuc-@37zn8*z!G*SeW}|Blkt5S6WHz^*mYTh4};}+ zp|rLF1mitK!#F=ieiub2cxq~dl4@ZA-^~yTXZbFUh+@anl;~G>2Q<&I?)igt-+A&F zf??B5mc(aezOwyj;FtBxDvE7{)aI|xlxiIUeqKXgio`u%$na*CpyfUcFZB51fKQWq zw#|RkvIHFP1iAg9?F-X??!7dD_$n%%ZB{uJ;iu0s67W4+By@5-}lKrVJnIh%mI`x4}#`W*%T++8rn3M6b7??vo=eeHuJ%30j9{iBCltuaGbzE_{DEd~%SGXc z-_1j9{GSMCx1Cd*RejoNxlV}`5+^s$dgnb4+lzYR?Sff7%bY3Ru)C1&v*^Gk%xLZ7 z{n1+yYobF2Zf9f}ZSvw9iY!I8Z!nh71Cl)NBU@IKiV<^obkvW;w8dn;gZV10Qb<5P ztCe<6m=9gl3#2ubN4$*TvhQRb1-o(re=w7N8>AUD8!P{AqFG~`zL1@x|AX2!$kO=g zF<{GR!APeRkQLfm2z$#M_pfPD(+pu>%t6k7r3wBF{5gJx&~Z#MLig0oXFUU&wO7^b zI`W&^q$dHOOjW-FOV37cixCd)%Em41HBl;x%YiZ0tfeFD&E%=-UxILa9saNR1Pw2< zgUjCBwaFMhm-Wx zMyq>&ICSBWZ1$@igzt>l(bA!M*Yo0jm@vK~66r zV{zvBajZ~UAAIl=t&wO37czF?B_{^ZBnz`G*mNUJq=fB}vSd~gy!(Z;JDpK<^D-E| zfqDG_9%mh_FMbJPlzdk^cNgLxI7!DHu)DoX;S&q)cA<2$S$F&?Va;^p5AhpqBC6Yv zskas#Zy=4e6e3GBYhK-<)Ldf#&q~Rrr4ny>Z-jH>H+s|6se=n~=LFi0eP(dqdvi`& z3My7Ks3S{jBhV5bYVDNAv?`<#T3?mAq63IAy?l*~{8AZBRHQ#e^>K{etZLOqHk4D| zB)pRvkAm54--cC-#y$np%y7B?osArUUs-KysI(%J{(Ob4Ar&x0}lZ;x)Pe$>OBq> za{j%QD}wf+i(-jE4~%vep3--}v)X$jCZ*r#7qAX6*he3uA>BY)#ex=T#17$Lg^FWR z{NhkZ2h{%^>>+c-Hu)$MG6XW{>PYxS513$&(SD z_VS6?1S{KZ5A!kHdzzivLtBY?Opgdb&xMitT{l&Gz7hzp1}Obz%Bx*8rQ0tWRyV&> zLobHLn~RVU0zqCVO9=Uv{)~7;$nHfLxFkGC)x@7S_caNQ_FY1X2K872r)ts{=~@KH zx1xu1^`$fZe)sPj4!C&%l$U&s3I0dX>nkuZf_I|h=&y&gI)vXC9MzQWR2uM@^h|{Q zd146`#=-j_t16e{3-MIf)79CM62pZ#?eMvN_{0Yj5(|Ard#L8wy7Z#G?U_5kP%5y% z?``P_9!}q*Y%|suLdSM1wAr;g%|&#$~9sB!ZYo_G?~rC z9hC)f8a=o0d+s1hKsL15t0b~1V>mh_G zJ@fPEF**GdI6jRhC(g(&-Q5rB94)hyaOtxs(BBE$TDE6{Iy6Q$oj5H@g3U@P>mP+{m z5|k`^Kz9l`_WVw}?4Snn9tRNJZdeJ7u@5?e1(T=jgxDd~t}V{W;wK+Uj>`v!Szn;6Y!S zM0;{Q@|!sWEBd>e4TD2rwVN*fVc-ZK2INlj#K&+3`!4G@nL2dJ!w?y+Ej!^LhJH~$ zGk@FCmyIqrw`v1w6?@M;${=79o4Z>|#ncbQ6KGp2{r9t@zQ$W{=Q7<(_f_?6#S(xE zqYt&v)0=sG#ZM;~<3=vkc$f$=TlN&)y!{Au&G+JRNB8c%IjeyM)+j+flE)E8E53xb z1z|W&LNT|7c`x8|3U7hm+vmtU^mT%?z`B7IMes)v#BTg5!K_2INCqWFLa;_Yl1%4v zmI+3dC-*v9?CsNj=*MBY?1Gy^UrZZ6HU^%Oe>J5;=V?9MaPS?cedb1KPikM!Q1m zenlO`>D6%}+^-67qms%&YgjyrCdmqNVn&OzUQ>&}9PgbYbN_N{-rOFo3VZGPk*h#CWphenGZpCkns&jrXQ;7*Ht+CR2<+|$Q#QUJ6deG4+?=_~F&Xgh zpk4{T;P`Pr$$|d>rl?UbuNCz>Smi{84+usT3Po@=FBFcAjqWs~81ZZ-hNEI*Yc7yk zW%Z({LUVeBcq*dMf?i&qElnSc%Gx>bIJW0Wv?33?GdPqXRdr?SX(iRic@uW{>!Ie0H6UEoAK2ks?Ka{?{QuN!%fJ_*GsS5$0><$ey_0pegD{P6NoW2*`ld}irikI!%R)A+ z7{~1{%^YEb&#p5w_(%Y zbq3yg)+V{~%ng}_dO8Qx>p6_Nt`I$I^IR=mq*xX2v-p5I?wCL0B%U5dfrf~8cf|WF z?VGGtOk4RfKwBm5owO5jt&C=bg~?e4h~qD)5`Ef%U!hpIRn21Rj#;t-0ECkPbMNdyceKvX~yV#3LAp6BKL*7x)K@!db}wf6qE*S_wxZbqVk z0pSGwwNa40-FkaR`=bHpX%mNQ!k3ho=;_+DpWK`|m$2du2K`yMwW)u#*S+>ux3#yA z71gibyD-fwylEdfo&l^q5APm{b+3Lbq^I{X9Gy0}Y;dWbjk z5I1NuF|f9zNfS-JBVU$u>G+>!>YR||nzJe1Su$H|!5A*|$?b5A`e^JG(VA-<^{a@X z`-NCYP+odfj$D(dSv3x}{;m7Sf5`aDlP7iLGRA^=-=STtV$-VhH9C^#wN_*#l_ADk zN=g`<)7A5i{2RY{if#3Rp1dnw992hVdUw!f4MrZ)s&P0D48X>WZ7-c%U3CS01~+mi zcc>nSKh3Qc=r4e_N$OwT5mR72>pg4KWQ(+GAXmy|&f&~MdtAbv8yto~8CS78JF@hK zn9GxcVNs-Z1Q+oiXOoo)Z2A@jPfiN{#U9hropNw0#c)la9`tR}3PWplPk5lD?=^rk zf?^9f5^}blWev)yzSYl~)vjb26MW);!vVbptWLh@$PWJQEf5E z;tUK35~9{g)S9+_6432n`X^2EA?3d6F~*~B(vJm@5`!E+>Hz;i)D*BnB|0<-icM}O z9uj*jvZu46Hb~P?)mLyr41ntRM(+A?&{UAnc=U2LI%GRoCS>2Pqd9)2k1cA;LUHfv62PzI z20L`2#%vk$8rG!uKvHB+8Hw_DUz8}Bn`s08uBfGVFTy3t_!N{C9Xg>gx-9bv(z4=! zyTkZdCD`QdlR-Pz%3MS9f+lIe?s2=6FosKatb1mDC}7p8^SYV>?d>CJGD~!JB{X*P zJL|Sr#14>p>V%GfX;NhM7-qX+2W3Q;zG0n;IVQOGTD+P%Yd~zQ{yiVIkI;gb&vmagno;?0Og*@mx0B@K)Q zm5w8PbdA+Q-1iuoBA&x+(V9!9w~(nU^gXYW45BniFCT)ikWt+I6*?i;UxQd<4lh?s zN-=E|ejJ+q(}u!eo>{i0u0pU5lddSQ*Rx?#9!HmA2KdGCQ*z47C$bYJ2EhC}Ug4|8z!Bt^uNUN{ z3K>F+lqKC`fB(ogth!o*ytJJ&(apU-o}ulhZWRs@uiw$$M$8&8zN5l|9Fd?NKM-6V zo7%V3#0WhR1NZIa_sJ!9QD71}qe<*S!q*^+^c>_1j3Cz5qGauf`a9I~C~S6{@4H7M z{B#b3+t}=}ulf0Li(gy5K|T2UGFr~2qqEVnE__VUGo_tci+YopTPF!88DJ7AO1y@b zN8+0~gBc^}z*4Zt!fHPkq^Ri5eR+-Y-coDfW8!Z(_}QR)K%5NmMr*QtR@?<@AYlfI zCF*mpK#N>IhZ6tEkZW3kdViCJZvFrkn({6=Wm{w5oL0yC;1v;_s=7PK*_!CG`b9ZI zLXXq}%0B|#QQXG8WAz-7k%=vwJdF|*i$XgDf$D3YlbH1nQL`mla~_|7dwt)&_gDgX zdr9@^8soAr1`3G~%TxIdPL|7f)e$JB3FwGF{0ieg5SBxNbufO%4=(6#kN<^;VVM~L z9XhE=ps{R(cK*yEeLu~B7|Z4JYk51}W^po*cSu7?A2W_*iU?Omk>^(`Unu^4H;3U} zCH+i~hKy;?{cR(AyL}OS zW-#5XC(-bxRY3}L<70U6NJVh*zRJ*v6y0F-$NBwd7Si!moc$thg|~O9RJ@X1qSPuv z3DZx2d6P8jLt=}F)yj18MXj?8-(J;}7h*m#{)k`}W`ZPF*t@2Hmu6UwJfb=(Y2zxs zFJ;5HeR+Y5+k~{lKCi?`OsSoSCuzNzcXLH`@re2zKT?j9~%n-97x zBv(XYAeZvZiD`H9GwXcE7!5DDa%W3tcc)fhhI6sNO!P_JW(fwTfE>z0=qPB2nCf5U zj-o3_sfbrE2lnwKKf=zjftn$%%9Iy61&^PH^eD9L0-7B_<@yPGUqlXwoirIiJ$NJ) zZ^xb<-nuvrZ*Dp$R8IY;Dkom8uXc5`}A zMk?C(g>`>E=c71kz{T&Xw5Rhmc+s{`s<*o8FIoxd_vq#0I`l^9GaIq!;5QL(=6CWb zfic_i9-O?+oj~_&;8WH%E17`zvy|UJmSn(-d2JUb^d^+KT0J}4MR=Q$hMxC=^ZiC)8egc~n_$GKHevbMCu(5lMd z@kVmeA^zANpw)TYm(ueE5xVv&7R!;!z++TSEGw$7{8BPpCe?(N!^5j+6y3?G+fMg8 zWYey>^@gIq19Py;Y0Cb4&jo=7RutVIc_`=^SScmw*Z+jfPN2y&H9bsIbMx8+ioGD+ zIE=Bigv<$sITkkt6m@NXC$_bfm0e~vfE@q8j=mUOb*HB72$ni7{h!L(FSzqmFSV}I%sU;fFMxr~@}IW<-*Vr4 zpw{T=!Y$GBQU{8$o1Jh_h3)Ef#btc-^R`IBciF69zR;urlN!D4EKwkLQAd zF-1lP?DI<*9~$bF_vTKm=IC#sum;P)Gl9_$ib`#(cCIaHH_ZtT_@T__G;um*A-Y*i z^FBp*JKO)flJMAv{Z?R-fGp0$JX3)3Z=uiP%6ke%(m0FXpG|Eia5 zGCqVIIb3G6OO-Q%>Y~KSnFZB1(koZ?MAa&)UX;3GsxK;`N~l@tuy@6HisE(w O(rK8p)w$F|i}oM!?=FS_ literal 0 HcmV?d00001 diff --git a/episode-13/save/1q/1/c.-2.1.dat b/episode-13/save/1q/1/c.-2.1.dat new file mode 100644 index 0000000000000000000000000000000000000000..1045f76a19978bca07bfbcd91224ad81d59b6936 GIT binary patch literal 4691 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 R+iL)|DdV51L^~?we*k88^eg}X literal 0 HcmV?d00001 diff --git a/episode-13/save/1q/1p/c.-2.-3.dat b/episode-13/save/1q/1p/c.-2.-3.dat new file mode 100644 index 0000000000000000000000000000000000000000..ec6aa86f644c5d95b9e6e2eb9ccecaf427c5361b GIT binary patch literal 3455 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 literal 0 HcmV?d00001 diff --git a/episode-13/save/1q/2/c.-2.2.dat b/episode-13/save/1q/2/c.-2.2.dat new file mode 100644 index 0000000000000000000000000000000000000000..db26b75a2c00934f06c826680c7d23f116c886e4 GIT binary patch literal 4194 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 NngYS{f{jeZe*kIL3km=L literal 0 HcmV?d00001 diff --git a/episode-13/save/1r/0/c.-1.0.dat b/episode-13/save/1r/0/c.-1.0.dat new file mode 100644 index 0000000000000000000000000000000000000000..6e869d990b55487d65aacc7499a71706fbf1d4b6 GIT binary patch literal 3403 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 literal 0 HcmV?d00001 diff --git a/episode-13/save/1r/1/c.-1.1.dat b/episode-13/save/1r/1/c.-1.1.dat new file mode 100644 index 0000000000000000000000000000000000000000..9254e9ad0c29bbe70865ce403e6da24264e7b551 GIT binary patch literal 3780 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 ibgdD_ioN#elly^D3;55n_7^@{q<;g>0!y0! literal 0 HcmV?d00001 diff --git a/episode-13/save/1r/1p/c.-1.-3.dat b/episode-13/save/1r/1p/c.-1.-3.dat new file mode 100644 index 0000000000000000000000000000000000000000..2ab9f0c0665ce7191b7aacfc6ca442dc437a79ac GIT binary patch literal 2589 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 literal 0 HcmV?d00001 diff --git a/episode-13/save/1r/1q/c.-1.-2.dat b/episode-13/save/1r/1q/c.-1.-2.dat new file mode 100644 index 0000000000000000000000000000000000000000..776431dae12e476efa3996173413ecd730fc8525 GIT binary patch literal 3150 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 literal 0 HcmV?d00001 diff --git a/episode-13/save/1r/2/c.-1.2.dat b/episode-13/save/1r/2/c.-1.2.dat new file mode 100644 index 0000000000000000000000000000000000000000..7db9d2f12153e07d275e545eb3411c482d8481c7 GIT binary patch literal 3575 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 ZtG%|DSbBje`Q8EyjPIpy_w+F!{U07wE#&|J literal 0 HcmV?d00001 diff --git a/episode-13/save/2/0/c.2.0.dat b/episode-13/save/2/0/c.2.0.dat new file mode 100644 index 0000000000000000000000000000000000000000..35ca0883fed4ee833a2dbb9104a58b3b0c3e4eab GIT binary patch literal 3104 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 literal 0 HcmV?d00001 diff --git a/episode-13/save/2/1/c.2.1.dat b/episode-13/save/2/1/c.2.1.dat new file mode 100644 index 0000000000000000000000000000000000000000..380981817fe10ac268f9aee20caabdf429bb7c71 GIT binary patch literal 3342 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 JQ13&5{tlqQOez2X literal 0 HcmV?d00001 diff --git a/episode-13/save/2/1o/c.2.-4.dat b/episode-13/save/2/1o/c.2.-4.dat new file mode 100644 index 0000000000000000000000000000000000000000..ec2b75f516c4cce3a4043fdbacff9bbd8aa4fbf5 GIT binary patch literal 3534 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 literal 0 HcmV?d00001 diff --git a/episode-13/save/2/1p/c.2.-3.dat b/episode-13/save/2/1p/c.2.-3.dat new file mode 100644 index 0000000000000000000000000000000000000000..be2bfc66460c29d47397d882d9eb0e5b6632da5e GIT binary patch literal 3219 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 literal 0 HcmV?d00001 diff --git a/episode-13/save/2/2/c.2.2.dat b/episode-13/save/2/2/c.2.2.dat new file mode 100644 index 0000000000000000000000000000000000000000..8bc0fc85d6f075b0d51126f138ee51becfd44e3f GIT binary patch literal 3201 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 literal 0 HcmV?d00001 diff --git a/episode-13/save/3/0/c.3.0.dat b/episode-13/save/3/0/c.3.0.dat new file mode 100644 index 0000000000000000000000000000000000000000..5d50c0871d19360b22ae399915a829a65c583ebd GIT binary patch literal 3648 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 PfVE;L`O}LHW`zF&3xPpn literal 0 HcmV?d00001 diff --git a/episode-13/save/3/1/c.3.1.dat b/episode-13/save/3/1/c.3.1.dat new file mode 100644 index 0000000000000000000000000000000000000000..bc472fc38a51e7b3cd59dffa8208bb27dbea3c21 GIT binary patch literal 4240 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 literal 0 HcmV?d00001 diff --git a/episode-13/save/3/1o/c.3.-4.dat b/episode-13/save/3/1o/c.3.-4.dat new file mode 100644 index 0000000000000000000000000000000000000000..0b093de842e863b3de2627802899c85ae05b4d83 GIT binary patch literal 4104 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 T4}BQUBdFSzqAgF|$)x`S*>%+* literal 0 HcmV?d00001 diff --git a/episode-13/save/3/1q/c.3.-2.dat b/episode-13/save/3/1q/c.3.-2.dat new file mode 100644 index 0000000000000000000000000000000000000000..3d08b972d79e9a5d981a0dcac6b29fe3b31a8e05 GIT binary patch literal 3027 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 TXKl|$J*~5K>FlZvlPLcOfZnJ< literal 0 HcmV?d00001 diff --git a/episode-13/save/3/1r/c.3.-1.dat b/episode-13/save/3/1r/c.3.-1.dat new file mode 100644 index 0000000000000000000000000000000000000000..6f69f1d868986d61f937fdc027fa7239647c95be GIT binary patch literal 2784 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 literal 0 HcmV?d00001 diff --git a/episode-13/save/3/2/c.3.2.dat b/episode-13/save/3/2/c.3.2.dat new file mode 100644 index 0000000000000000000000000000000000000000..02f4acb609731b77554bab9683b0b8c0d01272f2 GIT binary patch literal 3168 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 literal 0 HcmV?d00001 diff --git a/episode-13/save/3/3/c.3.3.dat b/episode-13/save/3/3/c.3.3.dat new file mode 100644 index 0000000000000000000000000000000000000000..159e18cd6d85bb8b18a367916b2174513d701e68 GIT binary patch literal 2758 zcma);Sy&Ty7skV?fNj76K~#cT#TGSf)gp=vZpDg%OA)ndT&htNqk=?%&A*a^B*%$-WR_7x!uNT z$l|EMJiL0!$s2#?59S{XELziNoMg5t_(*yF!65J!T;WxDEkuD3ljKR8z3_2q%Xn2< z!~yzvc&HI;>Fz`hKG+eM7kr@v7u0NE_7j4GOK)H9^!Oa?;$2nYNX5Y|j|Yv0-}DDJ zQW}gT8wGbGp+{y(_=%GzXJ&gmtqf>a#o^NaTxZ2mGH}g(g^M`WKV{wefCtc6iI{I< zd?s2T{9Yuos>+DIl6e&RwX1}0+L=wDb!6jwZalgd>Kj}^$S5<@XBGVERY0k-R@Tr! zb0%A4yQ?0J=3Q6%~g}KOrVzaX9xShkvdTGKRvOl;UZBb-=6AWAn zujOp+;91*lcRxvY65Pu&KdxOy!RJWn#QjvpIa#l5@M21SJDMCLWGP6kdH+3{c{K?R z?Qoreer>wGXrVs0CshK^O-{r0s%+iD+xDW@cm~_RcyMjMK zb(YL^H0qv3EO*U@o2qch40OWwZkbcBOYBaQZ5rl98q=O=#967_6^vO8-0;%kRX!(3 z_Eq^U<@B&dq-0RCrGuJ$A~a_yEpcpDfQc_A;jwqoVs#%!u5@ zoOcVv(1%~af+jFmlt8ZPMAy-Fj_m{Fx4vcvHthiI8c5uP4=&P!Sgahz`aKv%EGkv> zTp4J;07L7f=LevW{P?153Eb{U){vD~8J>n+@Lcd%E2}@?rN2Q}f7Wn-P*x+^WU`;) zE?n+Ka7JWD!A_9_l{+f2wZ{bYBjVk3;(eGn!u4GF)okVUy895Qw1p(jRRP5 zN2fTO4hUw1VD4JvOLy0~Xo%Z4Y1T<2$vx~tgInS6!b=r|nGDIJLq}wf^~kr>OK*Ct z$OcQTfl1aw&mEI7Xb8+9dj{Z8))$OA(zh!e#61cbwfQDwJmxlSV@S~>u8KC(-bd&W z*ryLv=HG*^8IKxZWlGkB?g99&^2HNPM@igqQh6uZ3`UgMUq|6y4p8pLvMK|PJIU$E z?lH|h95Zszf7(~b6RJ^%hWg%tKVkv39^}$dnA|OUss@_UIYVqcw-U}uqGao2X@I@G zl-Z>(&Q&gi>^yL{k68>=g$DQ8Zfg_?t_fY8q`l-zZD%Y@I+Wu6-{)N1UKhwZv zCwV(mXZz6&TZlp5a@uF}Q-cF08;njP-;c2^4cf!mlX}==rqd$n9fPIAtR}Ew{5M=h zU%Ngb^FFmY2)f~XkjbO};yO}T?EBs)I3nAvBiGo`=YtssA5!d1RPpsh5%YW%&dh|< z(d8Q!c!Po?@Xuu7xUzvgU6c=f=>av&BB$X+TBQ9g_?*hfP$e@W@utiAYedh2)fXnYwa~yPbFeYZf}GVr#|3|Ha63?t+2fgR<^Dmg1$`3*=tZs&^ZJ)Mwcu|0^2NV(?Qxi#SSA}!oOVD`fw}w zILb_*=k%fv85i9VFOwB6c1eTCH2WDDTpcBL*%sjDOWS?sbL3u^LVgRiqS*xxtz8=t z?+@=Ud15L^Pql(K87>r7CXV`E#5S%ccxU(?PjIZMQ+`VC5n|Z8t8d8dbMSQ@vUvo_ zVPvQxOuc5{wbxZLq(cLIqHkzp=I6so)76eX-E0tapALSktV3PV3LF(W7((~xN_)Z# zQUj7OJZ@2)1s!HVPttO&C8ZMj-C>-;WObH8Bqlo>Jxn$evZZujBV0tZzK<1?j!sY( ztO4sx>l*|XwIj0U{EXtJ7SUt1T)ceVu(@ULsy)p!oCxxWDU}EcVbm}6usR<3RSmuZ z8juF(BHQ(-O>Y4m0ZjeWlv&;q&@0(TuQhBZDvsOH~IPM5A@wHd=#WTo}%KW%K)A9P~HaV&>)N z+DbjHt?V9e^X{a@#ga56%*fnKcMePF{dHqGYV^MFDcROCi)I~Te-DN}O+X(N>qXZA zuV7;V{-oHKL`DqU2so@(q6?a7-c@1sX-i|yIJ-*?6UW*02ArO7iwd~PsjiV2Snqvb zv20O^7oAW*0oy9R*uu-?erYxH=AK{q>e5wx13+#@k?rlXSO zG|QXzCF2KXb;p5pBU4qbC%Y<|*tRf7%^Kzue%gtH*<<&dtNEV{!Q7=HmJ9ULA^TiD ze#*#t@JY}4#2E(%#^OMtu+Q*S$bW#WhuJ%04!pC$|DB?KIH=kCDBZ4g=!CJg)(a|k zzXPuHnorcs;YhhQsJpKxNc)mON8vSTFUmfs10th_iO$Z>oKw2^Q5%iFcyzQQqiFC4 zNl{%wE0$;3it%121j!#7HQfQF8g00-KT4v!JoU8-Vej^M$IX0lh#$6uPxJF79?hDu zDwkGls3zWQOpuwzlXFxmAvP#|S(>-YLNtQH{8vRq(iXXDPT69U|NV6TXN&%@E!~Zk zDo8!;@K1+gm16uzIwe^dIlA)@`1<~Y=-I2Bka`2vMD-5jXl10$58TgQ9|Gdj!d^8Q;!%(Q7$yY||*^J|yO;R@) z6>2P}eoB9x8l(~m&QMxuivXaH%SwqG5yAfDW#x|}aBVBrioG@7UVJ9l+j-~IQLvGW Kae1`Dgz+zYu@@Eq literal 0 HcmV?d00001 diff --git a/episode-13/shader.py b/episode-13/shader.py new file mode 100644 index 00000000..5414a0e2 --- /dev/null +++ b/episode-13/shader.py @@ -0,0 +1,71 @@ +import ctypes +import pyglet.gl as gl + +class Shader_error(Exception): + def __init__(self, message): + self.message = message + +def create_shader(target, source_path): + # read shader source + + source_file = open(source_path, "rb") + source = source_file.read() + source_file.close() + + source_length = ctypes.c_int(len(source) + 1) + source_buffer = ctypes.create_string_buffer(source) + + buffer_pointer = ctypes.cast( + ctypes.pointer(ctypes.pointer(source_buffer)), + ctypes.POINTER(ctypes.POINTER(ctypes.c_char))) + + # compile shader + + gl.glShaderSource(target, 1, buffer_pointer, ctypes.byref(source_length)) + gl.glCompileShader(target) + + # handle potential errors + + log_length = gl.GLint(0) + gl.glGetShaderiv(target, gl.GL_INFO_LOG_LENGTH, ctypes.byref(log_length)) + + log_buffer = ctypes.create_string_buffer(log_length.value) + gl.glGetShaderInfoLog(target, log_length, None, log_buffer) + + if log_length.value > 1: + raise Shader_error(str(log_buffer.value)) + +class Shader: + def __init__(self, vert_path, frag_path): + self.program = gl.glCreateProgram() + + # create vertex shader + + self.vert_shader = gl.glCreateShader(gl.GL_VERTEX_SHADER) + create_shader(self.vert_shader, vert_path) + gl.glAttachShader(self.program, self.vert_shader) + + # create fragment shader + + self.frag_shader = gl.glCreateShader(gl.GL_FRAGMENT_SHADER) + create_shader(self.frag_shader, frag_path) + gl.glAttachShader(self.program, self.frag_shader) + + # link program and clean up + + gl.glLinkProgram(self.program) + + gl.glDeleteShader(self.vert_shader) + gl.glDeleteShader(self.frag_shader) + + def __del__(self): + gl.glDeleteProgram(self.program) + + def find_uniform(self, name): + return gl.glGetUniformLocation(self.program, ctypes.create_string_buffer(name)) + + def uniform_matrix(self, location, matrix): + gl.glUniformMatrix4fv(location, 1, gl.GL_FALSE, (gl.GLfloat * 16) (*sum(matrix.data, []))) + + def use(self): + gl.glUseProgram(self.program) diff --git a/episode-13/subchunk.py b/episode-13/subchunk.py new file mode 100644 index 00000000..839a77dd --- /dev/null +++ b/episode-13/subchunk.py @@ -0,0 +1,99 @@ +SUBCHUNK_WIDTH = 4 +SUBCHUNK_HEIGHT = 4 +SUBCHUNK_LENGTH = 4 + +class Subchunk: + def __init__(self, parent, subchunk_position): + self.parent = parent + self.world = self.parent.world + + self.subchunk_position = subchunk_position + + self.local_position = ( + self.subchunk_position[0] * SUBCHUNK_WIDTH, + self.subchunk_position[1] * SUBCHUNK_HEIGHT, + self.subchunk_position[2] * SUBCHUNK_LENGTH) + + self.position = ( + self.parent.position[0] + self.local_position[0], + self.parent.position[1] + self.local_position[1], + self.parent.position[2] + self.local_position[2]) + + # mesh variables + + self.mesh_vertex_positions = [] + self.mesh_tex_coords = [] + self.mesh_shading_values = [] + + self.mesh_index_counter = 0 + self.mesh_indices = [] + + def update_mesh(self): + self.mesh_vertex_positions = [] + self.mesh_tex_coords = [] + self.mesh_shading_values = [] + + self.mesh_index_counter = 0 + self.mesh_indices = [] + + def add_face(face): + vertex_positions = block_type.vertex_positions[face].copy() + + for i in range(4): + vertex_positions[i * 3 + 0] += x + vertex_positions[i * 3 + 1] += y + vertex_positions[i * 3 + 2] += z + + self.mesh_vertex_positions.extend(vertex_positions) + + indices = [0, 1, 2, 0, 2, 3] + for i in range(6): + indices[i] += self.mesh_index_counter + + self.mesh_indices.extend(indices) + self.mesh_index_counter += 4 + + self.mesh_tex_coords.extend(block_type.tex_coords[face]) + self.mesh_shading_values.extend(block_type.shading_values[face]) + + for local_x in range(SUBCHUNK_WIDTH): + for local_y in range(SUBCHUNK_HEIGHT): + for local_z in range(SUBCHUNK_LENGTH): + parent_lx = self.local_position[0] + local_x + parent_ly = self.local_position[1] + local_y + parent_lz = self.local_position[2] + local_z + + block_number = self.parent.blocks[parent_lx][parent_ly][parent_lz] + + if block_number: + block_type = self.world.block_types[block_number] + + x, y, z = ( + self.position[0] + local_x, + self.position[1] + local_y, + self.position[2] + local_z) + + def can_render_face(position): + if not self.world.is_opaque_block(position): + if block_type.glass and self.world.get_block_number(position) == block_number: + return False + + return True + + return False + + # if block is cube, we want it to check neighbouring blocks so that we don't uselessly render faces + # if block isn't a cube, we just want to render all faces, regardless of neighbouring blocks + # since the vast majority of blocks are probably anyway going to be cubes, this won't impact performance all that much; the amount of useless faces drawn is going to be minimal + + if block_type.is_cube: + if can_render_face((x + 1, y, z)): add_face(0) + if can_render_face((x - 1, y, z)): add_face(1) + if can_render_face((x, y + 1, z)): add_face(2) + if can_render_face((x, y - 1, z)): add_face(3) + if can_render_face((x, y, z + 1)): add_face(4) + if can_render_face((x, y, z - 1)): add_face(5) + + else: + for i in range(len(block_type.vertex_positions)): + add_face(i) \ No newline at end of file diff --git a/episode-13/texture_manager.py b/episode-13/texture_manager.py new file mode 100644 index 00000000..6cfc9fdf --- /dev/null +++ b/episode-13/texture_manager.py @@ -0,0 +1,42 @@ +import ctypes +import pyglet + +import pyglet.gl as gl + +class Texture_manager: + def __init__(self, texture_width, texture_height, max_textures): + self.texture_width = texture_width + self.texture_height = texture_height + + self.max_textures = max_textures + + self.textures = [] + + self.texture_array = gl.GLuint(0) + gl.glGenTextures(1, self.texture_array) + gl.glBindTexture(gl.GL_TEXTURE_2D_ARRAY, self.texture_array) + + gl.glTexParameteri(gl.GL_TEXTURE_2D_ARRAY, gl.GL_TEXTURE_MIN_FILTER, gl.GL_NEAREST) + gl.glTexParameteri(gl.GL_TEXTURE_2D_ARRAY, gl.GL_TEXTURE_MAG_FILTER, gl.GL_NEAREST) + + gl.glTexImage3D( + gl.GL_TEXTURE_2D_ARRAY, 0, gl.GL_RGBA, + self.texture_width, self.texture_height, self.max_textures, + 0, gl.GL_RGBA, gl.GL_UNSIGNED_BYTE, None) + + def generate_mipmaps(self): + gl.glGenerateMipmap(gl.GL_TEXTURE_2D_ARRAY) + + def add_texture(self, texture): + if not texture in self.textures: + self.textures.append(texture) + + texture_image = pyglet.image.load(f"textures/{texture}.png").get_image_data() + gl.glBindTexture(gl.GL_TEXTURE_2D_ARRAY, self.texture_array) + + gl.glTexSubImage3D( + gl.GL_TEXTURE_2D_ARRAY, 0, + 0, 0, self.textures.index(texture), + self.texture_width, self.texture_height, 1, + gl.GL_RGBA, gl.GL_UNSIGNED_BYTE, + texture_image.get_data("RGBA", texture_image.width * 4)) \ No newline at end of file diff --git a/episode-13/textures/aqua_cloth.png b/episode-13/textures/aqua_cloth.png new file mode 100644 index 0000000000000000000000000000000000000000..d24b7d5bb9c32347f76b4060a9bd34984deea528 GIT binary patch literal 1193 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 literal 0 HcmV?d00001 diff --git a/episode-13/textures/bookshelf.png b/episode-13/textures/bookshelf.png new file mode 100644 index 0000000000000000000000000000000000000000..1fd85b5e0244d2d6ff03e4b63a9d69dc37b00955 GIT binary patch literal 1070 zcmV+}1kwA6P)EX>4Tx04R}tkv&MmKpe$iQ>9WW4i*t{$WWauh)QwPDionYs1;guFuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~_a1le0HIN3n$;>4zH zaNZ}5va+lapA(OnbV1@rt}7nDaW1(m@XV;0&CC%;iN#U}D;>Ej=A{Svtpa#g^{ zF^>&skX=9cAN=mtDo###Ns%Pb{o*(uBS2^uXx1I)``B@sCqVESxYFDHjRr9NNqW7l z#g2f!ZQ$a%ttorJh;#z$LRx*rLNL9z`-Ff zTB7VVpLh3k_V(|YR)0UF=W@H&5}cg?000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rg2MQMhFV0oRiU0rr8FWQhbVF}#ZDnqB07G(RVRU6= zAa`kWXdp*PO;A^X4i^9b0tZP%K~y-)eUm?E6LA#BKl$Z%?KQC$u|=x{-E2S+?P9Zt zpwNi8lsbq=Tk2lzREmRxB2I#X|Ar3MNfZT9!5|JIE*6w4Z6gltHABc%C25jhyvx-g zxl7U{ey4Zu`+kr2d%w>G5)US}s7fh?uIt_>rj_wyBWV$jMX8r*Wsm?p3Wd&HYZJzc^KlgoX1p8--Yboya zml2WPzLp0MpZUUp!3Es1+qQY6w~xT|<)JNrLg8;yK`7MW$J>3+lkr%z;k~`iN+|#` zo4Fg%OxWw`z5Q_B%GDg4;uEX>4Tx04R}tkv&MmKpe$iQ>9WW4i*t{$WWauh)QwPDionYs1;guFuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~_a1le0HIN3n$;>4zH zaNZ}5va+lapA(OnbV1@rt}7nDaW1(m@XV;0&CC%;iN#U}D;>Ej=A{Svtpa#g^{ zF^>&skX=9cAN=mtDo###Ns%Pb{o*(uBS2^uXx1I)``B@sCqVESxYFDHjRr9NNqW7l z#g2f!ZQ$a%ttorJh;#z$LRx*rLNL9z`-Ff zTB7VVpLh3k_V(|YR)0UF=W@H&5}cg?000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rg2MQMh0*i{9{{R308FWQhbVF}#ZDnqB07G(RVRU6= zAa`kWXdp*PO;A^X4i^9b0&Yn}K~y-)Ws})zQ&AL#zdf8GCuy6cO|?=gguX$GmqM%% z3W}&z(C6{WR}g#vsVE3SDHeL=g#&mef@m!r(jiGRoSd9tA1^YH(*JU;{jbgX_P@oe zr)z01jL6s)g|&w?KD|QJh$zuBhz;5lbon|PMSk75AyUZV|w7sf2+ zvRFBfFZ(rGLCDWqol-7Cm^7Gj97g(e+9XL+Bp?CuuFXNKOArK{bbOQ$OuIHYTLWM# zO+QWmIBIvvdoBPo83(<*{)p716;m{Z+mA(5IUG!Y`8f}*HIsP>})ct^>=aRI0%mIEB zv)5>khh7AIX50afc}oo#9JV^tdjYK=r0BWST3wVB*jkfwHLV~d@419YJT?O)ae{dL z@4h|f&y7ZF-B?U?jdYyiZXALrp5GMw$BvMFj+<%5Pso_t(eT8z} z4_E*kt@!-+=u%GtQc8;b{vZc+KVZaS4AgV6tU+zkY-`D69<^Gnu(BeEl8EcJ4aR_! nU<^VDtXpf8jk)qKMnU=yr1ub7$_|*j00000NkvXXu0mjf;IIRe literal 0 HcmV?d00001 diff --git a/episode-13/textures/brown_mushroom.png b/episode-13/textures/brown_mushroom.png new file mode 100644 index 0000000000000000000000000000000000000000..fc2245cc85469aff9cc8e807f37ced62f8d5c4fb GIT binary patch literal 634 zcmV-=0)_pFP)EX>4Tx04R}tkv&MmKpe$iQ>9WW4i+imkfAzR5EXIMDionYs1;guFuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~_a1le0HIN3n$;;BvB z;Ji;9Wo204LKlt6PRh$_2k|If<`^9lShJny7(5ySo_p#$NPk`VvaHY5X8x3Iklk|F9 ziyr}f+rY(jTT}Lc%N-#0WXPuMNh;#z$LRx*rLNL9z`-Ff zQljiNpLh3k_V(|YR)0TQ1#+Eku*4()000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rg2MQJ*I$b6uN&o-=8FWQhbVF}#ZDnqB07G(RVRU6= zAa`kWXdp*PO;A^X4i^9b08>dsK~y-)V_+BsqhK%qMqCnSW>)-%v5#K4%aA{LH6zgm zz%(Ddau+W4@Z~#(zEyiM)U#kS09hkUGcLe_O9G!JqCrM<(0@+{tN-}aFi~m=014+D U$?nUE7ytkO07*qoM6N<$f)KU?;{X5v literal 0 HcmV?d00001 diff --git a/episode-13/textures/cactus_bottom.png b/episode-13/textures/cactus_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..ca2984b4e6666762cdcc407e97661b845d668cc8 GIT binary patch literal 825 zcmV-91IGM`P)EX>4Tx04R}tkv&MmKpe$iQ>8^J3U(;skfG{gK~%(1t5Adrp;l;o12rOiK+~&c zDiIem*;O&{3IRd%V-yjYS;m|sCE+=~?&0I>U5saWpZjz4syT}RK9P8q8D^DugLrzg zYH;2s4zr@H5}y-~nRG$oN3JU_zi}=&Ebz>*nNH0Uhl#~P2P+-Sil#<9MI2Q%o$`f@ z%PQwB&RV&~TKD8H4CVBdWvu?YAB(MDq^(iq*zGNe%!-9==ddaDdZ}F zkz)ZBXpkL0_#gc4*2+&#xJjWn(EVcDAHzUk7iiXP`}^3oneSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{009w6L_t(I%e9kBQUfs%L!WvkAxXiWb8sWhk#)|&jW`E; z2#^$RvG9B|6bn*#<8oV;EVT_+4guUf-uo|yU!Pvo_KWBJ0UM+_Xj+p3Nn{ot4toFw z0x9@78%Y>&CW=_7hG5fUGdhlG9GOW-lq{r8$pSFU z`XPsQ;&ujkKSQV?Z6MgLk|b&4Wi|MQuy{mpy>`&f2O)U~4500000NkvXXu0mjf Dw9sI1 literal 0 HcmV?d00001 diff --git a/episode-13/textures/cactus_side.png b/episode-13/textures/cactus_side.png new file mode 100644 index 0000000000000000000000000000000000000000..b59d492f52510a55d6de2acf768ee20aa55bb975 GIT binary patch literal 1015 zcmVEX>4Tx04R}tkv&MmKpe$iQ>8^J3U(;skfG{gK~%(1t5Adrp;l;o12rOiK+~&c zDiIem*;O&{3IRd%V-yjYS;m|sCE+=~?&0I>U5saWpZjz4syT}RK9P8q8D^DugLrzg zYH;2s4zr@H5}y-~nRG$oN3JU_zi}=&Ebz>*nNH0Uhl#~P2P+-Sil#<9MI2Q%o$`f@ z%PQwB&RV&~TKD8H4CVBdWvu?YAB(MDq^(iq*zGNe%!-9==ddaDdZ}F zkz)ZBXpkL0_#gc4*2+&#xJjWn(EVcDAHzUk7iiXP`}^3oneSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{00GZQL_t(I%WacOjuSx)hCjRdmFF}8#DK&;S6~5)xd|uB zo`wlZDa1P20-(Kze52#u6Nk40N%h! zOw1FCH|5}QIC}v6ms4BZ6p&=$@pc%Yx&2$K~s(Q=oZ*zD}9FzXpgSq^}C( zN)Z)woW^;lQAx5aaEk<_Zy-SjBgDAxrP{d_7mMpW&K_z{ID70-v5tX^lyC|l0kira zSduAWAHVzCYRF)8Q7HUKQ98Bqappz6)0Rt6B zwW;{?;b+faP|_3?hkKTFG6BRCX*MG>H(+4L^$!27g4+5*4Y0>X0`R}j=)$$ddnb|` zI!Qr7v}~q5#8RpEzO#6GJ?gQwW^q?Ju1pEd;e>c?F}KLOwNe@W$N4`_Y(R=>T-Ece lKPCy(dymzIRRPBRKMy){(v%YtWy1gf002ovPDHLkV1meez+eCX literal 0 HcmV?d00001 diff --git a/episode-13/textures/cactus_top.png b/episode-13/textures/cactus_top.png new file mode 100644 index 0000000000000000000000000000000000000000..f03df7f0ca00da2b5836bcd9678878c8c0e6bef0 GIT binary patch literal 1041 zcmV+s1n&EZP)EX>4Tx04R}tkv&MmKpe$iQ>8^J3U(;skfG{gK~%(1t5Adrp;l;o12rOiK+~&c zDiIem*;O&{3IRd%V-yjYS;m|sCE+=~?&0I>U5saWpZjz4syT}RK9P8q8D^DugLrzg zYH;2s4zr@H5}y-~nRG$oN3JU_zi}=&Ebz>*nNH0Uhl#~P2P+-Sil#<9MI2Q%o$`f@ z%PQwB&RV&~TKD8H4CVBdWvu?YAB(MDq^(iq*zGNe%!-9==ddaDdZ}F zkz)ZBXpkL0_#gc4*2+&#xJjWn(EVcDAHzUk7iiXP`}^3oneSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{00HSqL_t(I%cYaQZWBQe#(%qe>;JYaK_u%G6e&uP0?|;V z;tlAaqj2e$;5A(O0o?HtK~zyF;sP02iVjC{;rQbC{_NgTTy7H!x=c4av){}&^9{Vv z1VDEZk^}11+$N%=>1Z5>J*w0yNM1{_|!Wk#EM?+q=k^mQ}6)EkGPcdah={MB)i;V?^2`^*j46r zu=~Cyz1a8y{uZ{=73t4=e<<7Oitcd0-M2rOS%T~Y{{8tuz1aQ&=nx8-Qsx(i00000 LNkvXXu0mjfbNJkc literal 0 HcmV?d00001 diff --git a/episode-13/textures/chest_front.png b/episode-13/textures/chest_front.png new file mode 100644 index 0000000000000000000000000000000000000000..5bb4289d0802fbb3103f029cc766945d017b4f7b GIT binary patch literal 1079 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 FV1n+_(V+kU literal 0 HcmV?d00001 diff --git a/episode-13/textures/clay.png b/episode-13/textures/clay.png new file mode 100644 index 0000000000000000000000000000000000000000..3670a86755e585cbc5f3d9a9f6e35c76dc2b884f GIT binary patch literal 1203 zcmV;k1WfyhP)EX>4Tx04R}tkv&MmKpe$iQ>9WW4i+imkfAzR5EXIMDionYs1;guFuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~_a1le0HIN3n$;;BvB z;Ji;9Wo204LKlt6PRh$_2k|If<`^9lShJny7(5ySo_p#$NPk`VvaHY5X8x3Iklk|F9 ziyr}f+rY(jTT}Lc%N-#0WXPuMNh;#z$LRx*rLNL9z`-Ff zQljiNpLh3k_V(|YR)0TQ1#+Eku*4()000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rg2MQJ+5^;#U@c;k-8FWQhbVF}#ZDnqB07G(RVRU6= zAa`kWXdp*PO;A^X4i^9b0*pySK~y-)CDXfd+%_0M;e#Il!RyM>T8d|rNNMw$snX}| zTso0QW9!Z(2!gnzPWx*K3vc7Y5 z^Cy0rK^GE{eNTkl^Xbzi)>z)=XL5}==P0F+b4J1zpjb*$ygq$p^?{rcC1v)q0&qUh zSlx0u{Xx?-bZ$h6qHibUFdaxGFpeX&RHnnowrw=7;dpgK8%^FJ#D&MF?6V`O7Vz9;%;+eDVx4in R@D%_6002ovPDHLkV1f=1CaVAd literal 0 HcmV?d00001 diff --git a/episode-13/textures/coal_ore.png b/episode-13/textures/coal_ore.png new file mode 100644 index 0000000000000000000000000000000000000000..c60f980d40caed86794bc7d64758dc5f92a5d125 GIT binary patch literal 928 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 literal 0 HcmV?d00001 diff --git a/episode-13/textures/crafting_table_z.png b/episode-13/textures/crafting_table_z.png new file mode 100644 index 0000000000000000000000000000000000000000..31de683d4617c4c064c1af45005a6ba6003b4879 GIT binary patch literal 1205 zcmV;m1WNmfP)EX>4Tx04R}tkv&MmKpe$iQ>9WW4i*t{$WWauh)QwPDionYs1;guFuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~_a1le0HIN3n$;>4zH zaNZ}5va+lapA(OnbV1@rt}7nDaW1(m@XV;0&CC%;iN#U}D;>Ej=A{Svtpa#g^{ zF^>&skX=9cAN=mtDo###Ns%Pb{o*(uBS2^uXx1I)``B@sCqVESxYFDHjRr9NNqW7l z#g2f!ZQ$a%ttorJh;#z$LRx*rLNL9z`-Ff zTB7VVpLh3k_V(|YR)0UF=W@H&5}cg?000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rg2MQMk4~R??2LJ#78FWQhbVF}#ZDnqB07G(RVRU6= zAa`kWXdp*PO;A^X4i^9b0**;UK~y-)Rgzsu6j2z4pWRj+#~CY~p%S++!X+?M38C^L zF~XlNg1ssV47`diObQBus35x#BZ%m-AP5to2ve#HlUz#*{Mpc56^bp}oGGeVr(L%h zyBK!X{jSc(Ip;a=`<>UbO_A1abT+cSdhbur9o)yG;VCTJ=45Lvmj>Q*>wH_zxl@-P z;|1_5Dyk$Cj_RnAO!wI)y86bkY#V^CzHz$R>q#b)#B_~hGU-CRnT3`xsH#+W_jVR7 zVbI&z%#4}l<6n!r7mwjrQ~<(J9YGLWfDd5c)f51q8>*oQmVy0bnJGO2l5C{;7L;#pxSjt*xIk21H;k^JHJ$(&P%%{Gl zjFMuJl46m@x(eDF0-QUs--TE2D$4?5x<<+$bR~N6p-M9Lnoa6o8ZBXGrB5(^yyGT96Bb>ashDRb^|?k9xyfkEepu_kIygC($Pdr*PLH@J%=DVImlF{=%KZ>m65*f%zgUd z0AjjEII2^tIw~?j5{e2a@a3UOvTG~9yp)b$ZEln^7b4*=q&I7BpD95Qi0K-tBqIm{ z$B#Js&qo*VdA%NnLbCuAiZTk!oVwDwd+TAzJC1T$V{97DFUayD$@yH1` T5WR2T00000NkvXXu0mjf^IaC@ literal 0 HcmV?d00001 diff --git a/episode-13/textures/crops.png b/episode-13/textures/crops.png new file mode 100644 index 0000000000000000000000000000000000000000..9a530f084ef05b162a646a7a35684aad805d040f GIT binary patch literal 1167 zcmV;A1aSL_P)EX>4Tx04R}tkv&MmKpe$iQ>9WW4i*t{$WWauh)QwPDionYs1;guFuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~_a1le0HIN3n$;>4zH zaNZ}5va+lapA(OnbV1@rt}7nDaW1(m@XV;0&CC%;iN#U}D;>Ej=A{Svtpa#g^{ zF^>&skX=9cAN=mtDo###Ns%Pb{o*(uBS2^uXx1I)``B@sCqVESxYFDHjRr9NNqW7l z#g2f!ZQ$a%ttorJh;#z$LRx*rLNL9z`-Ff zTB7VVpLh3k_V(|YR)0UF=W@H&5}cg?000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rg2MQMq0hJrpiU0rr8FWQhbVF}#ZDnqB07G(RVRU6= zAa`kWXdp*PO;A^X4i^9b0%%D@K~y-)jgd=hQ&AL!zjJPK(fQU>DK2 zi?|R3pf_Pt%!B1fB6A_eGc^FtU9E6_3ias=LiP(>E@^_e6G zAf&rAEsyn;7yvuj2+4V$BXg@gB!;^=+>c-zF6j}2{JH@^wHPMWud}%kqq|GvclVAd z*j%-IfpFAj``a-`WsO3vi3~t$EDV5U3aSMQEX>4Tx04R}tkv&MmKpe$iQ>9WW4i*t{$WWauh)QwPDionYs1;guFuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~_a1le0HIN3n$;>4zH zaNZ}5va+lapA(OnbV1@rt}7nDaW1(m@XV;0&CC%;iN#U}D;>Ej=A{Svtpa#g^{ zF^>&skX=9cAN=mtDo###Ns%Pb{o*(uBS2^uXx1I)``B@sCqVESxYFDHjRr9NNqW7l z#g2f!ZQ$a%ttorJh;#z$LRx*rLNL9z`-Ff zTB7VVpLh3k_V(|YR)0UF=W@H&5}cg?000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rg2MQKCGNKhs-T(jq8FWQhbVF}#ZDnqB07G(RVRU6= zAa`kWXdp*PO;A^X4i^9b0^&(TK~y-)J<`i=<75Da;rBn!dy4&)xM)LVigw~R~dCoE~ z37n>`Yc8%6(q&1v<>MK_{>g+eaI`{8J5=aaXpsVr{+pwf#`x&7kW5xVlM+lY%dH z+f3seZH>e;iqUvMC-UgFd;tDBzUOE(Wvdt9dz#bB1#wdF+4dTN)BOHs!b7q`zq^Q^ zjO%NbkvQv`nFa|a32?}Ru!{F z0YF*ScvcYwhIVLpKS_xf1uu4@CrXxA=>5|fz|#w5RZ~_qfztpSj^=nq@vP?@Zk;Jg~$Z$Fw}?M+x~T6VUYJftg*&tsgY@QlJUg7=e@yIICZgMihl;_UK)ss=s2 z&G7AGKwG^Aul6QbEgAM31P#sjHlx>e4Ev7(9gXI+Ld%Pth}Eh>{P@eCwGe_NTLG}y z@tHjoq|1`BstFs0vZ@*1Bskw-v>;uU+)Ohz)*brbY=%~n&CVlb?_`RSf)BKVvl&VX zw34g^k4Xaz`wgs-=no5fCsVAJeEG72F^bm*x5SGjpKiB^nubMIqNL#4ueSiWxK8-z zY=-#$=ht;v)pQ~c=P9OfPP#0~@`^MoIK5i1I}8b%2Incpw;57Ef88f=8od@+>Z<1I zCS{qI47!diuP|EBZ27$WxW(N(XLPjypcPttE4jE%ct}_1KlX13oM!iV$bDRJIGPhU z&9L9Vvx>vBIm@D?*Y*gU=5RDeNx>(>5Gmk)l>tMW+;QSI00000NkvXXu0mjf2+dvD literal 0 HcmV?d00001 diff --git a/episode-13/textures/dead_bush.png b/episode-13/textures/dead_bush.png new file mode 100644 index 0000000000000000000000000000000000000000..ca793d4b0d0b2b96ecf57f1939630e9957c28763 GIT binary patch literal 739 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 literal 0 HcmV?d00001 diff --git a/episode-13/textures/dirt.png b/episode-13/textures/dirt.png new file mode 100644 index 0000000000000000000000000000000000000000..58d3fac4f98118350a63952cebf8885dbb3aaef6 GIT binary patch literal 1059 zcmV+;1l;?HP)EX>4Tx04R}tkv&MmKpe$iQ>7{u2RjsT2vVIah>AFB6^c+H)C#RSm|XfHG-*gu zTpR`0f`cE6RRL;k>@Q#C4j3NMZqtkRU=q6&onSMx0ii6botEPx$x;T)#vvg#t9I72Cnp$zfuRLKS{5( zwAc~Qw+&oew=`uBxZDAvPljyDt`wvx6bium8GTa@=)VPeR=wVu`#607GSpS-1~@nb zMv9cZ=JW2Z_TK(I)9mjDK>u=+__5Q400006VoOIv00000008+zyMF)x010qNS#tmY z4zmCN4zmH{a@Al{?7ma02y>eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{00H|+L_t(I%VmX=uU2 zSRo)nK?b{c+oAu4w_f%adD=mk)SEEc9y~2=AdELbO=8`&2qhls`;yN0^uEvgyzlqd zqg|Yzm7&N0h|>aq!1uUci;^7IHr4&*ct+rR)STVMu+`XNG?`;GwgFg`B|jeb`26W3 zMq``6_h>%cVsW=r_tQ`?z7}W~=V#^Rc&1PW{VwucMUyK^asbt*ha%&r)gkabT-ziR znQD?!9LoT}u?$?>WYF&_i8??ty&@DDf$uSz%;~lF0Tl9RG6&!b9sr@pRIMJT1yPdY zSO%fUlu?pJ)x7VM4>WC)I4y8(lfd`T1K(3_$7#V%=R`FO`dtS7u9747Qc@@~>VWzU zAiNpTvJB$1;Bq{}u?(UlSDGc5{G@jD{K;@}w}|{h zz%&%-nzm-(ScWpCYMRtueJGhqcC|MzpAG?ZO;b@8w@Xfs57oe&9v|Y`rec}j{)T6- z`FcHF$0!j(k*PRkguCrms$ONcxOz{N-x77Fb3*TCw2{4Q do9bSI{smh*G@tr71Y7_B002ovPDHLkV1hGs+;so| literal 0 HcmV?d00001 diff --git a/episode-13/textures/fire.png b/episode-13/textures/fire.png new file mode 100644 index 0000000000000000000000000000000000000000..ae4a5b91ee10a40d06e3d79ac2b9483513e87d88 GIT binary patch literal 666 zcmV;L0%iS)P)EX>4Tx04R}tkv&MmKpe$iQ>7vm!4?s5$WWauh>AFB6^c+H)C#RSm|XfHG-*gu zTpR`0f`cE6RRL;k>@Q#C4iONMZqtkRU=q6&onSMx0ii6botEPx$x;UB5&wg#t9I72Cnp$zfuRLKS{5( zwAc~QyA51iw=`uBxZD8-o($QPT`5RYC=`JAGy0|+5V-}qSH0ev`#607GSpS-1~@nb zMv9cZ=JW2Z_TK(I)9mjDL(X!P#jJ+&00006VoOIv0RI600RN!9r;`8x010qNS#tmY z3ljhU3ljkVnw%H_000McNlirueSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{0044HL_t(I%e7KL4!|G?EByb@-3h}8)g?GDhJsK_jQ}w@ zwL!!gC%~?b0DV^!xB;eyt_HOzP}^6>BP=J-JqirPr0#(4-B$h*Wk$8?EnA(07*qoM6N<$g05i~ A{{R30 literal 0 HcmV?d00001 diff --git a/episode-13/textures/furnace_front.png b/episode-13/textures/furnace_front.png new file mode 100644 index 0000000000000000000000000000000000000000..8059c5affd5004fb841a899147e21a1295752d0d GIT binary patch literal 1238 zcmV;{1S$K8P)EX>4Tx04R}tkv&MmKpe$iQ>9WW4i*t{$WWauh)QwPDionYs1;guFuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~_a1le0HIN3n$;>4zH zaNZ}5va+lapA(OnbV1@rt}7nDaW1(m@XV;0&CC%;iN#U}D;>Ej=A{Svtpa#g^{ zF^>&skX=9cAN=mtDo###Ns%Pb{o*(uBS2^uXx1I)``B@sCqVESxYFDHjRr9NNqW7l z#g2f!ZQ$a%ttorJh;#z$LRx*rLNL9z`-Ff zTB7VVpLh3k_V(|YR)0UF=W@H&5}cg?000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rg2MQMr17Z$_=Kufz8FWQhbVF}#ZDnqB07G(RVRU6= zAa`kWXdp*PO;A^X4i^9b0W^Y&Myloh6gW08p#dn4h1= zG)<(G{QUgTZnsILQq=2pj83ORv)Lq<%hB)m$z(DVi$${8ERjfrbUMxV_ctpmE97!H zB9RE&+uMxCW0X=@mSv%o;_dB?rKKgb)|{Q4kw_%aTGQ!ta2$ubyE|4_S6N?QXKrqe zbUMxR^D|Z~7GrH~4aaeKe0-$UYEi4z_!|}$7Wn-9B%96Rx-LNwVDx%D-rwJG9EaD} zS8i@@_!p|xD#ypiG#U-Aude~HT-PNMi6DfS7A6u248y=QO_WlYrioz~_`Z*6n&k6& zMxzlI7Z+GkN`fGuUaupi+6eHEQas^O}4u{;|-&3hn2*Z%8tE>Mg5Cj3GQii>I0<|LI{Kqc%DbQ-KNoKVB0o-0LF+-t=+Dpw*UYD07*qoM6N<$f>IYd AG5`Po literal 0 HcmV?d00001 diff --git a/episode-13/textures/furnace_side.png b/episode-13/textures/furnace_side.png new file mode 100644 index 0000000000000000000000000000000000000000..18aaba2664fa82b790f48507395f6f7af40091b3 GIT binary patch literal 1190 zcmV;X1X=ruP)EX>4Tx04R}tkv&MmKpe$iQ>9WW4i*t{$WWauh)QwPDionYs1;guFuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~_a1le0HIN3n$;>4zH zaNZ}5va+lapA(OnbV1@rt}7nDaW1(m@XV;0&CC%;iN#U}D;>Ej=A{Svtpa#g^{ zF^>&skX=9cAN=mtDo###Ns%Pb{o*(uBS2^uXx1I)``B@sCqVESxYFDHjRr9NNqW7l z#g2f!ZQ$a%ttorJh;#z$LRx*rLNL9z`-Ff zTB7VVpLh3k_V(|YR)0UF=W@H&5}cg?000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rg2MQMr4TZL=-~a#s8FWQhbVF}#ZDnqB07G(RVRU6= zAa`kWXdp*PO;A^X4i^9b0)I(FK~y-)ZIew;>P#4hFZwx%MUkpOvaHny&i{$hv>SFQi|nr ziSPSVDiu7>Lkog{;c!T^*b3&W7nXoO{1SeC_P zGC|X{ZPP9$)5q9MJ3aa2$tLtHpY~X1QE4o6QKr5a0JP41-py#rO9& z#_8!P4-XG?IvsLdUteRICIIvKoZa1Bq?F_j4&dqO3Bxcp1mp3T@p#O?6ow&=<7~&1 z$%Im=#CSX=2!c%k%d&{$cxzfL7L-aQgb-w)bP16AQ3nv0Y>`+ths{jB107*qoM6N<$ EfEX>4Tx04R}tkv&MmKpe$iQ>9WW4i*t{$WWauh)QwPDionYs1;guFuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~_a1le0HIN3n$;>4zH zaNZ}5va+lapA(OnbV1@rt}7nDaW1(m@XV;0&CC%;iN#U}D;>Ej=A{Svtpa#g^{ zF^>&skX=9cAN=mtDo###Ns%Pb{o*(uBS2^uXx1I)``B@sCqVESxYFDHjRr9NNqW7l z#g2f!ZQ$a%ttorJh;#z$LRx*rLNL9z`-Ff zTB7VVpLh3k_V(|YR)0UF=W@H&5}cg?000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rg2MQMqFGS_Rm;g^E_8mlb`NNNLC94Lu8F;OPo zffseI%z+~(PBccuCJ-eQ70XXS`rkd+(X)4QW@lZ(dh+Jl?RJ(V2>@xDk|YUPmXW3@ z0ISuCTCGNsBqT|K@B4&dh_36zaZCZ={QMl(brC`^91bZKi~?fubm!o}Lnh zA!(W-6$%B?G-WUtu(Pwn+1VMLPKO`}*xcMC3`6SmIu8#I*tX63`a0!u8N)CLf`Edm zsx+HTWLai5o3UE0s8lL=o=3mmN7FP+)8ydbfGo@C^?F26gb;!#ijX|d!*LvBSw@y+ zK0iN^B_MN!D*asc?gk8Rsbr&IR!_UQNf zEEWsOJt0XFaU7%TI_l z8jXnKm?(+>D3{9&heN_JB#vVylL-L#_xC@H(l=wNR01Ff0`mDh@9*!dRx5-M0NA#T zs;cbo?*sfW7QPuB$KlT{77I2uHt6+w_`XlO-NyHQ#^W)?Vv(z>tKTPnGj45dVObVI z5Fmu$@$r#fuSd07<>KOk@p#O9K1T>a5CpVZEv~PxDaf*ns;W4SgX_9~#bg);-EJ4p j^Zqj?UDwI|-<*E|lVge5sY;m_00000NkvXXu0mjf+-53? literal 0 HcmV?d00001 diff --git a/episode-13/textures/glass.png b/episode-13/textures/glass.png new file mode 100644 index 0000000000000000000000000000000000000000..64cb447f5cabe6b34eacdb7865576e0adf938513 GIT binary patch literal 728 zcmV;}0w?{6P)EX>4Tx04R}tkv&MmKpe$iQ>9WW4i*t{$WWauh)QwPDionYs1;guFuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~_a1le0HIN3n$;>4zH zaNZ}5va+lapA(OnbV1@rt}7nDaW1(m@XV;0&CC%;iN#U}D;>Ej=A{Svtpa#g^{ zF^>&skX=9cAN=mtDo###Ns%Pb{o*(uBS2^uXx1I)``B@sCqVESxYFDHjRr9NNqW7l z#g2f!ZQ$a%ttorJh;#z$LRx*rLNL9z`-Ff zTB7VVpLh3k_V(|YR)0UF=W@H&5}cg?000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rg2MQK9HW1eKiU0rr8FWQhbVF}#ZDnqB07G(RVRU6= zAa`kWXdp*PO;A^X4i^9b0I^9#K~y-)rBcBS!ypW_PyKa{emX@L=(Je?F+@I59+@FR z{OmpwOMoCD=}Aa7z7yvYEFwxf0C3u$!AByP5CEq&0QNEO%d;*sQTk$9yU^!^MMTZI zx#)olqU$nmE1ZeTTwDl;q6j0nj4%h;Ln&DFASdT+5*LU(lPj3yshAPe?9^K78DEDTm+pi)~NqYrG%ig_@_4de)o(0000< KMNUMnLSTXry*DNR literal 0 HcmV?d00001 diff --git a/episode-13/textures/gold_block.png b/episode-13/textures/gold_block.png new file mode 100644 index 0000000000000000000000000000000000000000..c6c257748db5a193d122fbe97d5bd45d77dbcb77 GIT binary patch literal 1049 zcmV+!1m^pRP)EX>4Tx04R}tkv&MmKpe$iQ>9WW4i*t{$WWauh)QwPDionYs1;guFuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~_a1le0HIN3n$;>4zH zaNZ}5va+lapA(OnbV1@rt}7nDaW1(m@XV;0&CC%;iN#U}D;>Ej=A{Svtpa#g^{ zF^>&skX=9cAN=mtDo###Ns%Pb{o*(uBS2^uXx1I)``B@sCqVESxYFDHjRr9NNqW7l z#g2f!ZQ$a%ttorJh;#z$LRx*rLNL9z`-Ff zTB7VVpLh3k_V(|YR)0UF=W@H&5}cg?000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rg2MQMgBtV=mLjV8(8FWQhbVF}#ZDnqB07G(RVRU6= zAa`kWXdp*PO;A^X4i^9b0rE*iK~y-)Ws|{<97PaBUu4ycn_VPd5Euywi3?o#1iqQy z@dp4FvV@J-J2Tx~6~Uorxi~LXN@b-YUq|7-0`<)UFCk$1FM^H+ zDdbQ!P&P6*CM)p@b)i@BMM#sX0v9nv0k6P@6#A(F3(=KMfcy>m4(AW>MzsP@NJj`% zB#?w8V1PpH6&;zVk^D)0{&YxKPWNF9m>|*woFO4GM@P}8Cesj$TFwA?45~Gdfq_)) z>`rBEbI>JITJFf!!~Zi$3H5=+8X`R zsEhDzW4~==+v#M1oI&lV_DUXp044_??q?_h4t>6+FN3G^dpew<9u8=yUmyc9iF{{p zn5VL%7fJI*ZYzFX>CiwY2%y}R7|D=%U#F1*`;~dQFt0bVt#}>uvZ;iQHllx-ObDnNiZ~=0JjvJ?&mYlxr8A*I0kY|^B7dSXkJSx< z1U~*kIm8pMD_n1kbt7XUhq({*&)eT}xC(HHk9&*poQR_J#^V^&z0SjUn2hirk=99^ T3#U3Z00000NkvXXu0mjfr{Bx* literal 0 HcmV?d00001 diff --git a/episode-13/textures/gold_ore.png b/episode-13/textures/gold_ore.png new file mode 100644 index 0000000000000000000000000000000000000000..d5221fe3c5a89b4ebc0f4f32b14e8c51bde308b9 GIT binary patch literal 1008 zcmVEX>4Tx04R}tkv&MmKpe$iQ>9WW4i+imkfAzR5EXIMDionYs1;guFuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~_a1le0HIN3n$;;BvB z;Ji;9Wo204LKlt6PRh$_2k|If<`^9lShJny7(5ySo_p#$NPk`VvaHY5X8x3Iklk|F9 ziyr}f+rY(jTT}Lc%N-#0WXPuMNh;#z$LRx*rLNL9z`-Ff zQljiNpLh3k_V(|YR)0TQ1#+Eku*4()000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rg2MQJ&1mQ5uqyPW_8FWQhbVF}#ZDnqB07G(RVRU6= zAa`kWXdp*PO;A^X4i^9b0m(^3K~y-)g_A#P8$l4oe$*) zX&jtRA0bU3g&G?n47U&yIk<5M$W5Aj16OgEkixwRgSk{zv5>2@g%)Ipq!h}oPk%zD zn_=heoA+iaS(YuFbCg2}fs_(}JkLqf6l*Qp-bL#T>k-E>08&b%l;nAiQVIa)+!CND zihzFHyQcfT832+b!5D)O0)Vr#SIou(-hF(65Q0jUWeX`K*4ofi6a`8tv~F>Gen5ZN z-k|T92LJ$L4F8HGNj7SEo)bCeaLyrw2sE|Uz*qM7zaxa8C<;2APN)G)CKHrWL>}2% z8yaWhJphh&Zs-r&D5aQ<_xSzeh9r5t!l066*}@mL&FO#hZj|Q-mM&=BVm2P|w)cQE zO;=R+tWHmVZUwJwTO=PRC(pS(KM48ZC21Yil<+8p=|lR zX0xf|IA%JXQmt0G_;#Q9d>-;fqd~o1$68Cb`-sQCK5#XCO08C7G#U{pr8dMX=UTUb zmw(+E5IuXy8$NS*xrJVdnm@y#jQ!a}hM~;`-(LuZ`;s<*O7zEH`o8^E6F2 e#9BXR5BvwuH|ULHam)$;0000Ho98? literal 0 HcmV?d00001 diff --git a/episode-13/textures/grass.png b/episode-13/textures/grass.png new file mode 100644 index 0000000000000000000000000000000000000000..89ffa14d525908f4060cc263e101e865a9833485 GIT binary patch literal 1349 zcmV-L1-kl)P)EX>4Tx04R}tkv&MmKpe$iQ>7{u2RjsT2vVIah>AFB6^c+H)C#RSm|XfHG-*gu zTpR`0f`cE6RRL;k>@Q#C4j3NMZqtkRU=q6&onSMx0ii6botEPx$x;T)#vvg#t9I72Cnp$zfuRLKS{5( zwAc~Qw+&oew=`uBxZDAvPljyDt`wvx6bium8GTa@=)VPeR=wVu`#607GSpS-1~@nb zMv9cZ=JW2Z_TK(I)9mjDK>u=+__5Q400006VoOIv00000008+zyMF)x010qNS#tmY z4zmCN4zmH{a@eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{00SLKL_t(I%SDpiZrfx4h97^iz1YR6lhjR<=BL~GGpe#q zU6HmS#59DEkPrt*TnQ(f?JBquPPhRysc5AqlvZt%CWWMR$d5lKaqQUUU{X1Fk6!6{ z^+>Ps<1gQ&LI~nGMoI~QVHk`?BP`3JP$&=t0lx1O$1y?(f*@cx98#;*P!&aCI-OFt z*2tMzgb-W~Iv9q*bUH;!$>HOt#KsC8|CYgEz|ztZx~`KX3F_K|0;{!E=JPr4&fcSG z8rf|2KB}tHk3EXQVzXH158uaiT@1tE<&)mX&RPg5r!ezY?hmwn-2@B zimIxZrip2q1VO-Ju^^MlFdPmMdwY8%Nx~=99s2z~TPqD3xiXHr%xAlw^3~xNc%Fxp zl8UjywzGkhk}wRhZ5!pMU%yM!G^N#Q@nYwIllCc&!!oTT8(S3i)oq+heMJip*M0-6on{?c(HSUV-*N9F4d12cOgH z^>7@A^Ye2QMd9e;gxPFHE|(*-^L63v!*ZQwuT9akA)Dds`U1l+@WKg$=@`>A8I4Bx zzE2p2EEWr*C_+_L#OwW6w8sAsMG=>S4nhbl%R)-Ycs%C#_?R?JNs`^sU0t!YwMDz#<~BcMro}XSO$==UBLFEX>4Tx04R}tkv&MmKpe$iQ>7{u2RjsT2vVIah>AFB6^c+H)C#RSm|XfHG-*gu zTpR`0f`cE6RRL;k>@Q#C4j3NMZqtkRU=q6&onSMx0ii6botEPx$x;T)#vvg#t9I72Cnp$zfuRLKS{5( zwAc~Qw+&oew=`uBxZDAvPljyDt`wvx6bium8GTa@=)VPeR=wVu`#607GSpS-1~@nb zMv9cZ=JW2Z_TK(I)9mjDK>u=+__5Q400006VoOIv00000008+zyMF)x010qNS#tmY z4zmCN4zmH{a@eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{00LM^L_t(I%Waa+Pt#x+$3J}`xXA`hMRD7#2u8 z5J;8~6M`Y(;=vp7?7;&UZ~Otqs0S|^B;jxKfd4R`zouS784-^aU64ed<;M~nQ2 zfV3E3WOAOozlo_AsMdC|43&Pz52wrYXCw~sFX`shDz9uSe~6AP7=0lm*v@s)V?@L2-+ub>pqRI+lcNBw%f#Zn^ejr zHnw(B>tw#0U2F3rbuU19_HZVtdqL{GJkI#2mJazJq!a=4e4J`+7sn5=-DWzh?gdoJ zrSxx9%B7T*F#lO5i=EX>4Tx04R}tkv&MmKpe$iQ>9WW4i+imkfAzR5EXIMDionYs1;guFuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~_a1le0HIN3n$;;BvB z;Ji;9Wo204LKlt6PRh$_2k|If<`^9lShJny7(5ySo_p#$NPk`VvaHY5X8x3Iklk|F9 ziyr}f+rY(jTT}Lc%N-#0WXPuMNh;#z$LRx*rLNL9z`-Ff zQljiNpLh3k_V(|YR)0TQ1#+Eku*4()000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rg2MQJ%7krhxI{*Lx8FWQhbVF}#ZDnqB07G(RVRU6= zAa`kWXdp*PO;A^X4i^9b187M^K~y-)1;NWt+6Mr@@h?B9h!3EOJVgDWJRI1XYOQZO zYiiSMX|_X?HR*MKh{qjv-(iXPP?7Sxj6!X4^(A!JYFviphbQI1OY{*Tp^zQ#K}qs zrJ_NvXd)bza5x6Z7!7Q$u98S4(3#BG98PQwC;OZ4Nape+a~Tw*BroC^tqytx2W@g#fAbdr$Qn#e-6emOLx`P65cN9JzV|Hu@f)J;Gj@-U zD3wb9w5XIMV`uDp_izs1LKMw(8jKWc0)^5wg3~#KLD$VmB*Vk`MPip%Jb3U3^$i8m zg+##Xp;|0sF{y)L3^R`UAoYl?LNv%Z_=b`4aj$SvLGrC2<{?92qayKcs(#@X9*)7!1*&v$Pr z<*#w|nW)HQ)G7_MttviUCXh8X0|J7gSxNf3z>AkJ0r-7+8L`KVy1gCO&}|%dMsc6| z2?Zlqdn{P(1JsH|^sP$LxjYK9(M+{iVt9U@TCIWpJV5X~!r;g#9j0D>{^>_;rrV_y~qS5{pI|vJG;X&2Zv< zPoG7kN`rJR$@KksV!HG!jZf36=|sA?pjE9VdLCwMdYYXB zHl2kfNJP{{Xs4z9Rz?t8NtKWu3+05a=A+rmMgadvS79Ue9 z=2`t`3%yQFrKCVE8ud$B?M+Ogg?hD$s-+44sh^h44h(t|3Wb30=oqozLN=A+z;nps z*%|bf0k+oGk^S)fca3ONBAu^b>QWPv64-}ta~V6w=kxLO*>eiHJkc{B9UWStQHi7! zqfOI}pj09Jy|sZxrz0K>(bZ|dZntrI=phgYGBz^GuP=TEX>4Tx04R}tkv&MmKpe$iQ>9WW4i*t{$WWauh)QwPDionYs1;guFuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~_a1le0HIN3n$;>4zH zaNZ}5va+lapA(OnbV1@rt}7nDaW1(m@XV;0&CC%;iN#U}D;>Ej=A{Svtpa#g^{ zF^>&skX=9cAN=mtDo###Ns%Pb{o*(uBS2^uXx1I)``B@sCqVESxYFDHjRr9NNqW7l z#g2f!ZQ$a%ttorJh;#z$LRx*rLNL9z`-Ff zTB7VVpLh3k_V(|YR)0UF=W@H&5}cg?000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rg2MQKC8{ntZvH$=88FWQhbVF}#ZDnqB07G(RVRU6= zAa`kWXdp*PO;A^X4i^9b0tiV&K~y-)MUz>Q8#fR{UoAi{)JUUH*a{y*NAUg6G9i;q z_J++L7*gMbNL0Sel3)M+(?o<)8US%r%#~x!hzMa+0M=VZO&BKwVBZS0G~A=2Cd`8& zBIL7DYsFk?t+7A)!w?lwc-&6Z6?Y{>#XT6Juq_D@VVE6Jg<8qEFZJ zGhx4Ha<0s80du&09G$^-&o7T*Ft#Oi<*0~s4(pN#gAt7jXajWB3EFG(0LE zl~%z_I zE8CJ#6U+orIJZJNE91pz74}D>wT7p?q9%l>#L>C`K0t(F>hR8^5TX%B2YTEVgz0VQ z0zG#qxfkgD=S0c%mHYG-x|Q3ByJA78rE&W>I>dEJs6u?k_uq*qgu!U7@woQ6h=BHZ z0fx`sxCeQ`LWD2x5jA1?eb7o{{Nf$h=dFDIIlWR?Z@J&Xb5*q-XHJD_c5<%l_slRm z76fx;TlxlZGQRya^jml;w%P||;M2zZwO967Gl|+uq`kR0HT?E*;6WHKfto9iYr@0l pQHiiEsW)|0RFx;Q@e&wj_#fc^DknO6a_ay9002ovPDHLkV1f_f<$(YI literal 0 HcmV?d00001 diff --git a/episode-13/textures/grey_cloth.png b/episode-13/textures/grey_cloth.png new file mode 100644 index 0000000000000000000000000000000000000000..4dc157726815c38f7c2fe287fae12bdf16f1138c GIT binary patch literal 1055 zcmV+)1mOFLP)EX>4Tx04R}tkv&MmKpe$iQ>9WW4i*t{$WWauh)QwPDionYs1;guFuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~_a1le0HIN3n$;>4zH zaNZ}5va+lapA(OnbV1@rt}7nDaW1(m@XV;0&CC%;iN#U}D;>Ej=A{Svtpa#g^{ zF^>&skX=9cAN=mtDo###Ns%Pb{o*(uBS2^uXx1I)``B@sCqVESxYFDHjRr9NNqW7l z#g2f!ZQ$a%ttorJh;#z$LRx*rLNL9z`-Ff zTB7VVpLh3k_V(|YR)0UF=W@H&5}cg?000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rg2MQMf7)0Ix2LJ#78FWQhbVF}#ZDnqB07G(RVRU6= zAa`kWXdp*PO;A^X4i^9b0r*KoK~y-)Rg+t8>o5#Nk0?r(V;3n}WHsIYcIqIp9Y6HA zAHEivZ;I66%+UP&{1g!(#)ydEy+>7<=NS>fIfsbwd_EBoLI?mX%R_1>3mF~%@W6Cy&}wxpD>){;`9ZCgZyoHGDj*8#Ba z`#}(6B*sVxp$;mgpsIurn5GG9?HhWGk&llLVvMLU25T+zJmbBmX&L|?j|VwtLI_xE zdA(l580q^SRb?24gWxQ9?{UsCO%vO;;k~cu<2VvRz&Ten5D`=r{rvoV6VH2(_nuM; z#u!wU>-AdEzrVi$*tU(75;~3}Ky{&%Le3fI96%K}gn+8DEDHdtdQhA@-|u%+m9}lk zIoC!J!5G7`ENt7x<#HjV#Ow7s2CeH_Q9}p}!+?m;G!3fCx~?=$Q(ZX4?)(05t8H5V za?X@exZQ5V7|A)4bEfM$N-2!vh_x0GA*IAH498k$M9)>8&nEyO1Vn^sngHr5f9wCr zwKj?f*XtE)E%*EV&G++GZns+v)HF?ph&ku#LX44p-w7d*QeqrOx~{9L&+`m`_nxn> zFVs0lDTQTONGa7uV+>8x(Dyz2zQ5UbCNt-Z{{H@=s`W_z9@QD~loHN4RJCeyxm+;D Z@DH|_F1Lcb_Ba3l002ovPDHLkV1m>p*`WXc literal 0 HcmV?d00001 diff --git a/episode-13/textures/ice.png b/episode-13/textures/ice.png new file mode 100644 index 0000000000000000000000000000000000000000..d17fe06e2e760daddafc814f08fe497150bf1826 GIT binary patch literal 676 zcmV;V0$crwP)EX>4Tx04R}tkv&MmKpe$iQ>9WW4i*t{$WWauh)QwPDionYs1;guFuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~_a1le0HIN3n$;>4zH zaNZ}5va+lapA(OnbV1@rt}7nDaW1(m@XV;0&CC%;iN#U}D;>Ej=A{Svtpa#g^{ zF^>&skX=9cAN=mtDo###Ns%Pb{o*(uBS2^uXx1I)``B@sCqVESxYFDHjRr9NNqW7l z#g2f!ZQ$a%ttorJh;#z$LRx*rLNL9z`-Ff zTB7VVpLh3k_V(|YR)0UF=W@H&5}cg?000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rg2MQMg0+Nxcz5oCK8FWQhbVF}#ZDnqB07G(RVRU6= zAa`kWXdp*PO;A^X4i^9b0DVbBK~y-)rINuBfG`LI@ruyS(u$UlE_`ce+JwGTWFWwV zFWk+sFwEPvQb(cHoW`U(*3uFoO4~|=C~a#F)LA#+&M@BP4b7YY0000< KMNUMnLSTY|f+3Lr literal 0 HcmV?d00001 diff --git a/episode-13/textures/indigo_cloth.png b/episode-13/textures/indigo_cloth.png new file mode 100644 index 0000000000000000000000000000000000000000..59c1ae01f00f9a325bdc1be06281a392d64d8360 GIT binary patch literal 1112 zcmV-e1gHCnP)EX>4Tx04R}tkv&MmKpe$iQ>9WW4i*t{$WWauh)QwPDionYs1;guFuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~_a1le0HIN3n$;>4zH zaNZ}5va+lapA(OnbV1@rt}7nDaW1(m@XV;0&CC%;iN#U}D;>Ej=A{Svtpa#g^{ zF^>&skX=9cAN=mtDo###Ns%Pb{o*(uBS2^uXx1I)``B@sCqVESxYFDHjRr9NNqW7l z#g2f!ZQ$a%ttorJh;#z$LRx*rLNL9z`-Ff zTB7VVpLh3k_V(|YR)0UF=W@H&5}cg?000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rg2MQMfB7)M{wEzGB8FWQhbVF}#ZDnqB07G(RVRU6= zAa`kWXdp*PO;A^X4i^9b0x?NMK~y-)J(F8*BR3F5Pd&(f$o6P3K#&BphO8s|UxqQr zNV3dsvH8dc1^Q|-Z8*qBqtwP69W&u$I{+{h*4g>k4ot=wAUz7DHol)Ga%;G$(7TXwA(}D;1K^S} z*X`gG2b0h3Ah*Wb9C1_L?>n`2{Nr&@YiA0^6pfGVV9S*`D6=c=+3XaJ$&5?N%&sU9 zgW-R?%wOa#{kV^e=cOf{3u^!d@CLlT%ygo}W3`b3sIy%vdJl z{kmf+EWwDbY)55rWqk_Ww#*cabBLqCX$b(-+G!1beqYJ0QER97&g&BBy>m$!H^pt_ z3mxP zZc1$(5#jIi`W5l(cHmPmdhfig5fdS|MlOw03>0fzw}ZFY32vAPw{19>C+E+%8IL|3 zq(`B)&N>guDq|DRYvfTYX&>VY&*e*dp|pnoy6?CuuS*~wja$mND(mc+48__;Qr-27 e$;<4BIR68*fH6^t$4QF-0000EX>4Tx04R}tkv&MmKpe$iQ>9WW4i*t{$WWauh)QwPDionYs1;guFuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~_a1le0HIN3n$;>4zH zaNZ}5va+lapA(OnbV1@rt}7nDaW1(m@XV;0&CC%;iN#U}D;>Ej=A{Svtpa#g^{ zF^>&skX=9cAN=mtDo###Ns%Pb{o*(uBS2^uXx1I)``B@sCqVESxYFDHjRr9NNqW7l z#g2f!ZQ$a%ttorJh;#z$LRx*rLNL9z`-Ff zTB7VVpLh3k_V(|YR)0UF=W@H&5}cg?000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rg2MQMgEKWzKaR2}S8FWQhbVF}#ZDnqB07G(RVRU6= zAa`kWXdp*PO;A^X4i^9b0XRuSK~y-)rISIf@-Pg9KQ{>yY6}tq4#EA`oC1k+K+}*$ zBz}uuRE^+YJl^aaC-#iTk@NYiAp}GO=N!&CthI;;s>%x@g7+Q~sm^TIb(~Ho0Gg)3 z7*jo-riuUIdc9&(N|aInD5daxKKTvoFbu>P=OR_o+A5x=300l%dhfA)-?Q88D5cEQ zo2IGsKOPSNR;yK2uyD?^#uw>-D$8I(o_WS+3Vaw^Klq$N*7@%$2e-ga+ zU(r`p?Co~@XyeO;7o!;CoGYbZj3I=8-EOxWk4H)=s4B*oszc717~@A5*6TG^RsSX- prNrfOc^jar&I`5tol7Yq!Vk>K$XB>j9oYZ?002ovPDHLkV1l}hf@J^z literal 0 HcmV?d00001 diff --git a/episode-13/textures/iron_door.png b/episode-13/textures/iron_door.png new file mode 100644 index 0000000000000000000000000000000000000000..e00dc8df6130a0dce64873d399bd2bbef16004e3 GIT binary patch literal 1022 zcmVEX>4Tx04R}tkv&MmKpe$iQ>9WW4i*t{$WWauh)QwPDionYs1;guFuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~_a1le0HIN3n$;>4zH zaNZ}5va+lapA(OnbV1@rt}7nDaW1(m@XV;0&CC%;iN#U}D;>Ej=A{Svtpa#g^{ zF^>&skX=9cAN=mtDo###Ns%Pb{o*(uBS2^uXx1I)``B@sCqVESxYFDHjRr9NNqW7l z#g2f!ZQ$a%ttorJh;#z$LRx*rLNL9z`-Ff zTB7VVpLh3k_V(|YR)0UF=W@H&5}cg?000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rg2MQMsEtU1y>i_@%8FWQhbVF}#ZDnqB07G(RVRU6= zAa`kWXdp*PO;A^X4i^9b0oO@HK~y-)ZIeM#B_R+*9|Z`82k;t(CvatixAGPq!9%#x zg@zY#;X=Qmzv-rdnuP5Z56jeoKR$^{%Z?%+ywU!V9F-DG$j}Z}CYqZu75v;X{ z2*#Lk_WM2V^z;-FK~-7Tl^7$&7+Pzis6$n$wT=d_udg_3E!J96N*H5UmIVM~3?T$^ z&Ib*aW#Q!Hgw`4WE~SKXj#3I&S67A&9v>ey=lmo7@bI8HXG$r^&CShsC+GMd&N)H| zKjJY)y!XTyk@NF&LI{*nek7{u7du8&of6yN2HWcRd&1Gcxfx5G5=)n-lMAIoN+NmoO2jsxVX4D5bOE*SwB8LxV*eP zh(A3&>3+XQM3By<*7~c6TOV|Y2;Ted6QQ5qMBI+PZO~eyl!CdtyVFh~#(1E*F@|}b zi7^iKbI#OSnWpL6iCqI#9XqeJVy>`fZlKR`1(cmId!U-g{j4_t)1K^E@9=vDT7v zW}au(b)}Sos^YyL6kQ*6``fIwBeAc!Qxg&1-`@u%`}X#BeRg)nvMi`7DJ7<9VwxsW sO6+z!N-3=CN^1@09L_mDKR*HZ0~{1Adb5oI7ytkO07*qoM6N<$g0|ww-T(jq literal 0 HcmV?d00001 diff --git a/episode-13/textures/iron_door_bottom_half.png b/episode-13/textures/iron_door_bottom_half.png new file mode 100644 index 0000000000000000000000000000000000000000..283d896591d54e5982fcea76f2ae3892bcb8162e GIT binary patch literal 1011 zcmVEX>4Tx04R}tkv&MmP!xqvQ>7vmL5qkuWT@g`K~%(1t5Adrp;l*{h@IUxHTPr^??j?oeK>Lg1d<+4hU7%idobO}DshQiya5gl zf#CvWulc;Yqjhfo-f7J52YnB6t3iyFQvd(}24YJ`L;(K){{a7>y{D4^000SaNLh0L z01FcU01FcV0GgZ_00007bV*G`2jvGA5*Gm=DL32z000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}0005XNkl8T zmdDEsKMg+kfp#Af2Sj&KRb803x3~WK`btWP%jJSG1`z>ZSr)#&zF3xp-aD-|dhaaD z!tHir+cwO{$48Gb(tAfl2q6H>;*=60gn7<6(|aez$hK`bV+_Wa`9h2l0Ambe{rvo( zs;DaGdE&jNwT7zVVvHQeK`CVdjqRKx#z-jzRh_`CHGn^W5CW=7@0}0=z4uvUj3MXD z<#M6-PALWNJ?pv>W5hX!tF@x4T}7-Oil z(puv<4n$;{`u+VqCEZKh_Z_$I`y9_`nDqWl;okKS0@hkY1m_&`{{B8`d+#3#y!UfD zAq1YDp0L)kuItQ=dwF@8vu>@?TBFuF+5Df6k;wBrNh#r;pPy%wh)nI)+PR%`voVB# zF@|MX{&FxPDED|;{zNI|55PHxF^1zfrip{Hh;W|g%*VJJKyKT%`B{d> h@udgISoini{0p2@qwX8Vosa+k002ovPDHLkV1gH1&F}yK literal 0 HcmV?d00001 diff --git a/episode-13/textures/iron_ore.png b/episode-13/textures/iron_ore.png new file mode 100644 index 0000000000000000000000000000000000000000..001beee9108a7dc0353afa34078ab2ce4ef3afd9 GIT binary patch literal 1007 zcmVEX>4Tx04R}tkv&MmKpe$iQ>9WW4i+imkfAzR5EXIMDionYs1;guFuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~_a1le0HIN3n$;;BvB z;Ji;9Wo204LKlt6PRh$_2k|If<`^9lShJny7(5ySo_p#$NPk`VvaHY5X8x3Iklk|F9 ziyr}f+rY(jTT}Lc%N-#0WXPuMNh;#z$LRx*rLNL9z`-Ff zQljiNpLh3k_V(|YR)0TQ1#+Eku*4()000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rg2MQJ%IM+mhVgLXD8FWQhbVF}#ZDnqB07G(RVRU6= zAa`kWXdp*PO;A^X4i^9b0mw;2K~y-)eUq_j8$l3;KVc!x*^6=k!Gc$iH0C1QD7C6o zaT`*pP97j{aCs0tLi(gPs$&RPtW!7#cfuzST9aEvg)OB}c6~aDOgGESzyJLIOe0B> zjkT6)2qB1~2mq}$aU5fe;ZR+(-cXM)3;~Fuh$xECS|gni{TCr4b~ zfs~SKeZ_D4XNQT_nnsc&8~0GR$wgU~-i_+~z*d7{ze6^g^W}R<9LGDVJ62zR-5&&R z99kq79|td(++;ogg+`aN`?eyzNK5Uhi`lhOAaA zTCEn7Tg!UA_IbD4rQL30jN#p@ko(1y)p3U)2uRbErj&9|ylOt|cX;w#vRpLDW^c! dqJGW}_%BPP`}G-s93ub#002ovPDHLkV1g=Uyl?;j literal 0 HcmV?d00001 diff --git a/episode-13/textures/jukebox.png b/episode-13/textures/jukebox.png new file mode 100644 index 0000000000000000000000000000000000000000..4f9dfca9e8d2b6cd8901297163e13a0097214654 GIT binary patch literal 1191 zcmV;Y1X%ltP)EX>4Tx04R}tkv&MmKpe$iQ>9WW4i*t{$WWauh)QwPDionYs1;guFuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~_a1le0HIN3n$;>4zH zaNZ}5va+lapA(OnbV1@rt}7nDaW1(m@XV;0&CC%;iN#U}D;>Ej=A{Svtpa#g^{ zF^>&skX=9cAN=mtDo###Ns%Pb{o*(uBS2^uXx1I)``B@sCqVESxYFDHjRr9NNqW7l z#g2f!ZQ$a%ttorJh;#z$LRx*rLNL9z`-Ff zTB7VVpLh3k_V(|YR)0UF=W@H&5}cg?000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rg2MQMu5pLU?vj6}98FWQhbVF}#ZDnqB07G(RVRU6= zAa`kWXdp*PO;A^X4i^9b0)R(SI(=xUVfH4N8b-MrC2EmX_X|}+#)kTVyK};h|HYw&$M*m!Jas~X!2q#xSYQgI- zmsm-_=HTQ9I;%K1`GH|XyVGacnWgIntlgTY>jvD&TeL5`EII|8T=FVQYr|NMky3Hf z&N3Rs+_bZ}gCSxX(eZquFreKVpe8ZhFhUN7#8P4-uq;au>M1*wJM0}_uwA}O-xN?~Pen}yOGjdPFZPgeNY?6AAF!Mmd~o>rFF|J-Ez;cY$~owB>NLGv=;RqZhg zr8zRTjb)T3mNLcI?hTNGA?@Da8YfrSui~+k7^Sg{!Tg(x z_uqe}*st<3#UcumaNvdkZQtXx*Qf1!^rt%IqV0RM`~Yt}#2pL)IPLXu!yx&_jBVrO z3LKyHsaMx&UIx6ZuBX@!PdYrUEOC6+=lSLuZ$CAuSJ!cJg+#SRY1A}M|NRQ%|8&vy zC2A6*raIAqur2b%Ji9v;8s{GMTA4TB&ZyVQsV@HXFRH6Fnl19he4+zm3~m?@g#q1A z0uU*Y>fp9BpX#75qeKVc2saEc#vnEyZJ1}Pi%h379h!yG8~|<@Tw6Q20@-Zl_pmAU zzjhE0?k}5CAt6KnS|r^qW6(k%j7bX{AyC?2TS<;KnqLT-jKYZ2-L(J!002ovPDHLk FV1fXeBQO8} literal 0 HcmV?d00001 diff --git a/episode-13/textures/jukebox_top.png b/episode-13/textures/jukebox_top.png new file mode 100644 index 0000000000000000000000000000000000000000..ceb81f2c8168b43d24e6098eb2f87cb3bbfa4191 GIT binary patch literal 1031 zcmV+i1o-=jP)EX>4Tx04R}tkv&MmKpe$iQ>9WW4i*t{$WWauh)QwPDionYs1;guFuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~_a1le0HIN3n$;>4zH zaNZ}5va+lapA(OnbV1@rt}7nDaW1(m@XV;0&CC%;iN#U}D;>Ej=A{Svtpa#g^{ zF^>&skX=9cAN=mtDo###Ns%Pb{o*(uBS2^uXx1I)``B@sCqVESxYFDHjRr9NNqW7l z#g2f!ZQ$a%ttorJh;#z$LRx*rLNL9z`-Ff zTB7VVpLh3k_V(|YR)0UF=W@H&5}cg?000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rg2MQMu8;%ZgtpET38FWQhbVF}#ZDnqB07G(RVRU6= zAa`kWXdp*PO;A^X4i^9b0pLkQK~y-)b&@-78!-@uKQ6gXNf0a>K~w}V^3EC3<`_9% z4v`Dw3@K7LP2fgWuzJwqa>;SQ)y9f!RwQQTpP7%p`t9- zE_yNnLP}ZA7hu;X znjGgGWqBNRe2QD0T6slK2SQNYAT9>K>^&h>obA7;Kxan@2Hw8`9MTi z?Y7KfPBER043>ifkG4K?7=2(pB7#v$k>?FJ){fw=2BG797htv9GB0cLJpD!<14?aB zAKzTdw64>hKvXI@UWBL=N@Nrhr3g{bS;~nLc>tPo-aUKZ`>p^0002ovPDHLkV1imZ B(EI=Z literal 0 HcmV?d00001 diff --git a/episode-13/textures/ladder.png b/episode-13/textures/ladder.png new file mode 100644 index 0000000000000000000000000000000000000000..3f0a787730fbac4f294c9c3d630c73404f191c52 GIT binary patch literal 996 zcmVEX>4Tx04R}tkv&MmKpe$iQ>9WW4i*t{$WWauh)QwPDionYs1;guFuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~_a1le0HIN3n$;>4zH zaNZ}5va+lapA(OnbV1@rt}7nDaW1(m@XV;0&CC%;iN#U}D;>Ej=A{Svtpa#g^{ zF^>&skX=9cAN=mtDo###Ns%Pb{o*(uBS2^uXx1I)``B@sCqVESxYFDHjRr9NNqW7l z#g2f!ZQ$a%ttorJh;#z$LRx*rLNL9z`-Ff zTB7VVpLh3k_V(|YR)0UF=W@H&5}cg?000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rg2MQMs1lLDEhX4Qo8FWQhbVF}#ZDnqB07G(RVRU6= zAa`kWXdp*PO;A^X4i^9b0li5?K~y-)jgwDn6G0eCXC#OBbZ zEvQA}T7;5bn`1AY{Q^1m`K$A?hI;OrZzrPg-#at!!!z)Ay?MPRik2w|S^K+N;#J|H%qaln(uM#izda|vHVZ%^Ist&L>$17i z>EO86eEM?5F*js!^%cgHPMeo5EVU z7dpar-W1QW(=rzs6xqyO;*)w(F+BfGF92NMqg>h$0S}%$n#0hp zIQVcrmchV_e(sj^Kr#TtcgN-U?At#X46~99tXzuuWbD5@P}RtI544Dec|Xd`R6=@i zvra@OaNO(h9;6pyR4Ed+YFZ=;C+{u}T S&*K{a0000EX>4Tx04R}tkv&MmKpe$iQ>9WW4i+imkfAzR5EXIMDionYs1;guFuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~_a1le0HIN3n$;;BvB z;Ji;9Wo204LKlt6PRh$_2k|If<`^9lShJny7(5ySo_p#$NPk`VvaHY5X8x3Iklk|F9 ziyr}f+rY(jTT}Lc%N-#0WXPuMNh;#z$LRx*rLNL9z`-Ff zQljiNpLh3k_V(|YR)0TQ1#+Eku*4()000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rg2MQJ(6~w`MkpKVy8FWQhbVF}#ZDnqB07G(RVRU6= zAa`kWXdp*PO;A^X4i^9b0PIObK~y-)b(75v!ypWWzed@IJ-PsgOvj-I7U&invJVnH z1jj!#mMkF*_IuCvtHDTx%f3K`6SX9Ve8s@W>6y{{^vvj7-q7>?Cd3uf;C4oy) z6hXsRYY}Z>?ASiPRkT!tm{z#&bP>@(%mJzqc0r3E$f3fVhkFW-FqI`D2pzC(S`Zrk z+Q$CS>!*?Kk-{;>Vx7Dc>3wwR0QS==UIX`R65AwZE4Mh}$%uGXzvl5Xzz;=`M~mmA Rt1SQk002ovPDHLkV1m+|RCoXY literal 0 HcmV?d00001 diff --git a/episode-13/textures/leaves.png b/episode-13/textures/leaves.png new file mode 100644 index 0000000000000000000000000000000000000000..858664e11ad1091dc240cad4703f466e8c862f26 GIT binary patch literal 1269 zcmVEX>4Tx04R}tkv&MmKpe$iQ>7{u2RjsT2vVIah>AFB6^c+H)C#RSm|XfHG-*gu zTpR`0f`cE6RRL;k>@Q#C4j3NMZqtkRU=q6&onSMx0ii6botEPx$x;T)#vvg#t9I72Cnp$zfuRLKS{5( zwAc~Qw+&oew=`uBxZDAvPljyDt`wvx6bium8GTa@=)VPeR=wVu`#607GSpS-1~@nb zMv9cZ=JW2Z_TK(I)9mjDK>u=+__5Q400006VoOIv00000008+zyMF)x010qNS#tmY z4zmCN4zmH{a@eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{00PZPL_t(I%Vm>IZxdG(hMzm0phn4Piu{QZlSFbFiui~V zLYnL(kn2=WR6HpgOEPz4^X@eArg8B#g3rf@-3#zJussd2~YMMfdVPU{zoH+K_ z9yiP+_F-XpLY2F^=jy)ieb3QzIWXHV0ArOw`8eAvUEg&HZ>{9b*#ByPj*A@vkSZlb zvuzsyv)yD<(I7LCQClXq_@c!>0tC+l1>m?lA}732@jMTJyWd;ut{>jpCIG#sdS$#i zB>SyK{n5*W9I^W)F`bYvSB7QZ!<_=~#eaJxRZ5E1H27`ryaGu7kXH429p~990ES_( zmJMLrHuZX)m6a6$YPA}xFEuoPPZs)Q->dih*!prCi`N4HcrO%{N`?G%Uj5Yer_!{> zo8`2NZQBh4(=;ikT>wI7Lt7OaO*YM=?#4+aQKv zPvVnJ1otWX)Cw+Lj-u85i<8J zn&N{~J2>+1usDu`mbqs!JF^79U)L9LU6=W*^C}Ps@avvOs^emZ+)VzhbY1r$Dpra( zjze}bt4K^IHjvhJvdf>v;o@#dm6HCQ_+(r@n;Tfyj8z7Gluvl08_dQkgT5eDO3KLX zZUKmV9g)Mu-J<1Y8z{H5v`~8T8i1qa0XgoD2*8YSUo~;h<#M#PwyuM;x{BUBxN~KJ z-cQ>Ba9x+Bxw4-keZv8uy&B}f%mT-pJyNUH_}P4@v{$zpsWTH9mA>K7bGb*BA36L! z`cyRyg25o+b74_Rk)O^hUDv5R^@vZ#g#)?wH}rk*pT=Bb7h;ksC1t!iB+>IxdHdsa fUh0(b>X5tva0^y+E9z*w00000NkvXXu0mjfpr=HI literal 0 HcmV?d00001 diff --git a/episode-13/textures/lever.png b/episode-13/textures/lever.png new file mode 100644 index 0000000000000000000000000000000000000000..b43d14dd51f0bd1461ed4a918bf2c079a34ee80f GIT binary patch literal 1360 zcmV-W1+V&vP)EX>4Tx04R}tkv&MmKpe$iQ>7{u2RjsT2vVIah>AFB6^c+H)C#RSm|XfHG-*gu zTpR`0f`cE6RRL;k>@Q#C4j3NMZqtkRU=q6&onSMx0ii6botEPx$x;T)#vvg#t9I72Cnp$zfuRLKS{5( zwAc~Qw+&oew=`uBxZDAvPljyDt`wvx6bium8GTa@=)VPeR=wVu`#607GSpS-1~@nb zMv9cZ=JW2Z_TK(I)9mjDK>u=+__5Q400006VoOIv00000008+zyMF)x010qNS#tmY z4zmCN4zmH{a@eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{00SsVL_t(I%T1HrD?<$c#(!sX@_jf)Qd-JH*hrMiB}K9; zO)e-GF8mKJxO3xAP;SHpYbFhmh?r#gsG*%L?u>m{bDVAFocH2=>3wdW=ehblkKpt9 z4E~d4Fc_q?v=mL#kY$-@G|Iuj0S<=)v&m#y$mjD^R8+9FwS~jsV0?TWfV;ap&d$!b zzP_fnx0ifAkI(0$xw#ol(>3ir8#6TrL-qB(b`>O3}c;08Xcqjg1Wea=9E51v-X{=T&fj|IV*ZKPT zA|8+9@pw>G6=8mU{*OW=5}~4^f}5Kg0NUEx5Cj3c-A-Ly9g3om$z-Ukti&)39v>eu zJDtu20H4o?BuR{pj^cDWd3}8)lgS{8BB4--xl0<)hKW?|1 z@9%FO9v(P6JY;ZikiESs9Q4|G15LjMbrm?XRQ4}!&`2BubTU*g}om47?D2fDw zLE`Z^7K;Ud?d@$E8X9o9TmYP$oUpUAgYf%>#l=Pbua1rm8XFr41OlW|Ddy(pNG6j! zKR^Ew0}%H1_KefhQ&d%DXlRIZI*lYrtgWq~C<+}N9n8+o^7QmXI2^`ev5-h4C@U+& zEX>4Tx04R}tkv&MmKpe$iQ>9WW4i*t{$WWauh)QwPDionYs1;guFuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~_a1le0HIN3n$;>4zH zaNZ}5va+lapA(OnbV1@rt}7nDaW1(m@XV;0&CC%;iN#U}D;>Ej=A{Svtpa#g^{ zF^>&skX=9cAN=mtDo###Ns%Pb{o*(uBS2^uXx1I)``B@sCqVESxYFDHjRr9NNqW7l z#g2f!ZQ$a%ttorJh;#z$LRx*rLNL9z`-Ff zTB7VVpLh3k_V(|YR)0UF=W@H&5}cg?000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rg2MQKC5dd;MtN;K28FWQhbVF}#ZDnqB07G(RVRU6= zAa`kWXdp*PO;A^X4i^9b0-i}kK~y-)J(A0ABSjcSPgVU@)fdNhVrSxk2_SYOfy82V zhzH;;c@drh2?R{U5DO(kE{@&ZRqk6g3y;`+yH7gjsPBJzH)*RFDMbqTw$WM`JcHqt$JxC@82iquc+ZyK^Ik6Q}WO@o~aMuV&! zvU$5=LKC_`KP0mG3C=W5Xs6MIu>Sgj>QFO=fj8e?0kE%Y=o0d@-2?n@VV`Q!IN@^x zKz$nsHj-U>{K~W2R{+>T&`u-%;^g)Iw_BVyFk^Ulpj*z%hYQeD>W2fZe{L zxebV0SkgFAz9}emM(6@V7$~ni{ZgoJ1Nn816oPe{-TezmL%wv(zgZ(v2qb8CEwPKI zWV=K%>Jz+ks$(F0jI>JOXD5BlLrWb4^788elN;vOIek4)-v(4}C@(#eoF4lw;g$}c j8|vFYQi}5P9HZesC7(G5fOn0a00000NkvXXu0mjftUM=| literal 0 HcmV?d00001 diff --git a/episode-13/textures/lit_furnace_front.png b/episode-13/textures/lit_furnace_front.png new file mode 100644 index 0000000000000000000000000000000000000000..83abc9f7a0b900ac4faf9769950391e40ff0c485 GIT binary patch literal 1260 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 Tido^^00000NkvXXu0mjfboMuF literal 0 HcmV?d00001 diff --git a/episode-13/textures/mob_spawner.png b/episode-13/textures/mob_spawner.png new file mode 100644 index 0000000000000000000000000000000000000000..3ba9080251373f7b8a070f5e84380caa465d72b9 GIT binary patch literal 962 zcmV;z13mnSP)EX>4Tx04R}tkv&MmKpe$iQ>9WW4i+imkfAzR5EXIMDionYs1;guFuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~_a1le0HIN3n$;;BvB z;Ji;9Wo204LKlt6PRh$_2k|If<`^9lShJny7(5ySo_p#$NPk`VvaHY5X8x3Iklk|F9 ziyr}f+rY(jTT}Lc%N-#0WXPuMNh;#z$LRx*rLNL9z`-Ff zQljiNpLh3k_V(|YR)0TQ1#+Eku*4()000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rg2MQJ&B-&o=YybcN8FWQhbVF}#ZDnqB07G(RVRU6= zAa`kWXdp*PO;A^X4i^9b0h>ugK~y-)m6B0!+AtJ_KRa>VU|67#v4J$GhS0>cR#R1J z+r$3<-`LBhRihLL3M6s72ZTr4Y+~odSJ%h(J;z798ckeaI=F0!h+=lT9VW2IMw|J3 zjxh!)rQZ*NfQBqt7Xp_pVK}>W@MnEm*Yyr{fBMmh-f--6ocI^2s-mSF>p~!mdR>L(aqe|a{+aqqw#U43?v8WcrwQg5|dAqJOIC!!daEeV?! zSZg_}w&e2M6T>j1SkKXMLZ0Vd?jsZ1qnRJ^^}CyYn%Eppy=*VR7~{!O)++PpcDr7d zR7&x`D9aK6r4+KxoVrU7ho08rMKW-$WJtF7N!01@3F$pn8MM|IV@T5!wkt#wljk|g zW<;Gniyz;h_x8#Gy!r6Sn>4xkdQuXHvs)*%)&Nvh<;hu=o$QAgTuxne)<{9 literal 0 HcmV?d00001 diff --git a/episode-13/textures/mossy_cobblestone.png b/episode-13/textures/mossy_cobblestone.png new file mode 100644 index 0000000000000000000000000000000000000000..d76bac867f1f28c62f312a4bd6084dfe5ca94771 GIT binary patch literal 1401 zcmV-<1%~>GP)EX>4Tx04R}tkv&MmKpe$iQ>9WW4i+imkfAzR5EXIMDionYs1;guFuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~_a1le0HIN3n$;;BvB z;Ji;9Wo204LKlt6PRh$_2k|If<`^9lShJny7(5ySo_p#$NPk`VvaHY5X8x3Iklk|F9 ziyr}f+rY(jTT}Lc%N-#0WXPuMNh;#z$LRx*rLNL9z`-Ff zQljiNpLh3k_V(|YR)0TQ1#+Eku*4()000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rg2MQJ%17=TXMgRZ+8FWQhbVF}#ZDnqB07G(RVRU6= zAa`kWXdp*PO;A^X4i^9b15!yuK~y-)O_NPb6A1uDUps}iQ#viswft=%4UK^iNX_EG z#E=LW5)LN2#&FVudol5Z38*#FvlopgV*L-lqwi7yG-n%gi8gJ!gb-9aot1&QaVg;y3+Bl0+d@Kxk@eimR%M%jIG{ zyUyJ194)>UG)-e6y@2N@4|hB7l1L=j&^L(MqGYpKo=-m~Q^;T!MG?a=c%6Fg}3vBuwx<7jXY`z6Nx&-c+%8fMO9@Z2DU zLV-t#N0bgqSVtC?ZsE;(iN#{<@9$%;sHosn_!Kw#Z(tY(dPc|iY%q9kkm>1Z{C+=n z(axo|OW52tq9>vZ4-YdrImzQuQgu@86i|vdZP`{Plt( z?-63VNO~uYoR<0i3R>5NE@(_xm@bu$TdMbK&wfPDF zyVL1JmSxI9W!(Ao4xY0fVpn5WMGIM$5qts literal 0 HcmV?d00001 diff --git a/episode-13/textures/obsidian.png b/episode-13/textures/obsidian.png new file mode 100644 index 0000000000000000000000000000000000000000..b4869a918eb647ba61275bdad81a06c3b12fa016 GIT binary patch literal 1183 zcmV;Q1YrA#P)EX>4Tx04R}tkv&MmKpe$iQ>9WW4i+imkfAzR5EXIMDionYs1;guFuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~_a1le0HIN3n$;;BvB z;Ji;9Wo204LKlt6PRh$_2k|If<`^9lShJny7(5ySo_p#$NPk`VvaHY5X8x3Iklk|F9 ziyr}f+rY(jTT}Lc%N-#0WXPuMNh;#z$LRx*rLNL9z`-Ff zQljiNpLh3k_V(|YR)0TQ1#+Eku*4()000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rg2MQJ%4jBFv`v3p{8FWQhbVF}#ZDnqB07G(RVRU6= zAa`kWXdp*PO;A^X4i^9b0(eP8K~y-)O_M!u8%Gd^pV=j~q)d?vZ9+~E19A~ah?63a z5O*#TAdv0GKgqu1MtKcIM{p2$>IoOEGb1&y5(T+87GS)K#;Ai znKn(seDVNmEz6q)#w0-b@!J=?KK>Jc>-xM?RN>sPQ)H0wc%~@@=93*({sKq<FyuYH~A7O2eJN+rvT0#gk##2?7 z%qKgXUH!w}*H0LYMw~2;Sot;9xxvdAYYz6F6Jv!>6^$mgHYbP(K2=!TBj!xg1XMFO z)xTWV=U59e9?#Vn+X>$2Oe}yf8*Q_^Ii-{aW5D~&_7`7qRh{v%$FwU05rb+w0R&aU z@@9z$G)+X+FdWWU`6VgkPaYYV5<*1?>u$F#(jo3X|bIR({D~FygPbzoIIDV4a)4JimTN2y0Z8m^T4c002ovPDHLkV1g~+1a<%b literal 0 HcmV?d00001 diff --git a/episode-13/textures/off_redstone_torch.png b/episode-13/textures/off_redstone_torch.png new file mode 100644 index 0000000000000000000000000000000000000000..e09094348f431c1c749beb985940af2e80dc36e2 GIT binary patch literal 659 zcmV;E0&M+>P)EX>4Tx04R}tkv&MmKpe$iQ>9WW4i*t{$WWauh)QwPDionYs1;guFuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~_a1le0HIN3n$;>4zH zaNZ}5va+lapA(OnbV1@rt}7nDaW1(m@XV;0&CC%;iN#U}D;>Ej=A{Svtpa#g^{ zF^>&skX=9cAN=mtDo###Ns%Pb{o*(uBS2^uXx1I)``B@sCqVESxYFDHjRr9NNqW7l z#g2f!ZQ$a%ttorJh;#z$LRx*rLNL9z`-Ff zTB7VVpLh3k_V(|YR)0UF=W@H&5}cg?000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rg2MQMtIuAW;Z2$lO8FWQhbVF}#ZDnqB07G(RVRU6= zAa`kWXdp*PO;A^X4i^9b0BlJ_K~y-)V_+BsgB*l0F#PvmVEB(u4HG`ePYetU4+&U; z*8r0wI|gN2HS!G*7i44j@aY@*1~4%(F|e_*k#7JO7Z=07fB(og;Kz?241fOoA>V)t tw_h?aGBT2HfT5ZMWnMUc>jgnC003?~9dovA=7InK002ovPDHLkV1h6F4T1mw literal 0 HcmV?d00001 diff --git a/episode-13/textures/off_redstone_torch_top.png b/episode-13/textures/off_redstone_torch_top.png new file mode 100644 index 0000000000000000000000000000000000000000..c2d50249f5ff86a1b5da1f429f69c99e15fee7a7 GIT binary patch literal 588 zcmV-S0<-;zP)EX>4Tx04R}tkv&MmKpe$iQ>9WW4i*t{$WWauh)QwPDionYs1;guFuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~_a1le0HIN3n$;>4zH zaNZ}5va+lapA(OnbV1@rt}7nDaW1(m@XV;0&CC%;iN#U}D;>Ej=A{Svtpa#g^{ zF^>&skX=9cAN=mtDo###Ns%Pb{o*(uBS2^uXx1I)``B@sCqVESxYFDHjRr9NNqW7l z#g2f!ZQ$a%ttorJh;#z$LRx*rLNL9z`-Ff zTB7VVpLh3k_V(|YR)0UF=W@H&5}cg?000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rg2MQMtG6Ck~UjP6A8FWQhbVF}#ZDnqB07G(RVRU6= zAa`kWXdp*PO;A^X4i^9b03}I8K~y-)V_+Bs!ySY%F#PvmVEB(u4HG`ePYetU4@bjs aBme*;js$XtlH@Z00000EX>4Tx04R}tkv&MmKpe$iQ>9WW4i*t{$WWauh)QwPDionYs1;guFuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~_a1le0HIN3n$;>4zH zaNZ}5va+lapA(OnbV1@rt}7nDaW1(m@XV;0&CC%;iN#U}D;>Ej=A{Svtpa#g^{ zF^>&skX=9cAN=mtDo###Ns%Pb{o*(uBS2^uXx1I)``B@sCqVESxYFDHjRr9NNqW7l z#g2f!ZQ$a%ttorJh;#z$LRx*rLNL9z`-Ff zTB7VVpLh3k_V(|YR)0UF=W@H&5}cg?000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rg2MQKBH~CWQk^lez8FWQhbVF}#ZDnqB07G(RVRU6= zAa`kWXdp*PO;A^X4i^9b0(MD6K~y-)J(JsV8$}dF*E!wObCE_G--2CG2`PA?itxg> z@v)RCia-(>S(apFB+aESJdE)Vbg#YFKJxo-zb3I6X*h#gw3wr=z_(jO1XI=|F?5fA zlerwN8UW&HPl^Gn#T>O3z5EstA#_Jl45)Pg_;ye7J#Mx@Oh&u;LRD3WD^WFA%_|Va z?;ij#^%VpqsfFk<^%Y_=QWybPzWWI=8R7gDNdX)C6Uq0OY6)ryU!O=ZAa=s_hc#;5 zD|$FSPefPW5&AP$ttCc}Z?~wc&|(h2dHsR?6J))xPpFl&p7m0f7sA> zXNtN(i#h(Vrf;9gs~WKxDF(Xjiehnz7ITL6UzpiM>*gia-TsIJVt<0@QCCr3RuDa? z#pD(4`YrLaCk`FuyAM;jr^7@vZa)K%y;w*oAt`{JqWJv-Vhm<>fmRLSxC215l4LTh zmJ0xehd+=k$J96A1OBi^)F8%8tsi%U2;#T_Xntf_Ah5uzVRF;IX1fjD%eFd`{nmfw(KVBD>yrMiMR z_VlZJv}&+^`w6Uj)%SlVrdpCP_}vOrr&+s#1&jB0gziXap8$}oM6#UFKH>d{9sd0jaV2)~hS;@} vcbh>mpQ7wmq!=(|4Yrt$Za87c7QA$EzY~i00000NkvXXu0mjfldlsS literal 0 HcmV?d00001 diff --git a/episode-13/textures/pink_cloth.png b/episode-13/textures/pink_cloth.png new file mode 100644 index 0000000000000000000000000000000000000000..d83b6162f575d2126ab9b2500481cc6d2da39c49 GIT binary patch literal 1294 zcmV+p1@ZccP)EX>4Tx04R}tkv&MmKpe$iQ>9WW4i*t{$WWauh)QwPDionYs1;guFuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~_a1le0HIN3n$;>4zH zaNZ}5va+lapA(OnbV1@rt}7nDaW1(m@XV;0&CC%;iN#U}D;>Ej=A{Svtpa#g^{ zF^>&skX=9cAN=mtDo###Ns%Pb{o*(uBS2^uXx1I)``B@sCqVESxYFDHjRr9NNqW7l z#g2f!ZQ$a%ttorJh;#z$LRx*rLNL9z`-Ff zTB7VVpLh3k_V(|YR)0UF=W@H&5}cg?000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rg2MQMeGKPNmkN^Mx8FWQhbVF}#ZDnqB07G(RVRU6= zAa`kWXdp*PO;A^X4i^9b0_RCYK~y-)J(A0A<5U1Z&-K06&m^|vrjyX5v;%_*s@Sq( zi^TWv8Az;IBQ|XL1tc_x#b`RE>Vv*$J4sU}&BKY~_}XDn)K54M@yB=Hucg)$vl&7w zoFv8xYs{|uSjxglVl1V2e0PSf2Y8((09k*8SuRj+vw_f>X#XXarN}2!%4~%We5eeI z_xG4ZhPxRdwc_#3DLSs>#34>nN7>B~AuXoImk6y0dToTXDDx%d+)&%zLe*SMx&&bB z+iirFEQez%V^FKngkqNAwiA@^kY3zURUkbFf4jrv4Nz4U35KQ`1*iiHb>3QZz%I6 z?nZ*sikX~TvmAWDZ6`>rDT{*n;RQjjjh8eS9h~4K5m;;dj}pY+KmWRZmX{Y4vpE1% zC6=wRqXtgcAiW)6(u`2T9adArylb_;`zTQ8K^2 zqpCnHha)Uo<8Flb-8RGD-yozW=(SP4OZG6rZYD(CHUN{eOYEplw6{xD8N~6AzpRB+ z&+LACgH@Vh(j}EKIB`g23bMO?S^@K7yI0Z}Kw-Z3| z_}3{yDx}sZsTd!f0T67xKxmCpHSbB*(HTN&T3_vB*@}lhk1*3YjlCV5utqUoU@1lS zo38;#ZwE|IFA;}7{Isr&!E41x$6+;{VHWxSD`%wt^r?T+L)Yu5noHJy0Kn_CP`-<@ zqu_bbGB^0$7G=IfNQJ%8r2EAy^2wC+>JBlK=+H+xF6mVtvsj>puiv8Ub;4KMT3Dox3KvB)duN`J}|W~1vPJeq-Zo6s0!6yWI+x56xVv&&z*!RpcOTy xo*qah|Am}@m#W+Y$74GF_~D-UpAJLNUWUc@J literal 0 HcmV?d00001 diff --git a/episode-13/textures/purple_cloth.png b/episode-13/textures/purple_cloth.png new file mode 100644 index 0000000000000000000000000000000000000000..8b245d92eb55e56ec2f288a7d33728d832eb1f04 GIT binary patch literal 1248 zcmV<61Rwi}P)EX>4Tx04R}tkv&MmKpe$iQ>9WW4i*t{$WWauh)QwPDionYs1;guFuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~_a1le0HIN3n$;>4zH zaNZ}5va+lapA(OnbV1@rt}7nDaW1(m@XV;0&CC%;iN#U}D;>Ej=A{Svtpa#g^{ zF^>&skX=9cAN=mtDo###Ns%Pb{o*(uBS2^uXx1I)``B@sCqVESxYFDHjRr9NNqW7l z#g2f!ZQ$a%ttorJh;#z$LRx*rLNL9z`-Ff zTB7VVpLh3k_V(|YR)0UF=W@H&5}cg?000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rg2MQKD3*-y+mjD0&8FWQhbVF}#ZDnqB07G(RVRU6= zAa`kWXdp*PO;A^X4i^9b0=Y>;? z#A>$NEyFM%+7d@8+5Q!K3W=liOti~s+KTx%Gpf8rj26TM?8+s+P4G4b;Pv>KRnd^T zYpnLX?bkGY!E}6wl@U+RkJMd>Y>F37eMJ;Z@ZOW{UpY2!T-ZxQIohG-_5E)q?gk$u zERJ9B5~I+>c8Yv=`w69?*q`Nv5)(?yK#wSg3n$!O+_BFJ>bBt1xAy=XH#J??ApwACNZbdk3CWu`yu{4r9=IV} zZV7`6X7ee1H=us|<&QyWXv%Zviz`Q!x18#Ze&`r^OWzF~-}hMUQ5xFr#QSMWWG|7` z?isBNk-Y?9@v=uLb-pl$)!Pe7DU1qG0*m|sfYe=Mv>?um8HRyH{(#ZK-PI46K=F0; zNZIDh{6}06(zY#H8SX#+2*5roSik>^cpK9X9n)i|1gd~1~SWULv(sn1tF2Ri~>)qMORXj(j3I73j12rkow@*j_0000< KMNUMnLSTYhG(Lm? literal 0 HcmV?d00001 diff --git a/episode-13/textures/rails.png b/episode-13/textures/rails.png new file mode 100644 index 0000000000000000000000000000000000000000..802d13ce9f5858ed96afa7960dccfaadc9278b23 GIT binary patch literal 869 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 literal 0 HcmV?d00001 diff --git a/episode-13/textures/red_rose.png b/episode-13/textures/red_rose.png new file mode 100644 index 0000000000000000000000000000000000000000..4a202b59f486669a6a8fea157d07581fcd3c8712 GIT binary patch literal 702 zcmV;v0zv(WP)EX>4Tx04R}tkv&MmKpe$iQ>7{u2RjsT2vVIah>AFB6^c+H)C#RSm|XfHG-*gu zTpR`0f`cE6RRL;k>@Q#C4j3NMZqtkRU=q6&onSMx0ii6botEPx$x;T)#vvg#t9I72Cnp$zfuRLKS{5( zwAc~Qw+&oew=`uBxZDAvPljyDt`wvx6bium8GTa@=)VPeR=wVu`#607GSpS-1~@nb zMv9cZ=JW2Z_TK(I)9mjDK>u=+__5Q400006VoOIv00000008+zyMF)x010qNS#tmY z4zmCN4zmH{a@eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{005RrL_t(I%VS^|1+)d<+4=u}XXpQqPYokJ&9i=gV{l+$ zVR-qUi9ww4AA|m{?-=TtuxY-?#`*u&|6dFaEG!IajBE_o|Ng?NnV<^}|NFym{qHXZ z1_lNO2No8bhA`lAg;+boe}QC%|6~VZw5u6qn#I~Fu$_T{fk7adfuJEw_#{8fg#kl5@Q2$p8QV07*qoM6N<$g15dX+W-In literal 0 HcmV?d00001 diff --git a/episode-13/textures/redstone_ore.png b/episode-13/textures/redstone_ore.png new file mode 100644 index 0000000000000000000000000000000000000000..ef0bcfe40b88d1f0d74f7f4adf7c617ff5bbe223 GIT binary patch literal 946 zcmV;j15NyiP)EX>4Tx04R}tkv&MmKpe$iQ>9WW4i+imkfAzR5EXIMDionYs1;guFuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~_a1le0HIN3n$;;BvB z;Ji;9Wo204LKlt6PRh$_2k|If<`^9lShJny7(5ySo_p#$NPk`VvaHY5X8x3Iklk|F9 ziyr}f+rY(jTT}Lc%N-#0WXPuMNh;#z$LRx*rLNL9z`-Ff zQljiNpLh3k_V(|YR)0TQ1#+Eku*4()000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rg2MQJ&77~fQ>;M1&8FWQhbVF}#ZDnqB07G(RVRU6= zAa`kWXdp*PO;A^X4i^9b0gFjQK~y-)g_E&rD=`p7kI{B=p-zR$6#EAc@*(+zfXj8i zu-+z(4eKuZ5BU>!DOJ2u@U{quV1bK(USW?|I}Vw0n7O)l?$x5}x|~vCURrC6F#ve) zsq2~;BlqU2+lAX&E|&lpV=%_xy~kP$KuYNhFilfIe;5Y-uGa;?IY$Tqtu+9z3AcVkA<(&K0^WIaXlt?L|wJtO_ zea~A}acCN})=bkxvtE}T!0~v*T1zF!F-9I=Uii$JQ7On7Hw?tK#ahd#6sMf8n0W8c z5~OiYr@SU^%=H6j7dCy*s1)zd&(w8&b#;*ww%fbli+e$m`m^5?av?~#u{Xwe9i$Kf z55vG|w*%nNG=;u%4pARtEVeIJt5ud{$sL5gBv6(l7hE1FNBl{G$awnt;;pLqxX3wO zRp4W9EX>4Tx04R}tkv&MmKpe$iQ>9WW4i*t{$WWauh)QwPDionYs1;guFuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~_a1le0HIN3n$;>4zH zaNZ}5va+lapA(OnbV1@rt}7nDaW1(m@XV;0&CC%;iN#U}D;>Ej=A{Svtpa#g^{ zF^>&skX=9cAN=mtDo###Ns%Pb{o*(uBS2^uXx1I)``B@sCqVESxYFDHjRr9NNqW7l z#g2f!ZQ$a%ttorJh;#z$LRx*rLNL9z`-Ff zTB7VVpLh3k_V(|YR)0UF=W@H&5}cg?000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rg2MQMt15h~RWdHyG8FWQhbVF}#ZDnqB07G(RVRU6= zAa`kWXdp*PO;A^X4i^9b0C!15K~y-)V_+Bsv;}_|82<|NoS^Vm-N<85kHCCKtQ>x6zluYXB2oNhT%+Ha0c}vJK$k;$rys?;rUF z{P^*M;m@Bx`tFjSME%nRply&&iX0O$5J@&tIFH2?qr07*qoM6N<$ Ef)5QL2LJ#7 literal 0 HcmV?d00001 diff --git a/episode-13/textures/redstone_torch_top.png b/episode-13/textures/redstone_torch_top.png new file mode 100644 index 0000000000000000000000000000000000000000..ecd10c451fce6d1c3c62128eff8cbb80b38933eb GIT binary patch literal 604 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 literal 0 HcmV?d00001 diff --git a/episode-13/textures/sapling.png b/episode-13/textures/sapling.png new file mode 100644 index 0000000000000000000000000000000000000000..df8784b3c65fd65a88856f0461cedf150c2d444a GIT binary patch literal 989 zcmV<310wv1P)EX>4Tx04R}tkv&MmKpe$iQ>9WW4i+imkfAzR5EXIMDionYs1;guFuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~_a1le0HIN3n$;;BvB z;Ji;9Wo204LKlt6PRh$_2k|If<`^9lShJny7(5ySo_p#$NPk`VvaHY5X8x3Iklk|F9 ziyr}f+rY(jTT}Lc%N-#0WXPuMNh;#z$LRx*rLNL9z`-Ff zQljiNpLh3k_V(|YR)0TQ1#+Eku*4()000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rg2MQJ&HL&i?o&W#<8FWQhbVF}#ZDnqB07G(RVRU6= zAa`kWXdp*PO;A^X4i^9b0k%m*K~y-)y^}#}6JZdBpD!*&60=!oK(q&|5HJ@PQZL0y zbC#SoV9z~xHTnzs6N3Lh5Dz_cPa=4;O%EQdCKnAZXp&Mf!os&3HYuWvr(N7lNN>(< z=9_QcdEc3V|7kl1+memt79}l8+&S2m@knDimMkss@o2z!q*KM}ZCm!6hYFxos;2T) z7UlMz80mE~9xYcNNl z-nQlLyBvM*6tkG8a%+ue!Dk-$CIHv3u2Lvmrr%gex=K;F@#vZ~YGsLi%dwcd982nLTa4_Y1pbWUb>IWZK5W<(PI_JnQM+1oL301{kA;b2S6-aaDplz>R`_zi zFgGpjYNeL#{@(7UMALKn-f1$z3vVH7-+%ZC+M@TR1%fcT@IwCrLYdy{z7gK`00000 LNkvXXu0mjfL5sPK literal 0 HcmV?d00001 diff --git a/episode-13/textures/slab_side.png b/episode-13/textures/slab_side.png new file mode 100644 index 0000000000000000000000000000000000000000..0c9bc23ac8e8abbfe3a01c66f9176231bbb2e1df GIT binary patch literal 896 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 literal 0 HcmV?d00001 diff --git a/episode-13/textures/sponge.png b/episode-13/textures/sponge.png new file mode 100644 index 0000000000000000000000000000000000000000..dcb11e795b54729c3787730de704725c7eacb3d0 GIT binary patch literal 1316 zcmV+<1>5?GP)EX>4Tx04R}tkv&MmKpe$iQ>9WW4i*t{$WWauh)QwPDionYs1;guFuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~_a1le0HIN3n$;>4zH zaNZ}5va+lapA(OnbV1@rt}7nDaW1(m@XV;0&CC%;iN#U}D;>Ej=A{Svtpa#g^{ zF^>&skX=9cAN=mtDo###Ns%Pb{o*(uBS2^uXx1I)``B@sCqVESxYFDHjRr9NNqW7l z#g2f!ZQ$a%ttorJh;#z$LRx*rLNL9z`-Ff zTB7VVpLh3k_V(|YR)0UF=W@H&5}cg?000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rg2MQK9Et<1GW&i*H8FWQhbVF}#ZDnqB07G(RVRU6= zAa`kWXdp*PO;A^X4i^9b0{uxuK~y-)U6MU$8+RDSfB!@F9XfH5jPM^xCWRJ4K@d

>ZBF|G^- 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 P00000NkvXXu0mjfHdO=U literal 0 HcmV?d00001 diff --git a/episode-13/textures/tnt_side.png b/episode-13/textures/tnt_side.png new file mode 100644 index 0000000000000000000000000000000000000000..7aaa0d758441683f856a26a8fb2e9b031b841a12 GIT binary patch literal 772 zcmV+f1N;1mP)EX>4Tx04R}tkv&MmKpe$iQ>9WW4i*t{$WWauh)QwPDionYs1;guFuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~_a1le0HIN3n$;>4zH zaNZ}5va+lapA(OnbV1@rt}7nDaW1(m@XV;0&CC%;iN#U}D;>Ej=A{Svtpa#g^{ zF^>&skX=9cAN=mtDo###Ns%Pb{o*(uBS2^uXx1I)``B@sCqVESxYFDHjRr9NNqW7l z#g2f!ZQ$a%ttorJh;#z$LRx*rLNL9z`-Ff zTB7VVpLh3k_V(|YR)0UF=W@H&5}cg?000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rg2MQMh83FH76951J8FWQhbVF}#ZDnqB07G(RVRU6= zAa`kWXdp*PO;A^X4i^9b0NqJMK~y-)&5|){12GUqpVm%nuonU$jhn4<0g=L0D&KcI zA7d_{N@W~uV$`fRmXsoqkQ*D3A`uKT@Bd*W#3-{_#lz@1jDe4H;N@XP4L1Nofa5u` zI|XXF;g{#{2Pk7qOyHcOZQF~6QghA$T(XG7pCLI!BEX>4Tx04R}tkv&MmKpe$iQ>9WW4i*t{$WWauh)QwPDionYs1;guFuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~_a1le0HIN3n$;>4zH zaNZ}5va+lapA(OnbV1@rt}7nDaW1(m@XV;0&CC%;iN#U}D;>Ej=A{Svtpa#g^{ zF^>&skX=9cAN=mtDo###Ns%Pb{o*(uBS2^uXx1I)``B@sCqVESxYFDHjRr9NNqW7l z#g2f!ZQ$a%ttorJh;#z$LRx*rLNL9z`-Ff zTB7VVpLh3k_V(|YR)0UF=W@H&5}cg?000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rg2MQMh2^?5LcK`qY8FWQhbVF}#ZDnqB07G(RVRU6= zAa`kWXdp*PO;A^X4i^9b0dz@3K~y-)m69=Q!ax+qe>SD!)=J^PvEY!wsT~gDRCLMM z;pn#z#LZE%3VwpF<%TX9BTfn2P$!2B0mp(+v}+4u2a}LWQt-bdk9+Uk`~U9Ml3wdT zs^!-Y_t#gP6JG-O?g#+uWx~1fMb^z2Ls7;U2CE(I`A6wlrrPVn?P2r12OzThJgpaO zzV}3SA14lo>^@p+W}TZn$BBcy!DZ2tSTA_Hd&Jv@M1ZJU03^K@?fC})$_7_7su_6O zFiqAt>8-vyLN$+LYps#fX*q+)?gKDQ6SDD*F=(xi6DY-SI4oySEIO4^3MUQ_b&Kcs z&zwoEY7a8cS+Tbb88^GRjilFN`So*b;Jc&zY07TTY*{Z82CE%PDWsHt8AvH{;((;r zDlIO)y_B+=!CEX>4Tx04R}tkv&MmKpe$iQ%j{(9PA+CkfAzRC@LaOT7@E12(?114kp)6Xws0R zxHt-~1qVMCs}3&Cx;nTDg5U>;o12rOi4rtTK|Hl- z>74h8BdjdviO-4047wokBi9v|-#C{X7Imu4RCM> zjFu>S-Q(T8-M#&LrrqBU*0XZY1rG|v00006VoOIv0RI30001*5eDeSR010qNS#tmY z3ljhU3ljkVnw%H_000McNlirueSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{003-BL_t(I%VS^|1%n*?zrpbTe?P;2@(uVu{r~^}|H(I? zCdux(t` literal 0 HcmV?d00001 diff --git a/episode-13/textures/torch_top.png b/episode-13/textures/torch_top.png new file mode 100644 index 0000000000000000000000000000000000000000..8d66d02feaf300bda3daf25124a684a4aeec93c0 GIT binary patch literal 589 zcmV-T0EX>4Tx04R}tkv&MmKpe$iQ%j{(9PA+CkfAzRC@LaOT7@E12(?114kp)6Xws0R zxHt-~1qVMCs}3&Cx;nTDg5U>;o12rOi4rtTK|Hl- z>74h8BdjdviO-4047wokBi9v|-#C{X7Imu4RCM> zjFu>S-Q(T8-M#&LrrqBU*0XZY1rG|v00006VoOIv0RI30001*5eDeSR010qNS#tmY z3ljhU3ljkVnw%H_000McNliruX1b02y>eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{001RPL_t(I%VS^|1;ZWuzrpbTe?P;2@(uVu{r~^}|NoB$ b<*)|;4IvElCp5KD00000NkvXXu0mjfH7xe{ literal 0 HcmV?d00001 diff --git a/episode-13/textures/unknown.png b/episode-13/textures/unknown.png new file mode 100644 index 0000000000000000000000000000000000000000..1ba274d99e19cd481cea636d29f89a4c8b58e3ac GIT binary patch literal 5519 zcmeHKdpJ~U7azrlbfFs}W2BUC?lb0+$!)|ax1o@3duH}9nwyznMktqVY9dY)T^vQ6 zPIQse{cfaCgN{z2R79!JAv!1d_Ds4x-}$HK`ObgMJbPyE^{(|>YyH-G-~GO60e)T+ zj4h2}FxUj9H-iQJPu5=J;LxwlpCbSaX5hUpI8@F86bOk_%;O6{ggj0HB0wdd2ZJde zyb1}IwmX@;@0=&qPtiB(r6ertfK%7!P2yLTzsa;F|#pjW7)gi z1@T3yK&5l_yRMq>L@Ip$B}>{YT)BMnwTWG&XWG{uN%b#_e=|L#GcNvlXGTKRN{KosHLbmo z^{&Xrv3GjFH3MbdZTI^RuO_6|*)6iM%D>-KaPwet+~lXKRYTDktGaC8bqzPUn5h5$ z0B>6C|Jbvq2W**{(SPD({9A`Yi(iVL8vTyTORvAjy`F3L*6PmTveKibb8;+72bNdP z8!}LV`;Cep2pmfqRi)J>V{9|WZcE)`30mI0cagPe`%BuJ23qI*fP9+4^qWgvaGi0M zmVU4ee;V_GC2EgXqScY5dz+-$Q!j`&=BBSv^;RY3MLbsAwlUd(lWnekVeL57!JB?< zM_S7T_Hinf4)?V(A3ZvR{@5)zy*2mS$(wb9}?2 z&ITD~(*`x1-DUIvXV;3yh8fr=I}7Y~BpiwjNZkIwQR?EgV`7v@uVVsQdI(-o4W{s@ zMpFogXM2*)EYWw3B;(3`YDLJ9og{doVVJ4a1(PZJ7EQq+s`sxjmvaVPU$1O2>E11o z9jneYYE>X2=EyPC!&{pdlvLa|dEqVq3&PwgW<&8066n9H3ce3DUonY`e)<0%(m zsXechR90c&)Z}qBM5#-c2#(c-wfn!0<8^yOWH`MIp(lYzD z2G_AC9om+x%CUB8(;JW#g&i32IO^7uUeRM)5Sd?`I?Qx_TyHk%X?LJQ=#-wc%L(Mw ziG9BlWM|(#39H%iGBeRyvGV4Y{?y8hJ-ziOOwyNB&9Fx2v*{Y*gCNSxhJnlxRAJPl zZcY68)Bf+B9tD8+hV#i&{WL8qPf5sG*OK1GmE{G!>cPnFf*>!wdiSRcL!t^8ypVNj zK?1vHGQnI8AUf;mZNUAB$iFkkhIoMb#>OW&hSq{PaK`ZKo< zxGX*KAdD!!JU-7Tkd__0{;)p1t~1KL>XO5ybt8{7b4?zvKE~v%{Q$2$IBvC>;V;`@ zFujd@503z*hsUQi6z>bP*e=Q?aAeBaKR|0s<5Jd3iR$X=R@zfP~Rmqj#!8W zxMDVlRthE1I}iqQc2PgJq+BkcVK54X0<9pR#nK22j!LCsuy_m}kAgH% zvN(|(P@+UKJ1xXV3uUo1jsF#)zXMovc}p>f2g_=FN)-_P(O*(eJT9~dPd z!QjwXj8KUA+CnDxjDI7Z3=J!3(U-0o`#F6XnoBt|OGrNiZ5 zKmjO(RArD?+&3=0n7#p@EwmIw@P!hc6-4$onsPqx3t8X9rXA6x^K~GQ`Dfg3v_Ivp zQ--vBeQ69aCq^3{lR-yn{nNN&4xdZY-2wy(i2wj36p73OQA8@1fT9pU5(?mwus9-x ziX-3%UqLZNGC3gPfLbUB9Lr6c>WxlG!*S0gFT7cpNT@2sq(UYyy#l!gKH(kPVQXI8JyS6qiF= zB$f&RsGNKu5CLK&q6po9mT;O|0F#cyqp@Ek0RlkIgAC}%r6Ruai#(Vw1cT&&mQ0)z zo_%D7&OYtvyfS`Xk`7VBc z(Dj3^?_%J)lz(*B54ygKf$viO(Ov&Hx{SXZcR&%e2~t3ZnYk59KR^c|ID4@d12&@l z{(Q0cCrDx>@eY&0U}!t-rKc=%iG_rQa;C4RVTYly>Da09jVvojWFhwqm3xSV+FdhD zx0?gG2nAmriO}xmLXs!WfRuWe47XrPO#5nI=#qu_aOILhooH$)}@chZ9xU}kl4MT>B bGi&w!3XglEuh5=8VKAnrAEV5DP0D`($?JZ# literal 0 HcmV?d00001 diff --git a/episode-13/textures/violet_cloth.png b/episode-13/textures/violet_cloth.png new file mode 100644 index 0000000000000000000000000000000000000000..30374ae34e55b076f0d715aece6a9f5f60a80d69 GIT binary patch literal 1264 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 literal 0 HcmV?d00001 diff --git a/episode-13/textures/wooden_door.png b/episode-13/textures/wooden_door.png new file mode 100644 index 0000000000000000000000000000000000000000..9d21e8903987d6baa53fab27dff237d0cd2f32ae GIT binary patch literal 1132 zcmV-y1e5!TP)EX>4Tx04R}tkv&MmKpe$iQ>9WW4i*t{$WWauh)QwPDionYs1;guFuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~_a1le0HIN3n$;>4zH zaNZ}5va+lapA(OnbV1@rt}7nDaW1(m@XV;0&CC%;iN#U}D;>Ej=A{Svtpa#g^{ zF^>&skX=9cAN=mtDo###Ns%Pb{o*(uBS2^uXx1I)``B@sCqVESxYFDHjRr9NNqW7l z#g2f!ZQ$a%ttorJh;#z$LRx*rLNL9z`-Ff zTB7VVpLh3k_V(|YR)0UF=W@H&5}cg?000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rg2MQMrHLbK0egFUf8FWQhbVF}#ZDnqB07G(RVRU6= zAa`kWXdp*PO;A^X4i^9b0!2wgK~y-)ZIZih(@+$Lzu1oBx=oX)c~p&HVPk+5Rbpgd z?2Pymm{<{FW@139Iv~cboseK)K@3cQRDnuFXj0NN&ckt?IQF%#&0rcDnzJ0;-?{fZ zzI!qUyE}>SJuaJWm;fX)A`Hd+{J$N2ZJ_~ln+|a->5n}sMH3hyq`dM#S5<_R=&FjM zsI(fxGyy>G?0mr+no6O(iaVOk6U^e6uIqF2Ms==fgJX-1zfzRqOqvr#JnV4c|fKC;m4 z&Vb&?r8oHdl|Op(WVN!%&`u#X+hZb`z+sP#qJgFp2f++K6aXl?VWO)lhNdoswal{FEV`QB&%Aze zH~HQeplJ$Qn|UJfZv!=5<@C&DYcoIBF5;)wgjVM~Wl(q0N*9EKU`8&tLJ-U-Oa*I2 zW1+g;cd1tkBzAz7$Ou0aG}~jG!DOM;TtO#r1jn`ofFGsROO;gsWD=ugR1G7mQ(DQA zE2P_KWK&EX>4Tx04R}tkv&MmKpe$iQ>9WW4i*t{$WWauh)QwPDionYs1;guFuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~_a1le0HIN3n$;>4zH zaNZ}5va+lapA(OnbV1@rt}7nDaW1(m@XV;0&CC%;iN#U}D;>Ej=A{Svtpa#g^{ zF^>&skX=9cAN=mtDo###Ns%Pb{o*(uBS2^uXx1I)``B@sCqVESxYFDHjRr9NNqW7l z#g2f!ZQ$a%ttorJh;#z$LRx*rLNL9z`-Ff zTB7VVpLh3k_V(|YR)0UF=W@H&5}cg?000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rg2MQKC2xJ+RYybcN8FWQhbVF}#ZDnqB07G(RVRU6= zAa`kWXdp*PO;A^X4i^9b0@+DKK~y-)J(Ejs8&v>>zq$9$of*%Jow4J@&V#mYQmIG< zi8Tv;C2RI2tF<7@DwGm* z6HOdRZto0ALO0R4uEXh@l)#q^20j3jiJ`14s+(wB<#0TTQ3@7|HDzUK1p=qll^k=hq*{3@Xv->qcAd$kMSX=Jz4LdtNYW#MAt0n(gIUT1cxgm007@ucI>7XP;q2laq2EhK% z!&MHd-Bwif2Iwk>FJC2SE%@!vN7BcVpFb%_4eiqQ^V!;66fb1KDT9Q zNfHlFJEU37dR<|P&6IE6uXy$(B#tD$ub4~?QabdvJ$z50qDW({W%kif6g9&^fGHZJ zaOftQqfx|SvF7&900o_ni|+~UJ}k-d2KD;)e`vK7&z^)V(lz7rj3^ZB4O=KBxVXw$ qmkr%S6NWD5mzzwU9{TJJCI14D`bo$BDI)&>0000@B literal 0 HcmV?d00001 diff --git a/episode-13/textures/yellow_flower.png b/episode-13/textures/yellow_flower.png new file mode 100644 index 0000000000000000000000000000000000000000..6f35174d4b0b3fe60e0445a16274d058346b7d57 GIT binary patch literal 694 zcmV;n0!jUeP)EX>4Tx04R}tkv&MmKpe$iQ>9WW4i+imkfAzR5EXIMDionYs1;guFuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~_a1le0HIN3n$;;BvB z;Ji;9Wo204LKlt6PRh$_2k|If<`^9lShJny7(5ySo_p#$NPk`VvaHY5X8x3Iklk|F9 ziyr}f+rY(jTT}Lc%N-#0WXPuMNh;#z$LRx*rLNL9z`-Ff zQljiNpLh3k_V(|YR)0TQ1#+Eku*4()000JJOGiWi{{a60|De66lK=n!32;bRa{vGf z6951U69E94oEQKA00(qQO+^Rg2MQJ*B2G%Z8~^|S8FWQhbVF}#ZDnqB07G(RVRU6= zAa`kWXdp*PO;A^X4i^9b0FOyTK~y-)V_+BsqW}jubD8P?$Dd6985kHCKK^9-zikgA zoR1EeunC&z{$sp-3t|uh0|Ud2>;D<}+5a&TZNSH$O#fBY7#Lo?{Le6V)<3wbNcM_Y zJHvmmb_To}nFty3>kh;qfn@9kVfB|lGQ)p16@&o{3=9k(<}wf;1|Q}!Fv2wA(~Q>( c_%tB{0EDhJ&^+$p^#A|>07*qoM6N<$f}_JB-v9sr literal 0 HcmV?d00001 diff --git a/episode-13/vert.glsl b/episode-13/vert.glsl new file mode 100644 index 00000000..5a945d25 --- /dev/null +++ b/episode-13/vert.glsl @@ -0,0 +1,18 @@ +#version 330 + +layout(location = 0) in vec3 vertex_position; +layout(location = 1) in vec3 tex_coords; +layout(location = 2) in float shading_value; + +out vec3 local_position; +out vec3 interpolated_tex_coords; +out float interpolated_shading_value; + +uniform mat4 matrix; + +void main(void) { + local_position = vertex_position; + interpolated_tex_coords = tex_coords; + interpolated_shading_value = shading_value; + gl_Position = matrix * vec4(vertex_position, 1.0); +} \ No newline at end of file diff --git a/episode-13/vscode_mcpy_extension/language-configuration.json b/episode-13/vscode_mcpy_extension/language-configuration.json new file mode 100644 index 00000000..6bd45cbc --- /dev/null +++ b/episode-13/vscode_mcpy_extension/language-configuration.json @@ -0,0 +1,33 @@ +{ + "comments": { + "lineComment": "#" + }, + "brackets": [ + [ + "[", + "]" + ], + ], + "autoClosingPairs": [ + { + "open": "\"", + "close": "\"", + "notIn": ["string"] + }, + { + "open": "[", + "close": "]", + "notIn": ["comment"] + }, + ], + "surroundingPairs": [ + [ + "\"", + "\"" + ], + [ + "[", + "]" + ], + ] +} \ No newline at end of file diff --git a/episode-13/vscode_mcpy_extension/package.json b/episode-13/vscode_mcpy_extension/package.json new file mode 100644 index 00000000..443213de --- /dev/null +++ b/episode-13/vscode_mcpy_extension/package.json @@ -0,0 +1,36 @@ +{ + "name": "mcpy", + "displayName": "MCPY", + "description": "Syntax highlighting for MCPY data files", + "categories": [ + "Programming Languages" + ], + "publisher": "obiwac", + "author": { + "name": "obiwac" + }, + "homepage": "https://github.com/obiwac/python-minecraft-clone", + "version": "0.0.1", + "engines": { + "vscode": "^1.22.0" + }, + "contributes": { + "languages": [{ + "id": "mcpy_blocks", + "aliases": [ + "MCPY Blocks" + ], + "filenames": [ + "blocks.mcpy" + ], + "configuration": "./language-configuration.json" + }], + "grammars": [ + { + "language": "mcpy_blocks", + "scopeName": "source.mcpy_blocks", + "path": "./syntaxes/mcpy_blocks.tmLanguage.json" + } + ] + } +} \ No newline at end of file diff --git a/episode-13/vscode_mcpy_extension/syntaxes/mcpy_blocks.tmLanguage.json b/episode-13/vscode_mcpy_extension/syntaxes/mcpy_blocks.tmLanguage.json new file mode 100644 index 00000000..0e382d2d --- /dev/null +++ b/episode-13/vscode_mcpy_extension/syntaxes/mcpy_blocks.tmLanguage.json @@ -0,0 +1,36 @@ +{ + "name": "mcpy_blocks", + "scopeName": "source.mcpy_blocks", + "patterns": [ + { + "name": "keyword.control.mcpy_blocks", + "match": "\\b(name|texture|model)\\b" + }, + { + "name": "keyword.operator.mcpy_blocks", + "match": "\\b(sameas)\\b" + }, + { + "name": "constant.language.mcpy_blocks", + "match": "\\b(all|sides|x|y|z|top|bottom|front|back|left|right)\\b" + }, + { + "name": "constant.numeric.mcpy_blocks", + "match": "\\b[0-9]+\\b" + }, + { + "name": "comment.line.mcpy_blocks", + "begin": "#", + "end": "$" + }, + { + "name": "string.quoted.double.mcpy_blocks", + "begin": "\"", + "end": "\"", + "patterns": [{ + "name": "constant.character.escape.mcpy_blocks", + "match": "\\\\." + }] + } + ] +} \ No newline at end of file diff --git a/episode-13/world.py b/episode-13/world.py new file mode 100644 index 00000000..8c095100 --- /dev/null +++ b/episode-13/world.py @@ -0,0 +1,176 @@ +import math +import random + +import save +import chunk + +import block_type +import texture_manager + +# import custom block models + +import models + +class World: + def __init__(self): + self.texture_manager = texture_manager.Texture_manager(16, 16, 256) + self.block_types = [None] + + # parse block type data file + + blocks_data_file = open("data/blocks.mcpy") + blocks_data = blocks_data_file.readlines() + blocks_data_file.close() + + for block in blocks_data: + if block[0] in ['\n', '#']: # skip if empty line or comment + continue + + number, props = block.split(':', 1) + number = int(number) + + # default block + + name = "Unknown" + model = models.cube + texture = {"all": "unknown"} + + # read properties + + for prop in props.split(','): + prop = prop.strip() + prop = list(filter(None, prop.split(' ', 1))) + + if prop[0] == "sameas": + sameas_number = int(prop[1]) + + name = self.block_types[sameas_number].name + texture = self.block_types[sameas_number].block_face_textures + model = self.block_types[sameas_number].model + + elif prop[0] == "name": + name = eval(prop[1]) + + elif prop[0][:7] == "texture": + _, side = prop[0].split('.') + texture[side] = prop[1].strip() + + elif prop[0] == "model": + model = eval(prop[1]) + + # add block type + + _block_type = block_type.Block_type(self.texture_manager, name, texture, model) + + if number < len(self.block_types): + self.block_types[number] = _block_type + + else: + self.block_types.append(_block_type) + + self.texture_manager.generate_mipmaps() + + # load the world + + self.save = save.Save(self) + + self.chunks = {} + self.save.load() + + for chunk_position in self.chunks: + self.chunks[chunk_position].update_subchunk_meshes() + self.chunks[chunk_position].update_mesh() + + def get_chunk_position(self, position): + x, y, z = position + + return ( + math.floor(x / chunk.CHUNK_WIDTH), + math.floor(y / chunk.CHUNK_HEIGHT), + math.floor(z / chunk.CHUNK_LENGTH)) + + def get_local_position(self, position): + x, y, z = position + + return ( + int(x % chunk.CHUNK_WIDTH), + int(y % chunk.CHUNK_HEIGHT), + int(z % chunk.CHUNK_LENGTH)) + + def get_block_number(self, position): + x, y, z = position + chunk_position = self.get_chunk_position(position) + + if not chunk_position in self.chunks: + return 0 + + lx, ly, lz = self.get_local_position(position) + + block_number = self.chunks[chunk_position].blocks[lx][ly][lz] + return block_number + + def is_opaque_block(self, position): + # get block type and check if it's opaque or not + # air counts as a transparent block, so test for that too + + block_type = self.block_types[self.get_block_number(position)] + + if not block_type: + return False + + return not block_type.transparent + + def set_block(self, position, number): # set number to 0 (air) to remove block + x, y, z = position + chunk_position = self.get_chunk_position(position) + + if not chunk_position in self.chunks: # if no chunks exist at this position, create a new one + if number == 0: + return # no point in creating a whole new chunk if we're not gonna be adding anything + + self.chunks[chunk_position] = chunk.Chunk(self, chunk_position) + + if self.get_block_number(position) == number: # no point updating mesh if the block is the same + return + + lx, ly, lz = self.get_local_position(position) + + self.chunks[chunk_position].blocks[lx][ly][lz] = number + self.chunks[chunk_position].modified = True + + self.chunks[chunk_position].update_at_position((x, y, z)) + self.chunks[chunk_position].update_mesh() + + cx, cy, cz = chunk_position + + def try_update_chunk_at_position(chunk_position, position): + if chunk_position in self.chunks: + self.chunks[chunk_position].update_at_position(position) + self.chunks[chunk_position].update_mesh() + + if lx == chunk.CHUNK_WIDTH - 1: try_update_chunk_at_position((cx + 1, cy, cz), (x + 1, y, z)) + if lx == 0: try_update_chunk_at_position((cx - 1, cy, cz), (x - 1, y, z)) + + if ly == chunk.CHUNK_HEIGHT - 1: try_update_chunk_at_position((cx, cy + 1, cz), (x, y + 1, z)) + if ly == 0: try_update_chunk_at_position((cx, cy - 1, cz), (x, y - 1, z)) + + if lz == chunk.CHUNK_LENGTH - 1: try_update_chunk_at_position((cx, cy, cz + 1), (x, y, z + 1)) + if lz == 0: try_update_chunk_at_position((cx, cy, cz - 1), (x, y, z - 1)) + + def try_set_block(self, pos, num, collider): + # if we're trying to remove a block, whatever let it go through + + if not num: + return self.set_block(pos, 0) + + # make sure the block doesn't intersect with the passed collider + + for block_collider in self.block_types[num].colliders: + if collider & (block_collider + pos): + return + + self.set_block(pos, num) + + def draw(self): + for chunk_position in self.chunks: + self.chunks[chunk_position].draw() \ No newline at end of file From 6667647ec00ec62f48d21027996411652d40536d Mon Sep 17 00:00:00 2001 From: obiwac Date: Fri, 4 Feb 2022 17:06:01 +0100 Subject: [PATCH 02/45] ep13: entities data file --- episode-13/data/entities.mcpy | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 episode-13/data/entities.mcpy diff --git a/episode-13/data/entities.mcpy b/episode-13/data/entities.mcpy new file mode 100644 index 00000000..9051ea44 --- /dev/null +++ b/episode-13/data/entities.mcpy @@ -0,0 +1,12 @@ +# not actually sure of the ID's yet, I can't find a reference for them anywhere atm + +1: name "Player", model player, texture steve +2: name "Pig", model pig, texture pig +3: name "Zombie", model zombie, texture zombie +4: name "Skeleton", model skeleton, texture skeleton +5: name "Creeper", model creeper, texture creeper +6: name "Spider", model spider, texture spider +7: name "Sheep", model sheep, texture sheep +8: name "Giant", model giant, texture giant +9: name "Cow", model cow, texture cow +10: name "Slime", model slime, texture slime \ No newline at end of file From 53d9289c1c4c0a11507cff5b43302acb42f48841 Mon Sep 17 00:00:00 2001 From: obiwac Date: Fri, 4 Feb 2022 17:14:22 +0100 Subject: [PATCH 03/45] ep13: collision sizes for all entities --- episode-13/data/entities.mcpy | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/episode-13/data/entities.mcpy b/episode-13/data/entities.mcpy index 9051ea44..d2574d4f 100644 --- a/episode-13/data/entities.mcpy +++ b/episode-13/data/entities.mcpy @@ -1,12 +1,12 @@ # not actually sure of the ID's yet, I can't find a reference for them anywhere atm -1: name "Player", model player, texture steve -2: name "Pig", model pig, texture pig -3: name "Zombie", model zombie, texture zombie -4: name "Skeleton", model skeleton, texture skeleton -5: name "Creeper", model creeper, texture creeper -6: name "Spider", model spider, texture spider -7: name "Sheep", model sheep, texture sheep -8: name "Giant", model giant, texture giant -9: name "Cow", model cow, texture cow -10: name "Slime", model slime, texture slime \ No newline at end of file +1: name "Player", width 0.6, height 1.8, model player, texture steve +2: name "Pig", width 0.9, height 0.9, model pig, texture pig +3: name "Zombie", width 0.6, height 1.95, model zombie, texture zombie +4: name "Skeleton", width 0.6, height 1.99, model skeleton, texture skeleton +5: name "Creeper", width 0.6, height 1.7, model creeper, texture creeper +6: name "Spider", width 1.4, height 0.9, model spider, texture spider +7: name "Sheep", width 0.9, height 1.3, model sheep, texture sheep +8: name "Giant", width 3.6, height 12, model giant, texture giant +9: name "Cow", width 0.9, height 1.3, model cow, texture cow +10: name "Slime", width 2.08, height 2.08, model slime, texture slime \ No newline at end of file From f3cf6a1ac657210044735e2d22b3df9310548b4f Mon Sep 17 00:00:00 2001 From: obiwac Date: Fri, 11 Feb 2022 23:30:21 +0100 Subject: [PATCH 04/45] ep12: changed the way acceleration from inputs & friction work --- episode-12/entity.py | 49 +++++++++++++++++++++++++++++--------------- episode-12/main.py | 16 +++++++-------- episode-12/player.py | 15 +++++++++----- episode-12/save.py | 4 ++++ 4 files changed, 54 insertions(+), 30 deletions(-) diff --git a/episode-12/entity.py b/episode-12/entity.py index 4ac51087..3dd6078c 100644 --- a/episode-12/entity.py +++ b/episode-12/entity.py @@ -4,6 +4,14 @@ FLYING_ACCEL = (0, 0, 0) GRAVITY_ACCEL = (0, -32, 0) +# these values all come (losely) from Minecraft, but are multiplied by 20 (since Minecraft runs at 20 TPS) + +FRICTION = (14, 14, 14) + +DRAG_FLY = ( 5, 5, 5) +DRAG_JUMP = (1.8, 0, 1.8) +DRAG_FALL = (1.8, 0.4, 1.8) + class Entity: def __init__(self, world): self.world = world @@ -17,6 +25,7 @@ def __init__(self, world): self.rotation = [-math.tau / 4, 0] self.velocity = [0, 0, 0] + self.accel = [0, 0, 0] # collision variables @@ -53,7 +62,25 @@ def jump(self, height = None): self.velocity[1] = math.sqrt(2 * height * -GRAVITY_ACCEL[1]) + @property + def friction(self): + if self.flying: + return DRAG_FLY + + elif self.grounded: + return FRICTION + + elif self.velocity[1] > 0: + return DRAG_JUMP + + return DRAG_FALL + def update(self, delta_time): + # apply input acceleration, and adjust for friction/drag + + self.velocity = [v + a * f * delta_time for v, a, f in zip(self.velocity, self.accel, self.friction)] + self.accel = [0, 0, 0] + # compute collisions self.update_collider() @@ -120,26 +147,14 @@ def update(self, delta_time): self.position = [x + v * delta_time for x, v in zip(self.position, self.velocity)] - # process physics (apply acceleration, friction, & drag) - - acceleration = (GRAVITY_ACCEL, FLYING_ACCEL)[self.flying] - self.velocity = [v + a * delta_time for v, a in zip(self.velocity, acceleration)] - - if self.grounded or self.flying: - k = 0.05 ** (20 * delta_time) # takes 95% off of current velocity every 20th of a second - - self.velocity[0] *= k - self.velocity[1] *= k - self.velocity[2] *= k + # apply gravity acceleration - else: - k = 0.98 ** (20 * delta_time) # takes 2% off of current velocity every 20th of a second + gravity = (GRAVITY_ACCEL, FLYING_ACCEL)[self.flying] + self.velocity = [v + a * delta_time for v, a in zip(self.velocity, gravity)] - self.velocity[0] *= k - self.velocity[2] *= k + # apply friction/drag - if self.velocity[1] < 0: - self.velocity[1] *= k + self.velocity = [v - min(v * f * delta_time, v, key = abs) for v, f in zip(self.velocity, self.friction)] # make sure we can rely on the entity's collider outside of this function diff --git a/episode-12/main.py b/episode-12/main.py index fefb347f..72525713 100644 --- a/episode-12/main.py +++ b/episode-12/main.py @@ -47,7 +47,7 @@ def __init__(self, **args): # misc stuff self.holding = 44 # 5 - + def update(self, delta_time): # print(f"FPS: {1.0 / delta_time}") @@ -55,7 +55,7 @@ def update(self, delta_time): self.player.input = [0, 0, 0] self.player.update(delta_time) - + def on_draw(self): self.player.update_matrices() @@ -75,7 +75,7 @@ def on_draw(self): self.world.draw() gl.glFinish() - + # input functions def on_resize(self, width, height): @@ -107,7 +107,7 @@ def hit_callback(current_block, next_block): while hit_ray.distance < hit.HIT_RANGE: if hit_ray.step(hit_callback): break - + def on_mouse_motion(self, x, y, delta_x, delta_y): if self.mouse_captured: sensitivity = 0.004 @@ -116,10 +116,10 @@ def on_mouse_motion(self, x, y, delta_x, delta_y): self.player.rotation[1] += delta_y * sensitivity self.player.rotation[1] = max(-math.tau / 4, min(math.tau / 4, self.player.rotation[1])) - + def on_mouse_drag(self, x, y, delta_x, delta_y, buttons, modifiers): self.on_mouse_motion(x, y, delta_x, delta_y) - + def on_key_press(self, key, modifiers): if not self.mouse_captured: return @@ -178,7 +178,7 @@ def on_key_press(self, key, modifiers): elif key == pyglet.window.key.ESCAPE: self.mouse_captured = False self.set_exclusive_mouse(False) - + def on_key_release(self, key, modifiers): if not self.mouse_captured: return @@ -196,7 +196,7 @@ class Game: def __init__(self): self.config = gl.Config(major_version = 3, minor_version = 3, depth_size = 16) self.window = Window(config = self.config, width = 800, height = 600, caption = "Minecraft clone", resizable = True, vsync = False) - + def run(self): pyglet.app.run() diff --git a/episode-12/player.py b/episode-12/player.py index dbb3f764..b6b0e9ef 100644 --- a/episode-12/player.py +++ b/episode-12/player.py @@ -33,17 +33,22 @@ def __init__(self, world, shader, width, height): def update(self, delta_time): # process input - self.speed += (self.target_speed - self.speed) * delta_time * 20 - multiplier = self.speed + if delta_time * 20 > 1: + self.speed = self.target_speed + + else: + self.speed += (self.target_speed - self.speed) * delta_time * 20 + + multiplier = self.speed * (1, 2)[self.flying] if self.flying and self.input[1]: - self.velocity[1] = self.input[1] * multiplier + self.accel[1] = self.input[1] * multiplier if self.input[0] or self.input[2]: angle = self.rotation[0] - math.atan2(self.input[2], self.input[0]) + math.tau / 4 - self.velocity[0] = math.cos(angle) * multiplier - self.velocity[2] = math.sin(angle) * multiplier + self.accel[0] = math.cos(angle) * multiplier + self.accel[2] = math.sin(angle) * multiplier if not self.flying and self.input[1] > 0: self.jump() diff --git a/episode-12/save.py b/episode-12/save.py index 6a9d9bb2..4b8fab47 100644 --- a/episode-12/save.py +++ b/episode-12/save.py @@ -79,6 +79,10 @@ def load(self): # for y in range(-15, 16): # self.load_chunk((x, 0, y)) + # for x in range(-4, 4): + # for y in range(-4, 4): + # self.load_chunk((x, 0, y)) + for x in range(-1, 1): for y in range(-1, 1): self.load_chunk((x, 0, y)) From 23cf38f7ce9239d057260aa9a55d554da11a448d Mon Sep 17 00:00:00 2001 From: obiwac Date: Mon, 14 Mar 2022 01:43:34 +0100 Subject: [PATCH 05/45] ep13: Mobs prototype --- episode-13/block_type.py | 3 +- episode-13/data/blocks.mcpy | 2 +- episode-13/data/entities.mcpy | 20 +- episode-13/entity.py | 100 +++-- episode-13/entity_type.py | 109 ++++++ episode-13/main.py | 45 +-- episode-13/models/__init__.py | 8 +- episode-13/models/cow.py | 11 + episode-13/models/creeper.py | 11 + episode-13/models/pig.py | 11 + episode-13/models/skeleton.py | 11 + episode-13/models/spider.py | 11 + episode-13/models/zombie.py | 11 + episode-13/player.py | 31 +- episode-13/save.py | 4 + episode-13/{ => shaders/block}/frag.glsl | 0 episode-13/{ => shaders/block}/vert.glsl | 0 episode-13/shaders/entity/frag.glsl | 17 + episode-13/shaders/entity/vert.glsl | 15 + episode-13/texture_manager.py | 4 +- episode-13/textures/entity/cow.png | Bin 0 -> 1948 bytes episode-13/textures/entity/creeper.png | Bin 0 -> 3074 bytes episode-13/textures/entity/pig.png | Bin 0 -> 1391 bytes episode-13/textures/entity/skeleton.png | Bin 0 -> 1183 bytes episode-13/textures/entity/spider.png | Bin 0 -> 2268 bytes episode-13/textures/entity/zombie.png | Bin 0 -> 1734 bytes episode-13/work/convert.py | 165 ++++++++ episode-13/work/models/cow.json | 334 ++++++++++++++++ episode-13/work/models/creeper.json | 254 +++++++++++++ episode-13/work/models/pig.json | 286 ++++++++++++++ episode-13/work/models/skeleton.json | 304 +++++++++++++++ episode-13/work/models/spider.json | 460 +++++++++++++++++++++++ episode-13/work/models/zombie.json | 299 +++++++++++++++ episode-13/world.py | 112 +++++- 34 files changed, 2547 insertions(+), 91 deletions(-) create mode 100644 episode-13/entity_type.py create mode 100644 episode-13/models/cow.py create mode 100644 episode-13/models/creeper.py create mode 100644 episode-13/models/pig.py create mode 100644 episode-13/models/skeleton.py create mode 100644 episode-13/models/spider.py create mode 100644 episode-13/models/zombie.py rename episode-13/{ => shaders/block}/frag.glsl (100%) rename episode-13/{ => shaders/block}/vert.glsl (100%) create mode 100644 episode-13/shaders/entity/frag.glsl create mode 100644 episode-13/shaders/entity/vert.glsl create mode 100644 episode-13/textures/entity/cow.png create mode 100644 episode-13/textures/entity/creeper.png create mode 100644 episode-13/textures/entity/pig.png create mode 100644 episode-13/textures/entity/skeleton.png create mode 100644 episode-13/textures/entity/spider.png create mode 100644 episode-13/textures/entity/zombie.png create mode 100644 episode-13/work/convert.py create mode 100644 episode-13/work/models/cow.json create mode 100644 episode-13/work/models/creeper.json create mode 100644 episode-13/work/models/pig.json create mode 100644 episode-13/work/models/skeleton.json create mode 100644 episode-13/work/models/spider.json create mode 100644 episode-13/work/models/zombie.json diff --git a/episode-13/block_type.py b/episode-13/block_type.py index 8b0668bb..5b3c433e 100644 --- a/episode-13/block_type.py +++ b/episode-13/block_type.py @@ -3,7 +3,6 @@ import models.cube # default model class Block_type: - # new optional model argument (cube model by default) def __init__(self, texture_manager, name = "unknown", block_face_textures = {"all": "cobblestone"}, model = models.cube): self.name = name self.block_face_textures = block_face_textures @@ -22,7 +21,7 @@ def __init__(self, texture_manager, name = "unknown", block_face_textures = {"al for _collider in model.colliders: self.colliders.append(collider.Collider(*_collider)) - # replace data contained in numbers.py with model specific data + # get model specific data self.vertex_positions = model.vertex_positions self.tex_coords = model.tex_coords.copy() diff --git a/episode-13/data/blocks.mcpy b/episode-13/data/blocks.mcpy index 999194ba..e3479b12 100644 --- a/episode-13/data/blocks.mcpy +++ b/episode-13/data/blocks.mcpy @@ -88,4 +88,4 @@ 81: name "Cactus", model models.cactus, texture.top cactus_top, texture.bottom cactus_bottom, texture.sides cactus_side 82: name "Clay", texture.all clay 83: name "Sugar Cane", model models.plant, texture.all sugar_cane -84: name "Jukebox", texture.all jukebox, texture.top jukebox_top +84: name "Jukebox", texture.all jukebox, texture.top jukebox_top \ No newline at end of file diff --git a/episode-13/data/entities.mcpy b/episode-13/data/entities.mcpy index d2574d4f..75ea6d2a 100644 --- a/episode-13/data/entities.mcpy +++ b/episode-13/data/entities.mcpy @@ -1,12 +1,12 @@ # not actually sure of the ID's yet, I can't find a reference for them anywhere atm -1: name "Player", width 0.6, height 1.8, model player, texture steve -2: name "Pig", width 0.9, height 0.9, model pig, texture pig -3: name "Zombie", width 0.6, height 1.95, model zombie, texture zombie -4: name "Skeleton", width 0.6, height 1.99, model skeleton, texture skeleton -5: name "Creeper", width 0.6, height 1.7, model creeper, texture creeper -6: name "Spider", width 1.4, height 0.9, model spider, texture spider -7: name "Sheep", width 0.9, height 1.3, model sheep, texture sheep -8: name "Giant", width 3.6, height 12, model giant, texture giant -9: name "Cow", width 0.9, height 1.3, model cow, texture cow -10: name "Slime", width 2.08, height 2.08, model slime, texture slime \ No newline at end of file +#1: name "Player", width 0.6, height 1.8, model models.player, texture steve +2: name "Pig", width 0.9, height 0.9, model models.pig, texture pig +3: name "Zombie", width 0.6, height 1.95, model models.zombie, texture zombie +4: name "Skeleton", width 0.6, height 1.99, model models.skeleton, texture skeleton +5: name "Creeper", width 0.6, height 1.7, model models.creeper, texture creeper +6: name "Spider", width 1.4, height 0.9, model models.spider, texture spider +#7: name "Sheep", width 0.9, height 1.3, model models.sheep, texture sheep +#8: name "Giant", width 3.6, height 12, model models.giant, texture giant +9: name "Cow", width 0.9, height 1.3, model models.cow, texture cow +#10: name "Slime", width 2.08, height 2.08, model models.slime, texture slime \ No newline at end of file diff --git a/episode-13/entity.py b/episode-13/entity.py index 4ac51087..e614246e 100644 --- a/episode-13/entity.py +++ b/episode-13/entity.py @@ -1,12 +1,23 @@ import math + +import matrix import collider -FLYING_ACCEL = (0, 0, 0) +FLYING_ACCEL = (0, 0, 0) GRAVITY_ACCEL = (0, -32, 0) +# these values all come (losely) from Minecraft, but are multiplied by 20 (since Minecraft runs at 20 TPS) + +FRICTION = ( 20, 20, 20) + +DRAG_FLY = ( 5, 5, 5) +DRAG_JUMP = (1.8, 0, 1.8) +DRAG_FALL = (1.8, 0.4, 1.8) + class Entity: - def __init__(self, world): + def __init__(self, world, entity_type, width = 0.6, height = 1.8): self.world = world + self.entity_type = entity_type # physical variables @@ -17,26 +28,24 @@ def __init__(self, world): self.rotation = [-math.tau / 4, 0] self.velocity = [0, 0, 0] + self.accel = [0, 0, 0] # collision variables - self.width = 0.6 - self.height = 1.8 - self.collider = collider.Collider() self.grounded = False def update_collider(self): x, y, z = self.position - self.collider.x1 = x - self.width / 2 - self.collider.x2 = x + self.width / 2 + self.collider.x1 = x - self.entity_type.width / 2 + self.collider.x2 = x + self.entity_type.width / 2 self.collider.y1 = y - self.collider.y2 = y + self.height + self.collider.y2 = y + self.entity_type.height - self.collider.z1 = z - self.width / 2 - self.collider.z2 = z + self.width / 2 + self.collider.z1 = z - self.entity_type.width / 2 + self.collider.z2 = z + self.entity_type.width / 2 def teleport(self, pos): self.position = list(pos) @@ -51,9 +60,27 @@ def jump(self, height = None): if height is None: height = self.jump_height - self.velocity[1] = math.sqrt(2 * height * -GRAVITY_ACCEL[1]) + self.velocity[1] = math.sqrt(-2 * GRAVITY_ACCEL[1] * height) + + @property + def friction(self): + if self.flying: + return DRAG_FLY + + elif self.grounded: + return FRICTION + + elif self.velocity[1] > 0: + return DRAG_JUMP + + return DRAG_FALL def update(self, delta_time): + # apply input acceleration, and adjust for friction/drag + + self.velocity = [v + a * f * delta_time for v, a, f in zip(self.velocity, self.accel, self.friction)] + self.accel = [0, 0, 0] + # compute collisions self.update_collider() @@ -70,8 +97,8 @@ def update(self, delta_time): step_y = 1 if vy > 0 else -1 step_z = 1 if vz > 0 else -1 - steps_xz = int(self.width / 2) - steps_y = int(self.height) + steps_xz = int(self.entity_type.width / 2) + steps_y = int(self.entity_type.height) x, y, z = map(int, self.position) cx, cy, cz = [int(x + v) for x, v in zip(self.position, adjusted_velocity)] @@ -120,27 +147,42 @@ def update(self, delta_time): self.position = [x + v * delta_time for x, v in zip(self.position, self.velocity)] - # process physics (apply acceleration, friction, & drag) + # apply gravity acceleration - acceleration = (GRAVITY_ACCEL, FLYING_ACCEL)[self.flying] - self.velocity = [v + a * delta_time for v, a in zip(self.velocity, acceleration)] + gravity = FLYING_ACCEL if self.flying else GRAVITY_ACCEL + self.velocity = [v + a * delta_time for v, a in zip(self.velocity, gravity)] - if self.grounded or self.flying: - k = 0.05 ** (20 * delta_time) # takes 95% off of current velocity every 20th of a second + # apply friction/drag - self.velocity[0] *= k - self.velocity[1] *= k - self.velocity[2] *= k + self.velocity = [v - min(v * f * delta_time, v, key = abs) for v, f in zip(self.velocity, self.friction)] - else: - k = 0.98 ** (20 * delta_time) # takes 2% off of current velocity every 20th of a second + # make sure we can rely on the entity's collider outside of this function - self.velocity[0] *= k - self.velocity[2] *= k + self.update_collider() - if self.velocity[1] < 0: - self.velocity[1] *= k + def ai(self, delta_time): + import random - # make sure we can rely on the entity's collider outside of this function + if not random.randint(0, 500): + self.rotation[0] += random.uniform(-3, 3) + + self.accel[0] = math.cos(self.rotation[0] + math.tau / 4) * 3 + self.accel[2] = -math.sin(self.rotation[0] + math.tau / 4) * 3 + + self.jump() + + if self.position[1] < 0: + self.position = [0, 80, 0] + + def draw(self): + # compute transformation matrix + + _matrix = matrix.copy_matrix(self.world.mvp_matrix) + + _matrix.translate(*self.position) + _matrix.rotate_2d(*self.rotation) + + # actually draw entity - self.update_collider() \ No newline at end of file + self.world.entity_shader.uniform_matrix(self.world.entity_shader_matrix_location, _matrix) + self.entity_type.draw() \ No newline at end of file diff --git a/episode-13/entity_type.py b/episode-13/entity_type.py new file mode 100644 index 00000000..073bec55 --- /dev/null +++ b/episode-13/entity_type.py @@ -0,0 +1,109 @@ +import ctypes +import pyglet + +import pyglet.gl as gl + +import models.pig # default model + +class Entity_type: + def __init__(self, world, name = "unknown", texture = "pig", model = models.pig, width = 0.6, height = 1.8): + self.world = world + + self.name = name + self.model = model + + self.width = width + self.height = height + + # load texture image + + texture_image = pyglet.image.load(f"textures/entity/{texture}.png").get_image_data() + + self.texture_width = texture_image.width + self.texture_height = texture_image.height + + # create texture + + self.texture = gl.GLuint(0) + gl.glGenTextures(1, self.texture) + gl.glBindTexture(gl.GL_TEXTURE_2D, self.texture) + + gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MIN_FILTER, gl.GL_NEAREST) + gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MAG_FILTER, gl.GL_NEAREST) + + gl.glTexImage2D( + gl.GL_TEXTURE_2D, 0, gl.GL_RGBA, + self.texture_width, self.texture_height, + 0, gl.GL_RGBA, gl.GL_UNSIGNED_BYTE, + texture_image.get_data("RGBA", self.texture_width * 4)) + + gl.glGenerateMipmap(gl.GL_TEXTURE_2D) + + # convert model to arrays we can send to the GPU + + self.vertices = sum(model.vertex_positions, []) + self.tex_coords = sum(model.tex_coords, []) + + self.indices = [] + index_counter = 0 + + for i in range(len(model.vertex_positions)): + self.indices.extend(x + index_counter for x in (0, 1, 2, 0, 2, 3)) + index_counter += 4 + + # create VAO/VBO/IBO + + self.vao = gl.GLuint(0) + gl.glGenVertexArrays(1, self.vao) + gl.glBindVertexArray(self.vao) + + self.vertices_vbo = gl.GLuint(0) + gl.glGenBuffers(1, self.vertices_vbo) + + gl.glBindBuffer(gl.GL_ARRAY_BUFFER, self.vertices_vbo) + gl.glBufferData( + gl.GL_ARRAY_BUFFER, + ctypes.sizeof(gl.GLfloat * len(self.vertices)), + (gl.GLfloat * len(self.vertices)) (*self.vertices), + gl.GL_STATIC_DRAW) + + gl.glVertexAttribPointer(0, 3, gl.GL_FLOAT, gl.GL_FALSE, 0, 0) + gl.glEnableVertexAttribArray(0) + + self.tex_coords_vbo = gl.GLuint(0) + gl.glGenBuffers(1, self.tex_coords_vbo) + + gl.glBindBuffer(gl.GL_ARRAY_BUFFER, self.tex_coords_vbo) + gl.glBufferData( + gl.GL_ARRAY_BUFFER, + ctypes.sizeof(gl.GLfloat * len(self.tex_coords)), + (gl.GLfloat * len(self.tex_coords)) (*self.tex_coords), + gl.GL_STATIC_DRAW) + + # texture coordinates are still 3D here even though we don't use texture arrays (as is the case with blocks) + # this is so that we can interchange block & entity models + + gl.glVertexAttribPointer(1, 3, gl.GL_FLOAT, gl.GL_FALSE, 0, 0) + gl.glEnableVertexAttribArray(1) + + self.ibo = gl.GLuint(0) + gl.glGenBuffers(1, self.ibo) + + gl.glBindBuffer(gl.GL_ELEMENT_ARRAY_BUFFER, self.ibo) + gl.glBufferData( + gl.GL_ELEMENT_ARRAY_BUFFER, + ctypes.sizeof(gl.GLuint * len(self.indices)), + (gl.GLuint * len(self.indices)) (*self.indices), + gl.GL_STATIC_DRAW) + + def draw(self): + # bind textures + + gl.glActiveTexture(gl.GL_TEXTURE0) + gl.glBindTexture(gl.GL_TEXTURE_2D, self.texture) + gl.glUniform1i(self.world.entity_shader_sampler_location, 0) + + # draw entity + + gl.glBindVertexArray(self.vao) + gl.glDrawElements(gl.GL_TRIANGLES, len(self.indices), gl.GL_UNSIGNED_INT, None) \ No newline at end of file diff --git a/episode-13/main.py b/episode-13/main.py index fefb347f..c82e62a9 100644 --- a/episode-13/main.py +++ b/episode-13/main.py @@ -9,13 +9,8 @@ import pyglet.gl as gl -import matrix -import shader import player -import block_type -import texture_manager - import chunk import world @@ -28,12 +23,6 @@ def __init__(self, **args): # create world self.world = world.World() - - # create shader - - self.shader = shader.Shader("vert.glsl", "frag.glsl") - self.shader_sampler_location = self.shader.find_uniform(b"texture_array_sampler") - self.shader.use() # pyglet stuff @@ -42,12 +31,12 @@ def __init__(self, **args): # player stuff - self.player = player.Player(self.world, self.shader, self.width, self.height) + self.player = player.Player(self.world, self.width, self.height) # misc stuff - self.holding = 44 # 5 - + self.holding = 19 # 5 + def update(self, delta_time): # print(f"FPS: {1.0 / delta_time}") @@ -55,27 +44,27 @@ def update(self, delta_time): self.player.input = [0, 0, 0] self.player.update(delta_time) - - def on_draw(self): - self.player.update_matrices() - # bind textures + # update other entities + + for entity in self.world.entities: + entity.ai(delta_time) + entity.update(delta_time) - gl.glActiveTexture(gl.GL_TEXTURE0) - gl.glBindTexture(gl.GL_TEXTURE_2D_ARRAY, self.world.texture_manager.texture_array) - gl.glUniform1i(self.shader_sampler_location, 0) + def on_draw(self): + self.player.update_matrices() # draw stuff gl.glEnable(gl.GL_DEPTH_TEST) - gl.glEnable(gl.GL_CULL_FACE) gl.glClearColor(0.0, 0.0, 0.0, 0.0) self.clear() + self.world.draw() gl.glFinish() - + # input functions def on_resize(self, width, height): @@ -107,7 +96,7 @@ def hit_callback(current_block, next_block): while hit_ray.distance < hit.HIT_RANGE: if hit_ray.step(hit_callback): break - + def on_mouse_motion(self, x, y, delta_x, delta_y): if self.mouse_captured: sensitivity = 0.004 @@ -116,10 +105,10 @@ def on_mouse_motion(self, x, y, delta_x, delta_y): self.player.rotation[1] += delta_y * sensitivity self.player.rotation[1] = max(-math.tau / 4, min(math.tau / 4, self.player.rotation[1])) - + def on_mouse_drag(self, x, y, delta_x, delta_y, buttons, modifiers): self.on_mouse_motion(x, y, delta_x, delta_y) - + def on_key_press(self, key, modifiers): if not self.mouse_captured: return @@ -178,7 +167,7 @@ def on_key_press(self, key, modifiers): elif key == pyglet.window.key.ESCAPE: self.mouse_captured = False self.set_exclusive_mouse(False) - + def on_key_release(self, key, modifiers): if not self.mouse_captured: return @@ -196,7 +185,7 @@ class Game: def __init__(self): self.config = gl.Config(major_version = 3, minor_version = 3, depth_size = 16) self.window = Window(config = self.config, width = 800, height = 600, caption = "Minecraft clone", resizable = True, vsync = False) - + def run(self): pyglet.app.run() diff --git a/episode-13/models/__init__.py b/episode-13/models/__init__.py index a386bae7..bc04527b 100644 --- a/episode-13/models/__init__.py +++ b/episode-13/models/__init__.py @@ -22,7 +22,13 @@ "button", "snow", "cactus", - "tinted_glass" + "tinted_glass", + "pig", + "zombie", + "skeleton", + "creeper", + "spider", + "cow" ] from . import * diff --git a/episode-13/models/cow.py b/episode-13/models/cow.py new file mode 100644 index 00000000..a79245d5 --- /dev/null +++ b/episode-13/models/cow.py @@ -0,0 +1,11 @@ + +transparent = True +is_cube = False +glass = False + +colliders = [] + +vertex_positions = [[-0.32999515533447266, 0.75, 0.6557807922363281, -0.4280453324317932, 0.7499999403953552, -0.46493828296661377, 0.31910067796707153, 0.7499999403953552, -0.530305027961731, 0.4171508550643921, 0.7499999403953552, 0.5904139280319214], [0.4171508550643921, 1.375, 0.5904139280319214, 0.31910067796707153, 1.3749998807907104, -0.530305027961731, -0.4280453324317932, 1.3749998807907104, -0.46493828296661377, -0.32999515533447266, 1.375, 0.6557807922363281], [-0.4280453324317932, 0.7499999403953552, -0.46493828296661377, -0.4280453324317932, 1.3749998807907104, -0.46493828296661377, 0.31910067796707153, 1.3749998807907104, -0.530305027961731, 0.31910067796707153, 0.7499999403953552, -0.530305027961731], [0.4171508550643921, 0.7499999403953552, 0.5904139280319214, 0.4171508550643921, 1.375, 0.5904139280319214, -0.32999515533447266, 1.375, 0.6557807922363281, -0.32999515533447266, 0.75, 0.6557807922363281], [0.4171508550643921, 0.7499999403953552, 0.5904139280319214, 0.31910067796707153, 0.7499999403953552, -0.530305027961731, 0.31910067796707153, 1.3749998807907104, -0.530305027961731, 0.4171508550643921, 1.375, 0.5904139280319214], [-0.32999515533447266, 1.375, 0.6557807922363281, -0.4280453324317932, 1.3749998807907104, -0.46493828296661377, -0.4280453324317932, 0.7499999403953552, -0.46493828296661377, -0.32999515533447266, 0.75, 0.6557807922363281], [-0.07205101102590561, 0.6875, 0.6353269815444946, -0.1112491711974144, 0.6874999403953552, 0.26238131523132324, 0.13738128542900085, 0.6874999403953552, 0.23624920845031738, 0.17657946050167084, 0.6874999403953552, 0.6091948747634888], [0.17657946050167084, 0.7499999403953552, 0.6091948747634888, 0.13738128542900085, 0.7499999403953552, 0.23624920845031738, -0.1112491711974144, 0.7499999403953552, 0.26238131523132324, -0.07205101102590561, 0.75, 0.6353269815444946], [-0.1112491711974144, 0.6874999403953552, 0.26238131523132324, -0.1112491711974144, 0.7499999403953552, 0.26238131523132324, 0.13738128542900085, 0.7499999403953552, 0.23624920845031738, 0.13738128542900085, 0.6874999403953552, 0.23624920845031738], [0.17657946050167084, 0.6874999403953552, 0.6091948747634888, 0.17657946050167084, 0.7499999403953552, 0.6091948747634888, -0.07205101102590561, 0.75, 0.6353269815444946, -0.07205101102590561, 0.6875, 0.6353269815444946], [0.17657946050167084, 0.6874999403953552, 0.6091948747634888, 0.13738128542900085, 0.6874999403953552, 0.23624920845031738, 0.13738128542900085, 0.7499999403953552, 0.23624920845031738, 0.17657946050167084, 0.7499999403953552, 0.6091948747634888], [-0.07205101102590561, 0.75, 0.6353269815444946, -0.1112491711974144, 0.7499999403953552, 0.26238131523132324, -0.1112491711974144, 0.6874999403953552, 0.26238131523132324, -0.07205101102590561, 0.6875, 0.6353269815444946], [-0.18209344148635864, 0.9469456076622009, -0.875, -0.3030543923377991, 1.4320935010910034, -0.875, 0.18209345638751984, 1.5530544519424438, -0.875, 0.3030543923377991, 1.0679066181182861, -0.875], [0.3030543923377991, 1.0679066181182861, -0.5, 0.18209345638751984, 1.5530544519424438, -0.5, -0.3030543923377991, 1.4320935010910034, -0.5, -0.18209344148635864, 0.9469456076622009, -0.5], [-0.3030543923377991, 1.4320935010910034, -0.875, -0.3030543923377991, 1.4320935010910034, -0.5, 0.18209345638751984, 1.5530544519424438, -0.5, 0.18209345638751984, 1.5530544519424438, -0.875], [0.3030543923377991, 1.0679066181182861, -0.875, 0.3030543923377991, 1.0679066181182861, -0.5, -0.18209344148635864, 0.9469456076622009, -0.5, -0.18209344148635864, 0.9469456076622009, -0.875], [0.3030543923377991, 1.0679066181182861, -0.875, 0.18209345638751984, 1.5530544519424438, -0.875, 0.18209345638751984, 1.5530544519424438, -0.5, 0.3030543923377991, 1.0679066181182861, -0.5], [-0.18209344148635864, 0.9469456076622009, -0.5, -0.3030543923377991, 1.4320935010910034, -0.5, -0.3030543923377991, 1.4320935010910034, -0.875, -0.18209344148635864, 0.9469456076622009, -0.875], [-0.33166012167930603, 1.3072960376739502, -0.75, -0.3706435263156891, 1.4906988143920898, -0.75, -0.3095093071460724, 1.5036933422088623, -0.75, -0.27052590250968933, 1.3202905654907227, -0.75], [-0.27052590250968933, 1.3202905654907227, -0.6875, -0.3095093071460724, 1.5036933422088623, -0.6875, -0.3706435263156891, 1.4906988143920898, -0.6875, -0.33166012167930603, 1.3072960376739502, -0.6875], [-0.3706435263156891, 1.4906988143920898, -0.75, -0.3706435263156891, 1.4906988143920898, -0.6875, -0.3095093071460724, 1.5036933422088623, -0.6875, -0.3095093071460724, 1.5036933422088623, -0.75], [-0.27052590250968933, 1.3202905654907227, -0.75, -0.27052590250968933, 1.3202905654907227, -0.6875, -0.33166012167930603, 1.3072960376739502, -0.6875, -0.33166012167930603, 1.3072960376739502, -0.75], [-0.27052590250968933, 1.3202905654907227, -0.75, -0.3095093071460724, 1.5036933422088623, -0.75, -0.3095093071460724, 1.5036933422088623, -0.6875, -0.27052590250968933, 1.3202905654907227, -0.6875], [-0.33166012167930603, 1.3072960376739502, -0.6875, -0.3706435263156891, 1.4906988143920898, -0.6875, -0.3706435263156891, 1.4906988143920898, -0.75, -0.33166012167930603, 1.3072960376739502, -0.75], [0.21854794025421143, 1.4242463111877441, -0.75, 0.17956450581550598, 1.6076490879058838, -0.75, 0.24069872498512268, 1.6206436157226562, -0.75, 0.2796821594238281, 1.4372408390045166, -0.75], [0.2796821594238281, 1.4372408390045166, -0.6875, 0.24069872498512268, 1.6206436157226562, -0.6875, 0.17956450581550598, 1.6076490879058838, -0.6875, 0.21854794025421143, 1.4242463111877441, -0.6875], [0.17956450581550598, 1.6076490879058838, -0.75, 0.17956450581550598, 1.6076490879058838, -0.6875, 0.24069872498512268, 1.6206436157226562, -0.6875, 0.24069872498512268, 1.6206436157226562, -0.75], [0.2796821594238281, 1.4372408390045166, -0.75, 0.2796821594238281, 1.4372408390045166, -0.6875, 0.21854794025421143, 1.4242463111877441, -0.6875, 0.21854794025421143, 1.4242463111877441, -0.75], [0.2796821594238281, 1.4372408390045166, -0.75, 0.24069872498512268, 1.6206436157226562, -0.75, 0.24069872498512268, 1.6206436157226562, -0.6875, 0.2796821594238281, 1.4372408390045166, -0.6875], [0.21854794025421143, 1.4242463111877441, -0.6875, 0.17956450581550598, 1.6076490879058838, -0.6875, 0.17956450581550598, 1.6076490879058838, -0.75, 0.21854794025421143, 1.4242463111877441, -0.75], [-0.37762898206710815, 0.008301202207803726, 0.3125, -0.3122621774673462, 0.7554472088813782, 0.3125, -0.06321348994970322, 0.7336582541465759, 0.3125, -0.12858030200004578, -0.013487732037901878, 0.3125], [-0.12858030200004578, -0.013487732037901878, 0.5625, -0.06321348994970322, 0.7336582541465759, 0.5625, -0.3122621774673462, 0.7554472088813782, 0.5625, -0.37762898206710815, 0.008301202207803726, 0.5625], [-0.3122621774673462, 0.7554472088813782, 0.3125, -0.3122621774673462, 0.7554472088813782, 0.5625, -0.06321348994970322, 0.7336582541465759, 0.5625, -0.06321348994970322, 0.7336582541465759, 0.3125], [-0.12858030200004578, -0.013487732037901878, 0.3125, -0.12858030200004578, -0.013487732037901878, 0.5625, -0.37762898206710815, 0.008301202207803726, 0.5625, -0.37762898206710815, 0.008301202207803726, 0.3125], [-0.12858030200004578, -0.013487732037901878, 0.3125, -0.06321348994970322, 0.7336582541465759, 0.3125, -0.06321348994970322, 0.7336582541465759, 0.5625, -0.12858030200004578, -0.013487732037901878, 0.5625], [-0.37762898206710815, 0.008301202207803726, 0.5625, -0.3122621774673462, 0.7554472088813782, 0.5625, -0.3122621774673462, 0.7554472088813782, 0.3125, -0.37762898206710815, 0.008301202207803726, 0.3125], [-0.0021533146500587463, 0.019195711240172386, 0.3125, 0.06321349740028381, 0.7663417458534241, 0.3125, 0.3122621774673462, 0.7445527911186218, 0.3125, 0.24689537286758423, -0.0025932230055332184, 0.3125], [0.24689537286758423, -0.0025932230055332184, 0.5625, 0.3122621774673462, 0.7445527911186218, 0.5625, 0.06321349740028381, 0.7663417458534241, 0.5625, -0.0021533146500587463, 0.019195711240172386, 0.5625], [0.06321349740028381, 0.7663417458534241, 0.3125, 0.06321349740028381, 0.7663417458534241, 0.5625, 0.3122621774673462, 0.7445527911186218, 0.5625, 0.3122621774673462, 0.7445527911186218, 0.3125], [0.24689537286758423, -0.0025932230055332184, 0.3125, 0.24689537286758423, -0.0025932230055332184, 0.5625, -0.0021533146500587463, 0.019195711240172386, 0.5625, -0.0021533146500587463, 0.019195711240172386, 0.3125], [0.24689537286758423, -0.0025932230055332184, 0.3125, 0.3122621774673462, 0.7445527911186218, 0.3125, 0.3122621774673462, 0.7445527911186218, 0.5625, 0.24689537286758423, -0.0025932230055332184, 0.5625], [-0.0021533146500587463, 0.019195711240172386, 0.5625, 0.06321349740028381, 0.7663417458534241, 0.5625, 0.06321349740028381, 0.7663417458534241, 0.3125, -0.0021533146500587463, 0.019195711240172386, 0.3125], [-0.2206321358680725, -0.0020264610648155212, -0.4375, -0.31203415989875793, 0.7423831820487976, -0.4375, -0.06389759480953217, 0.772850513458252, -0.4375, 0.027504410594701767, 0.028440875932574272, -0.4375], [0.027504410594701767, 0.028440875932574272, -0.1875, -0.06389759480953217, 0.772850513458252, -0.1875, -0.31203415989875793, 0.7423831820487976, -0.1875, -0.2206321358680725, -0.0020264610648155212, -0.1875], [-0.31203415989875793, 0.7423831820487976, -0.4375, -0.31203415989875793, 0.7423831820487976, -0.1875, -0.06389759480953217, 0.772850513458252, -0.1875, -0.06389759480953217, 0.772850513458252, -0.4375], [0.027504410594701767, 0.028440875932574272, -0.4375, 0.027504410594701767, 0.028440875932574272, -0.1875, -0.2206321358680725, -0.0020264610648155212, -0.1875, -0.2206321358680725, -0.0020264610648155212, -0.4375], [0.027504410594701767, 0.028440875932574272, -0.4375, -0.06389759480953217, 0.772850513458252, -0.4375, -0.06389759480953217, 0.772850513458252, -0.1875, 0.027504410594701767, 0.028440875932574272, -0.1875], [-0.2206321358680725, -0.0020264610648155212, -0.1875, -0.31203415989875793, 0.7423831820487976, -0.1875, -0.31203415989875793, 0.7423831820487976, -0.4375, -0.2206321358680725, -0.0020264610648155212, -0.4375], [0.1552996039390564, -0.017260117456316948, -0.4375, 0.06389759480953217, 0.727149486541748, -0.4375, 0.31203413009643555, 0.7576168179512024, -0.4375, 0.40343615412712097, 0.013207219541072845, -0.4375], [0.40343615412712097, 0.013207219541072845, -0.1875, 0.31203413009643555, 0.7576168179512024, -0.1875, 0.06389759480953217, 0.727149486541748, -0.1875, 0.1552996039390564, -0.017260117456316948, -0.1875], [0.06389759480953217, 0.727149486541748, -0.4375, 0.06389759480953217, 0.727149486541748, -0.1875, 0.31203413009643555, 0.7576168179512024, -0.1875, 0.31203413009643555, 0.7576168179512024, -0.4375], [0.40343615412712097, 0.013207219541072845, -0.4375, 0.40343615412712097, 0.013207219541072845, -0.1875, 0.1552996039390564, -0.017260117456316948, -0.1875, 0.1552996039390564, -0.017260117456316948, -0.4375], [0.40343615412712097, 0.013207219541072845, -0.4375, 0.31203413009643555, 0.7576168179512024, -0.4375, 0.31203413009643555, 0.7576168179512024, -0.1875, 0.40343615412712097, 0.013207219541072845, -0.1875], [0.1552996039390564, -0.017260117456316948, -0.1875, 0.06389759480953217, 0.727149486541748, -0.1875, 0.06389759480953217, 0.727149486541748, -0.4375, 0.1552996039390564, -0.017260117456316948, -0.4375]] +tex_coords = [[0.06493506493506493, 0.0, 0, 0.06493506493506493, 0.6428571428571428, 0, 0.14285714285714285, 0.6428571428571428, 0, 0.14285714285714285, 0.0, 0], [0.2077922077922078, 0.0, 0, 0.2077922077922078, 0.6428571428571428, 0, 0.2857142857142857, 0.6428571428571428, 0, 0.2857142857142857, 0.0, 0], [0.06493506493506493, 0.6428571428571428, 0, 0.06493506493506493, 1.0, 0, 0.14285714285714285, 1.0, 0, 0.14285714285714285, 0.6428571428571428, 0], [0.14285714285714285, 0.6428571428571428, 0, 0.14285714285714285, 1.0, 0, 0.22077922077922077, 1.0, 0, 0.22077922077922077, 0.6428571428571428, 0], [0.14285714285714285, 0.0, 0, 0.14285714285714285, 0.6428571428571428, 0, 0.2077922077922078, 0.6428571428571428, 0, 0.2077922077922078, 0.0, 0], [0.0, 0.0, 0, 0.0, 0.6428571428571428, 0, 0.06493506493506493, 0.6428571428571428, 0, 0.06493506493506493, 0.0, 0], [0.2922077922077922, 0.75, 0, 0.2922077922077922, 0.9642857142857143, 0, 0.3181818181818182, 0.9642857142857143, 0, 0.3181818181818182, 0.75, 0], [0.3246753246753247, 0.75, 0, 0.3246753246753247, 0.9642857142857143, 0, 0.35064935064935066, 0.9642857142857143, 0, 0.35064935064935066, 0.75, 0], [0.2922077922077922, 0.9642857142857143, 0, 0.2922077922077922, 1.0, 0, 0.3181818181818182, 1.0, 0, 0.3181818181818182, 0.9642857142857143, 0], [0.3181818181818182, 0.9642857142857143, 0, 0.3181818181818182, 1.0, 0, 0.34415584415584416, 1.0, 0, 0.34415584415584416, 0.9642857142857143, 0], [0.3181818181818182, 0.75, 0, 0.3181818181818182, 0.9642857142857143, 0, 0.3246753246753247, 0.9642857142857143, 0, 0.3246753246753247, 0.75, 0], [0.2857142857142857, 0.75, 0, 0.2857142857142857, 0.9642857142857143, 0, 0.2922077922077922, 0.9642857142857143, 0, 0.2922077922077922, 0.75, 0], [0.38961038961038963, 0.5, 0, 0.38961038961038963, 0.7857142857142857, 0, 0.44155844155844154, 0.7857142857142857, 0, 0.44155844155844154, 0.5, 0], [0.4805194805194805, 0.5, 0, 0.4805194805194805, 0.7857142857142857, 0, 0.5324675324675324, 0.7857142857142857, 0, 0.5324675324675324, 0.5, 0], [0.38961038961038963, 0.7857142857142857, 0, 0.38961038961038963, 1.0, 0, 0.44155844155844154, 1.0, 0, 0.44155844155844154, 0.7857142857142857, 0], [0.44155844155844154, 0.7857142857142857, 0, 0.44155844155844154, 1.0, 0, 0.4935064935064935, 1.0, 0, 0.4935064935064935, 0.7857142857142857, 0], [0.44155844155844154, 0.5, 0, 0.44155844155844154, 0.7857142857142857, 0, 0.4805194805194805, 0.7857142857142857, 0, 0.4805194805194805, 0.5, 0], [0.35064935064935066, 0.5, 0, 0.35064935064935066, 0.7857142857142857, 0, 0.38961038961038963, 0.7857142857142857, 0, 0.38961038961038963, 0.5, 0], [0.538961038961039, 0.8571428571428572, 0, 0.538961038961039, 0.9642857142857143, 0, 0.5454545454545454, 0.9642857142857143, 0, 0.5454545454545454, 0.8571428571428572, 0], [0.551948051948052, 0.8571428571428572, 0, 0.551948051948052, 0.9642857142857143, 0, 0.5584415584415584, 0.9642857142857143, 0, 0.5584415584415584, 0.8571428571428572, 0], [0.538961038961039, 0.9642857142857143, 0, 0.538961038961039, 1.0, 0, 0.5454545454545454, 1.0, 0, 0.5454545454545454, 0.9642857142857143, 0], [0.5454545454545454, 0.9642857142857143, 0, 0.5454545454545454, 1.0, 0, 0.551948051948052, 1.0, 0, 0.551948051948052, 0.9642857142857143, 0], [0.5454545454545454, 0.8571428571428572, 0, 0.5454545454545454, 0.9642857142857143, 0, 0.551948051948052, 0.9642857142857143, 0, 0.551948051948052, 0.8571428571428572, 0], [0.5324675324675324, 0.8571428571428572, 0, 0.5324675324675324, 0.9642857142857143, 0, 0.538961038961039, 0.9642857142857143, 0, 0.538961038961039, 0.8571428571428572, 0], [0.564935064935065, 0.8571428571428572, 0, 0.564935064935065, 0.9642857142857143, 0, 0.5714285714285714, 0.9642857142857143, 0, 0.5714285714285714, 0.8571428571428572, 0], [0.577922077922078, 0.8571428571428572, 0, 0.577922077922078, 0.9642857142857143, 0, 0.5844155844155844, 0.9642857142857143, 0, 0.5844155844155844, 0.8571428571428572, 0], [0.564935064935065, 0.9642857142857143, 0, 0.564935064935065, 1.0, 0, 0.5714285714285714, 1.0, 0, 0.5714285714285714, 0.9642857142857143, 0], [0.5714285714285714, 0.9642857142857143, 0, 0.5714285714285714, 1.0, 0, 0.577922077922078, 1.0, 0, 0.577922077922078, 0.9642857142857143, 0], [0.5714285714285714, 0.8571428571428572, 0, 0.5714285714285714, 0.9642857142857143, 0, 0.577922077922078, 0.9642857142857143, 0, 0.577922077922078, 0.8571428571428572, 0], [0.5584415584415584, 0.8571428571428572, 0, 0.5584415584415584, 0.9642857142857143, 0, 0.564935064935065, 0.9642857142857143, 0, 0.564935064935065, 0.8571428571428572, 0], [0.6103896103896104, 0.4285714285714286, 0, 0.6103896103896104, 0.8571428571428572, 0, 0.6363636363636364, 0.8571428571428572, 0, 0.6363636363636364, 0.4285714285714286, 0], [0.6623376623376623, 0.4285714285714286, 0, 0.6623376623376623, 0.8571428571428572, 0, 0.6883116883116883, 0.8571428571428572, 0, 0.6883116883116883, 0.4285714285714286, 0], [0.6103896103896104, 0.8571428571428572, 0, 0.6103896103896104, 1.0, 0, 0.6363636363636364, 1.0, 0, 0.6363636363636364, 0.8571428571428572, 0], [0.6363636363636364, 0.8571428571428572, 0, 0.6363636363636364, 1.0, 0, 0.6623376623376623, 1.0, 0, 0.6623376623376623, 0.8571428571428572, 0], [0.6363636363636364, 0.4285714285714286, 0, 0.6363636363636364, 0.8571428571428572, 0, 0.6623376623376623, 0.8571428571428572, 0, 0.6623376623376623, 0.4285714285714286, 0], [0.5844155844155844, 0.4285714285714286, 0, 0.5844155844155844, 0.8571428571428572, 0, 0.6103896103896104, 0.8571428571428572, 0, 0.6103896103896104, 0.4285714285714286, 0], [0.7142857142857143, 0.4285714285714286, 0, 0.7142857142857143, 0.8571428571428572, 0, 0.7402597402597403, 0.8571428571428572, 0, 0.7402597402597403, 0.4285714285714286, 0], [0.7662337662337663, 0.4285714285714286, 0, 0.7662337662337663, 0.8571428571428572, 0, 0.7922077922077922, 0.8571428571428572, 0, 0.7922077922077922, 0.4285714285714286, 0], [0.7142857142857143, 0.8571428571428572, 0, 0.7142857142857143, 1.0, 0, 0.7402597402597403, 1.0, 0, 0.7402597402597403, 0.8571428571428572, 0], [0.7402597402597403, 0.8571428571428572, 0, 0.7402597402597403, 1.0, 0, 0.7662337662337663, 1.0, 0, 0.7662337662337663, 0.8571428571428572, 0], [0.7402597402597403, 0.4285714285714286, 0, 0.7402597402597403, 0.8571428571428572, 0, 0.7662337662337663, 0.8571428571428572, 0, 0.7662337662337663, 0.4285714285714286, 0], [0.6883116883116883, 0.4285714285714286, 0, 0.6883116883116883, 0.8571428571428572, 0, 0.7142857142857143, 0.8571428571428572, 0, 0.7142857142857143, 0.4285714285714286, 0], [0.8181818181818182, 0.4285714285714286, 0, 0.8181818181818182, 0.8571428571428572, 0, 0.8441558441558441, 0.8571428571428572, 0, 0.8441558441558441, 0.4285714285714286, 0], [0.8701298701298701, 0.4285714285714286, 0, 0.8701298701298701, 0.8571428571428572, 0, 0.8961038961038961, 0.8571428571428572, 0, 0.8961038961038961, 0.4285714285714286, 0], [0.8181818181818182, 0.8571428571428572, 0, 0.8181818181818182, 1.0, 0, 0.8441558441558441, 1.0, 0, 0.8441558441558441, 0.8571428571428572, 0], [0.8441558441558441, 0.8571428571428572, 0, 0.8441558441558441, 1.0, 0, 0.8701298701298701, 1.0, 0, 0.8701298701298701, 0.8571428571428572, 0], [0.8441558441558441, 0.4285714285714286, 0, 0.8441558441558441, 0.8571428571428572, 0, 0.8701298701298701, 0.8571428571428572, 0, 0.8701298701298701, 0.4285714285714286, 0], [0.7922077922077922, 0.4285714285714286, 0, 0.7922077922077922, 0.8571428571428572, 0, 0.8181818181818182, 0.8571428571428572, 0, 0.8181818181818182, 0.4285714285714286, 0], [0.922077922077922, 0.4285714285714286, 0, 0.922077922077922, 0.8571428571428572, 0, 0.948051948051948, 0.8571428571428572, 0, 0.948051948051948, 0.4285714285714286, 0], [0.974025974025974, 0.4285714285714286, 0, 0.974025974025974, 0.8571428571428572, 0, 1.0, 0.8571428571428572, 0, 1.0, 0.4285714285714286, 0], [0.922077922077922, 0.8571428571428572, 0, 0.922077922077922, 1.0, 0, 0.948051948051948, 1.0, 0, 0.948051948051948, 0.8571428571428572, 0], [0.948051948051948, 0.8571428571428572, 0, 0.948051948051948, 1.0, 0, 0.974025974025974, 1.0, 0, 0.974025974025974, 0.8571428571428572, 0], [0.948051948051948, 0.4285714285714286, 0, 0.948051948051948, 0.8571428571428572, 0, 0.974025974025974, 0.8571428571428572, 0, 0.974025974025974, 0.4285714285714286, 0], [0.8961038961038961, 0.4285714285714286, 0, 0.8961038961038961, 0.8571428571428572, 0, 0.922077922077922, 0.8571428571428572, 0, 0.922077922077922, 0.4285714285714286, 0]] +shading_values = [[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]] + diff --git a/episode-13/models/creeper.py b/episode-13/models/creeper.py new file mode 100644 index 00000000..7dd0a582 --- /dev/null +++ b/episode-13/models/creeper.py @@ -0,0 +1,11 @@ + +transparent = True +is_cube = False +glass = False + +colliders = [] + +vertex_positions = [[-0.26293501257896423, 0.3660466969013214, -0.125, -0.28910964727401733, 1.1155897378921509, -0.125, 0.21058577299118042, 1.1330395936965942, -0.125, 0.23676039278507233, 0.3834964334964752, -0.125], [0.23676039278507233, 0.3834964334964752, 0.125, 0.21058577299118042, 1.1330395936965942, 0.125, -0.28910964727401733, 1.1155897378921509, 0.125, -0.26293501257896423, 0.3660466969013214, 0.125], [-0.28910964727401733, 1.1155897378921509, -0.125, -0.28910964727401733, 1.1155897378921509, 0.125, 0.21058577299118042, 1.1330395936965942, 0.125, 0.21058577299118042, 1.1330395936965942, -0.125], [0.23676039278507233, 0.3834964334964752, -0.125, 0.23676039278507233, 0.3834964334964752, 0.125, -0.26293501257896423, 0.3660466969013214, 0.125, -0.26293501257896423, 0.3660466969013214, -0.125], [0.23676039278507233, 0.3834964334964752, -0.125, 0.21058577299118042, 1.1330395936965942, -0.125, 0.21058577299118042, 1.1330395936965942, 0.125, 0.23676039278507233, 0.3834964334964752, 0.125], [-0.26293501257896423, 0.3660466969013214, 0.125, -0.28910964727401733, 1.1155897378921509, 0.125, -0.28910964727401733, 1.1155897378921509, -0.125, -0.26293501257896423, 0.3660466969013214, -0.125], [-0.24939100444316864, 1.1075608730316162, -0.25, -0.2842692732810974, 1.6063429117202759, -0.25, 0.21451278030872345, 1.6412211656570435, -0.25, 0.24939101934432983, 1.1424391269683838, -0.25], [0.24939101934432983, 1.1424391269683838, 0.25, 0.21451278030872345, 1.6412211656570435, 0.25, -0.2842692732810974, 1.6063429117202759, 0.25, -0.24939100444316864, 1.1075608730316162, 0.25], [-0.2842692732810974, 1.6063429117202759, -0.25, -0.2842692732810974, 1.6063429117202759, 0.25, 0.21451278030872345, 1.6412211656570435, 0.25, 0.21451278030872345, 1.6412211656570435, -0.25], [0.24939101934432983, 1.1424391269683838, -0.25, 0.24939101934432983, 1.1424391269683838, 0.25, -0.24939100444316864, 1.1075608730316162, 0.25, -0.24939100444316864, 1.1075608730316162, -0.25], [0.24939101934432983, 1.1424391269683838, -0.25, 0.21451278030872345, 1.6412211656570435, -0.25, 0.21451278030872345, 1.6412211656570435, 0.25, 0.24939101934432983, 1.1424391269683838, 0.25], [-0.24939100444316864, 1.1075608730316162, 0.25, -0.2842692732810974, 1.6063429117202759, 0.25, -0.2842692732810974, 1.6063429117202759, -0.25, -0.24939100444316864, 1.1075608730316162, -0.25], [-0.2630111575126648, 0.004590874537825584, 0.125, -0.24992385506629944, 0.37936243414878845, 0.125, -7.614400237798691e-05, 0.37063756585121155, 0.125, -0.013163454830646515, -0.004133999347686768, 0.125], [-0.013163454830646515, -0.004133999347686768, 0.375, -7.614400237798691e-05, 0.37063756585121155, 0.375, -0.24992385506629944, 0.37936243414878845, 0.375, -0.2630111575126648, 0.004590874537825584, 0.375], [-0.24992385506629944, 0.37936243414878845, 0.125, -0.24992385506629944, 0.37936243414878845, 0.375, -7.614400237798691e-05, 0.37063756585121155, 0.375, -7.614400237798691e-05, 0.37063756585121155, 0.125], [-0.013163454830646515, -0.004133999347686768, 0.125, -0.013163454830646515, -0.004133999347686768, 0.375, -0.2630111575126648, 0.004590874537825584, 0.375, -0.2630111575126648, 0.004590874537825584, 0.125], [-0.013163454830646515, -0.004133999347686768, 0.125, -7.614400237798691e-05, 0.37063756585121155, 0.125, -7.614400237798691e-05, 0.37063756585121155, 0.375, -0.013163454830646515, -0.004133999347686768, 0.375], [-0.2630111575126648, 0.004590874537825584, 0.375, -0.24992385506629944, 0.37936243414878845, 0.375, -0.24992385506629944, 0.37936243414878845, 0.125, -0.2630111575126648, 0.004590874537825584, 0.125], [-0.013011172413825989, 0.004590868949890137, 0.125, 7.613841444253922e-05, 0.37936243414878845, 0.125, 0.24992384016513824, 0.37063756585121155, 0.125, 0.2368365377187729, -0.004134004935622215, 0.125], [0.2368365377187729, -0.004134004935622215, 0.375, 0.24992384016513824, 0.37063756585121155, 0.375, 7.613841444253922e-05, 0.37936243414878845, 0.375, -0.013011172413825989, 0.004590868949890137, 0.375], [7.613841444253922e-05, 0.37936243414878845, 0.125, 7.613841444253922e-05, 0.37936243414878845, 0.375, 0.24992384016513824, 0.37063756585121155, 0.375, 0.24992384016513824, 0.37063756585121155, 0.125], [0.2368365377187729, -0.004134004935622215, 0.125, 0.2368365377187729, -0.004134004935622215, 0.375, -0.013011172413825989, 0.004590868949890137, 0.375, -0.013011172413825989, 0.004590868949890137, 0.125], [0.2368365377187729, -0.004134004935622215, 0.125, 0.24992384016513824, 0.37063756585121155, 0.125, 0.24992384016513824, 0.37063756585121155, 0.375, 0.2368365377187729, -0.004134004935622215, 0.375], [-0.013011172413825989, 0.004590868949890137, 0.375, 7.613841444253922e-05, 0.37936243414878845, 0.375, 7.613841444253922e-05, 0.37936243414878845, 0.125, -0.013011172413825989, 0.004590868949890137, 0.125], [-0.21011705696582794, -0.011011788621544838, -0.375, -0.24931523203849792, 0.36193394660949707, -0.375, -0.0006847530603408813, 0.38806605339050293, -0.375, 0.0385134220123291, 0.015120327472686768, -0.375], [0.0385134220123291, 0.015120327472686768, -0.125, -0.0006847530603408813, 0.38806605339050293, -0.125, -0.24931523203849792, 0.36193394660949707, -0.125, -0.21011705696582794, -0.011011788621544838, -0.125], [-0.24931523203849792, 0.36193394660949707, -0.375, -0.24931523203849792, 0.36193394660949707, -0.125, -0.0006847530603408813, 0.38806605339050293, -0.125, -0.0006847530603408813, 0.38806605339050293, -0.375], [0.0385134220123291, 0.015120327472686768, -0.375, 0.0385134220123291, 0.015120327472686768, -0.125, -0.21011705696582794, -0.011011788621544838, -0.125, -0.21011705696582794, -0.011011788621544838, -0.375], [0.0385134220123291, 0.015120327472686768, -0.375, -0.0006847530603408813, 0.38806605339050293, -0.375, -0.0006847530603408813, 0.38806605339050293, -0.125, 0.0385134220123291, 0.015120327472686768, -0.125], [-0.21011705696582794, -0.011011788621544838, -0.125, -0.24931523203849792, 0.36193394660949707, -0.125, -0.24931523203849792, 0.36193394660949707, -0.375, -0.21011705696582794, -0.011011788621544838, -0.375], [0.03988293558359146, -0.011011779308319092, -0.375, 0.0006847605109214783, 0.36193394660949707, -0.375, 0.24931523203849792, 0.38806605339050293, -0.375, 0.2885134220123291, 0.015120336785912514, -0.375], [0.2885134220123291, 0.015120336785912514, -0.125, 0.24931523203849792, 0.38806605339050293, -0.125, 0.0006847605109214783, 0.36193394660949707, -0.125, 0.03988293558359146, -0.011011779308319092, -0.125], [0.0006847605109214783, 0.36193394660949707, -0.375, 0.0006847605109214783, 0.36193394660949707, -0.125, 0.24931523203849792, 0.38806605339050293, -0.125, 0.24931523203849792, 0.38806605339050293, -0.375], [0.2885134220123291, 0.015120336785912514, -0.375, 0.2885134220123291, 0.015120336785912514, -0.125, 0.03988293558359146, -0.011011779308319092, -0.125, 0.03988293558359146, -0.011011779308319092, -0.375], [0.2885134220123291, 0.015120336785912514, -0.375, 0.24931523203849792, 0.38806605339050293, -0.375, 0.24931523203849792, 0.38806605339050293, -0.125, 0.2885134220123291, 0.015120336785912514, -0.125], [0.03988293558359146, -0.011011779308319092, -0.125, 0.0006847605109214783, 0.36193394660949707, -0.125, 0.0006847605109214783, 0.36193394660949707, -0.375, 0.03988293558359146, -0.011011779308319092, -0.375]] +tex_coords = [[0.03333333333333333, 0.0, 0, 0.03333333333333333, 0.75, 0, 0.1, 0.75, 0, 0.1, 0.0, 0], [0.13333333333333333, 0.0, 0, 0.13333333333333333, 0.75, 0, 0.2, 0.75, 0, 0.2, 0.0, 0], [0.03333333333333333, 0.75, 0, 0.03333333333333333, 1.0, 0, 0.1, 1.0, 0, 0.1, 0.75, 0], [0.1, 0.75, 0, 0.1, 1.0, 0, 0.16666666666666666, 1.0, 0, 0.16666666666666666, 0.75, 0], [0.1, 0.0, 0, 0.1, 0.75, 0, 0.13333333333333333, 0.75, 0, 0.13333333333333333, 0.0, 0], [0.0, 0.0, 0, 0.0, 0.75, 0, 0.03333333333333333, 0.75, 0, 0.03333333333333333, 0.0, 0], [0.26666666666666666, 0.0, 0, 0.26666666666666666, 0.5, 0, 0.3333333333333333, 0.5, 0, 0.3333333333333333, 0.0, 0], [0.4, 0.0, 0, 0.4, 0.5, 0, 0.4666666666666667, 0.5, 0, 0.4666666666666667, 0.0, 0], [0.26666666666666666, 0.5, 0, 0.26666666666666666, 1.0, 0, 0.3333333333333333, 1.0, 0, 0.3333333333333333, 0.5, 0], [0.3333333333333333, 0.5, 0, 0.3333333333333333, 1.0, 0, 0.4, 1.0, 0, 0.4, 0.5, 0], [0.3333333333333333, 0.0, 0, 0.3333333333333333, 0.5, 0, 0.4, 0.5, 0, 0.4, 0.0, 0], [0.2, 0.0, 0, 0.2, 0.5, 0, 0.26666666666666666, 0.5, 0, 0.26666666666666666, 0.0, 0], [0.5, 0.375, 0, 0.5, 0.75, 0, 0.5333333333333333, 0.75, 0, 0.5333333333333333, 0.375, 0], [0.5666666666666667, 0.375, 0, 0.5666666666666667, 0.75, 0, 0.6, 0.75, 0, 0.6, 0.375, 0], [0.5, 0.75, 0, 0.5, 1.0, 0, 0.5333333333333333, 1.0, 0, 0.5333333333333333, 0.75, 0], [0.5333333333333333, 0.75, 0, 0.5333333333333333, 1.0, 0, 0.5666666666666667, 1.0, 0, 0.5666666666666667, 0.75, 0], [0.5333333333333333, 0.375, 0, 0.5333333333333333, 0.75, 0, 0.5666666666666667, 0.75, 0, 0.5666666666666667, 0.375, 0], [0.4666666666666667, 0.375, 0, 0.4666666666666667, 0.75, 0, 0.5, 0.75, 0, 0.5, 0.375, 0], [0.6333333333333333, 0.375, 0, 0.6333333333333333, 0.75, 0, 0.6666666666666666, 0.75, 0, 0.6666666666666666, 0.375, 0], [0.7, 0.375, 0, 0.7, 0.75, 0, 0.7333333333333333, 0.75, 0, 0.7333333333333333, 0.375, 0], [0.6333333333333333, 0.75, 0, 0.6333333333333333, 1.0, 0, 0.6666666666666666, 1.0, 0, 0.6666666666666666, 0.75, 0], [0.6666666666666666, 0.75, 0, 0.6666666666666666, 1.0, 0, 0.7, 1.0, 0, 0.7, 0.75, 0], [0.6666666666666666, 0.375, 0, 0.6666666666666666, 0.75, 0, 0.7, 0.75, 0, 0.7, 0.375, 0], [0.6, 0.375, 0, 0.6, 0.75, 0, 0.6333333333333333, 0.75, 0, 0.6333333333333333, 0.375, 0], [0.7666666666666667, 0.375, 0, 0.7666666666666667, 0.75, 0, 0.8, 0.75, 0, 0.8, 0.375, 0], [0.8333333333333334, 0.375, 0, 0.8333333333333334, 0.75, 0, 0.8666666666666667, 0.75, 0, 0.8666666666666667, 0.375, 0], [0.7666666666666667, 0.75, 0, 0.7666666666666667, 1.0, 0, 0.8, 1.0, 0, 0.8, 0.75, 0], [0.8, 0.75, 0, 0.8, 1.0, 0, 0.8333333333333334, 1.0, 0, 0.8333333333333334, 0.75, 0], [0.8, 0.375, 0, 0.8, 0.75, 0, 0.8333333333333334, 0.75, 0, 0.8333333333333334, 0.375, 0], [0.7333333333333333, 0.375, 0, 0.7333333333333333, 0.75, 0, 0.7666666666666667, 0.75, 0, 0.7666666666666667, 0.375, 0], [0.9, 0.375, 0, 0.9, 0.75, 0, 0.9333333333333333, 0.75, 0, 0.9333333333333333, 0.375, 0], [0.9666666666666667, 0.375, 0, 0.9666666666666667, 0.75, 0, 1.0, 0.75, 0, 1.0, 0.375, 0], [0.9, 0.75, 0, 0.9, 1.0, 0, 0.9333333333333333, 1.0, 0, 0.9333333333333333, 0.75, 0], [0.9333333333333333, 0.75, 0, 0.9333333333333333, 1.0, 0, 0.9666666666666667, 1.0, 0, 0.9666666666666667, 0.75, 0], [0.9333333333333333, 0.375, 0, 0.9333333333333333, 0.75, 0, 0.9666666666666667, 0.75, 0, 0.9666666666666667, 0.375, 0], [0.8666666666666667, 0.375, 0, 0.8666666666666667, 0.75, 0, 0.9, 0.75, 0, 0.9, 0.375, 0]] +shading_values = [[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]] + diff --git a/episode-13/models/pig.py b/episode-13/models/pig.py new file mode 100644 index 00000000..93c2caa1 --- /dev/null +++ b/episode-13/models/pig.py @@ -0,0 +1,11 @@ + +transparent = True +is_cube = False +glass = False + +colliders = [] + +vertex_positions = [[-0.2786274552345276, 0.3750000298023224, 0.5258091688156128, -0.365783154964447, 0.375, -0.4703855514526367, 0.25683850049972534, 0.375, -0.5248579978942871, 0.3439942002296448, 0.3750000298023224, 0.47133684158325195], [0.3439942002296448, 0.8750000596046448, 0.47133684158325195, 0.25683850049972534, 0.875, -0.5248579978942871, -0.365783154964447, 0.875, -0.4703855514526367, -0.2786274552345276, 0.8750000596046448, 0.5258091688156128], [-0.365783154964447, 0.375, -0.4703855514526367, -0.365783154964447, 0.875, -0.4703855514526367, 0.25683850049972534, 0.875, -0.5248579978942871, 0.25683850049972534, 0.375, -0.5248579978942871], [0.3439942002296448, 0.3750000298023224, 0.47133684158325195, 0.3439942002296448, 0.8750000596046448, 0.47133684158325195, -0.2786274552345276, 0.8750000596046448, 0.5258091688156128, -0.2786274552345276, 0.3750000298023224, 0.5258091688156128], [0.3439942002296448, 0.3750000298023224, 0.47133684158325195, 0.25683850049972534, 0.375, -0.5248579978942871, 0.25683850049972534, 0.875, -0.5248579978942871, 0.3439942002296448, 0.8750000596046448, 0.47133684158325195], [-0.2786274552345276, 0.8750000596046448, 0.5258091688156128, -0.365783154964447, 0.875, -0.4703855514526367, -0.365783154964447, 0.375, -0.4703855514526367, -0.2786274552345276, 0.3750000298023224, 0.5258091688156128], [-0.18209344148635864, 0.44694557785987854, -0.875, -0.3030543923377991, 0.9320934414863586, -0.875, 0.18209345638751984, 1.0530544519424438, -0.875, 0.3030543923377991, 0.5679064989089966, -0.875], [0.3030543923377991, 0.5679064989089966, -0.375, 0.18209345638751984, 1.0530544519424438, -0.375, -0.3030543923377991, 0.9320934414863586, -0.375, -0.18209344148635864, 0.44694557785987854, -0.375], [-0.3030543923377991, 0.9320934414863586, -0.875, -0.3030543923377991, 0.9320934414863586, -0.375, 0.18209345638751984, 1.0530544519424438, -0.375, 0.18209345638751984, 1.0530544519424438, -0.875], [0.3030543923377991, 0.5679064989089966, -0.875, 0.3030543923377991, 0.5679064989089966, -0.375, -0.18209344148635864, 0.44694557785987854, -0.375, -0.18209344148635864, 0.44694557785987854, -0.875], [0.3030543923377991, 0.5679064989089966, -0.875, 0.18209345638751984, 1.0530544519424438, -0.875, 0.18209345638751984, 1.0530544519424438, -0.375, 0.3030543923377991, 0.5679064989089966, -0.375], [-0.18209344148635864, 0.44694557785987854, -0.375, -0.3030543923377991, 0.9320934414863586, -0.375, -0.3030543923377991, 0.9320934414863586, -0.875, -0.18209344148635864, 0.44694557785987854, -0.875], [-0.07221214473247528, 0.5365365147590637, -0.9375, -0.12074072659015656, 0.7176476120948792, -0.9375, 0.12074072659015656, 0.7823523879051208, -0.9375, 0.16926929354667664, 0.6012412905693054, -0.9375], [0.16926929354667664, 0.6012412905693054, -0.875, 0.12074072659015656, 0.7823523879051208, -0.875, -0.12074072659015656, 0.7176476120948792, -0.875, -0.07221214473247528, 0.5365365147590637, -0.875], [-0.12074072659015656, 0.7176476120948792, -0.9375, -0.12074072659015656, 0.7176476120948792, -0.875, 0.12074072659015656, 0.7823523879051208, -0.875, 0.12074072659015656, 0.7823523879051208, -0.9375], [0.16926929354667664, 0.6012412905693054, -0.9375, 0.16926929354667664, 0.6012412905693054, -0.875, -0.07221214473247528, 0.5365365147590637, -0.875, -0.07221214473247528, 0.5365365147590637, -0.9375], [0.16926929354667664, 0.6012412905693054, -0.9375, 0.12074072659015656, 0.7823523879051208, -0.9375, 0.12074072659015656, 0.7823523879051208, -0.875, 0.16926929354667664, 0.6012412905693054, -0.875], [-0.07221214473247528, 0.5365365147590637, -0.875, -0.12074072659015656, 0.7176476120948792, -0.875, -0.12074072659015656, 0.7176476120948792, -0.9375, -0.07221214473247528, 0.5365365147590637, -0.9375], [-0.34470775723457336, 0.012321475893259048, 0.3125, -0.3120243549346924, 0.3858944773674011, 0.3125, -0.06297566741704941, 0.36410555243492126, 0.3125, -0.09565906971693039, -0.009467458352446556, 0.3125], [-0.09565906971693039, -0.009467458352446556, 0.5625, -0.06297566741704941, 0.36410555243492126, 0.5625, -0.3120243549346924, 0.3858944773674011, 0.5625, -0.34470775723457336, 0.012321475893259048, 0.5625], [-0.3120243549346924, 0.3858944773674011, 0.3125, -0.3120243549346924, 0.3858944773674011, 0.5625, -0.06297566741704941, 0.36410555243492126, 0.5625, -0.06297566741704941, 0.36410555243492126, 0.3125], [-0.09565906971693039, -0.009467458352446556, 0.3125, -0.09565906971693039, -0.009467458352446556, 0.5625, -0.34470775723457336, 0.012321475893259048, 0.5625, -0.34470775723457336, 0.012321475893259048, 0.3125], [-0.09565906971693039, -0.009467458352446556, 0.3125, -0.06297566741704941, 0.36410555243492126, 0.3125, -0.06297566741704941, 0.36410555243492126, 0.5625, -0.09565906971693039, -0.009467458352446556, 0.5625], [-0.34470775723457336, 0.012321475893259048, 0.5625, -0.3120243549346924, 0.3858944773674011, 0.5625, -0.3120243549346924, 0.3858944773674011, 0.3125, -0.34470775723457336, 0.012321475893259048, 0.3125], [0.030292265117168427, 0.01232144795358181, 0.3125, 0.06297566741704941, 0.38589444756507874, 0.3125, 0.3120243549346924, 0.3641055226325989, 0.3125, 0.2793409526348114, -0.009467486292123795, 0.3125], [0.2793409526348114, -0.009467486292123795, 0.5625, 0.3120243549346924, 0.3641055226325989, 0.5625, 0.06297566741704941, 0.38589444756507874, 0.5625, 0.030292265117168427, 0.01232144795358181, 0.5625], [0.06297566741704941, 0.38589444756507874, 0.3125, 0.06297566741704941, 0.38589444756507874, 0.5625, 0.3120243549346924, 0.3641055226325989, 0.5625, 0.3120243549346924, 0.3641055226325989, 0.3125], [0.2793409526348114, -0.009467486292123795, 0.3125, 0.2793409526348114, -0.009467486292123795, 0.5625, 0.030292265117168427, 0.01232144795358181, 0.5625, 0.030292265117168427, 0.01232144795358181, 0.3125], [0.2793409526348114, -0.009467486292123795, 0.3125, 0.3120243549346924, 0.3641055226325989, 0.3125, 0.3120243549346924, 0.3641055226325989, 0.5625, 0.2793409526348114, -0.009467486292123795, 0.5625], [0.030292265117168427, 0.01232144795358181, 0.5625, 0.06297566741704941, 0.38589444756507874, 0.5625, 0.06297566741704941, 0.38589444756507874, 0.3125, 0.030292265117168427, 0.01232144795358181, 0.3125], [-0.2658672630786896, -0.012438468635082245, -0.4375, -0.3115682601928711, 0.3597663342952728, -0.4375, -0.06343172490596771, 0.3902336657047272, -0.4375, -0.0177307166159153, 0.01802886836230755, -0.4375], [-0.0177307166159153, 0.01802886836230755, -0.1875, -0.06343172490596771, 0.3902336657047272, -0.1875, -0.3115682601928711, 0.3597663342952728, -0.1875, -0.2658672630786896, -0.012438468635082245, -0.1875], [-0.3115682601928711, 0.3597663342952728, -0.4375, -0.3115682601928711, 0.3597663342952728, -0.1875, -0.06343172490596771, 0.3902336657047272, -0.1875, -0.06343172490596771, 0.3902336657047272, -0.4375], [-0.0177307166159153, 0.01802886836230755, -0.4375, -0.0177307166159153, 0.01802886836230755, -0.1875, -0.2658672630786896, -0.012438468635082245, -0.1875, -0.2658672630786896, -0.012438468635082245, -0.4375], [-0.0177307166159153, 0.01802886836230755, -0.4375, -0.06343172490596771, 0.3902336657047272, -0.4375, -0.06343172490596771, 0.3902336657047272, -0.1875, -0.0177307166159153, 0.01802886836230755, -0.1875], [-0.2658672630786896, -0.012438468635082245, -0.1875, -0.3115682601928711, 0.3597663342952728, -0.1875, -0.3115682601928711, 0.3597663342952728, -0.4375, -0.2658672630786896, -0.012438468635082245, -0.4375], [0.10913273692131042, -0.012438489124178886, -0.4375, 0.0634317398071289, 0.3597663342952728, -0.4375, 0.3115682899951935, 0.3902336657047272, -0.4375, 0.357269287109375, 0.018028847873210907, -0.4375], [0.357269287109375, 0.018028847873210907, -0.1875, 0.3115682899951935, 0.3902336657047272, -0.1875, 0.0634317398071289, 0.3597663342952728, -0.1875, 0.10913273692131042, -0.012438489124178886, -0.1875], [0.0634317398071289, 0.3597663342952728, -0.4375, 0.0634317398071289, 0.3597663342952728, -0.1875, 0.3115682899951935, 0.3902336657047272, -0.1875, 0.3115682899951935, 0.3902336657047272, -0.4375], [0.357269287109375, 0.018028847873210907, -0.4375, 0.357269287109375, 0.018028847873210907, -0.1875, 0.10913273692131042, -0.012438489124178886, -0.1875, 0.10913273692131042, -0.012438489124178886, -0.4375], [0.357269287109375, 0.018028847873210907, -0.4375, 0.3115682899951935, 0.3902336657047272, -0.4375, 0.3115682899951935, 0.3902336657047272, -0.1875, 0.357269287109375, 0.018028847873210907, -0.1875], [0.10913273692131042, -0.012438489124178886, -0.1875, 0.0634317398071289, 0.3597663342952728, -0.1875, 0.0634317398071289, 0.3597663342952728, -0.4375, 0.10913273692131042, -0.012438489124178886, -0.4375]] +tex_coords = [[0.056338028169014086, 0.0, 0, 0.056338028169014086, 0.6666666666666667, 0, 0.1267605633802817, 0.6666666666666667, 0, 0.1267605633802817, 0.0, 0], [0.18309859154929578, 0.0, 0, 0.18309859154929578, 0.6666666666666667, 0, 0.2535211267605634, 0.6666666666666667, 0, 0.2535211267605634, 0.0, 0], [0.056338028169014086, 0.6666666666666667, 0, 0.056338028169014086, 1.0, 0, 0.1267605633802817, 1.0, 0, 0.1267605633802817, 0.6666666666666667, 0], [0.1267605633802817, 0.6666666666666667, 0, 0.1267605633802817, 1.0, 0, 0.19718309859154928, 1.0, 0, 0.19718309859154928, 0.6666666666666667, 0], [0.1267605633802817, 0.0, 0, 0.1267605633802817, 0.6666666666666667, 0, 0.18309859154929578, 0.6666666666666667, 0, 0.18309859154929578, 0.0, 0], [0.0, 0.0, 0, 0.0, 0.6666666666666667, 0, 0.056338028169014086, 0.6666666666666667, 0, 0.056338028169014086, 0.0, 0], [0.30985915492957744, 0.33333333333333337, 0, 0.30985915492957744, 0.6666666666666667, 0, 0.36619718309859156, 0.6666666666666667, 0, 0.36619718309859156, 0.33333333333333337, 0], [0.4225352112676056, 0.33333333333333337, 0, 0.4225352112676056, 0.6666666666666667, 0, 0.4788732394366197, 0.6666666666666667, 0, 0.4788732394366197, 0.33333333333333337, 0], [0.30985915492957744, 0.6666666666666667, 0, 0.30985915492957744, 1.0, 0, 0.36619718309859156, 1.0, 0, 0.36619718309859156, 0.6666666666666667, 0], [0.36619718309859156, 0.6666666666666667, 0, 0.36619718309859156, 1.0, 0, 0.4225352112676056, 1.0, 0, 0.4225352112676056, 0.6666666666666667, 0], [0.36619718309859156, 0.33333333333333337, 0, 0.36619718309859156, 0.6666666666666667, 0, 0.4225352112676056, 0.6666666666666667, 0, 0.4225352112676056, 0.33333333333333337, 0], [0.2535211267605634, 0.33333333333333337, 0, 0.2535211267605634, 0.6666666666666667, 0, 0.30985915492957744, 0.6666666666666667, 0, 0.30985915492957744, 0.33333333333333337, 0], [0.4859154929577465, 0.8333333333333334, 0, 0.4859154929577465, 0.9583333333333334, 0, 0.5140845070422535, 0.9583333333333334, 0, 0.5140845070422535, 0.8333333333333334, 0], [0.5211267605633803, 0.8333333333333334, 0, 0.5211267605633803, 0.9583333333333334, 0, 0.5492957746478874, 0.9583333333333334, 0, 0.5492957746478874, 0.8333333333333334, 0], [0.4859154929577465, 0.9583333333333334, 0, 0.4859154929577465, 1.0, 0, 0.5140845070422535, 1.0, 0, 0.5140845070422535, 0.9583333333333334, 0], [0.5140845070422535, 0.9583333333333334, 0, 0.5140845070422535, 1.0, 0, 0.5422535211267606, 1.0, 0, 0.5422535211267606, 0.9583333333333334, 0], [0.5140845070422535, 0.8333333333333334, 0, 0.5140845070422535, 0.9583333333333334, 0, 0.5211267605633803, 0.9583333333333334, 0, 0.5211267605633803, 0.8333333333333334, 0], [0.4788732394366197, 0.8333333333333334, 0, 0.4788732394366197, 0.9583333333333334, 0, 0.4859154929577465, 0.9583333333333334, 0, 0.4859154929577465, 0.8333333333333334, 0], [0.5774647887323944, 0.5833333333333333, 0, 0.5774647887323944, 0.8333333333333334, 0, 0.6056338028169014, 0.8333333333333334, 0, 0.6056338028169014, 0.5833333333333333, 0], [0.6338028169014085, 0.5833333333333333, 0, 0.6338028169014085, 0.8333333333333334, 0, 0.6619718309859155, 0.8333333333333334, 0, 0.6619718309859155, 0.5833333333333333, 0], [0.5774647887323944, 0.8333333333333334, 0, 0.5774647887323944, 1.0, 0, 0.6056338028169014, 1.0, 0, 0.6056338028169014, 0.8333333333333334, 0], [0.6056338028169014, 0.8333333333333334, 0, 0.6056338028169014, 1.0, 0, 0.6338028169014085, 1.0, 0, 0.6338028169014085, 0.8333333333333334, 0], [0.6056338028169014, 0.5833333333333333, 0, 0.6056338028169014, 0.8333333333333334, 0, 0.6338028169014085, 0.8333333333333334, 0, 0.6338028169014085, 0.5833333333333333, 0], [0.5492957746478874, 0.5833333333333333, 0, 0.5492957746478874, 0.8333333333333334, 0, 0.5774647887323944, 0.8333333333333334, 0, 0.5774647887323944, 0.5833333333333333, 0], [0.6901408450704225, 0.5833333333333333, 0, 0.6901408450704225, 0.8333333333333334, 0, 0.7183098591549296, 0.8333333333333334, 0, 0.7183098591549296, 0.5833333333333333, 0], [0.7464788732394366, 0.5833333333333333, 0, 0.7464788732394366, 0.8333333333333334, 0, 0.7746478873239436, 0.8333333333333334, 0, 0.7746478873239436, 0.5833333333333333, 0], [0.6901408450704225, 0.8333333333333334, 0, 0.6901408450704225, 1.0, 0, 0.7183098591549296, 1.0, 0, 0.7183098591549296, 0.8333333333333334, 0], [0.7183098591549296, 0.8333333333333334, 0, 0.7183098591549296, 1.0, 0, 0.7464788732394366, 1.0, 0, 0.7464788732394366, 0.8333333333333334, 0], [0.7183098591549296, 0.5833333333333333, 0, 0.7183098591549296, 0.8333333333333334, 0, 0.7464788732394366, 0.8333333333333334, 0, 0.7464788732394366, 0.5833333333333333, 0], [0.6619718309859155, 0.5833333333333333, 0, 0.6619718309859155, 0.8333333333333334, 0, 0.6901408450704225, 0.8333333333333334, 0, 0.6901408450704225, 0.5833333333333333, 0], [0.8028169014084507, 0.5833333333333333, 0, 0.8028169014084507, 0.8333333333333334, 0, 0.8309859154929577, 0.8333333333333334, 0, 0.8309859154929577, 0.5833333333333333, 0], [0.8591549295774648, 0.5833333333333333, 0, 0.8591549295774648, 0.8333333333333334, 0, 0.8873239436619719, 0.8333333333333334, 0, 0.8873239436619719, 0.5833333333333333, 0], [0.8028169014084507, 0.8333333333333334, 0, 0.8028169014084507, 1.0, 0, 0.8309859154929577, 1.0, 0, 0.8309859154929577, 0.8333333333333334, 0], [0.8309859154929577, 0.8333333333333334, 0, 0.8309859154929577, 1.0, 0, 0.8591549295774648, 1.0, 0, 0.8591549295774648, 0.8333333333333334, 0], [0.8309859154929577, 0.5833333333333333, 0, 0.8309859154929577, 0.8333333333333334, 0, 0.8591549295774648, 0.8333333333333334, 0, 0.8591549295774648, 0.5833333333333333, 0], [0.7746478873239436, 0.5833333333333333, 0, 0.7746478873239436, 0.8333333333333334, 0, 0.8028169014084507, 0.8333333333333334, 0, 0.8028169014084507, 0.5833333333333333, 0], [0.9154929577464789, 0.5833333333333333, 0, 0.9154929577464789, 0.8333333333333334, 0, 0.9436619718309859, 0.8333333333333334, 0, 0.9436619718309859, 0.5833333333333333, 0], [0.971830985915493, 0.5833333333333333, 0, 0.971830985915493, 0.8333333333333334, 0, 1.0, 0.8333333333333334, 0, 1.0, 0.5833333333333333, 0], [0.9154929577464789, 0.8333333333333334, 0, 0.9154929577464789, 1.0, 0, 0.9436619718309859, 1.0, 0, 0.9436619718309859, 0.8333333333333334, 0], [0.9436619718309859, 0.8333333333333334, 0, 0.9436619718309859, 1.0, 0, 0.971830985915493, 1.0, 0, 0.971830985915493, 0.8333333333333334, 0], [0.9436619718309859, 0.5833333333333333, 0, 0.9436619718309859, 0.8333333333333334, 0, 0.971830985915493, 0.8333333333333334, 0, 0.971830985915493, 0.5833333333333333, 0], [0.8873239436619719, 0.5833333333333333, 0, 0.8873239436619719, 0.8333333333333334, 0, 0.9154929577464789, 0.8333333333333334, 0, 0.9154929577464789, 0.5833333333333333, 0]] +shading_values = [[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]] + diff --git a/episode-13/models/skeleton.py b/episode-13/models/skeleton.py new file mode 100644 index 00000000..6b6934bd --- /dev/null +++ b/episode-13/models/skeleton.py @@ -0,0 +1,11 @@ + +transparent = True +is_cube = False +glass = False + +colliders = [] + +vertex_positions = [[-0.22367310523986816, 0.7417320013046265, -0.125, -0.24984771013259888, 1.4912750720977783, -0.125, 0.24984771013259888, 1.5087249279022217, -0.125, 0.276022344827652, 0.7591817378997803, -0.125], [0.276022344827652, 0.7591817378997803, 0.125, 0.24984771013259888, 1.5087249279022217, 0.125, -0.24984771013259888, 1.4912750720977783, 0.125, -0.22367310523986816, 0.7417320013046265, 0.125], [-0.24984771013259888, 1.4912750720977783, -0.125, -0.24984771013259888, 1.4912750720977783, 0.125, 0.24984771013259888, 1.5087249279022217, 0.125, 0.24984771013259888, 1.5087249279022217, -0.125], [0.276022344827652, 0.7591817378997803, -0.125, 0.276022344827652, 0.7591817378997803, 0.125, -0.22367310523986816, 0.7417320013046265, 0.125, -0.22367310523986816, 0.7417320013046265, -0.125], [0.276022344827652, 0.7591817378997803, -0.125, 0.24984771013259888, 1.5087249279022217, -0.125, 0.24984771013259888, 1.5087249279022217, 0.125, 0.276022344827652, 0.7591817378997803, 0.125], [-0.22367310523986816, 0.7417320013046265, 0.125, -0.24984771013259888, 1.4912750720977783, 0.125, -0.24984771013259888, 1.4912750720977783, -0.125, -0.22367310523986816, 0.7417320013046265, -0.125], [-0.24939101934432983, 1.4825608730316162, -0.25, -0.2842692732810974, 1.9813429117202759, -0.25, 0.21451278030872345, 2.016221046447754, -0.25, 0.24939101934432983, 1.5174391269683838, -0.25], [0.24939101934432983, 1.5174391269683838, 0.25, 0.21451278030872345, 2.016221046447754, 0.25, -0.2842692732810974, 1.9813429117202759, 0.25, -0.24939101934432983, 1.4825608730316162, 0.25], [-0.2842692732810974, 1.9813429117202759, -0.25, -0.2842692732810974, 1.9813429117202759, 0.25, 0.21451278030872345, 2.016221046447754, 0.25, 0.21451278030872345, 2.016221046447754, -0.25], [0.24939101934432983, 1.5174391269683838, -0.25, 0.24939101934432983, 1.5174391269683838, 0.25, -0.24939101934432983, 1.4825608730316162, 0.25, -0.24939101934432983, 1.4825608730316162, -0.25], [0.24939101934432983, 1.5174391269683838, -0.25, 0.21451278030872345, 2.016221046447754, -0.25, 0.21451278030872345, 2.016221046447754, 0.25, 0.24939101934432983, 1.5174391269683838, 0.25], [-0.24939101934432983, 1.4825608730316162, 0.25, -0.2842692732810974, 1.9813429117202759, 0.25, -0.2842692732810974, 1.9813429117202759, -0.25, -0.24939101934432983, 1.4825608730316162, -0.25], [-0.24939101934432983, 1.4825608730316162, -0.25, -0.2842692732810974, 1.9813429117202759, -0.25, 0.21451278030872345, 2.016221046447754, -0.25, 0.24939101934432983, 1.5174391269683838, -0.25], [0.24939101934432983, 1.5174391269683838, 0.25, 0.21451278030872345, 2.016221046447754, 0.25, -0.2842692732810974, 1.9813429117202759, 0.25, -0.24939101934432983, 1.4825608730316162, 0.25], [-0.2842692732810974, 1.9813429117202759, -0.25, -0.2842692732810974, 1.9813429117202759, 0.25, 0.21451278030872345, 2.016221046447754, 0.25, 0.21451278030872345, 2.016221046447754, -0.25], [0.24939101934432983, 1.5174391269683838, -0.25, 0.24939101934432983, 1.5174391269683838, 0.25, -0.24939101934432983, 1.4825608730316162, 0.25, -0.24939101934432983, 1.4825608730316162, -0.25], [0.24939101934432983, 1.5174391269683838, -0.25, 0.21451278030872345, 2.016221046447754, -0.25, 0.21451278030872345, 2.016221046447754, 0.25, 0.24939101934432983, 1.5174391269683838, 0.25], [-0.24939101934432983, 1.4825608730316162, 0.25, -0.2842692732810974, 1.9813429117202759, 0.25, -0.2842692732810974, 1.9813429117202759, -0.25, -0.24939101934432983, 1.4825608730316162, -0.25], [-0.3640827238559723, 0.7490044236183167, -0.0625, -0.3771720230579376, 1.4988901615142822, -0.0625, -0.25219106674194336, 1.501071810722351, -0.0625, -0.23910176753997803, 0.751185953617096, -0.0625], [-0.23910176753997803, 0.751185953617096, 0.0625, -0.25219106674194336, 1.501071810722351, 0.0625, -0.3771720230579376, 1.4988901615142822, 0.0625, -0.3640827238559723, 0.7490044236183167, 0.0625], [-0.3771720230579376, 1.4988901615142822, -0.0625, -0.3771720230579376, 1.4988901615142822, 0.0625, -0.25219106674194336, 1.501071810722351, 0.0625, -0.25219106674194336, 1.501071810722351, -0.0625], [-0.23910176753997803, 0.751185953617096, -0.0625, -0.23910176753997803, 0.751185953617096, 0.0625, -0.3640827238559723, 0.7490044236183167, 0.0625, -0.3640827238559723, 0.7490044236183167, -0.0625], [-0.23910176753997803, 0.751185953617096, -0.0625, -0.25219106674194336, 1.501071810722351, -0.0625, -0.25219106674194336, 1.501071810722351, 0.0625, -0.23910176753997803, 0.751185953617096, 0.0625], [-0.3640827238559723, 0.7490044236183167, 0.0625, -0.3771720230579376, 1.4988901615142822, 0.0625, -0.3771720230579376, 1.4988901615142822, -0.0625, -0.3640827238559723, 0.7490044236183167, -0.0625], [0.2609173059463501, 0.7490045428276062, -0.0625, 0.24782797694206238, 1.4988902807235718, -0.0625, 0.37280896306037903, 1.5010719299316406, -0.0625, 0.38589826226234436, 0.7511860728263855, -0.0625], [0.38589826226234436, 0.7511860728263855, 0.0625, 0.37280896306037903, 1.5010719299316406, 0.0625, 0.24782797694206238, 1.4988902807235718, 0.0625, 0.2609173059463501, 0.7490045428276062, 0.0625], [0.24782797694206238, 1.4988902807235718, -0.0625, 0.24782797694206238, 1.4988902807235718, 0.0625, 0.37280896306037903, 1.5010719299316406, 0.0625, 0.37280896306037903, 1.5010719299316406, -0.0625], [0.38589826226234436, 0.7511860728263855, -0.0625, 0.38589826226234436, 0.7511860728263855, 0.0625, 0.2609173059463501, 0.7490045428276062, 0.0625, 0.2609173059463501, 0.7490045428276062, -0.0625], [0.38589826226234436, 0.7511860728263855, -0.0625, 0.37280896306037903, 1.5010719299316406, -0.0625, 0.37280896306037903, 1.5010719299316406, 0.0625, 0.38589826226234436, 0.7511860728263855, 0.0625], [0.2609173059463501, 0.7490045428276062, 0.0625, 0.24782797694206238, 1.4988902807235718, 0.0625, 0.24782797694206238, 1.4988902807235718, -0.0625, 0.2609173059463501, 0.7490045428276062, -0.0625], [-0.1744011789560318, -0.0009765936993062496, -0.0625, -0.18749047815799713, 0.7489091753959656, -0.0625, -0.06250951439142227, 0.7510907649993896, -0.0625, -0.04942021146416664, 0.0012049571378156543, -0.0625], [-0.04942021146416664, 0.0012049571378156543, 0.0625, -0.06250951439142227, 0.7510907649993896, 0.0625, -0.18749047815799713, 0.7489091753959656, 0.0625, -0.1744011789560318, -0.0009765936993062496, 0.0625], [-0.18749047815799713, 0.7489091753959656, -0.0625, -0.18749047815799713, 0.7489091753959656, 0.0625, -0.06250951439142227, 0.7510907649993896, 0.0625, -0.06250951439142227, 0.7510907649993896, -0.0625], [-0.04942021146416664, 0.0012049571378156543, -0.0625, -0.04942021146416664, 0.0012049571378156543, 0.0625, -0.1744011789560318, -0.0009765936993062496, 0.0625, -0.1744011789560318, -0.0009765936993062496, -0.0625], [-0.04942021146416664, 0.0012049571378156543, -0.0625, -0.06250951439142227, 0.7510907649993896, -0.0625, -0.06250951439142227, 0.7510907649993896, 0.0625, -0.04942021146416664, 0.0012049571378156543, 0.0625], [-0.1744011789560318, -0.0009765936993062496, 0.0625, -0.18749047815799713, 0.7489091753959656, 0.0625, -0.18749047815799713, 0.7489091753959656, -0.0625, -0.1744011789560318, -0.0009765936993062496, -0.0625], [0.0755988210439682, -0.0009765521390363574, -0.0625, 0.06250952184200287, 0.7489092350006104, -0.0625, 0.18749049305915833, 0.7510908246040344, -0.0625, 0.20057979226112366, 0.0012049986980855465, -0.0625], [0.20057979226112366, 0.0012049986980855465, 0.0625, 0.18749049305915833, 0.7510908246040344, 0.0625, 0.06250952184200287, 0.7489092350006104, 0.0625, 0.0755988210439682, -0.0009765521390363574, 0.0625], [0.06250952184200287, 0.7489092350006104, -0.0625, 0.06250952184200287, 0.7489092350006104, 0.0625, 0.18749049305915833, 0.7510908246040344, 0.0625, 0.18749049305915833, 0.7510908246040344, -0.0625], [0.20057979226112366, 0.0012049986980855465, -0.0625, 0.20057979226112366, 0.0012049986980855465, 0.0625, 0.0755988210439682, -0.0009765521390363574, 0.0625, 0.0755988210439682, -0.0009765521390363574, -0.0625], [0.20057979226112366, 0.0012049986980855465, -0.0625, 0.18749049305915833, 0.7510908246040344, -0.0625, 0.18749049305915833, 0.7510908246040344, 0.0625, 0.20057979226112366, 0.0012049986980855465, 0.0625], [0.0755988210439682, -0.0009765521390363574, 0.0625, 0.06250952184200287, 0.7489092350006104, 0.0625, 0.06250952184200287, 0.7489092350006104, -0.0625, 0.0755988210439682, -0.0009765521390363574, -0.0625]] +tex_coords = [[0.03333333333333333, 0.0, 0, 0.03333333333333333, 0.75, 0, 0.1, 0.75, 0, 0.1, 0.0, 0], [0.13333333333333333, 0.0, 0, 0.13333333333333333, 0.75, 0, 0.2, 0.75, 0, 0.2, 0.0, 0], [0.03333333333333333, 0.75, 0, 0.03333333333333333, 1.0, 0, 0.1, 1.0, 0, 0.1, 0.75, 0], [0.1, 0.75, 0, 0.1, 1.0, 0, 0.16666666666666666, 1.0, 0, 0.16666666666666666, 0.75, 0], [0.1, 0.0, 0, 0.1, 0.75, 0, 0.13333333333333333, 0.75, 0, 0.13333333333333333, 0.0, 0], [0.0, 0.0, 0, 0.0, 0.75, 0, 0.03333333333333333, 0.75, 0, 0.03333333333333333, 0.0, 0], [0.26666666666666666, 0.0, 0, 0.26666666666666666, 0.5, 0, 0.3333333333333333, 0.5, 0, 0.3333333333333333, 0.0, 0], [0.4, 0.0, 0, 0.4, 0.5, 0, 0.4666666666666667, 0.5, 0, 0.4666666666666667, 0.0, 0], [0.26666666666666666, 0.5, 0, 0.26666666666666666, 1.0, 0, 0.3333333333333333, 1.0, 0, 0.3333333333333333, 0.5, 0], [0.3333333333333333, 0.5, 0, 0.3333333333333333, 1.0, 0, 0.4, 1.0, 0, 0.4, 0.5, 0], [0.3333333333333333, 0.0, 0, 0.3333333333333333, 0.5, 0, 0.4, 0.5, 0, 0.4, 0.0, 0], [0.2, 0.0, 0, 0.2, 0.5, 0, 0.26666666666666666, 0.5, 0, 0.26666666666666666, 0.0, 0], [0.5333333333333333, 0.0, 0, 0.5333333333333333, 0.5, 0, 0.6, 0.5, 0, 0.6, 0.0, 0], [0.6666666666666666, 0.0, 0, 0.6666666666666666, 0.5, 0, 0.7333333333333333, 0.5, 0, 0.7333333333333333, 0.0, 0], [0.5333333333333333, 0.5, 0, 0.5333333333333333, 1.0, 0, 0.6, 1.0, 0, 0.6, 0.5, 0], [0.6, 0.5, 0, 0.6, 1.0, 0, 0.6666666666666666, 1.0, 0, 0.6666666666666666, 0.5, 0], [0.6, 0.0, 0, 0.6, 0.5, 0, 0.6666666666666666, 0.5, 0, 0.6666666666666666, 0.0, 0], [0.4666666666666667, 0.0, 0, 0.4666666666666667, 0.5, 0, 0.5333333333333333, 0.5, 0, 0.5333333333333333, 0.0, 0], [0.75, 0.125, 0, 0.75, 0.875, 0, 0.7666666666666667, 0.875, 0, 0.7666666666666667, 0.125, 0], [0.7833333333333333, 0.125, 0, 0.7833333333333333, 0.875, 0, 0.8, 0.875, 0, 0.8, 0.125, 0], [0.75, 0.875, 0, 0.75, 1.0, 0, 0.7666666666666667, 1.0, 0, 0.7666666666666667, 0.875, 0], [0.7666666666666667, 0.875, 0, 0.7666666666666667, 1.0, 0, 0.7833333333333333, 1.0, 0, 0.7833333333333333, 0.875, 0], [0.7666666666666667, 0.125, 0, 0.7666666666666667, 0.875, 0, 0.7833333333333333, 0.875, 0, 0.7833333333333333, 0.125, 0], [0.7333333333333333, 0.125, 0, 0.7333333333333333, 0.875, 0, 0.75, 0.875, 0, 0.75, 0.125, 0], [0.8166666666666667, 0.125, 0, 0.8166666666666667, 0.875, 0, 0.8333333333333334, 0.875, 0, 0.8333333333333334, 0.125, 0], [0.85, 0.125, 0, 0.85, 0.875, 0, 0.8666666666666667, 0.875, 0, 0.8666666666666667, 0.125, 0], [0.8166666666666667, 0.875, 0, 0.8166666666666667, 1.0, 0, 0.8333333333333334, 1.0, 0, 0.8333333333333334, 0.875, 0], [0.8333333333333334, 0.875, 0, 0.8333333333333334, 1.0, 0, 0.85, 1.0, 0, 0.85, 0.875, 0], [0.8333333333333334, 0.125, 0, 0.8333333333333334, 0.875, 0, 0.85, 0.875, 0, 0.85, 0.125, 0], [0.8, 0.125, 0, 0.8, 0.875, 0, 0.8166666666666667, 0.875, 0, 0.8166666666666667, 0.125, 0], [0.8833333333333333, 0.125, 0, 0.8833333333333333, 0.875, 0, 0.9, 0.875, 0, 0.9, 0.125, 0], [0.9166666666666666, 0.125, 0, 0.9166666666666666, 0.875, 0, 0.9333333333333333, 0.875, 0, 0.9333333333333333, 0.125, 0], [0.8833333333333333, 0.875, 0, 0.8833333333333333, 1.0, 0, 0.9, 1.0, 0, 0.9, 0.875, 0], [0.9, 0.875, 0, 0.9, 1.0, 0, 0.9166666666666666, 1.0, 0, 0.9166666666666666, 0.875, 0], [0.9, 0.125, 0, 0.9, 0.875, 0, 0.9166666666666666, 0.875, 0, 0.9166666666666666, 0.125, 0], [0.8666666666666667, 0.125, 0, 0.8666666666666667, 0.875, 0, 0.8833333333333333, 0.875, 0, 0.8833333333333333, 0.125, 0], [0.95, 0.125, 0, 0.95, 0.875, 0, 0.9666666666666667, 0.875, 0, 0.9666666666666667, 0.125, 0], [0.9833333333333333, 0.125, 0, 0.9833333333333333, 0.875, 0, 1.0, 0.875, 0, 1.0, 0.125, 0], [0.95, 0.875, 0, 0.95, 1.0, 0, 0.9666666666666667, 1.0, 0, 0.9666666666666667, 0.875, 0], [0.9666666666666667, 0.875, 0, 0.9666666666666667, 1.0, 0, 0.9833333333333333, 1.0, 0, 0.9833333333333333, 0.875, 0], [0.9666666666666667, 0.125, 0, 0.9666666666666667, 0.875, 0, 0.9833333333333333, 0.875, 0, 0.9833333333333333, 0.125, 0], [0.9333333333333333, 0.125, 0, 0.9333333333333333, 0.875, 0, 0.95, 0.875, 0, 0.95, 0.125, 0]] +shading_values = [[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]] + diff --git a/episode-13/models/spider.py b/episode-13/models/spider.py new file mode 100644 index 00000000..a1c167e4 --- /dev/null +++ b/episode-13/models/spider.py @@ -0,0 +1,11 @@ + +transparent = True +is_cube = False +glass = False + +colliders = [] + +vertex_positions = [[-0.19770455360412598, 0.2693909704685211, -0.6875, -0.2931090295314789, 0.760204553604126, -0.6875, 0.19770455360412598, 0.8556090593338013, -0.6875, 0.2931090295314789, 0.3647954761981964, -0.6875], [0.2931090295314789, 0.3647954761981964, -0.1875, 0.19770455360412598, 0.8556090593338013, -0.1875, -0.2931090295314789, 0.760204553604126, -0.1875, -0.19770455360412598, 0.2693909704685211, -0.1875], [-0.2931090295314789, 0.760204553604126, -0.6875, -0.2931090295314789, 0.760204553604126, -0.1875, 0.19770455360412598, 0.8556090593338013, -0.1875, 0.19770455360412598, 0.8556090593338013, -0.6875], [0.2931090295314789, 0.3647954761981964, -0.6875, 0.2931090295314789, 0.3647954761981964, -0.1875, -0.19770455360412598, 0.2693909704685211, -0.1875, -0.19770455360412598, 0.2693909704685211, -0.6875], [0.2931090295314789, 0.3647954761981964, -0.6875, 0.19770455360412598, 0.8556090593338013, -0.6875, 0.19770455360412598, 0.8556090593338013, -0.1875, 0.2931090295314789, 0.3647954761981964, -0.1875], [-0.19770455360412598, 0.2693909704685211, -0.1875, -0.2931090295314789, 0.760204553604126, -0.1875, -0.2931090295314789, 0.760204553604126, -0.6875, -0.19770455360412598, 0.2693909704685211, -0.6875], [-0.17743003368377686, 0.36544400453567505, -0.1875, -0.19705602526664734, 0.7399300336837769, -0.1875, 0.17743003368377686, 0.7595560550689697, -0.1875, 0.19705602526664734, 0.38506996631622314, -0.1875], [0.19705602526664734, 0.38506996631622314, 0.1875, 0.17743003368377686, 0.7595560550689697, 0.1875, -0.19705602526664734, 0.7399300336837769, 0.1875, -0.17743003368377686, 0.36544400453567505, 0.1875], [-0.19705602526664734, 0.7399300336837769, -0.1875, -0.19705602526664734, 0.7399300336837769, 0.1875, 0.17743003368377686, 0.7595560550689697, 0.1875, 0.17743003368377686, 0.7595560550689697, -0.1875], [0.19705602526664734, 0.38506996631622314, -0.1875, 0.19705602526664734, 0.38506996631622314, 0.1875, -0.17743003368377686, 0.36544400453567505, 0.1875, -0.17743003368377686, 0.36544400453567505, -0.1875], [0.19705602526664734, 0.38506996631622314, -0.1875, 0.17743003368377686, 0.7595560550689697, -0.1875, 0.17743003368377686, 0.7595560550689697, 0.1875, 0.19705602526664734, 0.38506996631622314, 0.1875], [-0.17743003368377686, 0.36544400453567505, 0.1875, -0.19705602526664734, 0.7399300336837769, 0.1875, -0.19705602526664734, 0.7399300336837769, -0.1875, -0.17743003368377686, 0.36544400453567505, -0.1875], [-0.32515570521354675, 0.32919761538505554, 0.1875, -0.2989877164363861, 0.8285123705863953, 0.1875, 0.32515570521354675, 0.7958024144172668, 0.1875, 0.2989877164363861, 0.2964876592159271, 0.1875], [0.2989877164363861, 0.2964876592159271, 0.9375, 0.32515570521354675, 0.7958024144172668, 0.9375, -0.2989877164363861, 0.8285123705863953, 0.9375, -0.32515570521354675, 0.32919761538505554, 0.9375], [-0.2989877164363861, 0.8285123705863953, 0.1875, -0.2989877164363861, 0.8285123705863953, 0.9375, 0.32515570521354675, 0.7958024144172668, 0.9375, 0.32515570521354675, 0.7958024144172668, 0.1875], [0.2989877164363861, 0.2964876592159271, 0.1875, 0.2989877164363861, 0.2964876592159271, 0.9375, -0.32515570521354675, 0.32919761538505554, 0.9375, -0.32515570521354675, 0.32919761538505554, 0.1875], [0.2989877164363861, 0.2964876592159271, 0.1875, 0.32515570521354675, 0.7958024144172668, 0.1875, 0.32515570521354675, 0.7958024144172668, 0.9375, 0.2989877164363861, 0.2964876592159271, 0.9375], [-0.32515570521354675, 0.32919761538505554, 0.9375, -0.2989877164363861, 0.8285123705863953, 0.9375, -0.2989877164363861, 0.8285123705863953, 0.1875, -0.32515570521354675, 0.32919761538505554, 0.1875], [-1.1850438117980957, 0.5163711309432983, 0.22640930116176605, -1.1828954219818115, 0.6413520574569702, 0.22603046894073486, -0.19823770225048065, 0.6238996982574463, 0.052408747375011444, -0.20038610696792603, 0.49891871213912964, 0.05278756469488144], [-0.17868007719516754, 0.49891871213912964, 0.1758885383605957, -0.17653167247772217, 0.6238996982574463, 0.17550970613956451, -1.1611894369125366, 0.6413520574569702, 0.34913143515586853, -1.1633378267288208, 0.5163711309432983, 0.3495102524757385], [-1.1828954219818115, 0.6413520574569702, 0.22603046894073486, -1.1611894369125366, 0.6413520574569702, 0.34913143515586853, -0.17653167247772217, 0.6238996982574463, 0.17550970613956451, -0.19823770225048065, 0.6238996982574463, 0.052408747375011444], [-0.20038610696792603, 0.49891871213912964, 0.05278756469488144, -0.17868007719516754, 0.49891871213912964, 0.1758885383605957, -1.1633378267288208, 0.5163711309432983, 0.3495102524757385, -1.1850438117980957, 0.5163711309432983, 0.22640930116176605], [-0.20038610696792603, 0.49891871213912964, 0.05278756469488144, -0.19823770225048065, 0.6238996982574463, 0.052408747375011444, -0.17653167247772217, 0.6238996982574463, 0.17550970613956451, -0.17868007719516754, 0.49891871213912964, 0.1758885383605957], [-1.1633378267288208, 0.5163711309432983, 0.3495102524757385, -1.1611894369125366, 0.6413520574569702, 0.34913143515586853, -1.1828954219818115, 0.6413520574569702, 0.22603046894073486, -1.1850438117980957, 0.5163711309432983, 0.22640930116176605], [0.18121345341205597, 0.5011003017425537, 0.06827930361032486, 0.18338671326637268, 0.6260812282562256, 0.06808917224407196, 1.1794297695159912, 0.6086288690567017, -0.019053295254707336, 1.177256464958191, 0.483647882938385, -0.018863163888454437], [1.1881510019302368, 0.483647882938385, 0.10566116869449615, 1.190324306488037, 0.6086288690567017, 0.10547103732824326, 0.1942811757326126, 0.6260812282562256, 0.19261349737644196, 0.1921079158782959, 0.5011003017425537, 0.19280363619327545], [0.18338671326637268, 0.6260812282562256, 0.06808917224407196, 0.1942811757326126, 0.6260812282562256, 0.19261349737644196, 1.190324306488037, 0.6086288690567017, 0.10547103732824326, 1.1794297695159912, 0.6086288690567017, -0.019053295254707336], [1.177256464958191, 0.483647882938385, -0.018863163888454437, 1.1881510019302368, 0.483647882938385, 0.10566116869449615, 0.1921079158782959, 0.5011003017425537, 0.19280363619327545, 0.18121345341205597, 0.5011003017425537, 0.06827930361032486], [1.177256464958191, 0.483647882938385, -0.018863163888454437, 1.1794297695159912, 0.6086288690567017, -0.019053295254707336, 1.190324306488037, 0.6086288690567017, 0.10547103732824326, 1.1881510019302368, 0.483647882938385, 0.10566116869449615], [0.1921079158782959, 0.5011003017425537, 0.19280363619327545, 0.1942811757326126, 0.6260812282562256, 0.19261349737644196, 0.18338671326637268, 0.6260812282562256, 0.06808917224407196, 0.18121345341205597, 0.5011003017425537, 0.06827930361032486], [-1.17848539352417, 0.5, -0.08147067576646805, -1.17848539352417, 0.625, -0.08147067576646805, -0.18229058384895325, 0.625, 0.00568506121635437, -0.18229058384895325, 0.5, 0.00568506121635437], [-0.19318504631519318, 0.5, 0.13020940124988556, -0.19318504631519318, 0.625, 0.13020940124988556, -1.1893798112869263, 0.625, 0.04305366426706314, -1.1893798112869263, 0.5, 0.04305366426706314], [-1.17848539352417, 0.625, -0.08147067576646805, -1.1893798112869263, 0.625, 0.04305366426706314, -0.19318504631519318, 0.625, 0.13020940124988556, -0.18229058384895325, 0.625, 0.00568506121635437], [-0.18229058384895325, 0.5, 0.00568506121635437, -0.19318504631519318, 0.5, 0.13020940124988556, -1.1893798112869263, 0.5, 0.04305366426706314, -1.17848539352417, 0.5, -0.08147067576646805], [-0.18229058384895325, 0.5, 0.00568506121635437, -0.18229058384895325, 0.625, 0.00568506121635437, -0.19318504631519318, 0.625, 0.13020940124988556, -0.19318504631519318, 0.5, 0.13020940124988556], [-1.1893798112869263, 0.5, 0.04305366426706314, -1.1893798112869263, 0.625, 0.04305366426706314, -1.17848539352417, 0.625, -0.08147067576646805, -1.17848539352417, 0.5, -0.08147067576646805], [0.20580583810806274, 0.5, -0.014046560972929, 0.20580583810806274, 0.625, -0.014046560972929, 1.17173171043396, 0.625, 0.24477249383926392, 1.17173171043396, 0.5, 0.24477249383926392], [1.1393792629241943, 0.5, 0.3655132055282593, 1.1393792629241943, 0.625, 0.3655132055282593, 0.1734534502029419, 0.625, 0.10669416189193726, 0.1734534502029419, 0.5, 0.10669416189193726], [0.20580583810806274, 0.625, -0.014046560972929, 0.1734534502029419, 0.625, 0.10669416189193726, 1.1393792629241943, 0.625, 0.3655132055282593, 1.17173171043396, 0.625, 0.24477249383926392], [1.17173171043396, 0.5, 0.24477249383926392, 1.1393792629241943, 0.5, 0.3655132055282593, 0.1734534502029419, 0.5, 0.10669416189193726, 0.20580583810806274, 0.5, -0.014046560972929], [1.17173171043396, 0.5, 0.24477249383926392, 1.17173171043396, 0.625, 0.24477249383926392, 1.1393792629241943, 0.625, 0.3655132055282593, 1.1393792629241943, 0.5, 0.3655132055282593], [0.1734534502029419, 0.5, 0.10669416189193726, 0.1734534502029419, 0.625, 0.10669416189193726, 0.20580583810806274, 0.625, -0.014046560972929, 0.20580583810806274, 0.5, -0.014046560972929], [-1.1611895561218262, 0.483647882938385, -0.22413143515586853, -1.1633379459381104, 0.6086288690567017, -0.22451026737689972, -0.17868007719516754, 0.6260812282562256, -0.0508885383605957, -0.17653167247772217, 0.5011003017425537, -0.05050971359014511], [-0.19823768734931946, 0.5011003017425537, 0.07259126007556915, -0.20038609206676483, 0.6260812282562256, 0.07221242785453796, -1.1850439310073853, 0.6086288690567017, -0.10140930116176605, -1.182895541191101, 0.483647882938385, -0.10103046894073486], [-1.1633379459381104, 0.6086288690567017, -0.22451026737689972, -1.1850439310073853, 0.6086288690567017, -0.10140930116176605, -0.20038609206676483, 0.6260812282562256, 0.07221242785453796, -0.17868007719516754, 0.6260812282562256, -0.0508885383605957], [-0.17653167247772217, 0.5011003017425537, -0.05050971359014511, -0.19823768734931946, 0.5011003017425537, 0.07259126007556915, -1.182895541191101, 0.483647882938385, -0.10103046894073486, -1.1611895561218262, 0.483647882938385, -0.22413143515586853], [-0.17653167247772217, 0.5011003017425537, -0.05050971359014511, -0.17868007719516754, 0.6260812282562256, -0.0508885383605957, -0.20038609206676483, 0.6260812282562256, 0.07221242785453796, -0.19823768734931946, 0.5011003017425537, 0.07259126007556915], [-1.182895541191101, 0.483647882938385, -0.10103046894073486, -1.1850439310073853, 0.6086288690567017, -0.10140930116176605, -1.1633379459381104, 0.6086288690567017, -0.22451026737689972, -1.1611895561218262, 0.483647882938385, -0.22413143515586853], [0.1942811757326126, 0.49891871213912964, -0.06761351227760315, 0.1921079158782959, 0.6238996982574463, -0.06780364364385605, 1.1881508827209473, 0.6413520574569702, 0.01933882385492325, 1.1903241872787476, 0.5163711309432983, 0.019528955221176147], [1.1794297695159912, 0.5163711309432983, 0.14405329525470734, 1.177256464958191, 0.6413520574569702, 0.14386317133903503, 0.18121343851089478, 0.6238996982574463, 0.05672069638967514, 0.1833866983652115, 0.49891871213912964, 0.056910835206508636], [0.1921079158782959, 0.6238996982574463, -0.06780364364385605, 0.18121343851089478, 0.6238996982574463, 0.05672069638967514, 1.177256464958191, 0.6413520574569702, 0.14386317133903503, 1.1881508827209473, 0.6413520574569702, 0.01933882385492325], [1.1903241872787476, 0.5163711309432983, 0.019528955221176147, 1.1794297695159912, 0.5163711309432983, 0.14405329525470734, 0.1833866983652115, 0.49891871213912964, 0.056910835206508636, 0.1942811757326126, 0.49891871213912964, -0.06761351227760315], [1.1903241872787476, 0.5163711309432983, 0.019528955221176147, 1.1881508827209473, 0.6413520574569702, 0.01933882385492325, 1.177256464958191, 0.6413520574569702, 0.14386317133903503, 1.1794297695159912, 0.5163711309432983, 0.14405329525470734], [0.1833866983652115, 0.49891871213912964, 0.056910835206508636, 0.18121343851089478, 0.6238996982574463, 0.05672069638967514, 0.1921079158782959, 0.6238996982574463, -0.06780364364385605, 0.1942811757326126, 0.49891871213912964, -0.06761351227760315], [-1.1866379976272583, 0.4673198163509369, -0.043293558061122894, -1.1909838914871216, 0.5922436118125916, -0.04291334003210068, -0.19539590179920197, 0.627143144607544, -0.13001598417758942, -0.19105006754398346, 0.5022193193435669, -0.13039620220661163], [-0.18015560507774353, 0.5022193193435669, -0.005871852859854698, -0.18450143933296204, 0.627143144607544, -0.005491642281413078, -1.1800893545150757, 0.5922436118125916, 0.08161100745201111, -1.1757434606552124, 0.4673198163509369, 0.08123078942298889], [-1.1909838914871216, 0.5922436118125916, -0.04291334003210068, -1.1800893545150757, 0.5922436118125916, 0.08161100745201111, -0.18450143933296204, 0.627143144607544, -0.005491642281413078, -0.19539590179920197, 0.627143144607544, -0.13001598417758942], [-0.19105006754398346, 0.5022193193435669, -0.13039620220661163, -0.18015560507774353, 0.5022193193435669, -0.005871852859854698, -1.1757434606552124, 0.4673198163509369, 0.08123078942298889, -1.1866379976272583, 0.4673198163509369, -0.043293558061122894], [-0.19105006754398346, 0.5022193193435669, -0.13039620220661163, -0.19539590179920197, 0.627143144607544, -0.13001598417758942, -0.18450143933296204, 0.627143144607544, -0.005491642281413078, -0.18015560507774353, 0.5022193193435669, -0.005871852859854698], [-1.1757434606552124, 0.4673198163509369, 0.08123078942298889, -1.1800893545150757, 0.5922436118125916, 0.08161100745201111, -1.1909838914871216, 0.5922436118125916, -0.04291334003210068, -1.1866379976272583, 0.4673198163509369, -0.043293558061122894], [0.17978206276893616, 0.49785685539245605, -0.11358284950256348, 0.17548590898513794, 0.6227806806564331, -0.11282531917095184, 1.1596938371658325, 0.6576802134513855, -0.2863677144050598, 1.1639900207519531, 0.5327563881874084, -0.28712522983551025], [1.185696005821228, 0.5327563881874084, -0.16402427852153778, 1.1813998222351074, 0.6576802134513855, -0.16326674818992615, 0.19719192385673523, 0.6227806806564331, 0.010275645181536674, 0.20148809254169464, 0.49785685539245605, 0.00951811671257019], [0.17548590898513794, 0.6227806806564331, -0.11282531917095184, 0.19719192385673523, 0.6227806806564331, 0.010275645181536674, 1.1813998222351074, 0.6576802134513855, -0.16326674818992615, 1.1596938371658325, 0.6576802134513855, -0.2863677144050598], [1.1639900207519531, 0.5327563881874084, -0.28712522983551025, 1.185696005821228, 0.5327563881874084, -0.16402427852153778, 0.20148809254169464, 0.49785685539245605, 0.00951811671257019, 0.17978206276893616, 0.49785685539245605, -0.11358284950256348], [1.1639900207519531, 0.5327563881874084, -0.28712522983551025, 1.1596938371658325, 0.6576802134513855, -0.2863677144050598, 1.1813998222351074, 0.6576802134513855, -0.16326674818992615, 1.185696005821228, 0.5327563881874084, -0.16402427852153778], [0.20148809254169464, 0.49785685539245605, 0.00951811671257019, 0.19719192385673523, 0.6227806806564331, 0.010275645181536674, 0.17548590898513794, 0.6227806806564331, -0.11282531917095184, 0.17978206276893616, 0.49785685539245605, -0.11358284950256348]] +tex_coords = [[0.020618556701030927, 0.19999999999999996, 0, 0.020618556701030927, 0.6, 0, 0.041237113402061855, 0.6, 0, 0.041237113402061855, 0.19999999999999996, 0], [0.061855670103092786, 0.19999999999999996, 0, 0.061855670103092786, 0.6, 0, 0.08247422680412371, 0.6, 0, 0.08247422680412371, 0.19999999999999996, 0], [0.020618556701030927, 0.6, 0, 0.020618556701030927, 1.0, 0, 0.041237113402061855, 1.0, 0, 0.041237113402061855, 0.6, 0], [0.041237113402061855, 0.6, 0, 0.041237113402061855, 1.0, 0, 0.061855670103092786, 1.0, 0, 0.061855670103092786, 0.6, 0], [0.041237113402061855, 0.19999999999999996, 0, 0.041237113402061855, 0.6, 0, 0.061855670103092786, 0.6, 0, 0.061855670103092786, 0.19999999999999996, 0], [0.0, 0.19999999999999996, 0, 0.0, 0.6, 0, 0.020618556701030927, 0.6, 0, 0.020618556701030927, 0.19999999999999996, 0], [0.0979381443298969, 0.4, 0, 0.0979381443298969, 0.7, 0, 0.1134020618556701, 0.7, 0, 0.1134020618556701, 0.4, 0], [0.12886597938144329, 0.4, 0, 0.12886597938144329, 0.7, 0, 0.14432989690721648, 0.7, 0, 0.14432989690721648, 0.4, 0], [0.0979381443298969, 0.7, 0, 0.0979381443298969, 1.0, 0, 0.1134020618556701, 1.0, 0, 0.1134020618556701, 0.7, 0], [0.1134020618556701, 0.7, 0, 0.1134020618556701, 1.0, 0, 0.12886597938144329, 1.0, 0, 0.12886597938144329, 0.7, 0], [0.1134020618556701, 0.4, 0, 0.1134020618556701, 0.7, 0, 0.12886597938144329, 0.7, 0, 0.12886597938144329, 0.4, 0], [0.08247422680412371, 0.4, 0, 0.08247422680412371, 0.7, 0, 0.0979381443298969, 0.7, 0, 0.0979381443298969, 0.4, 0], [0.17525773195876287, 0.0, 0, 0.17525773195876287, 0.4, 0, 0.20103092783505155, 0.4, 0, 0.20103092783505155, 0.0, 0], [0.23195876288659795, 0.0, 0, 0.23195876288659795, 0.4, 0, 0.25773195876288657, 0.4, 0, 0.25773195876288657, 0.0, 0], [0.17525773195876287, 0.4, 0, 0.17525773195876287, 1.0, 0, 0.20103092783505155, 1.0, 0, 0.20103092783505155, 0.4, 0], [0.20103092783505155, 0.4, 0, 0.20103092783505155, 1.0, 0, 0.2268041237113402, 1.0, 0, 0.2268041237113402, 0.4, 0], [0.20103092783505155, 0.0, 0, 0.20103092783505155, 0.4, 0, 0.23195876288659795, 0.4, 0, 0.23195876288659795, 0.0, 0], [0.14432989690721648, 0.0, 0, 0.14432989690721648, 0.4, 0, 0.17525773195876287, 0.4, 0, 0.17525773195876287, 0.0, 0], [0.26288659793814434, 0.8, 0, 0.26288659793814434, 0.9, 0, 0.30412371134020616, 0.9, 0, 0.30412371134020616, 0.8, 0], [0.30927835051546393, 0.8, 0, 0.30927835051546393, 0.9, 0, 0.35051546391752575, 0.9, 0, 0.35051546391752575, 0.8, 0], [0.26288659793814434, 0.9, 0, 0.26288659793814434, 1.0, 0, 0.30412371134020616, 1.0, 0, 0.30412371134020616, 0.9, 0], [0.30412371134020616, 0.9, 0, 0.30412371134020616, 1.0, 0, 0.34536082474226804, 1.0, 0, 0.34536082474226804, 0.9, 0], [0.30412371134020616, 0.8, 0, 0.30412371134020616, 0.9, 0, 0.30927835051546393, 0.9, 0, 0.30927835051546393, 0.8, 0], [0.25773195876288657, 0.8, 0, 0.25773195876288657, 0.9, 0, 0.26288659793814434, 0.9, 0, 0.26288659793814434, 0.8, 0], [0.3556701030927835, 0.8, 0, 0.3556701030927835, 0.9, 0, 0.39690721649484534, 0.9, 0, 0.39690721649484534, 0.8, 0], [0.4020618556701031, 0.8, 0, 0.4020618556701031, 0.9, 0, 0.44329896907216493, 0.9, 0, 0.44329896907216493, 0.8, 0], [0.3556701030927835, 0.9, 0, 0.3556701030927835, 1.0, 0, 0.39690721649484534, 1.0, 0, 0.39690721649484534, 0.9, 0], [0.39690721649484534, 0.9, 0, 0.39690721649484534, 1.0, 0, 0.4381443298969072, 1.0, 0, 0.4381443298969072, 0.9, 0], [0.39690721649484534, 0.8, 0, 0.39690721649484534, 0.9, 0, 0.4020618556701031, 0.9, 0, 0.4020618556701031, 0.8, 0], [0.35051546391752575, 0.8, 0, 0.35051546391752575, 0.9, 0, 0.3556701030927835, 0.9, 0, 0.3556701030927835, 0.8, 0], [0.4484536082474227, 0.8, 0, 0.4484536082474227, 0.9, 0, 0.4896907216494845, 0.9, 0, 0.4896907216494845, 0.8, 0], [0.4948453608247423, 0.8, 0, 0.4948453608247423, 0.9, 0, 0.5360824742268041, 0.9, 0, 0.5360824742268041, 0.8, 0], [0.4484536082474227, 0.9, 0, 0.4484536082474227, 1.0, 0, 0.4896907216494845, 1.0, 0, 0.4896907216494845, 0.9, 0], [0.4896907216494845, 0.9, 0, 0.4896907216494845, 1.0, 0, 0.5309278350515464, 1.0, 0, 0.5309278350515464, 0.9, 0], [0.4896907216494845, 0.8, 0, 0.4896907216494845, 0.9, 0, 0.4948453608247423, 0.9, 0, 0.4948453608247423, 0.8, 0], [0.44329896907216493, 0.8, 0, 0.44329896907216493, 0.9, 0, 0.4484536082474227, 0.9, 0, 0.4484536082474227, 0.8, 0], [0.5412371134020618, 0.8, 0, 0.5412371134020618, 0.9, 0, 0.5824742268041238, 0.9, 0, 0.5824742268041238, 0.8, 0], [0.5876288659793815, 0.8, 0, 0.5876288659793815, 0.9, 0, 0.6288659793814433, 0.9, 0, 0.6288659793814433, 0.8, 0], [0.5412371134020618, 0.9, 0, 0.5412371134020618, 1.0, 0, 0.5824742268041238, 1.0, 0, 0.5824742268041238, 0.9, 0], [0.5824742268041238, 0.9, 0, 0.5824742268041238, 1.0, 0, 0.6237113402061856, 1.0, 0, 0.6237113402061856, 0.9, 0], [0.5824742268041238, 0.8, 0, 0.5824742268041238, 0.9, 0, 0.5876288659793815, 0.9, 0, 0.5876288659793815, 0.8, 0], [0.5360824742268041, 0.8, 0, 0.5360824742268041, 0.9, 0, 0.5412371134020618, 0.9, 0, 0.5412371134020618, 0.8, 0], [0.634020618556701, 0.8, 0, 0.634020618556701, 0.9, 0, 0.6752577319587629, 0.9, 0, 0.6752577319587629, 0.8, 0], [0.6804123711340206, 0.8, 0, 0.6804123711340206, 0.9, 0, 0.7216494845360825, 0.9, 0, 0.7216494845360825, 0.8, 0], [0.634020618556701, 0.9, 0, 0.634020618556701, 1.0, 0, 0.6752577319587629, 1.0, 0, 0.6752577319587629, 0.9, 0], [0.6752577319587629, 0.9, 0, 0.6752577319587629, 1.0, 0, 0.7164948453608248, 1.0, 0, 0.7164948453608248, 0.9, 0], [0.6752577319587629, 0.8, 0, 0.6752577319587629, 0.9, 0, 0.6804123711340206, 0.9, 0, 0.6804123711340206, 0.8, 0], [0.6288659793814433, 0.8, 0, 0.6288659793814433, 0.9, 0, 0.634020618556701, 0.9, 0, 0.634020618556701, 0.8, 0], [0.7268041237113402, 0.8, 0, 0.7268041237113402, 0.9, 0, 0.7680412371134021, 0.9, 0, 0.7680412371134021, 0.8, 0], [0.7731958762886598, 0.8, 0, 0.7731958762886598, 0.9, 0, 0.8144329896907216, 0.9, 0, 0.8144329896907216, 0.8, 0], [0.7268041237113402, 0.9, 0, 0.7268041237113402, 1.0, 0, 0.7680412371134021, 1.0, 0, 0.7680412371134021, 0.9, 0], [0.7680412371134021, 0.9, 0, 0.7680412371134021, 1.0, 0, 0.8092783505154639, 1.0, 0, 0.8092783505154639, 0.9, 0], [0.7680412371134021, 0.8, 0, 0.7680412371134021, 0.9, 0, 0.7731958762886598, 0.9, 0, 0.7731958762886598, 0.8, 0], [0.7216494845360825, 0.8, 0, 0.7216494845360825, 0.9, 0, 0.7268041237113402, 0.9, 0, 0.7268041237113402, 0.8, 0], [0.8195876288659794, 0.8, 0, 0.8195876288659794, 0.9, 0, 0.8608247422680413, 0.9, 0, 0.8608247422680413, 0.8, 0], [0.865979381443299, 0.8, 0, 0.865979381443299, 0.9, 0, 0.9072164948453608, 0.9, 0, 0.9072164948453608, 0.8, 0], [0.8195876288659794, 0.9, 0, 0.8195876288659794, 1.0, 0, 0.8608247422680413, 1.0, 0, 0.8608247422680413, 0.9, 0], [0.8608247422680413, 0.9, 0, 0.8608247422680413, 1.0, 0, 0.9020618556701031, 1.0, 0, 0.9020618556701031, 0.9, 0], [0.8608247422680413, 0.8, 0, 0.8608247422680413, 0.9, 0, 0.865979381443299, 0.9, 0, 0.865979381443299, 0.8, 0], [0.8144329896907216, 0.8, 0, 0.8144329896907216, 0.9, 0, 0.8195876288659794, 0.9, 0, 0.8195876288659794, 0.8, 0], [0.9123711340206185, 0.8, 0, 0.9123711340206185, 0.9, 0, 0.9536082474226805, 0.9, 0, 0.9536082474226805, 0.8, 0], [0.9587628865979382, 0.8, 0, 0.9587628865979382, 0.9, 0, 1.0, 0.9, 0, 1.0, 0.8, 0], [0.9123711340206185, 0.9, 0, 0.9123711340206185, 1.0, 0, 0.9536082474226805, 1.0, 0, 0.9536082474226805, 0.9, 0], [0.9536082474226805, 0.9, 0, 0.9536082474226805, 1.0, 0, 0.9948453608247423, 1.0, 0, 0.9948453608247423, 0.9, 0], [0.9536082474226805, 0.8, 0, 0.9536082474226805, 0.9, 0, 0.9587628865979382, 0.9, 0, 0.9587628865979382, 0.8, 0], [0.9072164948453608, 0.8, 0, 0.9072164948453608, 0.9, 0, 0.9123711340206185, 0.9, 0, 0.9123711340206185, 0.8, 0]] +shading_values = [[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]] + diff --git a/episode-13/models/zombie.py b/episode-13/models/zombie.py new file mode 100644 index 00000000..3243789d --- /dev/null +++ b/episode-13/models/zombie.py @@ -0,0 +1,11 @@ + +transparent = True +is_cube = False +glass = False + +colliders = [] + +vertex_positions = [[-0.22367310523986816, 0.7417320013046265, -0.125, -0.24984771013259888, 1.4912750720977783, -0.125, 0.24984771013259888, 1.5087249279022217, -0.125, 0.276022344827652, 0.7591817378997803, -0.125], [0.276022344827652, 0.7591817378997803, 0.125, 0.24984771013259888, 1.5087249279022217, 0.125, -0.24984771013259888, 1.4912750720977783, 0.125, -0.22367310523986816, 0.7417320013046265, 0.125], [-0.24984771013259888, 1.4912750720977783, -0.125, -0.24984771013259888, 1.4912750720977783, 0.125, 0.24984771013259888, 1.5087249279022217, 0.125, 0.24984771013259888, 1.5087249279022217, -0.125], [0.276022344827652, 0.7591817378997803, -0.125, 0.276022344827652, 0.7591817378997803, 0.125, -0.22367310523986816, 0.7417320013046265, 0.125, -0.22367310523986816, 0.7417320013046265, -0.125], [0.276022344827652, 0.7591817378997803, -0.125, 0.24984771013259888, 1.5087249279022217, -0.125, 0.24984771013259888, 1.5087249279022217, 0.125, 0.276022344827652, 0.7591817378997803, 0.125], [-0.22367310523986816, 0.7417320013046265, 0.125, -0.24984771013259888, 1.4912750720977783, 0.125, -0.24984771013259888, 1.4912750720977783, -0.125, -0.22367310523986816, 0.7417320013046265, -0.125], [-0.24939101934432983, 1.4825608730316162, -0.25, -0.2842692732810974, 1.9813429117202759, -0.25, 0.21451278030872345, 2.016221046447754, -0.25, 0.24939101934432983, 1.5174391269683838, -0.25], [0.24939101934432983, 1.5174391269683838, 0.25, 0.21451278030872345, 2.016221046447754, 0.25, -0.2842692732810974, 1.9813429117202759, 0.25, -0.24939101934432983, 1.4825608730316162, 0.25], [-0.2842692732810974, 1.9813429117202759, -0.25, -0.2842692732810974, 1.9813429117202759, 0.25, 0.21451278030872345, 2.016221046447754, 0.25, 0.21451278030872345, 2.016221046447754, -0.25], [0.24939101934432983, 1.5174391269683838, -0.25, 0.24939101934432983, 1.5174391269683838, 0.25, -0.24939101934432983, 1.4825608730316162, 0.25, -0.24939101934432983, 1.4825608730316162, -0.25], [0.24939101934432983, 1.5174391269683838, -0.25, 0.21451278030872345, 2.016221046447754, -0.25, 0.21451278030872345, 2.016221046447754, 0.25, 0.24939101934432983, 1.5174391269683838, 0.25], [-0.24939101934432983, 1.4825608730316162, 0.25, -0.2842692732810974, 1.9813429117202759, 0.25, -0.2842692732810974, 1.9813429117202759, -0.25, -0.24939101934432983, 1.4825608730316162, -0.25], [-0.24939101934432983, 1.4825608730316162, -0.25, -0.2842692732810974, 1.9813429117202759, -0.25, 0.21451278030872345, 2.016221046447754, -0.25, 0.24939101934432983, 1.5174391269683838, -0.25], [0.24939101934432983, 1.5174391269683838, 0.25, 0.21451278030872345, 2.016221046447754, 0.25, -0.2842692732810974, 1.9813429117202759, 0.25, -0.24939101934432983, 1.4825608730316162, 0.25], [-0.2842692732810974, 1.9813429117202759, -0.25, -0.2842692732810974, 1.9813429117202759, 0.25, 0.21451278030872345, 2.016221046447754, 0.25, 0.21451278030872345, 2.016221046447754, -0.25], [0.24939101934432983, 1.5174391269683838, -0.25, 0.24939101934432983, 1.5174391269683838, 0.25, -0.24939101934432983, 1.4825608730316162, 0.25, -0.24939101934432983, 1.4825608730316162, -0.25], [0.24939101934432983, 1.5174391269683838, -0.25, 0.21451278030872345, 2.016221046447754, -0.25, 0.21451278030872345, 2.016221046447754, 0.25, 0.24939101934432983, 1.5174391269683838, 0.25], [-0.24939101934432983, 1.4825608730316162, 0.25, -0.2842692732810974, 1.9813429117202759, 0.25, -0.2842692732810974, 1.9813429117202759, -0.25, -0.24939101934432983, 1.4825608730316162, -0.25], [-0.4780735969543457, 0.7438370585441589, -0.125, -0.5042482614517212, 1.4933801889419556, -0.125, -0.2544005215167999, 1.5021049976348877, -0.125, -0.2282259166240692, 0.7525619268417358, -0.125], [-0.2282259166240692, 0.7525619268417358, 0.125, -0.2544005215167999, 1.5021049976348877, 0.125, -0.5042482614517212, 1.4933801889419556, 0.125, -0.4780735969543457, 0.7438370585441589, 0.125], [-0.5042482614517212, 1.4933801889419556, -0.125, -0.5042482614517212, 1.4933801889419556, 0.125, -0.2544005215167999, 1.5021049976348877, 0.125, -0.2544005215167999, 1.5021049976348877, -0.125], [-0.2282259166240692, 0.7525619268417358, -0.125, -0.2282259166240692, 0.7525619268417358, 0.125, -0.4780735969543457, 0.7438370585441589, 0.125, -0.4780735969543457, 0.7438370585441589, -0.125], [-0.2282259166240692, 0.7525619268417358, -0.125, -0.2544005215167999, 1.5021049976348877, -0.125, -0.2544005215167999, 1.5021049976348877, 0.125, -0.2282259166240692, 0.7525619268417358, 0.125], [-0.4780735969543457, 0.7438370585441589, 0.125, -0.5042482614517212, 1.4933801889419556, 0.125, -0.5042482614517212, 1.4933801889419556, -0.125, -0.4780735969543457, 0.7438370585441589, -0.125], [0.2718502879142761, 0.748199462890625, -0.125, 0.24567565321922302, 1.4977426528930664, -0.125, 0.4955233633518219, 1.5064674615859985, -0.125, 0.521697998046875, 0.7569243311882019, -0.125], [0.521697998046875, 0.7569243311882019, 0.125, 0.4955233633518219, 1.5064674615859985, 0.125, 0.24567565321922302, 1.4977426528930664, 0.125, 0.2718502879142761, 0.748199462890625, 0.125], [0.24567565321922302, 1.4977426528930664, -0.125, 0.24567565321922302, 1.4977426528930664, 0.125, 0.4955233633518219, 1.5064674615859985, 0.125, 0.4955233633518219, 1.5064674615859985, -0.125], [0.521697998046875, 0.7569243311882019, -0.125, 0.521697998046875, 0.7569243311882019, 0.125, 0.2718502879142761, 0.748199462890625, 0.125, 0.2718502879142761, 0.748199462890625, -0.125], [0.521697998046875, 0.7569243311882019, -0.125, 0.4955233633518219, 1.5064674615859985, -0.125, 0.4955233633518219, 1.5064674615859985, 0.125, 0.521697998046875, 0.7569243311882019, 0.125], [0.2718502879142761, 0.748199462890625, 0.125, 0.24567565321922302, 1.4977426528930664, 0.125, 0.24567565321922302, 1.4977426528930664, -0.125, 0.2718502879142761, 0.748199462890625, -0.125], [-0.21749922633171082, -0.00390557199716568, -0.125, -0.24367386102676392, 0.7456375360488892, -0.125, 0.006173852831125259, 0.7543624043464661, -0.125, 0.032348476350307465, 0.004819302354007959, -0.125], [0.032348476350307465, 0.004819302354007959, 0.125, 0.006173852831125259, 0.7543624043464661, 0.125, -0.24367386102676392, 0.7456375360488892, 0.125, -0.21749922633171082, -0.00390557199716568, 0.125], [-0.24367386102676392, 0.7456375360488892, -0.125, -0.24367386102676392, 0.7456375360488892, 0.125, 0.006173852831125259, 0.7543624043464661, 0.125, 0.006173852831125259, 0.7543624043464661, -0.125], [0.032348476350307465, 0.004819302354007959, -0.125, 0.032348476350307465, 0.004819302354007959, 0.125, -0.21749922633171082, -0.00390557199716568, 0.125, -0.21749922633171082, -0.00390557199716568, -0.125], [0.032348476350307465, 0.004819302354007959, -0.125, 0.006173852831125259, 0.7543624043464661, -0.125, 0.006173852831125259, 0.7543624043464661, 0.125, 0.032348476350307465, 0.004819302354007959, 0.125], [-0.21749922633171082, -0.00390557199716568, 0.125, -0.24367386102676392, 0.7456375360488892, 0.125, -0.24367386102676392, 0.7456375360488892, -0.125, -0.21749922633171082, -0.00390557199716568, -0.125], [0.020000765100121498, -0.003905563149601221, -0.125, -0.006173856556415558, 0.7456375956535339, -0.125, 0.24367386102676392, 0.7543624639511108, -0.125, 0.26984846591949463, 0.004819311201572418, -0.125], [0.26984846591949463, 0.004819311201572418, 0.125, 0.24367386102676392, 0.7543624639511108, 0.125, -0.006173856556415558, 0.7456375956535339, 0.125, 0.020000765100121498, -0.003905563149601221, 0.125], [-0.006173856556415558, 0.7456375956535339, -0.125, -0.006173856556415558, 0.7456375956535339, 0.125, 0.24367386102676392, 0.7543624639511108, 0.125, 0.24367386102676392, 0.7543624639511108, -0.125], [0.26984846591949463, 0.004819311201572418, -0.125, 0.26984846591949463, 0.004819311201572418, 0.125, 0.020000765100121498, -0.003905563149601221, 0.125, 0.020000765100121498, -0.003905563149601221, -0.125], [0.26984846591949463, 0.004819311201572418, -0.125, 0.24367386102676392, 0.7543624639511108, -0.125, 0.24367386102676392, 0.7543624639511108, 0.125, 0.26984846591949463, 0.004819311201572418, 0.125], [0.020000765100121498, -0.003905563149601221, 0.125, -0.006173856556415558, 0.7456375956535339, 0.125, -0.006173856556415558, 0.7456375956535339, -0.125, 0.020000765100121498, -0.003905563149601221, -0.125]] +tex_coords = [[0.02631578947368421, 0.0, 0, 0.02631578947368421, 0.75, 0, 0.07894736842105263, 0.75, 0, 0.07894736842105263, 0.0, 0], [0.10526315789473684, 0.0, 0, 0.10526315789473684, 0.75, 0, 0.15789473684210525, 0.75, 0, 0.15789473684210525, 0.0, 0], [0.02631578947368421, 0.75, 0, 0.02631578947368421, 1.0, 0, 0.07894736842105263, 1.0, 0, 0.07894736842105263, 0.75, 0], [0.07894736842105263, 0.75, 0, 0.07894736842105263, 1.0, 0, 0.13157894736842105, 1.0, 0, 0.13157894736842105, 0.75, 0], [0.07894736842105263, 0.0, 0, 0.07894736842105263, 0.75, 0, 0.10526315789473684, 0.75, 0, 0.10526315789473684, 0.0, 0], [0.0, 0.0, 0, 0.0, 0.75, 0, 0.02631578947368421, 0.75, 0, 0.02631578947368421, 0.0, 0], [0.21052631578947367, 0.0, 0, 0.21052631578947367, 0.5, 0, 0.2631578947368421, 0.5, 0, 0.2631578947368421, 0.0, 0], [0.3157894736842105, 0.0, 0, 0.3157894736842105, 0.5, 0, 0.3684210526315789, 0.5, 0, 0.3684210526315789, 0.0, 0], [0.21052631578947367, 0.5, 0, 0.21052631578947367, 1.0, 0, 0.2631578947368421, 1.0, 0, 0.2631578947368421, 0.5, 0], [0.2631578947368421, 0.5, 0, 0.2631578947368421, 1.0, 0, 0.3157894736842105, 1.0, 0, 0.3157894736842105, 0.5, 0], [0.2631578947368421, 0.0, 0, 0.2631578947368421, 0.5, 0, 0.3157894736842105, 0.5, 0, 0.3157894736842105, 0.0, 0], [0.15789473684210525, 0.0, 0, 0.15789473684210525, 0.5, 0, 0.21052631578947367, 0.5, 0, 0.21052631578947367, 0.0, 0], [0.42105263157894735, 0.0, 0, 0.42105263157894735, 0.5, 0, 0.47368421052631576, 0.5, 0, 0.47368421052631576, 0.0, 0], [0.5263157894736842, 0.0, 0, 0.5263157894736842, 0.5, 0, 0.5789473684210527, 0.5, 0, 0.5789473684210527, 0.0, 0], [0.42105263157894735, 0.5, 0, 0.42105263157894735, 1.0, 0, 0.47368421052631576, 1.0, 0, 0.47368421052631576, 0.5, 0], [0.47368421052631576, 0.5, 0, 0.47368421052631576, 1.0, 0, 0.5263157894736842, 1.0, 0, 0.5263157894736842, 0.5, 0], [0.47368421052631576, 0.0, 0, 0.47368421052631576, 0.5, 0, 0.5263157894736842, 0.5, 0, 0.5263157894736842, 0.0, 0], [0.3684210526315789, 0.0, 0, 0.3684210526315789, 0.5, 0, 0.42105263157894735, 0.5, 0, 0.42105263157894735, 0.0, 0], [0.6052631578947368, 0.0, 0, 0.6052631578947368, 0.75, 0, 0.631578947368421, 0.75, 0, 0.631578947368421, 0.0, 0], [0.6578947368421053, 0.0, 0, 0.6578947368421053, 0.75, 0, 0.6842105263157895, 0.75, 0, 0.6842105263157895, 0.0, 0], [0.6052631578947368, 0.75, 0, 0.6052631578947368, 1.0, 0, 0.631578947368421, 1.0, 0, 0.631578947368421, 0.75, 0], [0.631578947368421, 0.75, 0, 0.631578947368421, 1.0, 0, 0.6578947368421053, 1.0, 0, 0.6578947368421053, 0.75, 0], [0.631578947368421, 0.0, 0, 0.631578947368421, 0.75, 0, 0.6578947368421053, 0.75, 0, 0.6578947368421053, 0.0, 0], [0.5789473684210527, 0.0, 0, 0.5789473684210527, 0.75, 0, 0.6052631578947368, 0.75, 0, 0.6052631578947368, 0.0, 0], [0.7105263157894737, 0.0, 0, 0.7105263157894737, 0.75, 0, 0.7368421052631579, 0.75, 0, 0.7368421052631579, 0.0, 0], [0.7631578947368421, 0.0, 0, 0.7631578947368421, 0.75, 0, 0.7894736842105263, 0.75, 0, 0.7894736842105263, 0.0, 0], [0.7105263157894737, 0.75, 0, 0.7105263157894737, 1.0, 0, 0.7368421052631579, 1.0, 0, 0.7368421052631579, 0.75, 0], [0.7368421052631579, 0.75, 0, 0.7368421052631579, 1.0, 0, 0.7631578947368421, 1.0, 0, 0.7631578947368421, 0.75, 0], [0.7368421052631579, 0.0, 0, 0.7368421052631579, 0.75, 0, 0.7631578947368421, 0.75, 0, 0.7631578947368421, 0.0, 0], [0.6842105263157895, 0.0, 0, 0.6842105263157895, 0.75, 0, 0.7105263157894737, 0.75, 0, 0.7105263157894737, 0.0, 0], [0.8157894736842105, 0.0, 0, 0.8157894736842105, 0.75, 0, 0.8421052631578947, 0.75, 0, 0.8421052631578947, 0.0, 0], [0.868421052631579, 0.0, 0, 0.868421052631579, 0.75, 0, 0.8947368421052632, 0.75, 0, 0.8947368421052632, 0.0, 0], [0.8157894736842105, 0.75, 0, 0.8157894736842105, 1.0, 0, 0.8421052631578947, 1.0, 0, 0.8421052631578947, 0.75, 0], [0.8421052631578947, 0.75, 0, 0.8421052631578947, 1.0, 0, 0.868421052631579, 1.0, 0, 0.868421052631579, 0.75, 0], [0.8421052631578947, 0.0, 0, 0.8421052631578947, 0.75, 0, 0.868421052631579, 0.75, 0, 0.868421052631579, 0.0, 0], [0.7894736842105263, 0.0, 0, 0.7894736842105263, 0.75, 0, 0.8157894736842105, 0.75, 0, 0.8157894736842105, 0.0, 0], [0.9210526315789473, 0.0, 0, 0.9210526315789473, 0.75, 0, 0.9473684210526315, 0.75, 0, 0.9473684210526315, 0.0, 0], [0.9736842105263158, 0.0, 0, 0.9736842105263158, 0.75, 0, 1.0, 0.75, 0, 1.0, 0.0, 0], [0.9210526315789473, 0.75, 0, 0.9210526315789473, 1.0, 0, 0.9473684210526315, 1.0, 0, 0.9473684210526315, 0.75, 0], [0.9473684210526315, 0.75, 0, 0.9473684210526315, 1.0, 0, 0.9736842105263158, 1.0, 0, 0.9736842105263158, 0.75, 0], [0.9473684210526315, 0.0, 0, 0.9473684210526315, 0.75, 0, 0.9736842105263158, 0.75, 0, 0.9736842105263158, 0.0, 0], [0.8947368421052632, 0.0, 0, 0.8947368421052632, 0.75, 0, 0.9210526315789473, 0.75, 0, 0.9210526315789473, 0.0, 0]] +shading_values = [[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]] + diff --git a/episode-13/player.py b/episode-13/player.py index dbb3f764..c0dc17d8 100644 --- a/episode-13/player.py +++ b/episode-13/player.py @@ -6,8 +6,8 @@ SPRINTING_SPEED = 7 # faster than in Minecraft, feels better class Player(entity.Entity): - def __init__(self, world, shader, width, height): - super().__init__(world) + def __init__(self, world, width, height): + super().__init__(world, world.entity_types[0]) self.view_width = width self.view_height = height @@ -17,14 +17,9 @@ def __init__(self, world, shader, width, height): self.mv_matrix = matrix.Matrix() self.p_matrix = matrix.Matrix() - # shaders - - self.shader = shader - self.shader_matrix_location = self.shader.find_uniform(b"matrix") - # camera variables - self.eyelevel = self.height - 0.2 + self.eyelevel = self.entity_type.height - 0.2 self.input = [0, 0, 0] self.target_speed = WALKING_SPEED @@ -33,17 +28,22 @@ def __init__(self, world, shader, width, height): def update(self, delta_time): # process input - self.speed += (self.target_speed - self.speed) * delta_time * 20 - multiplier = self.speed + if delta_time * 20 > 1: + self.speed = self.target_speed + + else: + self.speed += (self.target_speed - self.speed) * delta_time * 20 + + multiplier = self.speed * (1, 2)[self.flying] if self.flying and self.input[1]: - self.velocity[1] = self.input[1] * multiplier + self.accel[1] = self.input[1] * multiplier if self.input[0] or self.input[2]: angle = self.rotation[0] - math.atan2(self.input[2], self.input[0]) + math.tau / 4 - self.velocity[0] = math.cos(angle) * multiplier - self.velocity[2] = math.sin(angle) * multiplier + self.accel[0] = math.cos(angle) * multiplier + self.accel[2] = math.sin(angle) * multiplier if not self.flying and self.input[1] > 0: self.jump() @@ -58,7 +58,7 @@ def update_matrices(self): self.p_matrix.load_identity() self.p_matrix.perspective( - 90 + 20 * (self.speed - WALKING_SPEED) / (SPRINTING_SPEED - WALKING_SPEED), + 90 + 10 * (self.speed - WALKING_SPEED) / (SPRINTING_SPEED - WALKING_SPEED), float(self.view_width) / self.view_height, 0.1, 500) # create modelview matrix @@ -69,5 +69,4 @@ def update_matrices(self): # modelviewprojection matrix - mvp_matrix = self.p_matrix * self.mv_matrix - self.shader.uniform_matrix(self.shader_matrix_location, mvp_matrix) \ No newline at end of file + self.world.mvp_matrix = self.p_matrix * self.mv_matrix \ No newline at end of file diff --git a/episode-13/save.py b/episode-13/save.py index 6a9d9bb2..32127223 100644 --- a/episode-13/save.py +++ b/episode-13/save.py @@ -79,6 +79,10 @@ def load(self): # for y in range(-15, 16): # self.load_chunk((x, 0, y)) + #for x in range(-4, 4): + # for y in range(-4, 4): + # self.load_chunk((x, 0, y)) + for x in range(-1, 1): for y in range(-1, 1): self.load_chunk((x, 0, y)) diff --git a/episode-13/frag.glsl b/episode-13/shaders/block/frag.glsl similarity index 100% rename from episode-13/frag.glsl rename to episode-13/shaders/block/frag.glsl diff --git a/episode-13/vert.glsl b/episode-13/shaders/block/vert.glsl similarity index 100% rename from episode-13/vert.glsl rename to episode-13/shaders/block/vert.glsl diff --git a/episode-13/shaders/entity/frag.glsl b/episode-13/shaders/entity/frag.glsl new file mode 100644 index 00000000..49a738a0 --- /dev/null +++ b/episode-13/shaders/entity/frag.glsl @@ -0,0 +1,17 @@ +#version 330 + +out vec4 fragment_colour; + +uniform sampler2D texture_sampler; + +in vec3 local_position; +in vec3 interpolated_tex_coords; + +void main(void) { + vec4 texture_colour = texture(texture_sampler, interpolated_tex_coords.xy); + fragment_colour = texture_colour; + + if (texture_colour.a == 0.0) { // discard if texel's alpha component is 0 (texel is transparent) + discard; + } +} \ No newline at end of file diff --git a/episode-13/shaders/entity/vert.glsl b/episode-13/shaders/entity/vert.glsl new file mode 100644 index 00000000..fdc41c49 --- /dev/null +++ b/episode-13/shaders/entity/vert.glsl @@ -0,0 +1,15 @@ +#version 330 + +layout(location = 0) in vec3 vertex_position; +layout(location = 1) in vec3 tex_coords; + +out vec3 local_position; +out vec3 interpolated_tex_coords; + +uniform mat4 matrix; + +void main(void) { + local_position = vertex_position; + interpolated_tex_coords = tex_coords; + gl_Position = matrix * vec4(vertex_position, 1.0); +} \ No newline at end of file diff --git a/episode-13/texture_manager.py b/episode-13/texture_manager.py index 6cfc9fdf..191a11bd 100644 --- a/episode-13/texture_manager.py +++ b/episode-13/texture_manager.py @@ -25,14 +25,16 @@ def __init__(self, texture_width, texture_height, max_textures): 0, gl.GL_RGBA, gl.GL_UNSIGNED_BYTE, None) def generate_mipmaps(self): + gl.glBindTexture(gl.GL_TEXTURE_2D_ARRAY, self.texture_array) gl.glGenerateMipmap(gl.GL_TEXTURE_2D_ARRAY) def add_texture(self, texture): + gl.glBindTexture(gl.GL_TEXTURE_2D_ARRAY, self.texture_array) + if not texture in self.textures: self.textures.append(texture) texture_image = pyglet.image.load(f"textures/{texture}.png").get_image_data() - gl.glBindTexture(gl.GL_TEXTURE_2D_ARRAY, self.texture_array) gl.glTexSubImage3D( gl.GL_TEXTURE_2D_ARRAY, 0, diff --git a/episode-13/textures/entity/cow.png b/episode-13/textures/entity/cow.png new file mode 100644 index 0000000000000000000000000000000000000000..f5ebec713b7507cf94ff472dd779d92de2dcd749 GIT binary patch literal 1948 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 literal 0 HcmV?d00001 diff --git a/episode-13/textures/entity/skeleton.png b/episode-13/textures/entity/skeleton.png new file mode 100644 index 0000000000000000000000000000000000000000..7e3f09575451c6887916e1870d323405fd9f5d7c GIT binary patch literal 1183 zcmV;Q1YrA#P)c+-|S>1(^&XRx*tutUMZOe8>3P3MWw0h}+m1?mB>=$iZm9Z8 zdnJ$}!SV5NX5IM!U=)myGjrN8qhK`m{x`qAS?hV5f^FN8e8*8RnpyWUeY@3;q%LRX z&}=qW((kOhP|LCuiIN;Snd`bynwPgM3*6@*MKaaj@Am=BC$ZgXr+VHd5GPM($jkI` zozCFr>DMNh`&?a1VsyGyVObUcfE39L$(Cg)lAkLsE-oS=1PX-$gb<)*3L(Ty|0;R_ zO0KH^Y25`6?}o5#J90Ws#C?w8-4L$pMo!0x;vqW?!f^;nDHvm^jAa{PWDNiSrF0|h z9U10iSeTbfUDs8F0)RL0An#+0f!#9DGKJG|B5&X+OHAep9k|aGx!rD8E$;t7GAR;- z;}F2ayPmqeqswpYRy%TCHk{K8F6W3jfMK! zVQrGaf&l#CLA6;hae`&~j4lT^&Keopwj=3H{eB>&i7en%SWko^=$USqs zI@WE8bbX8TNlVww2c$E$?}>Oc+k~9!!Hu&$a&lD-;SUGNqA12pCxd0_mi7AM6c0=!&dWko>r^qJuvnDNYc{ z=V6#80AP1_cS>iNCJfV@B05f>nir2-gSpS%AmrN8%H;lbU8yBF>D8+qKMwDPYT_iq zaR`D(0+adn{{CK@gC)`N!YfJKHW2wEA>S{JT>B(z5p+jrLI`zjWDR%&57kOlkr@U7 zemg%00Q`P_4*u|fR;#7j(!;sW)xGgK0n9b3csGPM@Q^cesb%sQa~=6z3D%vH z#?Mwsk>KRu1eceWQ)6EL@*1Q_@WIyG@exdGv=f2Z^oRi}db^Yz1Z>ZPn==b{=1tT@*GCY^RO+N}dgTWVs z<4}dO(q0Lb$}0eme`~6hDk_y%=-u>`_Y?{R7+C}1IGj2Eh=26 xB5H@Vnf$9e?BG6Ep81lN@s-_f`ulA?{sklb;7#+Ts&4=Q002ovPDHLkV1n|DH6Z{1 literal 0 HcmV?d00001 diff --git a/episode-13/textures/entity/spider.png b/episode-13/textures/entity/spider.png new file mode 100644 index 0000000000000000000000000000000000000000..3e4d20b053c304ca815c0fda4151ed43225048a2 GIT binary patch literal 2268 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 Date: Mon, 14 Mar 2022 15:09:01 +0100 Subject: [PATCH 06/45] ep13: `Mob` class for basic AI --- community/block_type.py | 5 ++-- episode-10/block_type.py | 3 +-- episode-10/texture_manager.py | 4 ++- episode-11/texture_manager.py | 4 ++- episode-12/block_type.py | 3 +-- episode-12/save.py | 20 +++++++------- episode-12/texture_manager.py | 4 ++- episode-13/data/entities.mcpy | 2 +- episode-13/entity.py | 48 ++++++++++++++++++++++++++++++++-- episode-13/main.py | 39 +++++++--------------------- episode-13/mob.py | 49 +++++++++++++++++++++++++++++++++++ episode-13/save.py | 12 ++++----- episode-13/world.py | 9 +++---- episode-5/texture_manager.py | 24 +++++++++-------- episode-6/texture_manager.py | 5 +++- episode-7/texture_manager.py | 5 +++- episode-8/texture_manager.py | 5 +++- episode-9/block_type.py | 4 +-- episode-9/texture_manager.py | 4 ++- 19 files changed, 169 insertions(+), 80 deletions(-) create mode 100644 episode-13/mob.py diff --git a/community/block_type.py b/community/block_type.py index 2142433f..d0e99746 100644 --- a/community/block_type.py +++ b/community/block_type.py @@ -3,7 +3,6 @@ import models.cube # default model class Block_type: - # new optional model argument (cube model by default) def __init__(self, texture_manager, name = "unknown", block_face_textures = {"all": "cobblestone"}, model = models.cube): self.name = name self.block_face_textures = block_face_textures @@ -23,7 +22,7 @@ def __init__(self, texture_manager, name = "unknown", block_face_textures = {"al for _collider in model.colliders: self.colliders.append(collider.Collider(*_collider)) - # replace data contained in numbers.py with model specific data + # get model specific data self.vertex_positions = model.vertex_positions self.tex_coords = model.tex_coords # to deprecate @@ -32,8 +31,10 @@ def __init__(self, texture_manager, name = "unknown", block_face_textures = {"al def set_block_face(face, texture): # make sure we don't add inexistent face + if face > len(self.tex_coords) - 1: return + self.tex_indices[face] = texture for face in block_face_textures: diff --git a/episode-10/block_type.py b/episode-10/block_type.py index 5e1ccf7b..caea115c 100644 --- a/episode-10/block_type.py +++ b/episode-10/block_type.py @@ -1,7 +1,6 @@ import models.cube # default model class Block_type: - # new optional model argument (cube model by default) def __init__(self, texture_manager, name = "unknown", block_face_textures = {"all": "cobblestone"}, model = models.cube): self.name = name @@ -10,7 +9,7 @@ def __init__(self, texture_manager, name = "unknown", block_face_textures = {"al self.transparent = model.transparent self.is_cube = model.is_cube - # replace data contained in numbers.py with model specific data + # get model specific data self.vertex_positions = model.vertex_positions self.tex_coords = model.tex_coords.copy() diff --git a/episode-10/texture_manager.py b/episode-10/texture_manager.py index 6cfc9fdf..191a11bd 100644 --- a/episode-10/texture_manager.py +++ b/episode-10/texture_manager.py @@ -25,14 +25,16 @@ def __init__(self, texture_width, texture_height, max_textures): 0, gl.GL_RGBA, gl.GL_UNSIGNED_BYTE, None) def generate_mipmaps(self): + gl.glBindTexture(gl.GL_TEXTURE_2D_ARRAY, self.texture_array) gl.glGenerateMipmap(gl.GL_TEXTURE_2D_ARRAY) def add_texture(self, texture): + gl.glBindTexture(gl.GL_TEXTURE_2D_ARRAY, self.texture_array) + if not texture in self.textures: self.textures.append(texture) texture_image = pyglet.image.load(f"textures/{texture}.png").get_image_data() - gl.glBindTexture(gl.GL_TEXTURE_2D_ARRAY, self.texture_array) gl.glTexSubImage3D( gl.GL_TEXTURE_2D_ARRAY, 0, diff --git a/episode-11/texture_manager.py b/episode-11/texture_manager.py index 6cfc9fdf..191a11bd 100644 --- a/episode-11/texture_manager.py +++ b/episode-11/texture_manager.py @@ -25,14 +25,16 @@ def __init__(self, texture_width, texture_height, max_textures): 0, gl.GL_RGBA, gl.GL_UNSIGNED_BYTE, None) def generate_mipmaps(self): + gl.glBindTexture(gl.GL_TEXTURE_2D_ARRAY, self.texture_array) gl.glGenerateMipmap(gl.GL_TEXTURE_2D_ARRAY) def add_texture(self, texture): + gl.glBindTexture(gl.GL_TEXTURE_2D_ARRAY, self.texture_array) + if not texture in self.textures: self.textures.append(texture) texture_image = pyglet.image.load(f"textures/{texture}.png").get_image_data() - gl.glBindTexture(gl.GL_TEXTURE_2D_ARRAY, self.texture_array) gl.glTexSubImage3D( gl.GL_TEXTURE_2D_ARRAY, 0, diff --git a/episode-12/block_type.py b/episode-12/block_type.py index 8b0668bb..5b3c433e 100644 --- a/episode-12/block_type.py +++ b/episode-12/block_type.py @@ -3,7 +3,6 @@ import models.cube # default model class Block_type: - # new optional model argument (cube model by default) def __init__(self, texture_manager, name = "unknown", block_face_textures = {"all": "cobblestone"}, model = models.cube): self.name = name self.block_face_textures = block_face_textures @@ -22,7 +21,7 @@ def __init__(self, texture_manager, name = "unknown", block_face_textures = {"al for _collider in model.colliders: self.colliders.append(collider.Collider(*_collider)) - # replace data contained in numbers.py with model specific data + # get model specific data self.vertex_positions = model.vertex_positions self.tex_coords = model.tex_coords.copy() diff --git a/episode-12/save.py b/episode-12/save.py index 57f6c6a0..ac9a961c 100644 --- a/episode-12/save.py +++ b/episode-12/save.py @@ -75,17 +75,17 @@ def save_chunk(self, chunk_position): chunk_data.save(chunk_path, gzipped = True) def load(self): - # for x in range(-16, 15): - # for y in range(-15, 16): - # self.load_chunk((x, 0, y)) + #for x in range(-16, 15): + # for y in range(-15, 16): + # self.load_chunk((x, 0, y)) - # for x in range(-4, 4): - # for y in range(-4, 4): - # self.load_chunk((x, 0, y)) - - for x in range(-1, 1): - for y in range(-1, 1): + for x in range(-4, 4): + for y in range(-4, 4): self.load_chunk((x, 0, y)) + + #for x in range(-1, 1): + # for y in range(-1, 1): + # self.load_chunk((x, 0, y)) def save(self): for chunk_position in self.world.chunks: @@ -96,4 +96,4 @@ def save(self): if chunk.modified: self.save_chunk(chunk_position) - chunk.modified = False \ No newline at end of file + chunk.modified = False diff --git a/episode-12/texture_manager.py b/episode-12/texture_manager.py index 6cfc9fdf..191a11bd 100644 --- a/episode-12/texture_manager.py +++ b/episode-12/texture_manager.py @@ -25,14 +25,16 @@ def __init__(self, texture_width, texture_height, max_textures): 0, gl.GL_RGBA, gl.GL_UNSIGNED_BYTE, None) def generate_mipmaps(self): + gl.glBindTexture(gl.GL_TEXTURE_2D_ARRAY, self.texture_array) gl.glGenerateMipmap(gl.GL_TEXTURE_2D_ARRAY) def add_texture(self, texture): + gl.glBindTexture(gl.GL_TEXTURE_2D_ARRAY, self.texture_array) + if not texture in self.textures: self.textures.append(texture) texture_image = pyglet.image.load(f"textures/{texture}.png").get_image_data() - gl.glBindTexture(gl.GL_TEXTURE_2D_ARRAY, self.texture_array) gl.glTexSubImage3D( gl.GL_TEXTURE_2D_ARRAY, 0, diff --git a/episode-13/data/entities.mcpy b/episode-13/data/entities.mcpy index 75ea6d2a..5314ba17 100644 --- a/episode-13/data/entities.mcpy +++ b/episode-13/data/entities.mcpy @@ -1,6 +1,6 @@ # not actually sure of the ID's yet, I can't find a reference for them anywhere atm -#1: name "Player", width 0.6, height 1.8, model models.player, texture steve +1: name "Player", width 0.6, height 1.8, model models.pig, texture pig 2: name "Pig", width 0.9, height 0.9, model models.pig, texture pig 3: name "Zombie", width 0.6, height 1.95, model models.zombie, texture zombie 4: name "Skeleton", width 0.6, height 1.99, model models.skeleton, texture skeleton diff --git a/episode-13/entity.py b/episode-13/entity.py index e614246e..67834bdc 100644 --- a/episode-13/entity.py +++ b/episode-13/entity.py @@ -1,8 +1,11 @@ import math +import random import matrix import collider +import chunk + FLYING_ACCEL = (0, 0, 0) GRAVITY_ACCEL = (0, -32, 0) @@ -15,7 +18,7 @@ DRAG_FALL = (1.8, 0.4, 1.8) class Entity: - def __init__(self, world, entity_type, width = 0.6, height = 1.8): + def __init__(self, world, entity_type): self.world = world self.entity_type = entity_type @@ -33,7 +36,9 @@ def __init__(self, world, entity_type, width = 0.6, height = 1.8): # collision variables self.collider = collider.Collider() + self.grounded = False + self.wall = False def update_collider(self): x, y, z = self.position @@ -62,6 +67,39 @@ def jump(self, height = None): self.velocity[1] = math.sqrt(-2 * GRAVITY_ACCEL[1] * height) + def reset(self): + # how large is the world? + + max_y = 0 + + max_x, max_z = (0, 0) + min_x, min_z = (0, 0) + + for pos in self.world.chunks: + x, y, z = pos + + max_y = max(max_y, (y + 1) * chunk.CHUNK_HEIGHT) + + max_x = max(max_x, (x + 1) * chunk.CHUNK_WIDTH) + min_x = min(min_x, x * chunk.CHUNK_WIDTH) + + max_z = max(max_z, (z + 1) * chunk.CHUNK_LENGTH) + min_z = min(min_z, z * chunk.CHUNK_LENGTH) + + # get random X & Z coordinates to teleport the player to + + x = random.randint(min_x, max_x) + z = random.randint(min_z, max_z) + + # find height at which to teleport to, by finding the first non-air block from the top of the world + + for y in range(chunk.CHUNK_HEIGHT - 1, -1, -1): + if not self.world.get_block_number((x, y, z)): + continue + + self.teleport((x, y + 1, z)) + break + @property def friction(self): if self.flying: @@ -84,7 +122,9 @@ def update(self, delta_time): # compute collisions self.update_collider() + self.grounded = False + self.wall = False for _ in range(3): adjusted_velocity = [v * delta_time for v in self.velocity] @@ -142,6 +182,9 @@ def update(self, delta_time): self.velocity[2] = 0 self.position[2] += vz * entry_time + if normal[0] or normal[2]: + self.wall = True + if normal[1] == 1: self.grounded = True @@ -169,7 +212,8 @@ def ai(self, delta_time): self.accel[0] = math.cos(self.rotation[0] + math.tau / 4) * 3 self.accel[2] = -math.sin(self.rotation[0] + math.tau / 4) * 3 - self.jump() + if not random.randint(0, 50): + self.jump() if self.position[1] < 0: self.position = [0, 80, 0] diff --git a/episode-13/main.py b/episode-13/main.py index c82e62a9..0c5de8af 100644 --- a/episode-13/main.py +++ b/episode-13/main.py @@ -10,6 +10,7 @@ import pyglet.gl as gl import player +import mob import chunk import world @@ -48,7 +49,7 @@ def update(self, delta_time): # update other entities for entity in self.world.entities: - entity.ai(delta_time) + # entity.target = [self.player.position[0], self.player.position[2]] entity.update(delta_time) def on_draw(self): @@ -132,37 +133,17 @@ def on_key_press(self, key, modifiers): self.world.save.save() elif key == pyglet.window.key.R: - # how large is the world? + self.player.reset() - max_y = 0 + elif key == pyglet.window.key.B: + for entity in self.world.entities: + entity.reset() - max_x, max_z = (0, 0) - min_x, min_z = (0, 0) + elif key == pyglet.window.key.E: + _mob = mob.Mob(self.world, self.world.entity_types[random.choice([1, 2, 3, 4, 6])]) + self.world.entities.append(_mob) - for pos in self.world.chunks: - x, y, z = pos - - max_y = max(max_y, (y + 1) * chunk.CHUNK_HEIGHT) - - max_x = max(max_x, (x + 1) * chunk.CHUNK_WIDTH) - min_x = min(min_x, x * chunk.CHUNK_WIDTH) - - max_z = max(max_z, (z + 1) * chunk.CHUNK_LENGTH) - min_z = min(min_z, z * chunk.CHUNK_LENGTH) - - # get random X & Z coordinates to teleport the player to - - x = random.randint(min_x, max_x) - z = random.randint(min_z, max_z) - - # find height at which to teleport to, by finding the first non-air block from the top of the world - - for y in range(chunk.CHUNK_HEIGHT - 1, -1, -1): - if not self.world.get_block_number((x, y, z)): - continue - - self.player.teleport((x, y + 1, z)) - break + _mob.teleport(self.player.position) elif key == pyglet.window.key.ESCAPE: self.mouse_captured = False diff --git a/episode-13/mob.py b/episode-13/mob.py new file mode 100644 index 00000000..e59cadb6 --- /dev/null +++ b/episode-13/mob.py @@ -0,0 +1,49 @@ +import random +import math + +import entity + +class Mob(entity.Entity): + def __init__(self, world, entity_type): + super().__init__(world, entity_type) + + self.heading = 0 + self.select_target() + + self.reset() + + def select_target(self): + self.target = [x + random.randint(-10, 10) for x in self.position] + + def update(self, delta_time): + if not random.randint(0, int(5 / delta_time)): # change target every 5 seconds on average + self.select_target() + + delta_x = self.position[0] - self.target[0] + delta_y = self.position[2] - self.target[2] + + self.heading = -math.atan2(delta_y, delta_x) + math.tau / 4 + + if delta_time * 20 > 1: + self.rotation[0] = self.heading + + else: + self.rotation[0] += (self.heading - self.rotation[0]) * delta_time * 20 + + target_dist = math.sqrt(delta_x ** 2 + delta_y ** 2) + + if target_dist > 1: + self.accel[0] = math.cos(self.rotation[0] + math.tau / 4) * 3 + self.accel[2] = -math.sin(self.rotation[0] + math.tau / 4) * 3 + + super().update(delta_time) + + if self.wall and self.grounded: + if random.randint(0, 3): + self.jump() + + else: + self.select_target() + + if self.position[1] < 0: + self.teleport((0, 80, 0)) \ No newline at end of file diff --git a/episode-13/save.py b/episode-13/save.py index 32127223..d0fc4d04 100644 --- a/episode-13/save.py +++ b/episode-13/save.py @@ -79,13 +79,13 @@ def load(self): # for y in range(-15, 16): # self.load_chunk((x, 0, y)) - #for x in range(-4, 4): - # for y in range(-4, 4): - # self.load_chunk((x, 0, y)) - - for x in range(-1, 1): - for y in range(-1, 1): + for x in range(-4, 4): + for y in range(-4, 4): self.load_chunk((x, 0, y)) + + # for x in range(-1, 1): + # for y in range(-1, 1): + # self.load_chunk((x, 0, y)) def save(self): for chunk_position in self.world.chunks: diff --git a/episode-13/world.py b/episode-13/world.py index ad88780f..d6455001 100644 --- a/episode-13/world.py +++ b/episode-13/world.py @@ -12,7 +12,7 @@ import block_type import texture_manager -import entity +import mob import entity_type # import custom block & entity models @@ -125,7 +125,7 @@ def __init__(self): # add entity type - _entity_type = entity_type.Entity_type(self, name, texture, model) + _entity_type = entity_type.Entity_type(self, name, texture, model, width, height) if number < len(self.entity_types): self.entity_types[number] = _entity_type @@ -157,13 +157,10 @@ def __init__(self): self.chunks[chunk_position].update_mesh() # TODO remme - # summon a few entities + # summon a few mobs self.entities = [] - for _entity_type in self.entity_types: - self.entities.append(entity.Entity(self, _entity_type)) - def get_chunk_position(self, position): x, y, z = position diff --git a/episode-5/texture_manager.py b/episode-5/texture_manager.py index a26180f0..191a11bd 100644 --- a/episode-5/texture_manager.py +++ b/episode-5/texture_manager.py @@ -10,31 +10,33 @@ def __init__(self, texture_width, texture_height, max_textures): self.max_textures = max_textures - self.textures = [] # an array to keep track of the textures we've already added + self.textures = [] - self.texture_array = gl.GLuint(0) # create our texture array + self.texture_array = gl.GLuint(0) gl.glGenTextures(1, self.texture_array) gl.glBindTexture(gl.GL_TEXTURE_2D_ARRAY, self.texture_array) - gl.glTexParameteri(gl.GL_TEXTURE_2D_ARRAY, gl.GL_TEXTURE_MAG_FILTER, gl.GL_NEAREST) # disable texture filtering for magnification (return the texel that's nearest to the fragment's texture coordinate) + gl.glTexParameteri(gl.GL_TEXTURE_2D_ARRAY, gl.GL_TEXTURE_MIN_FILTER, gl.GL_NEAREST) + gl.glTexParameteri(gl.GL_TEXTURE_2D_ARRAY, gl.GL_TEXTURE_MAG_FILTER, gl.GL_NEAREST) - gl.glTexImage3D( # set the dimensions of our texture array + gl.glTexImage3D( gl.GL_TEXTURE_2D_ARRAY, 0, gl.GL_RGBA, self.texture_width, self.texture_height, self.max_textures, 0, gl.GL_RGBA, gl.GL_UNSIGNED_BYTE, None) def generate_mipmaps(self): - gl.glBindTexture(gl.GL_TEXTURE_2D_ARRAY, self.texture_array) # make sure our texture is bound - gl.glGenerateMipmap(gl.GL_TEXTURE_2D_ARRAY) # generate mipmaps for our texture + gl.glBindTexture(gl.GL_TEXTURE_2D_ARRAY, self.texture_array) + gl.glGenerateMipmap(gl.GL_TEXTURE_2D_ARRAY) def add_texture(self, texture): - if not texture in self.textures: # check to see if our texture has not yet been added - self.textures.append(texture) # add it to our textures list if not + gl.glBindTexture(gl.GL_TEXTURE_2D_ARRAY, self.texture_array) + + if not texture in self.textures: + self.textures.append(texture) - texture_image = pyglet.image.load(f"textures/{texture}.png").get_image_data() # load and get the image data of the texture we want - gl.glBindTexture(gl.GL_TEXTURE_2D_ARRAY, self.texture_array) # make sure our texture array is bound + texture_image = pyglet.image.load(f"textures/{texture}.png").get_image_data() - gl.glTexSubImage3D( # paste our texture's image data in the appropriate spot in our texture array + gl.glTexSubImage3D( gl.GL_TEXTURE_2D_ARRAY, 0, 0, 0, self.textures.index(texture), self.texture_width, self.texture_height, 1, diff --git a/episode-6/texture_manager.py b/episode-6/texture_manager.py index 13993f9e..191a11bd 100644 --- a/episode-6/texture_manager.py +++ b/episode-6/texture_manager.py @@ -16,6 +16,7 @@ def __init__(self, texture_width, texture_height, max_textures): gl.glGenTextures(1, self.texture_array) gl.glBindTexture(gl.GL_TEXTURE_2D_ARRAY, self.texture_array) + gl.glTexParameteri(gl.GL_TEXTURE_2D_ARRAY, gl.GL_TEXTURE_MIN_FILTER, gl.GL_NEAREST) gl.glTexParameteri(gl.GL_TEXTURE_2D_ARRAY, gl.GL_TEXTURE_MAG_FILTER, gl.GL_NEAREST) gl.glTexImage3D( @@ -24,14 +25,16 @@ def __init__(self, texture_width, texture_height, max_textures): 0, gl.GL_RGBA, gl.GL_UNSIGNED_BYTE, None) def generate_mipmaps(self): + gl.glBindTexture(gl.GL_TEXTURE_2D_ARRAY, self.texture_array) gl.glGenerateMipmap(gl.GL_TEXTURE_2D_ARRAY) def add_texture(self, texture): + gl.glBindTexture(gl.GL_TEXTURE_2D_ARRAY, self.texture_array) + if not texture in self.textures: self.textures.append(texture) texture_image = pyglet.image.load(f"textures/{texture}.png").get_image_data() - gl.glBindTexture(gl.GL_TEXTURE_2D_ARRAY, self.texture_array) gl.glTexSubImage3D( gl.GL_TEXTURE_2D_ARRAY, 0, diff --git a/episode-7/texture_manager.py b/episode-7/texture_manager.py index 13993f9e..191a11bd 100644 --- a/episode-7/texture_manager.py +++ b/episode-7/texture_manager.py @@ -16,6 +16,7 @@ def __init__(self, texture_width, texture_height, max_textures): gl.glGenTextures(1, self.texture_array) gl.glBindTexture(gl.GL_TEXTURE_2D_ARRAY, self.texture_array) + gl.glTexParameteri(gl.GL_TEXTURE_2D_ARRAY, gl.GL_TEXTURE_MIN_FILTER, gl.GL_NEAREST) gl.glTexParameteri(gl.GL_TEXTURE_2D_ARRAY, gl.GL_TEXTURE_MAG_FILTER, gl.GL_NEAREST) gl.glTexImage3D( @@ -24,14 +25,16 @@ def __init__(self, texture_width, texture_height, max_textures): 0, gl.GL_RGBA, gl.GL_UNSIGNED_BYTE, None) def generate_mipmaps(self): + gl.glBindTexture(gl.GL_TEXTURE_2D_ARRAY, self.texture_array) gl.glGenerateMipmap(gl.GL_TEXTURE_2D_ARRAY) def add_texture(self, texture): + gl.glBindTexture(gl.GL_TEXTURE_2D_ARRAY, self.texture_array) + if not texture in self.textures: self.textures.append(texture) texture_image = pyglet.image.load(f"textures/{texture}.png").get_image_data() - gl.glBindTexture(gl.GL_TEXTURE_2D_ARRAY, self.texture_array) gl.glTexSubImage3D( gl.GL_TEXTURE_2D_ARRAY, 0, diff --git a/episode-8/texture_manager.py b/episode-8/texture_manager.py index 13993f9e..191a11bd 100644 --- a/episode-8/texture_manager.py +++ b/episode-8/texture_manager.py @@ -16,6 +16,7 @@ def __init__(self, texture_width, texture_height, max_textures): gl.glGenTextures(1, self.texture_array) gl.glBindTexture(gl.GL_TEXTURE_2D_ARRAY, self.texture_array) + gl.glTexParameteri(gl.GL_TEXTURE_2D_ARRAY, gl.GL_TEXTURE_MIN_FILTER, gl.GL_NEAREST) gl.glTexParameteri(gl.GL_TEXTURE_2D_ARRAY, gl.GL_TEXTURE_MAG_FILTER, gl.GL_NEAREST) gl.glTexImage3D( @@ -24,14 +25,16 @@ def __init__(self, texture_width, texture_height, max_textures): 0, gl.GL_RGBA, gl.GL_UNSIGNED_BYTE, None) def generate_mipmaps(self): + gl.glBindTexture(gl.GL_TEXTURE_2D_ARRAY, self.texture_array) gl.glGenerateMipmap(gl.GL_TEXTURE_2D_ARRAY) def add_texture(self, texture): + gl.glBindTexture(gl.GL_TEXTURE_2D_ARRAY, self.texture_array) + if not texture in self.textures: self.textures.append(texture) texture_image = pyglet.image.load(f"textures/{texture}.png").get_image_data() - gl.glBindTexture(gl.GL_TEXTURE_2D_ARRAY, self.texture_array) gl.glTexSubImage3D( gl.GL_TEXTURE_2D_ARRAY, 0, diff --git a/episode-9/block_type.py b/episode-9/block_type.py index 5e1ccf7b..7d386851 100644 --- a/episode-9/block_type.py +++ b/episode-9/block_type.py @@ -1,7 +1,6 @@ import models.cube # default model class Block_type: - # new optional model argument (cube model by default) def __init__(self, texture_manager, name = "unknown", block_face_textures = {"all": "cobblestone"}, model = models.cube): self.name = name @@ -10,7 +9,7 @@ def __init__(self, texture_manager, name = "unknown", block_face_textures = {"al self.transparent = model.transparent self.is_cube = model.is_cube - # replace data contained in numbers.py with model specific data + # get model specific data self.vertex_positions = model.vertex_positions self.tex_coords = model.tex_coords.copy() @@ -18,6 +17,7 @@ def __init__(self, texture_manager, name = "unknown", block_face_textures = {"al def set_block_face(face, texture): # make sure we don't add inexistent faces + if face > len(self.tex_coords) - 1: return diff --git a/episode-9/texture_manager.py b/episode-9/texture_manager.py index 6cfc9fdf..191a11bd 100644 --- a/episode-9/texture_manager.py +++ b/episode-9/texture_manager.py @@ -25,14 +25,16 @@ def __init__(self, texture_width, texture_height, max_textures): 0, gl.GL_RGBA, gl.GL_UNSIGNED_BYTE, None) def generate_mipmaps(self): + gl.glBindTexture(gl.GL_TEXTURE_2D_ARRAY, self.texture_array) gl.glGenerateMipmap(gl.GL_TEXTURE_2D_ARRAY) def add_texture(self, texture): + gl.glBindTexture(gl.GL_TEXTURE_2D_ARRAY, self.texture_array) + if not texture in self.textures: self.textures.append(texture) texture_image = pyglet.image.load(f"textures/{texture}.png").get_image_data() - gl.glBindTexture(gl.GL_TEXTURE_2D_ARRAY, self.texture_array) gl.glTexSubImage3D( gl.GL_TEXTURE_2D_ARRAY, 0, From e2692169a3451e007e3e9a85e1c5fa2bbc9b44c1 Mon Sep 17 00:00:00 2001 From: obiwac Date: Mon, 14 Mar 2022 19:12:59 +0100 Subject: [PATCH 07/45] ep13: Entity model normal computation and directional lighting --- episode-13/entity.py | 11 +++++++--- episode-13/entity_type.py | 33 +++++++++++++++++++++++++++++ episode-13/mob.py | 6 +++--- episode-13/player.py | 17 ++++++--------- episode-13/save.py | 12 +++++------ episode-13/shaders/entity/frag.glsl | 3 ++- episode-13/shaders/entity/vert.glsl | 10 +++++++++ episode-13/world.py | 7 +++++- 8 files changed, 74 insertions(+), 25 deletions(-) diff --git a/episode-13/entity.py b/episode-13/entity.py index 67834bdc..09097efa 100644 --- a/episode-13/entity.py +++ b/episode-13/entity.py @@ -221,12 +221,17 @@ def ai(self, delta_time): def draw(self): # compute transformation matrix - _matrix = matrix.copy_matrix(self.world.mvp_matrix) + m_matrix = matrix.Matrix() + m_matrix.load_identity() - _matrix.translate(*self.position) - _matrix.rotate_2d(*self.rotation) + m_matrix.translate(*self.position) + m_matrix.rotate_2d(*self.rotation) + + _matrix = self.world.mvp_matrix * m_matrix # actually draw entity + self.world.entity_shader.uniform_matrix(self.world.entity_shader_m_matrix_location, m_matrix) self.world.entity_shader.uniform_matrix(self.world.entity_shader_matrix_location, _matrix) + self.entity_type.draw() \ No newline at end of file diff --git a/episode-13/entity_type.py b/episode-13/entity_type.py index 073bec55..be625fa2 100644 --- a/episode-13/entity_type.py +++ b/episode-13/entity_type.py @@ -44,6 +44,26 @@ def __init__(self, world, name = "unknown", texture = "pig", model = models.pig, self.vertices = sum(model.vertex_positions, []) self.tex_coords = sum(model.tex_coords, []) + # get normal vector for each face + + self.normals = [] + + for face in model.vertex_positions: + # take the cross product between two vectors we know are on the plane the face belongs to + + u = [face[0] - face[3], face[1] - face[4], face[2] - face[5]] + v = [face[0] - face[6], face[1] - face[7], face[2] - face[8]] + + n = [ + u[1] * v[2] - u[2] * v[1], + -u[0] * v[2] + u[2] * v[0], + u[0] * v[1] - u[1] * v[0], + ] + + self.normals.extend(n * 4) + + # compute indices + self.indices = [] index_counter = 0 @@ -86,6 +106,19 @@ def __init__(self, world, name = "unknown", texture = "pig", model = models.pig, gl.glVertexAttribPointer(1, 3, gl.GL_FLOAT, gl.GL_FALSE, 0, 0) gl.glEnableVertexAttribArray(1) + self.normals_vbo = gl.GLuint(0) + gl.glGenBuffers(1, self.normals_vbo) + + gl.glBindBuffer(gl.GL_ARRAY_BUFFER, self.normals_vbo) + gl.glBufferData( + gl.GL_ARRAY_BUFFER, + ctypes.sizeof(gl.GLfloat * len(self.normals)), + (gl.GLfloat * len(self.normals)) (*self.normals), + gl.GL_STATIC_DRAW) + + gl.glVertexAttribPointer(2, 3, gl.GL_FLOAT, gl.GL_FALSE, 0, 0) + gl.glEnableVertexAttribArray(2) + self.ibo = gl.GLuint(0) gl.glGenBuffers(1, self.ibo) diff --git a/episode-13/mob.py b/episode-13/mob.py index e59cadb6..6b4b4202 100644 --- a/episode-13/mob.py +++ b/episode-13/mob.py @@ -16,7 +16,7 @@ def select_target(self): self.target = [x + random.randint(-10, 10) for x in self.position] def update(self, delta_time): - if not random.randint(0, int(5 / delta_time)): # change target every 5 seconds on average + if not random.randint(0, int(3 / delta_time)): # change target every 3 seconds on average self.select_target() delta_x = self.position[0] - self.target[0] @@ -24,11 +24,11 @@ def update(self, delta_time): self.heading = -math.atan2(delta_y, delta_x) + math.tau / 4 - if delta_time * 20 > 1: + if delta_time * 5 > 1: self.rotation[0] = self.heading else: - self.rotation[0] += (self.heading - self.rotation[0]) * delta_time * 20 + self.rotation[0] += (self.heading - self.rotation[0]) * delta_time * 5 target_dist = math.sqrt(delta_x ** 2 + delta_y ** 2) diff --git a/episode-13/player.py b/episode-13/player.py index c0dc17d8..0a5e4dc0 100644 --- a/episode-13/player.py +++ b/episode-13/player.py @@ -12,11 +12,6 @@ def __init__(self, world, width, height): self.view_width = width self.view_height = height - # create matrices - - self.mv_matrix = matrix.Matrix() - self.p_matrix = matrix.Matrix() - # camera variables self.eyelevel = self.entity_type.height - 0.2 @@ -55,18 +50,18 @@ def update(self, delta_time): def update_matrices(self): # create projection matrix - self.p_matrix.load_identity() + self.world.p_matrix.load_identity() - self.p_matrix.perspective( + self.world.p_matrix.perspective( 90 + 10 * (self.speed - WALKING_SPEED) / (SPRINTING_SPEED - WALKING_SPEED), float(self.view_width) / self.view_height, 0.1, 500) # create modelview matrix - self.mv_matrix.load_identity() - self.mv_matrix.rotate_2d(self.rotation[0] + math.tau / 4, self.rotation[1]) - self.mv_matrix.translate(-self.position[0], -self.position[1] - self.eyelevel, -self.position[2]) + self.world.mv_matrix.load_identity() + self.world.mv_matrix.rotate_2d(self.rotation[0] + math.tau / 4, self.rotation[1]) + self.world.mv_matrix.translate(-self.position[0], -self.position[1] - self.eyelevel, -self.position[2]) # modelviewprojection matrix - self.world.mvp_matrix = self.p_matrix * self.mv_matrix \ No newline at end of file + self.world.mvp_matrix = self.world.p_matrix * self.world.mv_matrix \ No newline at end of file diff --git a/episode-13/save.py b/episode-13/save.py index d0fc4d04..4b8fab47 100644 --- a/episode-13/save.py +++ b/episode-13/save.py @@ -79,13 +79,13 @@ def load(self): # for y in range(-15, 16): # self.load_chunk((x, 0, y)) - for x in range(-4, 4): - for y in range(-4, 4): - self.load_chunk((x, 0, y)) - - # for x in range(-1, 1): - # for y in range(-1, 1): + # for x in range(-4, 4): + # for y in range(-4, 4): # self.load_chunk((x, 0, y)) + + for x in range(-1, 1): + for y in range(-1, 1): + self.load_chunk((x, 0, y)) def save(self): for chunk_position in self.world.chunks: diff --git a/episode-13/shaders/entity/frag.glsl b/episode-13/shaders/entity/frag.glsl index 49a738a0..ba59efb1 100644 --- a/episode-13/shaders/entity/frag.glsl +++ b/episode-13/shaders/entity/frag.glsl @@ -6,10 +6,11 @@ uniform sampler2D texture_sampler; in vec3 local_position; in vec3 interpolated_tex_coords; +in float shading; void main(void) { vec4 texture_colour = texture(texture_sampler, interpolated_tex_coords.xy); - fragment_colour = texture_colour; + fragment_colour = texture_colour * shading; if (texture_colour.a == 0.0) { // discard if texel's alpha component is 0 (texel is transparent) discard; diff --git a/episode-13/shaders/entity/vert.glsl b/episode-13/shaders/entity/vert.glsl index fdc41c49..5560d766 100644 --- a/episode-13/shaders/entity/vert.glsl +++ b/episode-13/shaders/entity/vert.glsl @@ -2,14 +2,24 @@ layout(location = 0) in vec3 vertex_position; layout(location = 1) in vec3 tex_coords; +layout(location = 2) in vec3 normal; out vec3 local_position; out vec3 interpolated_tex_coords; +out float shading; +uniform mat4 m_matrix; uniform mat4 matrix; void main(void) { local_position = vertex_position; + interpolated_tex_coords = tex_coords; + + vec3 adjusted_normal = (vec4(normal, 1.0) * m_matrix).xyz; + vec3 sunlight = vec3(0.0, 0.0, 1.0); + + shading = 1.0 - 0.4 * abs(dot(normalize(adjusted_normal), normalize(sunlight))); + gl_Position = matrix * vec4(vertex_position, 1.0); } \ No newline at end of file diff --git a/episode-13/world.py b/episode-13/world.py index d6455001..085ceb47 100644 --- a/episode-13/world.py +++ b/episode-13/world.py @@ -4,6 +4,8 @@ import math import random +import matrix + import save import chunk @@ -135,7 +137,9 @@ def __init__(self): # create shaders - self.mvp_matrix = None # to be set by Player object + self.mvp_matrix = matrix.Matrix() # to be set by Player object + self.mv_matrix = matrix.Matrix() # to be set by Player object + self.p_matrix = matrix.Matrix() # to be set by Player object self.block_shader = shader.Shader("shaders/block/vert.glsl", "shaders/block/frag.glsl") self.block_shader_sampler_location = self.block_shader.find_uniform(b"texture_array_sampler") @@ -143,6 +147,7 @@ def __init__(self): self.entity_shader = shader.Shader("shaders/entity/vert.glsl", "shaders/entity/frag.glsl") self.entity_shader_sampler_location = self.entity_shader.find_uniform(b"texture_sampler") + self.entity_shader_m_matrix_location = self.entity_shader.find_uniform(b"m_matrix") self.entity_shader_matrix_location = self.entity_shader.find_uniform(b"matrix") # load the world From 808b646b5a317d33550aa840260837b3fbdb9717 Mon Sep 17 00:00:00 2001 From: Obiwac Date: Wed, 16 Mar 2022 12:22:06 +0100 Subject: [PATCH 08/45] ep13: `GL_STATIC_DRAW` -> `GL_STREAM_DRAW` in preperation for animations --- episode-13/entity_type.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/episode-13/entity_type.py b/episode-13/entity_type.py index be625fa2..0c5cb66e 100644 --- a/episode-13/entity_type.py +++ b/episode-13/entity_type.py @@ -85,7 +85,7 @@ def __init__(self, world, name = "unknown", texture = "pig", model = models.pig, gl.GL_ARRAY_BUFFER, ctypes.sizeof(gl.GLfloat * len(self.vertices)), (gl.GLfloat * len(self.vertices)) (*self.vertices), - gl.GL_STATIC_DRAW) + gl.GL_STREAM_DRAW) gl.glVertexAttribPointer(0, 3, gl.GL_FLOAT, gl.GL_FALSE, 0, 0) gl.glEnableVertexAttribArray(0) @@ -98,7 +98,7 @@ def __init__(self, world, name = "unknown", texture = "pig", model = models.pig, gl.GL_ARRAY_BUFFER, ctypes.sizeof(gl.GLfloat * len(self.tex_coords)), (gl.GLfloat * len(self.tex_coords)) (*self.tex_coords), - gl.GL_STATIC_DRAW) + gl.GL_STREAM_DRAW) # texture coordinates are still 3D here even though we don't use texture arrays (as is the case with blocks) # this is so that we can interchange block & entity models @@ -114,7 +114,7 @@ def __init__(self, world, name = "unknown", texture = "pig", model = models.pig, gl.GL_ARRAY_BUFFER, ctypes.sizeof(gl.GLfloat * len(self.normals)), (gl.GLfloat * len(self.normals)) (*self.normals), - gl.GL_STATIC_DRAW) + gl.GL_STREAM_DRAW) gl.glVertexAttribPointer(2, 3, gl.GL_FLOAT, gl.GL_FALSE, 0, 0) gl.glEnableVertexAttribArray(2) @@ -127,7 +127,7 @@ def __init__(self, world, name = "unknown", texture = "pig", model = models.pig, gl.GL_ELEMENT_ARRAY_BUFFER, ctypes.sizeof(gl.GLuint * len(self.indices)), (gl.GLuint * len(self.indices)) (*self.indices), - gl.GL_STATIC_DRAW) + gl.GL_STREAM_DRAW) def draw(self): # bind textures @@ -139,4 +139,4 @@ def draw(self): # draw entity gl.glBindVertexArray(self.vao) - gl.glDrawElements(gl.GL_TRIANGLES, len(self.indices), gl.GL_UNSIGNED_INT, None) \ No newline at end of file + gl.glDrawElements(gl.GL_TRIANGLES, len(self.indices), gl.GL_UNSIGNED_INT, None) From 3086746e8cf5dbf0895b793b0e20781f02bfbd8c Mon Sep 17 00:00:00 2001 From: obiwac Date: Sun, 26 Jun 2022 16:36:43 +0200 Subject: [PATCH 09/45] ep13: Straighten out entity models --- episode-13/collider.py | 10 +++++----- episode-13/entity.py | 10 +++++----- episode-13/main.py | 2 -- episode-13/models/cow.py | 3 +-- episode-13/models/creeper.py | 3 +-- episode-13/models/pig.py | 3 +-- episode-13/models/skeleton.py | 3 +-- episode-13/models/zombie.py | 3 +-- episode-13/player.py | 4 ++-- episode-13/shaders/entity/frag.glsl | 2 +- episode-13/work/convert.py | 12 ++++++++++-- 11 files changed, 28 insertions(+), 27 deletions(-) diff --git a/episode-13/collider.py b/episode-13/collider.py index 81f2aa89..c15926c0 100644 --- a/episode-13/collider.py +++ b/episode-13/collider.py @@ -5,7 +5,7 @@ def __init__(self, pos1 = (None,) * 3, pos2 = (None,) * 3): self.x1, self.y1, self.z1 = pos1 self.x2, self.y2, self.z2 = pos2 - + def __add__(self, pos): x, y, z = pos @@ -13,14 +13,14 @@ def __add__(self, pos): (self.x1 + x, self.y1 + y, self.z1 + z), (self.x2 + x, self.y2 + y, self.z2 + z) ) - + def __and__(self, collider): x = min(self.x2, collider.x2) - max(self.x1, collider.x1) y = min(self.y2, collider.y2) - max(self.y1, collider.y1) z = min(self.z2, collider.z2) - max(self.z1, collider.z1) return x > 0 and y > 0 and z > 0 - + def collide(self, collider, velocity): # self: the dynamic collider, which moves # collider: the static collider, which stays put @@ -49,7 +49,7 @@ def collide(self, collider, velocity): if x_entry > 1 or y_entry > 1 or z_entry > 1: return no_collision - + # on which axis did we collide first? entry = max(x_entry, y_entry, z_entry) @@ -57,7 +57,7 @@ def collide(self, collider, velocity): if entry > exit_: return no_collision - + # find normal of surface we collided with nx = (0, -1 if vx > 0 else 1)[entry == x_entry] diff --git a/episode-13/entity.py b/episode-13/entity.py index 09097efa..579f9afd 100644 --- a/episode-13/entity.py +++ b/episode-13/entity.py @@ -9,7 +9,7 @@ FLYING_ACCEL = (0, 0, 0) GRAVITY_ACCEL = (0, -32, 0) -# these values all come (losely) from Minecraft, but are multiplied by 20 (since Minecraft runs at 20 TPS) +# these values all come (loosely) from Minecraft, but are multiplied by 20 (since Minecraft runs at 20 TPS) FRICTION = ( 20, 20, 20) @@ -36,7 +36,7 @@ def __init__(self, world, entity_type): # collision variables self.collider = collider.Collider() - + self.grounded = False self.wall = False @@ -122,7 +122,7 @@ def update(self, delta_time): # compute collisions self.update_collider() - + self.grounded = False self.wall = False @@ -173,7 +173,7 @@ def update(self, delta_time): if normal[0]: self.velocity[0] = 0 self.position[0] += vx * entry_time - + if normal[1]: self.velocity[1] = 0 self.position[1] += vy * entry_time @@ -233,5 +233,5 @@ def draw(self): self.world.entity_shader.uniform_matrix(self.world.entity_shader_m_matrix_location, m_matrix) self.world.entity_shader.uniform_matrix(self.world.entity_shader_matrix_location, _matrix) - + self.entity_type.draw() \ No newline at end of file diff --git a/episode-13/main.py b/episode-13/main.py index 0c5de8af..ed570904 100644 --- a/episode-13/main.py +++ b/episode-13/main.py @@ -1,6 +1,5 @@ import math -import ctypes import random import pyglet @@ -12,7 +11,6 @@ import player import mob -import chunk import world import hit diff --git a/episode-13/models/cow.py b/episode-13/models/cow.py index a79245d5..08097faa 100644 --- a/episode-13/models/cow.py +++ b/episode-13/models/cow.py @@ -5,7 +5,6 @@ colliders = [] -vertex_positions = [[-0.32999515533447266, 0.75, 0.6557807922363281, -0.4280453324317932, 0.7499999403953552, -0.46493828296661377, 0.31910067796707153, 0.7499999403953552, -0.530305027961731, 0.4171508550643921, 0.7499999403953552, 0.5904139280319214], [0.4171508550643921, 1.375, 0.5904139280319214, 0.31910067796707153, 1.3749998807907104, -0.530305027961731, -0.4280453324317932, 1.3749998807907104, -0.46493828296661377, -0.32999515533447266, 1.375, 0.6557807922363281], [-0.4280453324317932, 0.7499999403953552, -0.46493828296661377, -0.4280453324317932, 1.3749998807907104, -0.46493828296661377, 0.31910067796707153, 1.3749998807907104, -0.530305027961731, 0.31910067796707153, 0.7499999403953552, -0.530305027961731], [0.4171508550643921, 0.7499999403953552, 0.5904139280319214, 0.4171508550643921, 1.375, 0.5904139280319214, -0.32999515533447266, 1.375, 0.6557807922363281, -0.32999515533447266, 0.75, 0.6557807922363281], [0.4171508550643921, 0.7499999403953552, 0.5904139280319214, 0.31910067796707153, 0.7499999403953552, -0.530305027961731, 0.31910067796707153, 1.3749998807907104, -0.530305027961731, 0.4171508550643921, 1.375, 0.5904139280319214], [-0.32999515533447266, 1.375, 0.6557807922363281, -0.4280453324317932, 1.3749998807907104, -0.46493828296661377, -0.4280453324317932, 0.7499999403953552, -0.46493828296661377, -0.32999515533447266, 0.75, 0.6557807922363281], [-0.07205101102590561, 0.6875, 0.6353269815444946, -0.1112491711974144, 0.6874999403953552, 0.26238131523132324, 0.13738128542900085, 0.6874999403953552, 0.23624920845031738, 0.17657946050167084, 0.6874999403953552, 0.6091948747634888], [0.17657946050167084, 0.7499999403953552, 0.6091948747634888, 0.13738128542900085, 0.7499999403953552, 0.23624920845031738, -0.1112491711974144, 0.7499999403953552, 0.26238131523132324, -0.07205101102590561, 0.75, 0.6353269815444946], [-0.1112491711974144, 0.6874999403953552, 0.26238131523132324, -0.1112491711974144, 0.7499999403953552, 0.26238131523132324, 0.13738128542900085, 0.7499999403953552, 0.23624920845031738, 0.13738128542900085, 0.6874999403953552, 0.23624920845031738], [0.17657946050167084, 0.6874999403953552, 0.6091948747634888, 0.17657946050167084, 0.7499999403953552, 0.6091948747634888, -0.07205101102590561, 0.75, 0.6353269815444946, -0.07205101102590561, 0.6875, 0.6353269815444946], [0.17657946050167084, 0.6874999403953552, 0.6091948747634888, 0.13738128542900085, 0.6874999403953552, 0.23624920845031738, 0.13738128542900085, 0.7499999403953552, 0.23624920845031738, 0.17657946050167084, 0.7499999403953552, 0.6091948747634888], [-0.07205101102590561, 0.75, 0.6353269815444946, -0.1112491711974144, 0.7499999403953552, 0.26238131523132324, -0.1112491711974144, 0.6874999403953552, 0.26238131523132324, -0.07205101102590561, 0.6875, 0.6353269815444946], [-0.18209344148635864, 0.9469456076622009, -0.875, -0.3030543923377991, 1.4320935010910034, -0.875, 0.18209345638751984, 1.5530544519424438, -0.875, 0.3030543923377991, 1.0679066181182861, -0.875], [0.3030543923377991, 1.0679066181182861, -0.5, 0.18209345638751984, 1.5530544519424438, -0.5, -0.3030543923377991, 1.4320935010910034, -0.5, -0.18209344148635864, 0.9469456076622009, -0.5], [-0.3030543923377991, 1.4320935010910034, -0.875, -0.3030543923377991, 1.4320935010910034, -0.5, 0.18209345638751984, 1.5530544519424438, -0.5, 0.18209345638751984, 1.5530544519424438, -0.875], [0.3030543923377991, 1.0679066181182861, -0.875, 0.3030543923377991, 1.0679066181182861, -0.5, -0.18209344148635864, 0.9469456076622009, -0.5, -0.18209344148635864, 0.9469456076622009, -0.875], [0.3030543923377991, 1.0679066181182861, -0.875, 0.18209345638751984, 1.5530544519424438, -0.875, 0.18209345638751984, 1.5530544519424438, -0.5, 0.3030543923377991, 1.0679066181182861, -0.5], [-0.18209344148635864, 0.9469456076622009, -0.5, -0.3030543923377991, 1.4320935010910034, -0.5, -0.3030543923377991, 1.4320935010910034, -0.875, -0.18209344148635864, 0.9469456076622009, -0.875], [-0.33166012167930603, 1.3072960376739502, -0.75, -0.3706435263156891, 1.4906988143920898, -0.75, -0.3095093071460724, 1.5036933422088623, -0.75, -0.27052590250968933, 1.3202905654907227, -0.75], [-0.27052590250968933, 1.3202905654907227, -0.6875, -0.3095093071460724, 1.5036933422088623, -0.6875, -0.3706435263156891, 1.4906988143920898, -0.6875, -0.33166012167930603, 1.3072960376739502, -0.6875], [-0.3706435263156891, 1.4906988143920898, -0.75, -0.3706435263156891, 1.4906988143920898, -0.6875, -0.3095093071460724, 1.5036933422088623, -0.6875, -0.3095093071460724, 1.5036933422088623, -0.75], [-0.27052590250968933, 1.3202905654907227, -0.75, -0.27052590250968933, 1.3202905654907227, -0.6875, -0.33166012167930603, 1.3072960376739502, -0.6875, -0.33166012167930603, 1.3072960376739502, -0.75], [-0.27052590250968933, 1.3202905654907227, -0.75, -0.3095093071460724, 1.5036933422088623, -0.75, -0.3095093071460724, 1.5036933422088623, -0.6875, -0.27052590250968933, 1.3202905654907227, -0.6875], [-0.33166012167930603, 1.3072960376739502, -0.6875, -0.3706435263156891, 1.4906988143920898, -0.6875, -0.3706435263156891, 1.4906988143920898, -0.75, -0.33166012167930603, 1.3072960376739502, -0.75], [0.21854794025421143, 1.4242463111877441, -0.75, 0.17956450581550598, 1.6076490879058838, -0.75, 0.24069872498512268, 1.6206436157226562, -0.75, 0.2796821594238281, 1.4372408390045166, -0.75], [0.2796821594238281, 1.4372408390045166, -0.6875, 0.24069872498512268, 1.6206436157226562, -0.6875, 0.17956450581550598, 1.6076490879058838, -0.6875, 0.21854794025421143, 1.4242463111877441, -0.6875], [0.17956450581550598, 1.6076490879058838, -0.75, 0.17956450581550598, 1.6076490879058838, -0.6875, 0.24069872498512268, 1.6206436157226562, -0.6875, 0.24069872498512268, 1.6206436157226562, -0.75], [0.2796821594238281, 1.4372408390045166, -0.75, 0.2796821594238281, 1.4372408390045166, -0.6875, 0.21854794025421143, 1.4242463111877441, -0.6875, 0.21854794025421143, 1.4242463111877441, -0.75], [0.2796821594238281, 1.4372408390045166, -0.75, 0.24069872498512268, 1.6206436157226562, -0.75, 0.24069872498512268, 1.6206436157226562, -0.6875, 0.2796821594238281, 1.4372408390045166, -0.6875], [0.21854794025421143, 1.4242463111877441, -0.6875, 0.17956450581550598, 1.6076490879058838, -0.6875, 0.17956450581550598, 1.6076490879058838, -0.75, 0.21854794025421143, 1.4242463111877441, -0.75], [-0.37762898206710815, 0.008301202207803726, 0.3125, -0.3122621774673462, 0.7554472088813782, 0.3125, -0.06321348994970322, 0.7336582541465759, 0.3125, -0.12858030200004578, -0.013487732037901878, 0.3125], [-0.12858030200004578, -0.013487732037901878, 0.5625, -0.06321348994970322, 0.7336582541465759, 0.5625, -0.3122621774673462, 0.7554472088813782, 0.5625, -0.37762898206710815, 0.008301202207803726, 0.5625], [-0.3122621774673462, 0.7554472088813782, 0.3125, -0.3122621774673462, 0.7554472088813782, 0.5625, -0.06321348994970322, 0.7336582541465759, 0.5625, -0.06321348994970322, 0.7336582541465759, 0.3125], [-0.12858030200004578, -0.013487732037901878, 0.3125, -0.12858030200004578, -0.013487732037901878, 0.5625, -0.37762898206710815, 0.008301202207803726, 0.5625, -0.37762898206710815, 0.008301202207803726, 0.3125], [-0.12858030200004578, -0.013487732037901878, 0.3125, -0.06321348994970322, 0.7336582541465759, 0.3125, -0.06321348994970322, 0.7336582541465759, 0.5625, -0.12858030200004578, -0.013487732037901878, 0.5625], [-0.37762898206710815, 0.008301202207803726, 0.5625, -0.3122621774673462, 0.7554472088813782, 0.5625, -0.3122621774673462, 0.7554472088813782, 0.3125, -0.37762898206710815, 0.008301202207803726, 0.3125], [-0.0021533146500587463, 0.019195711240172386, 0.3125, 0.06321349740028381, 0.7663417458534241, 0.3125, 0.3122621774673462, 0.7445527911186218, 0.3125, 0.24689537286758423, -0.0025932230055332184, 0.3125], [0.24689537286758423, -0.0025932230055332184, 0.5625, 0.3122621774673462, 0.7445527911186218, 0.5625, 0.06321349740028381, 0.7663417458534241, 0.5625, -0.0021533146500587463, 0.019195711240172386, 0.5625], [0.06321349740028381, 0.7663417458534241, 0.3125, 0.06321349740028381, 0.7663417458534241, 0.5625, 0.3122621774673462, 0.7445527911186218, 0.5625, 0.3122621774673462, 0.7445527911186218, 0.3125], [0.24689537286758423, -0.0025932230055332184, 0.3125, 0.24689537286758423, -0.0025932230055332184, 0.5625, -0.0021533146500587463, 0.019195711240172386, 0.5625, -0.0021533146500587463, 0.019195711240172386, 0.3125], [0.24689537286758423, -0.0025932230055332184, 0.3125, 0.3122621774673462, 0.7445527911186218, 0.3125, 0.3122621774673462, 0.7445527911186218, 0.5625, 0.24689537286758423, -0.0025932230055332184, 0.5625], [-0.0021533146500587463, 0.019195711240172386, 0.5625, 0.06321349740028381, 0.7663417458534241, 0.5625, 0.06321349740028381, 0.7663417458534241, 0.3125, -0.0021533146500587463, 0.019195711240172386, 0.3125], [-0.2206321358680725, -0.0020264610648155212, -0.4375, -0.31203415989875793, 0.7423831820487976, -0.4375, -0.06389759480953217, 0.772850513458252, -0.4375, 0.027504410594701767, 0.028440875932574272, -0.4375], [0.027504410594701767, 0.028440875932574272, -0.1875, -0.06389759480953217, 0.772850513458252, -0.1875, -0.31203415989875793, 0.7423831820487976, -0.1875, -0.2206321358680725, -0.0020264610648155212, -0.1875], [-0.31203415989875793, 0.7423831820487976, -0.4375, -0.31203415989875793, 0.7423831820487976, -0.1875, -0.06389759480953217, 0.772850513458252, -0.1875, -0.06389759480953217, 0.772850513458252, -0.4375], [0.027504410594701767, 0.028440875932574272, -0.4375, 0.027504410594701767, 0.028440875932574272, -0.1875, -0.2206321358680725, -0.0020264610648155212, -0.1875, -0.2206321358680725, -0.0020264610648155212, -0.4375], [0.027504410594701767, 0.028440875932574272, -0.4375, -0.06389759480953217, 0.772850513458252, -0.4375, -0.06389759480953217, 0.772850513458252, -0.1875, 0.027504410594701767, 0.028440875932574272, -0.1875], [-0.2206321358680725, -0.0020264610648155212, -0.1875, -0.31203415989875793, 0.7423831820487976, -0.1875, -0.31203415989875793, 0.7423831820487976, -0.4375, -0.2206321358680725, -0.0020264610648155212, -0.4375], [0.1552996039390564, -0.017260117456316948, -0.4375, 0.06389759480953217, 0.727149486541748, -0.4375, 0.31203413009643555, 0.7576168179512024, -0.4375, 0.40343615412712097, 0.013207219541072845, -0.4375], [0.40343615412712097, 0.013207219541072845, -0.1875, 0.31203413009643555, 0.7576168179512024, -0.1875, 0.06389759480953217, 0.727149486541748, -0.1875, 0.1552996039390564, -0.017260117456316948, -0.1875], [0.06389759480953217, 0.727149486541748, -0.4375, 0.06389759480953217, 0.727149486541748, -0.1875, 0.31203413009643555, 0.7576168179512024, -0.1875, 0.31203413009643555, 0.7576168179512024, -0.4375], [0.40343615412712097, 0.013207219541072845, -0.4375, 0.40343615412712097, 0.013207219541072845, -0.1875, 0.1552996039390564, -0.017260117456316948, -0.1875, 0.1552996039390564, -0.017260117456316948, -0.4375], [0.40343615412712097, 0.013207219541072845, -0.4375, 0.31203413009643555, 0.7576168179512024, -0.4375, 0.31203413009643555, 0.7576168179512024, -0.1875, 0.40343615412712097, 0.013207219541072845, -0.1875], [0.1552996039390564, -0.017260117456316948, -0.1875, 0.06389759480953217, 0.727149486541748, -0.1875, 0.06389759480953217, 0.727149486541748, -0.4375, 0.1552996039390564, -0.017260117456316948, -0.4375]] +vertex_positions = [[-0.3749999701976776, 0.7499999403953552, 0.625, -0.3749999701976776, 0.7499999403953552, -0.5, 0.3749999701976776, 0.7499999403953552, -0.5, 0.3749999701976776, 0.7499999403953552, 0.625], [0.3749999701976776, 1.375, 0.625, 0.3749999701976776, 1.3749998807907104, -0.5, -0.3749999701976776, 1.3749998807907104, -0.5, -0.3749999701976776, 1.375, 0.625], [-0.3749999701976776, 0.7499999403953552, -0.5, -0.3749999701976776, 1.3749998807907104, -0.5, 0.3749999701976776, 1.3749998807907104, -0.5, 0.3749999701976776, 0.7499999403953552, -0.5], [0.3749999701976776, 0.7499999403953552, 0.625, 0.3749999701976776, 1.375, 0.625, -0.3749999701976776, 1.375, 0.625, -0.3749999701976776, 0.7499999403953552, 0.625], [0.3749999701976776, 0.7499999403953552, 0.625, 0.3749999701976776, 0.7499999403953552, -0.5, 0.3749999701976776, 1.3749998807907104, -0.5, 0.3749999701976776, 1.375, 0.625], [-0.3749999701976776, 1.375, 0.625, -0.3749999701976776, 1.3749998807907104, -0.5, -0.3749999701976776, 0.7499999403953552, -0.5, -0.3749999701976776, 0.7499999403953552, 0.625], [-0.1249999925494194, 0.6874999403953552, 0.625, -0.1249999925494194, 0.6874999403953552, 0.25, 0.1249999925494194, 0.6874999403953552, 0.25, 0.1249999925494194, 0.6874999403953552, 0.625], [0.1249999925494194, 0.7499999403953552, 0.625, 0.1249999925494194, 0.7499999403953552, 0.25, -0.1249999925494194, 0.7499999403953552, 0.25, -0.1249999925494194, 0.7499999403953552, 0.625], [-0.1249999925494194, 0.6874999403953552, 0.25, -0.1249999925494194, 0.7499999403953552, 0.25, 0.1249999925494194, 0.7499999403953552, 0.25, 0.1249999925494194, 0.6874999403953552, 0.25], [0.1249999925494194, 0.6874999403953552, 0.625, 0.1249999925494194, 0.7499999403953552, 0.625, -0.1249999925494194, 0.7499999403953552, 0.625, -0.1249999925494194, 0.6874999403953552, 0.625], [0.1249999925494194, 0.6874999403953552, 0.625, 0.1249999925494194, 0.6874999403953552, 0.25, 0.1249999925494194, 0.7499999403953552, 0.25, 0.1249999925494194, 0.7499999403953552, 0.625], [-0.1249999925494194, 0.7499999403953552, 0.625, -0.1249999925494194, 0.7499999403953552, 0.25, -0.1249999925494194, 0.6874999403953552, 0.25, -0.1249999925494194, 0.6874999403953552, 0.625], [-0.25, 1.0, -0.875, -0.25, 1.5, -0.875, 0.25, 1.5, -0.875, 0.25, 1.0, -0.875], [0.25, 1.0, -0.5, 0.25, 1.5, -0.5, -0.25, 1.5, -0.5, -0.25, 1.0, -0.5], [-0.25, 1.5, -0.875, -0.25, 1.5, -0.5, 0.25, 1.5, -0.5, 0.25, 1.5, -0.875], [0.25, 1.0, -0.875, 0.25, 1.0, -0.5, -0.25, 1.0, -0.5, -0.25, 1.0, -0.875], [0.25, 1.0, -0.875, 0.25, 1.5, -0.875, 0.25, 1.5, -0.5, 0.25, 1.0, -0.5], [-0.25, 1.0, -0.5, -0.25, 1.5, -0.5, -0.25, 1.5, -0.875, -0.25, 1.0, -0.875], [-0.3125, 1.375, -0.75, -0.3125, 1.5625, -0.75, -0.25, 1.5625, -0.75, -0.25, 1.375, -0.75], [-0.25, 1.375, -0.6875, -0.25, 1.5625, -0.6875, -0.3125, 1.5625, -0.6875, -0.3125, 1.375, -0.6875], [-0.3125, 1.5625, -0.75, -0.3125, 1.5625, -0.6875, -0.25, 1.5625, -0.6875, -0.25, 1.5625, -0.75], [-0.25, 1.375, -0.75, -0.25, 1.375, -0.6875, -0.3125, 1.375, -0.6875, -0.3125, 1.375, -0.75], [-0.25, 1.375, -0.75, -0.25, 1.5625, -0.75, -0.25, 1.5625, -0.6875, -0.25, 1.375, -0.6875], [-0.3125, 1.375, -0.6875, -0.3125, 1.5625, -0.6875, -0.3125, 1.5625, -0.75, -0.3125, 1.375, -0.75], [0.25, 1.375, -0.75, 0.25, 1.5625, -0.75, 0.3125, 1.5625, -0.75, 0.3125, 1.375, -0.75], [0.3125, 1.375, -0.6875, 0.3125, 1.5625, -0.6875, 0.25, 1.5625, -0.6875, 0.25, 1.375, -0.6875], [0.25, 1.5625, -0.75, 0.25, 1.5625, -0.6875, 0.3125, 1.5625, -0.6875, 0.3125, 1.5625, -0.75], [0.3125, 1.375, -0.75, 0.3125, 1.375, -0.6875, 0.25, 1.375, -0.6875, 0.25, 1.375, -0.75], [0.3125, 1.375, -0.75, 0.3125, 1.5625, -0.75, 0.3125, 1.5625, -0.6875, 0.3125, 1.375, -0.6875], [0.25, 1.375, -0.6875, 0.25, 1.5625, -0.6875, 0.25, 1.5625, -0.75, 0.25, 1.375, -0.75], [-0.3125, 0.0, 0.3125, -0.3125, 0.75, 0.3125, -0.0625, 0.75, 0.3125, -0.0625, 0.0, 0.3125], [-0.0625, 0.0, 0.5625, -0.0625, 0.75, 0.5625, -0.3125, 0.75, 0.5625, -0.3125, 0.0, 0.5625], [-0.3125, 0.75, 0.3125, -0.3125, 0.75, 0.5625, -0.0625, 0.75, 0.5625, -0.0625, 0.75, 0.3125], [-0.0625, 0.0, 0.3125, -0.0625, 0.0, 0.5625, -0.3125, 0.0, 0.5625, -0.3125, 0.0, 0.3125], [-0.0625, 0.0, 0.3125, -0.0625, 0.75, 0.3125, -0.0625, 0.75, 0.5625, -0.0625, 0.0, 0.5625], [-0.3125, 0.0, 0.5625, -0.3125, 0.75, 0.5625, -0.3125, 0.75, 0.3125, -0.3125, 0.0, 0.3125], [0.0625, 0.0, 0.3125, 0.0625, 0.75, 0.3125, 0.3125, 0.75, 0.3125, 0.3125, 0.0, 0.3125], [0.3125, 0.0, 0.5625, 0.3125, 0.75, 0.5625, 0.0625, 0.75, 0.5625, 0.0625, 0.0, 0.5625], [0.0625, 0.75, 0.3125, 0.0625, 0.75, 0.5625, 0.3125, 0.75, 0.5625, 0.3125, 0.75, 0.3125], [0.3125, 0.0, 0.3125, 0.3125, 0.0, 0.5625, 0.0625, 0.0, 0.5625, 0.0625, 0.0, 0.3125], [0.3125, 0.0, 0.3125, 0.3125, 0.75, 0.3125, 0.3125, 0.75, 0.5625, 0.3125, 0.0, 0.5625], [0.0625, 0.0, 0.5625, 0.0625, 0.75, 0.5625, 0.0625, 0.75, 0.3125, 0.0625, 0.0, 0.3125], [-0.3125, 0.0, -0.4375, -0.3125, 0.75, -0.4375, -0.0625, 0.75, -0.4375, -0.0625, 0.0, -0.4375], [-0.0625, 0.0, -0.1875, -0.0625, 0.75, -0.1875, -0.3125, 0.75, -0.1875, -0.3125, 0.0, -0.1875], [-0.3125, 0.75, -0.4375, -0.3125, 0.75, -0.1875, -0.0625, 0.75, -0.1875, -0.0625, 0.75, -0.4375], [-0.0625, 0.0, -0.4375, -0.0625, 0.0, -0.1875, -0.3125, 0.0, -0.1875, -0.3125, 0.0, -0.4375], [-0.0625, 0.0, -0.4375, -0.0625, 0.75, -0.4375, -0.0625, 0.75, -0.1875, -0.0625, 0.0, -0.1875], [-0.3125, 0.0, -0.1875, -0.3125, 0.75, -0.1875, -0.3125, 0.75, -0.4375, -0.3125, 0.0, -0.4375], [0.0625, 0.0, -0.4375, 0.0625, 0.75, -0.4375, 0.3125, 0.75, -0.4375, 0.3125, 0.0, -0.4375], [0.3125, 0.0, -0.1875, 0.3125, 0.75, -0.1875, 0.0625, 0.75, -0.1875, 0.0625, 0.0, -0.1875], [0.0625, 0.75, -0.4375, 0.0625, 0.75, -0.1875, 0.3125, 0.75, -0.1875, 0.3125, 0.75, -0.4375], [0.3125, 0.0, -0.4375, 0.3125, 0.0, -0.1875, 0.0625, 0.0, -0.1875, 0.0625, 0.0, -0.4375], [0.3125, 0.0, -0.4375, 0.3125, 0.75, -0.4375, 0.3125, 0.75, -0.1875, 0.3125, 0.0, -0.1875], [0.0625, 0.0, -0.1875, 0.0625, 0.75, -0.1875, 0.0625, 0.75, -0.4375, 0.0625, 0.0, -0.4375]] tex_coords = [[0.06493506493506493, 0.0, 0, 0.06493506493506493, 0.6428571428571428, 0, 0.14285714285714285, 0.6428571428571428, 0, 0.14285714285714285, 0.0, 0], [0.2077922077922078, 0.0, 0, 0.2077922077922078, 0.6428571428571428, 0, 0.2857142857142857, 0.6428571428571428, 0, 0.2857142857142857, 0.0, 0], [0.06493506493506493, 0.6428571428571428, 0, 0.06493506493506493, 1.0, 0, 0.14285714285714285, 1.0, 0, 0.14285714285714285, 0.6428571428571428, 0], [0.14285714285714285, 0.6428571428571428, 0, 0.14285714285714285, 1.0, 0, 0.22077922077922077, 1.0, 0, 0.22077922077922077, 0.6428571428571428, 0], [0.14285714285714285, 0.0, 0, 0.14285714285714285, 0.6428571428571428, 0, 0.2077922077922078, 0.6428571428571428, 0, 0.2077922077922078, 0.0, 0], [0.0, 0.0, 0, 0.0, 0.6428571428571428, 0, 0.06493506493506493, 0.6428571428571428, 0, 0.06493506493506493, 0.0, 0], [0.2922077922077922, 0.75, 0, 0.2922077922077922, 0.9642857142857143, 0, 0.3181818181818182, 0.9642857142857143, 0, 0.3181818181818182, 0.75, 0], [0.3246753246753247, 0.75, 0, 0.3246753246753247, 0.9642857142857143, 0, 0.35064935064935066, 0.9642857142857143, 0, 0.35064935064935066, 0.75, 0], [0.2922077922077922, 0.9642857142857143, 0, 0.2922077922077922, 1.0, 0, 0.3181818181818182, 1.0, 0, 0.3181818181818182, 0.9642857142857143, 0], [0.3181818181818182, 0.9642857142857143, 0, 0.3181818181818182, 1.0, 0, 0.34415584415584416, 1.0, 0, 0.34415584415584416, 0.9642857142857143, 0], [0.3181818181818182, 0.75, 0, 0.3181818181818182, 0.9642857142857143, 0, 0.3246753246753247, 0.9642857142857143, 0, 0.3246753246753247, 0.75, 0], [0.2857142857142857, 0.75, 0, 0.2857142857142857, 0.9642857142857143, 0, 0.2922077922077922, 0.9642857142857143, 0, 0.2922077922077922, 0.75, 0], [0.38961038961038963, 0.5, 0, 0.38961038961038963, 0.7857142857142857, 0, 0.44155844155844154, 0.7857142857142857, 0, 0.44155844155844154, 0.5, 0], [0.4805194805194805, 0.5, 0, 0.4805194805194805, 0.7857142857142857, 0, 0.5324675324675324, 0.7857142857142857, 0, 0.5324675324675324, 0.5, 0], [0.38961038961038963, 0.7857142857142857, 0, 0.38961038961038963, 1.0, 0, 0.44155844155844154, 1.0, 0, 0.44155844155844154, 0.7857142857142857, 0], [0.44155844155844154, 0.7857142857142857, 0, 0.44155844155844154, 1.0, 0, 0.4935064935064935, 1.0, 0, 0.4935064935064935, 0.7857142857142857, 0], [0.44155844155844154, 0.5, 0, 0.44155844155844154, 0.7857142857142857, 0, 0.4805194805194805, 0.7857142857142857, 0, 0.4805194805194805, 0.5, 0], [0.35064935064935066, 0.5, 0, 0.35064935064935066, 0.7857142857142857, 0, 0.38961038961038963, 0.7857142857142857, 0, 0.38961038961038963, 0.5, 0], [0.538961038961039, 0.8571428571428572, 0, 0.538961038961039, 0.9642857142857143, 0, 0.5454545454545454, 0.9642857142857143, 0, 0.5454545454545454, 0.8571428571428572, 0], [0.551948051948052, 0.8571428571428572, 0, 0.551948051948052, 0.9642857142857143, 0, 0.5584415584415584, 0.9642857142857143, 0, 0.5584415584415584, 0.8571428571428572, 0], [0.538961038961039, 0.9642857142857143, 0, 0.538961038961039, 1.0, 0, 0.5454545454545454, 1.0, 0, 0.5454545454545454, 0.9642857142857143, 0], [0.5454545454545454, 0.9642857142857143, 0, 0.5454545454545454, 1.0, 0, 0.551948051948052, 1.0, 0, 0.551948051948052, 0.9642857142857143, 0], [0.5454545454545454, 0.8571428571428572, 0, 0.5454545454545454, 0.9642857142857143, 0, 0.551948051948052, 0.9642857142857143, 0, 0.551948051948052, 0.8571428571428572, 0], [0.5324675324675324, 0.8571428571428572, 0, 0.5324675324675324, 0.9642857142857143, 0, 0.538961038961039, 0.9642857142857143, 0, 0.538961038961039, 0.8571428571428572, 0], [0.564935064935065, 0.8571428571428572, 0, 0.564935064935065, 0.9642857142857143, 0, 0.5714285714285714, 0.9642857142857143, 0, 0.5714285714285714, 0.8571428571428572, 0], [0.577922077922078, 0.8571428571428572, 0, 0.577922077922078, 0.9642857142857143, 0, 0.5844155844155844, 0.9642857142857143, 0, 0.5844155844155844, 0.8571428571428572, 0], [0.564935064935065, 0.9642857142857143, 0, 0.564935064935065, 1.0, 0, 0.5714285714285714, 1.0, 0, 0.5714285714285714, 0.9642857142857143, 0], [0.5714285714285714, 0.9642857142857143, 0, 0.5714285714285714, 1.0, 0, 0.577922077922078, 1.0, 0, 0.577922077922078, 0.9642857142857143, 0], [0.5714285714285714, 0.8571428571428572, 0, 0.5714285714285714, 0.9642857142857143, 0, 0.577922077922078, 0.9642857142857143, 0, 0.577922077922078, 0.8571428571428572, 0], [0.5584415584415584, 0.8571428571428572, 0, 0.5584415584415584, 0.9642857142857143, 0, 0.564935064935065, 0.9642857142857143, 0, 0.564935064935065, 0.8571428571428572, 0], [0.6103896103896104, 0.4285714285714286, 0, 0.6103896103896104, 0.8571428571428572, 0, 0.6363636363636364, 0.8571428571428572, 0, 0.6363636363636364, 0.4285714285714286, 0], [0.6623376623376623, 0.4285714285714286, 0, 0.6623376623376623, 0.8571428571428572, 0, 0.6883116883116883, 0.8571428571428572, 0, 0.6883116883116883, 0.4285714285714286, 0], [0.6103896103896104, 0.8571428571428572, 0, 0.6103896103896104, 1.0, 0, 0.6363636363636364, 1.0, 0, 0.6363636363636364, 0.8571428571428572, 0], [0.6363636363636364, 0.8571428571428572, 0, 0.6363636363636364, 1.0, 0, 0.6623376623376623, 1.0, 0, 0.6623376623376623, 0.8571428571428572, 0], [0.6363636363636364, 0.4285714285714286, 0, 0.6363636363636364, 0.8571428571428572, 0, 0.6623376623376623, 0.8571428571428572, 0, 0.6623376623376623, 0.4285714285714286, 0], [0.5844155844155844, 0.4285714285714286, 0, 0.5844155844155844, 0.8571428571428572, 0, 0.6103896103896104, 0.8571428571428572, 0, 0.6103896103896104, 0.4285714285714286, 0], [0.7142857142857143, 0.4285714285714286, 0, 0.7142857142857143, 0.8571428571428572, 0, 0.7402597402597403, 0.8571428571428572, 0, 0.7402597402597403, 0.4285714285714286, 0], [0.7662337662337663, 0.4285714285714286, 0, 0.7662337662337663, 0.8571428571428572, 0, 0.7922077922077922, 0.8571428571428572, 0, 0.7922077922077922, 0.4285714285714286, 0], [0.7142857142857143, 0.8571428571428572, 0, 0.7142857142857143, 1.0, 0, 0.7402597402597403, 1.0, 0, 0.7402597402597403, 0.8571428571428572, 0], [0.7402597402597403, 0.8571428571428572, 0, 0.7402597402597403, 1.0, 0, 0.7662337662337663, 1.0, 0, 0.7662337662337663, 0.8571428571428572, 0], [0.7402597402597403, 0.4285714285714286, 0, 0.7402597402597403, 0.8571428571428572, 0, 0.7662337662337663, 0.8571428571428572, 0, 0.7662337662337663, 0.4285714285714286, 0], [0.6883116883116883, 0.4285714285714286, 0, 0.6883116883116883, 0.8571428571428572, 0, 0.7142857142857143, 0.8571428571428572, 0, 0.7142857142857143, 0.4285714285714286, 0], [0.8181818181818182, 0.4285714285714286, 0, 0.8181818181818182, 0.8571428571428572, 0, 0.8441558441558441, 0.8571428571428572, 0, 0.8441558441558441, 0.4285714285714286, 0], [0.8701298701298701, 0.4285714285714286, 0, 0.8701298701298701, 0.8571428571428572, 0, 0.8961038961038961, 0.8571428571428572, 0, 0.8961038961038961, 0.4285714285714286, 0], [0.8181818181818182, 0.8571428571428572, 0, 0.8181818181818182, 1.0, 0, 0.8441558441558441, 1.0, 0, 0.8441558441558441, 0.8571428571428572, 0], [0.8441558441558441, 0.8571428571428572, 0, 0.8441558441558441, 1.0, 0, 0.8701298701298701, 1.0, 0, 0.8701298701298701, 0.8571428571428572, 0], [0.8441558441558441, 0.4285714285714286, 0, 0.8441558441558441, 0.8571428571428572, 0, 0.8701298701298701, 0.8571428571428572, 0, 0.8701298701298701, 0.4285714285714286, 0], [0.7922077922077922, 0.4285714285714286, 0, 0.7922077922077922, 0.8571428571428572, 0, 0.8181818181818182, 0.8571428571428572, 0, 0.8181818181818182, 0.4285714285714286, 0], [0.922077922077922, 0.4285714285714286, 0, 0.922077922077922, 0.8571428571428572, 0, 0.948051948051948, 0.8571428571428572, 0, 0.948051948051948, 0.4285714285714286, 0], [0.974025974025974, 0.4285714285714286, 0, 0.974025974025974, 0.8571428571428572, 0, 1.0, 0.8571428571428572, 0, 1.0, 0.4285714285714286, 0], [0.922077922077922, 0.8571428571428572, 0, 0.922077922077922, 1.0, 0, 0.948051948051948, 1.0, 0, 0.948051948051948, 0.8571428571428572, 0], [0.948051948051948, 0.8571428571428572, 0, 0.948051948051948, 1.0, 0, 0.974025974025974, 1.0, 0, 0.974025974025974, 0.8571428571428572, 0], [0.948051948051948, 0.4285714285714286, 0, 0.948051948051948, 0.8571428571428572, 0, 0.974025974025974, 0.8571428571428572, 0, 0.974025974025974, 0.4285714285714286, 0], [0.8961038961038961, 0.4285714285714286, 0, 0.8961038961038961, 0.8571428571428572, 0, 0.922077922077922, 0.8571428571428572, 0, 0.922077922077922, 0.4285714285714286, 0]] shading_values = [[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]] - diff --git a/episode-13/models/creeper.py b/episode-13/models/creeper.py index 7dd0a582..ac48d1fd 100644 --- a/episode-13/models/creeper.py +++ b/episode-13/models/creeper.py @@ -5,7 +5,6 @@ colliders = [] -vertex_positions = [[-0.26293501257896423, 0.3660466969013214, -0.125, -0.28910964727401733, 1.1155897378921509, -0.125, 0.21058577299118042, 1.1330395936965942, -0.125, 0.23676039278507233, 0.3834964334964752, -0.125], [0.23676039278507233, 0.3834964334964752, 0.125, 0.21058577299118042, 1.1330395936965942, 0.125, -0.28910964727401733, 1.1155897378921509, 0.125, -0.26293501257896423, 0.3660466969013214, 0.125], [-0.28910964727401733, 1.1155897378921509, -0.125, -0.28910964727401733, 1.1155897378921509, 0.125, 0.21058577299118042, 1.1330395936965942, 0.125, 0.21058577299118042, 1.1330395936965942, -0.125], [0.23676039278507233, 0.3834964334964752, -0.125, 0.23676039278507233, 0.3834964334964752, 0.125, -0.26293501257896423, 0.3660466969013214, 0.125, -0.26293501257896423, 0.3660466969013214, -0.125], [0.23676039278507233, 0.3834964334964752, -0.125, 0.21058577299118042, 1.1330395936965942, -0.125, 0.21058577299118042, 1.1330395936965942, 0.125, 0.23676039278507233, 0.3834964334964752, 0.125], [-0.26293501257896423, 0.3660466969013214, 0.125, -0.28910964727401733, 1.1155897378921509, 0.125, -0.28910964727401733, 1.1155897378921509, -0.125, -0.26293501257896423, 0.3660466969013214, -0.125], [-0.24939100444316864, 1.1075608730316162, -0.25, -0.2842692732810974, 1.6063429117202759, -0.25, 0.21451278030872345, 1.6412211656570435, -0.25, 0.24939101934432983, 1.1424391269683838, -0.25], [0.24939101934432983, 1.1424391269683838, 0.25, 0.21451278030872345, 1.6412211656570435, 0.25, -0.2842692732810974, 1.6063429117202759, 0.25, -0.24939100444316864, 1.1075608730316162, 0.25], [-0.2842692732810974, 1.6063429117202759, -0.25, -0.2842692732810974, 1.6063429117202759, 0.25, 0.21451278030872345, 1.6412211656570435, 0.25, 0.21451278030872345, 1.6412211656570435, -0.25], [0.24939101934432983, 1.1424391269683838, -0.25, 0.24939101934432983, 1.1424391269683838, 0.25, -0.24939100444316864, 1.1075608730316162, 0.25, -0.24939100444316864, 1.1075608730316162, -0.25], [0.24939101934432983, 1.1424391269683838, -0.25, 0.21451278030872345, 1.6412211656570435, -0.25, 0.21451278030872345, 1.6412211656570435, 0.25, 0.24939101934432983, 1.1424391269683838, 0.25], [-0.24939100444316864, 1.1075608730316162, 0.25, -0.2842692732810974, 1.6063429117202759, 0.25, -0.2842692732810974, 1.6063429117202759, -0.25, -0.24939100444316864, 1.1075608730316162, -0.25], [-0.2630111575126648, 0.004590874537825584, 0.125, -0.24992385506629944, 0.37936243414878845, 0.125, -7.614400237798691e-05, 0.37063756585121155, 0.125, -0.013163454830646515, -0.004133999347686768, 0.125], [-0.013163454830646515, -0.004133999347686768, 0.375, -7.614400237798691e-05, 0.37063756585121155, 0.375, -0.24992385506629944, 0.37936243414878845, 0.375, -0.2630111575126648, 0.004590874537825584, 0.375], [-0.24992385506629944, 0.37936243414878845, 0.125, -0.24992385506629944, 0.37936243414878845, 0.375, -7.614400237798691e-05, 0.37063756585121155, 0.375, -7.614400237798691e-05, 0.37063756585121155, 0.125], [-0.013163454830646515, -0.004133999347686768, 0.125, -0.013163454830646515, -0.004133999347686768, 0.375, -0.2630111575126648, 0.004590874537825584, 0.375, -0.2630111575126648, 0.004590874537825584, 0.125], [-0.013163454830646515, -0.004133999347686768, 0.125, -7.614400237798691e-05, 0.37063756585121155, 0.125, -7.614400237798691e-05, 0.37063756585121155, 0.375, -0.013163454830646515, -0.004133999347686768, 0.375], [-0.2630111575126648, 0.004590874537825584, 0.375, -0.24992385506629944, 0.37936243414878845, 0.375, -0.24992385506629944, 0.37936243414878845, 0.125, -0.2630111575126648, 0.004590874537825584, 0.125], [-0.013011172413825989, 0.004590868949890137, 0.125, 7.613841444253922e-05, 0.37936243414878845, 0.125, 0.24992384016513824, 0.37063756585121155, 0.125, 0.2368365377187729, -0.004134004935622215, 0.125], [0.2368365377187729, -0.004134004935622215, 0.375, 0.24992384016513824, 0.37063756585121155, 0.375, 7.613841444253922e-05, 0.37936243414878845, 0.375, -0.013011172413825989, 0.004590868949890137, 0.375], [7.613841444253922e-05, 0.37936243414878845, 0.125, 7.613841444253922e-05, 0.37936243414878845, 0.375, 0.24992384016513824, 0.37063756585121155, 0.375, 0.24992384016513824, 0.37063756585121155, 0.125], [0.2368365377187729, -0.004134004935622215, 0.125, 0.2368365377187729, -0.004134004935622215, 0.375, -0.013011172413825989, 0.004590868949890137, 0.375, -0.013011172413825989, 0.004590868949890137, 0.125], [0.2368365377187729, -0.004134004935622215, 0.125, 0.24992384016513824, 0.37063756585121155, 0.125, 0.24992384016513824, 0.37063756585121155, 0.375, 0.2368365377187729, -0.004134004935622215, 0.375], [-0.013011172413825989, 0.004590868949890137, 0.375, 7.613841444253922e-05, 0.37936243414878845, 0.375, 7.613841444253922e-05, 0.37936243414878845, 0.125, -0.013011172413825989, 0.004590868949890137, 0.125], [-0.21011705696582794, -0.011011788621544838, -0.375, -0.24931523203849792, 0.36193394660949707, -0.375, -0.0006847530603408813, 0.38806605339050293, -0.375, 0.0385134220123291, 0.015120327472686768, -0.375], [0.0385134220123291, 0.015120327472686768, -0.125, -0.0006847530603408813, 0.38806605339050293, -0.125, -0.24931523203849792, 0.36193394660949707, -0.125, -0.21011705696582794, -0.011011788621544838, -0.125], [-0.24931523203849792, 0.36193394660949707, -0.375, -0.24931523203849792, 0.36193394660949707, -0.125, -0.0006847530603408813, 0.38806605339050293, -0.125, -0.0006847530603408813, 0.38806605339050293, -0.375], [0.0385134220123291, 0.015120327472686768, -0.375, 0.0385134220123291, 0.015120327472686768, -0.125, -0.21011705696582794, -0.011011788621544838, -0.125, -0.21011705696582794, -0.011011788621544838, -0.375], [0.0385134220123291, 0.015120327472686768, -0.375, -0.0006847530603408813, 0.38806605339050293, -0.375, -0.0006847530603408813, 0.38806605339050293, -0.125, 0.0385134220123291, 0.015120327472686768, -0.125], [-0.21011705696582794, -0.011011788621544838, -0.125, -0.24931523203849792, 0.36193394660949707, -0.125, -0.24931523203849792, 0.36193394660949707, -0.375, -0.21011705696582794, -0.011011788621544838, -0.375], [0.03988293558359146, -0.011011779308319092, -0.375, 0.0006847605109214783, 0.36193394660949707, -0.375, 0.24931523203849792, 0.38806605339050293, -0.375, 0.2885134220123291, 0.015120336785912514, -0.375], [0.2885134220123291, 0.015120336785912514, -0.125, 0.24931523203849792, 0.38806605339050293, -0.125, 0.0006847605109214783, 0.36193394660949707, -0.125, 0.03988293558359146, -0.011011779308319092, -0.125], [0.0006847605109214783, 0.36193394660949707, -0.375, 0.0006847605109214783, 0.36193394660949707, -0.125, 0.24931523203849792, 0.38806605339050293, -0.125, 0.24931523203849792, 0.38806605339050293, -0.375], [0.2885134220123291, 0.015120336785912514, -0.375, 0.2885134220123291, 0.015120336785912514, -0.125, 0.03988293558359146, -0.011011779308319092, -0.125, 0.03988293558359146, -0.011011779308319092, -0.375], [0.2885134220123291, 0.015120336785912514, -0.375, 0.24931523203849792, 0.38806605339050293, -0.375, 0.24931523203849792, 0.38806605339050293, -0.125, 0.2885134220123291, 0.015120336785912514, -0.125], [0.03988293558359146, -0.011011779308319092, -0.125, 0.0006847605109214783, 0.36193394660949707, -0.125, 0.0006847605109214783, 0.36193394660949707, -0.375, 0.03988293558359146, -0.011011779308319092, -0.375]] +vertex_positions = [[-0.25, 0.375, -0.125, -0.25, 1.125, -0.125, 0.25, 1.125, -0.125, 0.25, 0.375, -0.125], [0.25, 0.375, 0.125, 0.25, 1.125, 0.125, -0.25, 1.125, 0.125, -0.25, 0.375, 0.125], [-0.25, 1.125, -0.125, -0.25, 1.125, 0.125, 0.25, 1.125, 0.125, 0.25, 1.125, -0.125], [0.25, 0.375, -0.125, 0.25, 0.375, 0.125, -0.25, 0.375, 0.125, -0.25, 0.375, -0.125], [0.25, 0.375, -0.125, 0.25, 1.125, -0.125, 0.25, 1.125, 0.125, 0.25, 0.375, 0.125], [-0.25, 0.375, 0.125, -0.25, 1.125, 0.125, -0.25, 1.125, -0.125, -0.25, 0.375, -0.125], [-0.25, 1.125, -0.25, -0.25, 1.625, -0.25, 0.25, 1.625, -0.25, 0.25, 1.125, -0.25], [0.25, 1.125, 0.25, 0.25, 1.625, 0.25, -0.25, 1.625, 0.25, -0.25, 1.125, 0.25], [-0.25, 1.625, -0.25, -0.25, 1.625, 0.25, 0.25, 1.625, 0.25, 0.25, 1.625, -0.25], [0.25, 1.125, -0.25, 0.25, 1.125, 0.25, -0.25, 1.125, 0.25, -0.25, 1.125, -0.25], [0.25, 1.125, -0.25, 0.25, 1.625, -0.25, 0.25, 1.625, 0.25, 0.25, 1.125, 0.25], [-0.25, 1.125, 0.25, -0.25, 1.625, 0.25, -0.25, 1.625, -0.25, -0.25, 1.125, -0.25], [-0.25, 0.0, 0.125, -0.25, 0.375, 0.125, 0.0, 0.375, 0.125, 0.0, 0.0, 0.125], [0.0, 0.0, 0.375, 0.0, 0.375, 0.375, -0.25, 0.375, 0.375, -0.25, 0.0, 0.375], [-0.25, 0.375, 0.125, -0.25, 0.375, 0.375, 0.0, 0.375, 0.375, 0.0, 0.375, 0.125], [0.0, 0.0, 0.125, 0.0, 0.0, 0.375, -0.25, 0.0, 0.375, -0.25, 0.0, 0.125], [0.0, 0.0, 0.125, 0.0, 0.375, 0.125, 0.0, 0.375, 0.375, 0.0, 0.0, 0.375], [-0.25, 0.0, 0.375, -0.25, 0.375, 0.375, -0.25, 0.375, 0.125, -0.25, 0.0, 0.125], [0.0, 0.0, 0.125, 0.0, 0.375, 0.125, 0.25, 0.375, 0.125, 0.25, 0.0, 0.125], [0.25, 0.0, 0.375, 0.25, 0.375, 0.375, 0.0, 0.375, 0.375, 0.0, 0.0, 0.375], [0.0, 0.375, 0.125, 0.0, 0.375, 0.375, 0.25, 0.375, 0.375, 0.25, 0.375, 0.125], [0.25, 0.0, 0.125, 0.25, 0.0, 0.375, 0.0, 0.0, 0.375, 0.0, 0.0, 0.125], [0.25, 0.0, 0.125, 0.25, 0.375, 0.125, 0.25, 0.375, 0.375, 0.25, 0.0, 0.375], [0.0, 0.0, 0.375, 0.0, 0.375, 0.375, 0.0, 0.375, 0.125, 0.0, 0.0, 0.125], [-0.25, 0.0, -0.375, -0.25, 0.375, -0.375, 0.0, 0.375, -0.375, 0.0, 0.0, -0.375], [0.0, 0.0, -0.125, 0.0, 0.375, -0.125, -0.25, 0.375, -0.125, -0.25, 0.0, -0.125], [-0.25, 0.375, -0.375, -0.25, 0.375, -0.125, 0.0, 0.375, -0.125, 0.0, 0.375, -0.375], [0.0, 0.0, -0.375, 0.0, 0.0, -0.125, -0.25, 0.0, -0.125, -0.25, 0.0, -0.375], [0.0, 0.0, -0.375, 0.0, 0.375, -0.375, 0.0, 0.375, -0.125, 0.0, 0.0, -0.125], [-0.25, 0.0, -0.125, -0.25, 0.375, -0.125, -0.25, 0.375, -0.375, -0.25, 0.0, -0.375], [0.0, 0.0, -0.375, 0.0, 0.375, -0.375, 0.25, 0.375, -0.375, 0.25, 0.0, -0.375], [0.25, 0.0, -0.125, 0.25, 0.375, -0.125, 0.0, 0.375, -0.125, 0.0, 0.0, -0.125], [0.0, 0.375, -0.375, 0.0, 0.375, -0.125, 0.25, 0.375, -0.125, 0.25, 0.375, -0.375], [0.25, 0.0, -0.375, 0.25, 0.0, -0.125, 0.0, 0.0, -0.125, 0.0, 0.0, -0.375], [0.25, 0.0, -0.375, 0.25, 0.375, -0.375, 0.25, 0.375, -0.125, 0.25, 0.0, -0.125], [0.0, 0.0, -0.125, 0.0, 0.375, -0.125, 0.0, 0.375, -0.375, 0.0, 0.0, -0.375]] tex_coords = [[0.03333333333333333, 0.0, 0, 0.03333333333333333, 0.75, 0, 0.1, 0.75, 0, 0.1, 0.0, 0], [0.13333333333333333, 0.0, 0, 0.13333333333333333, 0.75, 0, 0.2, 0.75, 0, 0.2, 0.0, 0], [0.03333333333333333, 0.75, 0, 0.03333333333333333, 1.0, 0, 0.1, 1.0, 0, 0.1, 0.75, 0], [0.1, 0.75, 0, 0.1, 1.0, 0, 0.16666666666666666, 1.0, 0, 0.16666666666666666, 0.75, 0], [0.1, 0.0, 0, 0.1, 0.75, 0, 0.13333333333333333, 0.75, 0, 0.13333333333333333, 0.0, 0], [0.0, 0.0, 0, 0.0, 0.75, 0, 0.03333333333333333, 0.75, 0, 0.03333333333333333, 0.0, 0], [0.26666666666666666, 0.0, 0, 0.26666666666666666, 0.5, 0, 0.3333333333333333, 0.5, 0, 0.3333333333333333, 0.0, 0], [0.4, 0.0, 0, 0.4, 0.5, 0, 0.4666666666666667, 0.5, 0, 0.4666666666666667, 0.0, 0], [0.26666666666666666, 0.5, 0, 0.26666666666666666, 1.0, 0, 0.3333333333333333, 1.0, 0, 0.3333333333333333, 0.5, 0], [0.3333333333333333, 0.5, 0, 0.3333333333333333, 1.0, 0, 0.4, 1.0, 0, 0.4, 0.5, 0], [0.3333333333333333, 0.0, 0, 0.3333333333333333, 0.5, 0, 0.4, 0.5, 0, 0.4, 0.0, 0], [0.2, 0.0, 0, 0.2, 0.5, 0, 0.26666666666666666, 0.5, 0, 0.26666666666666666, 0.0, 0], [0.5, 0.375, 0, 0.5, 0.75, 0, 0.5333333333333333, 0.75, 0, 0.5333333333333333, 0.375, 0], [0.5666666666666667, 0.375, 0, 0.5666666666666667, 0.75, 0, 0.6, 0.75, 0, 0.6, 0.375, 0], [0.5, 0.75, 0, 0.5, 1.0, 0, 0.5333333333333333, 1.0, 0, 0.5333333333333333, 0.75, 0], [0.5333333333333333, 0.75, 0, 0.5333333333333333, 1.0, 0, 0.5666666666666667, 1.0, 0, 0.5666666666666667, 0.75, 0], [0.5333333333333333, 0.375, 0, 0.5333333333333333, 0.75, 0, 0.5666666666666667, 0.75, 0, 0.5666666666666667, 0.375, 0], [0.4666666666666667, 0.375, 0, 0.4666666666666667, 0.75, 0, 0.5, 0.75, 0, 0.5, 0.375, 0], [0.6333333333333333, 0.375, 0, 0.6333333333333333, 0.75, 0, 0.6666666666666666, 0.75, 0, 0.6666666666666666, 0.375, 0], [0.7, 0.375, 0, 0.7, 0.75, 0, 0.7333333333333333, 0.75, 0, 0.7333333333333333, 0.375, 0], [0.6333333333333333, 0.75, 0, 0.6333333333333333, 1.0, 0, 0.6666666666666666, 1.0, 0, 0.6666666666666666, 0.75, 0], [0.6666666666666666, 0.75, 0, 0.6666666666666666, 1.0, 0, 0.7, 1.0, 0, 0.7, 0.75, 0], [0.6666666666666666, 0.375, 0, 0.6666666666666666, 0.75, 0, 0.7, 0.75, 0, 0.7, 0.375, 0], [0.6, 0.375, 0, 0.6, 0.75, 0, 0.6333333333333333, 0.75, 0, 0.6333333333333333, 0.375, 0], [0.7666666666666667, 0.375, 0, 0.7666666666666667, 0.75, 0, 0.8, 0.75, 0, 0.8, 0.375, 0], [0.8333333333333334, 0.375, 0, 0.8333333333333334, 0.75, 0, 0.8666666666666667, 0.75, 0, 0.8666666666666667, 0.375, 0], [0.7666666666666667, 0.75, 0, 0.7666666666666667, 1.0, 0, 0.8, 1.0, 0, 0.8, 0.75, 0], [0.8, 0.75, 0, 0.8, 1.0, 0, 0.8333333333333334, 1.0, 0, 0.8333333333333334, 0.75, 0], [0.8, 0.375, 0, 0.8, 0.75, 0, 0.8333333333333334, 0.75, 0, 0.8333333333333334, 0.375, 0], [0.7333333333333333, 0.375, 0, 0.7333333333333333, 0.75, 0, 0.7666666666666667, 0.75, 0, 0.7666666666666667, 0.375, 0], [0.9, 0.375, 0, 0.9, 0.75, 0, 0.9333333333333333, 0.75, 0, 0.9333333333333333, 0.375, 0], [0.9666666666666667, 0.375, 0, 0.9666666666666667, 0.75, 0, 1.0, 0.75, 0, 1.0, 0.375, 0], [0.9, 0.75, 0, 0.9, 1.0, 0, 0.9333333333333333, 1.0, 0, 0.9333333333333333, 0.75, 0], [0.9333333333333333, 0.75, 0, 0.9333333333333333, 1.0, 0, 0.9666666666666667, 1.0, 0, 0.9666666666666667, 0.75, 0], [0.9333333333333333, 0.375, 0, 0.9333333333333333, 0.75, 0, 0.9666666666666667, 0.75, 0, 0.9666666666666667, 0.375, 0], [0.8666666666666667, 0.375, 0, 0.8666666666666667, 0.75, 0, 0.9, 0.75, 0, 0.9, 0.375, 0]] shading_values = [[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]] - diff --git a/episode-13/models/pig.py b/episode-13/models/pig.py index 93c2caa1..d454f0b1 100644 --- a/episode-13/models/pig.py +++ b/episode-13/models/pig.py @@ -5,7 +5,6 @@ colliders = [] -vertex_positions = [[-0.2786274552345276, 0.3750000298023224, 0.5258091688156128, -0.365783154964447, 0.375, -0.4703855514526367, 0.25683850049972534, 0.375, -0.5248579978942871, 0.3439942002296448, 0.3750000298023224, 0.47133684158325195], [0.3439942002296448, 0.8750000596046448, 0.47133684158325195, 0.25683850049972534, 0.875, -0.5248579978942871, -0.365783154964447, 0.875, -0.4703855514526367, -0.2786274552345276, 0.8750000596046448, 0.5258091688156128], [-0.365783154964447, 0.375, -0.4703855514526367, -0.365783154964447, 0.875, -0.4703855514526367, 0.25683850049972534, 0.875, -0.5248579978942871, 0.25683850049972534, 0.375, -0.5248579978942871], [0.3439942002296448, 0.3750000298023224, 0.47133684158325195, 0.3439942002296448, 0.8750000596046448, 0.47133684158325195, -0.2786274552345276, 0.8750000596046448, 0.5258091688156128, -0.2786274552345276, 0.3750000298023224, 0.5258091688156128], [0.3439942002296448, 0.3750000298023224, 0.47133684158325195, 0.25683850049972534, 0.375, -0.5248579978942871, 0.25683850049972534, 0.875, -0.5248579978942871, 0.3439942002296448, 0.8750000596046448, 0.47133684158325195], [-0.2786274552345276, 0.8750000596046448, 0.5258091688156128, -0.365783154964447, 0.875, -0.4703855514526367, -0.365783154964447, 0.375, -0.4703855514526367, -0.2786274552345276, 0.3750000298023224, 0.5258091688156128], [-0.18209344148635864, 0.44694557785987854, -0.875, -0.3030543923377991, 0.9320934414863586, -0.875, 0.18209345638751984, 1.0530544519424438, -0.875, 0.3030543923377991, 0.5679064989089966, -0.875], [0.3030543923377991, 0.5679064989089966, -0.375, 0.18209345638751984, 1.0530544519424438, -0.375, -0.3030543923377991, 0.9320934414863586, -0.375, -0.18209344148635864, 0.44694557785987854, -0.375], [-0.3030543923377991, 0.9320934414863586, -0.875, -0.3030543923377991, 0.9320934414863586, -0.375, 0.18209345638751984, 1.0530544519424438, -0.375, 0.18209345638751984, 1.0530544519424438, -0.875], [0.3030543923377991, 0.5679064989089966, -0.875, 0.3030543923377991, 0.5679064989089966, -0.375, -0.18209344148635864, 0.44694557785987854, -0.375, -0.18209344148635864, 0.44694557785987854, -0.875], [0.3030543923377991, 0.5679064989089966, -0.875, 0.18209345638751984, 1.0530544519424438, -0.875, 0.18209345638751984, 1.0530544519424438, -0.375, 0.3030543923377991, 0.5679064989089966, -0.375], [-0.18209344148635864, 0.44694557785987854, -0.375, -0.3030543923377991, 0.9320934414863586, -0.375, -0.3030543923377991, 0.9320934414863586, -0.875, -0.18209344148635864, 0.44694557785987854, -0.875], [-0.07221214473247528, 0.5365365147590637, -0.9375, -0.12074072659015656, 0.7176476120948792, -0.9375, 0.12074072659015656, 0.7823523879051208, -0.9375, 0.16926929354667664, 0.6012412905693054, -0.9375], [0.16926929354667664, 0.6012412905693054, -0.875, 0.12074072659015656, 0.7823523879051208, -0.875, -0.12074072659015656, 0.7176476120948792, -0.875, -0.07221214473247528, 0.5365365147590637, -0.875], [-0.12074072659015656, 0.7176476120948792, -0.9375, -0.12074072659015656, 0.7176476120948792, -0.875, 0.12074072659015656, 0.7823523879051208, -0.875, 0.12074072659015656, 0.7823523879051208, -0.9375], [0.16926929354667664, 0.6012412905693054, -0.9375, 0.16926929354667664, 0.6012412905693054, -0.875, -0.07221214473247528, 0.5365365147590637, -0.875, -0.07221214473247528, 0.5365365147590637, -0.9375], [0.16926929354667664, 0.6012412905693054, -0.9375, 0.12074072659015656, 0.7823523879051208, -0.9375, 0.12074072659015656, 0.7823523879051208, -0.875, 0.16926929354667664, 0.6012412905693054, -0.875], [-0.07221214473247528, 0.5365365147590637, -0.875, -0.12074072659015656, 0.7176476120948792, -0.875, -0.12074072659015656, 0.7176476120948792, -0.9375, -0.07221214473247528, 0.5365365147590637, -0.9375], [-0.34470775723457336, 0.012321475893259048, 0.3125, -0.3120243549346924, 0.3858944773674011, 0.3125, -0.06297566741704941, 0.36410555243492126, 0.3125, -0.09565906971693039, -0.009467458352446556, 0.3125], [-0.09565906971693039, -0.009467458352446556, 0.5625, -0.06297566741704941, 0.36410555243492126, 0.5625, -0.3120243549346924, 0.3858944773674011, 0.5625, -0.34470775723457336, 0.012321475893259048, 0.5625], [-0.3120243549346924, 0.3858944773674011, 0.3125, -0.3120243549346924, 0.3858944773674011, 0.5625, -0.06297566741704941, 0.36410555243492126, 0.5625, -0.06297566741704941, 0.36410555243492126, 0.3125], [-0.09565906971693039, -0.009467458352446556, 0.3125, -0.09565906971693039, -0.009467458352446556, 0.5625, -0.34470775723457336, 0.012321475893259048, 0.5625, -0.34470775723457336, 0.012321475893259048, 0.3125], [-0.09565906971693039, -0.009467458352446556, 0.3125, -0.06297566741704941, 0.36410555243492126, 0.3125, -0.06297566741704941, 0.36410555243492126, 0.5625, -0.09565906971693039, -0.009467458352446556, 0.5625], [-0.34470775723457336, 0.012321475893259048, 0.5625, -0.3120243549346924, 0.3858944773674011, 0.5625, -0.3120243549346924, 0.3858944773674011, 0.3125, -0.34470775723457336, 0.012321475893259048, 0.3125], [0.030292265117168427, 0.01232144795358181, 0.3125, 0.06297566741704941, 0.38589444756507874, 0.3125, 0.3120243549346924, 0.3641055226325989, 0.3125, 0.2793409526348114, -0.009467486292123795, 0.3125], [0.2793409526348114, -0.009467486292123795, 0.5625, 0.3120243549346924, 0.3641055226325989, 0.5625, 0.06297566741704941, 0.38589444756507874, 0.5625, 0.030292265117168427, 0.01232144795358181, 0.5625], [0.06297566741704941, 0.38589444756507874, 0.3125, 0.06297566741704941, 0.38589444756507874, 0.5625, 0.3120243549346924, 0.3641055226325989, 0.5625, 0.3120243549346924, 0.3641055226325989, 0.3125], [0.2793409526348114, -0.009467486292123795, 0.3125, 0.2793409526348114, -0.009467486292123795, 0.5625, 0.030292265117168427, 0.01232144795358181, 0.5625, 0.030292265117168427, 0.01232144795358181, 0.3125], [0.2793409526348114, -0.009467486292123795, 0.3125, 0.3120243549346924, 0.3641055226325989, 0.3125, 0.3120243549346924, 0.3641055226325989, 0.5625, 0.2793409526348114, -0.009467486292123795, 0.5625], [0.030292265117168427, 0.01232144795358181, 0.5625, 0.06297566741704941, 0.38589444756507874, 0.5625, 0.06297566741704941, 0.38589444756507874, 0.3125, 0.030292265117168427, 0.01232144795358181, 0.3125], [-0.2658672630786896, -0.012438468635082245, -0.4375, -0.3115682601928711, 0.3597663342952728, -0.4375, -0.06343172490596771, 0.3902336657047272, -0.4375, -0.0177307166159153, 0.01802886836230755, -0.4375], [-0.0177307166159153, 0.01802886836230755, -0.1875, -0.06343172490596771, 0.3902336657047272, -0.1875, -0.3115682601928711, 0.3597663342952728, -0.1875, -0.2658672630786896, -0.012438468635082245, -0.1875], [-0.3115682601928711, 0.3597663342952728, -0.4375, -0.3115682601928711, 0.3597663342952728, -0.1875, -0.06343172490596771, 0.3902336657047272, -0.1875, -0.06343172490596771, 0.3902336657047272, -0.4375], [-0.0177307166159153, 0.01802886836230755, -0.4375, -0.0177307166159153, 0.01802886836230755, -0.1875, -0.2658672630786896, -0.012438468635082245, -0.1875, -0.2658672630786896, -0.012438468635082245, -0.4375], [-0.0177307166159153, 0.01802886836230755, -0.4375, -0.06343172490596771, 0.3902336657047272, -0.4375, -0.06343172490596771, 0.3902336657047272, -0.1875, -0.0177307166159153, 0.01802886836230755, -0.1875], [-0.2658672630786896, -0.012438468635082245, -0.1875, -0.3115682601928711, 0.3597663342952728, -0.1875, -0.3115682601928711, 0.3597663342952728, -0.4375, -0.2658672630786896, -0.012438468635082245, -0.4375], [0.10913273692131042, -0.012438489124178886, -0.4375, 0.0634317398071289, 0.3597663342952728, -0.4375, 0.3115682899951935, 0.3902336657047272, -0.4375, 0.357269287109375, 0.018028847873210907, -0.4375], [0.357269287109375, 0.018028847873210907, -0.1875, 0.3115682899951935, 0.3902336657047272, -0.1875, 0.0634317398071289, 0.3597663342952728, -0.1875, 0.10913273692131042, -0.012438489124178886, -0.1875], [0.0634317398071289, 0.3597663342952728, -0.4375, 0.0634317398071289, 0.3597663342952728, -0.1875, 0.3115682899951935, 0.3902336657047272, -0.1875, 0.3115682899951935, 0.3902336657047272, -0.4375], [0.357269287109375, 0.018028847873210907, -0.4375, 0.357269287109375, 0.018028847873210907, -0.1875, 0.10913273692131042, -0.012438489124178886, -0.1875, 0.10913273692131042, -0.012438489124178886, -0.4375], [0.357269287109375, 0.018028847873210907, -0.4375, 0.3115682899951935, 0.3902336657047272, -0.4375, 0.3115682899951935, 0.3902336657047272, -0.1875, 0.357269287109375, 0.018028847873210907, -0.1875], [0.10913273692131042, -0.012438489124178886, -0.1875, 0.0634317398071289, 0.3597663342952728, -0.1875, 0.0634317398071289, 0.3597663342952728, -0.4375, 0.10913273692131042, -0.012438489124178886, -0.4375]] +vertex_positions = [[-0.3124999701976776, 0.3750000298023224, 0.5, -0.3124999701976776, 0.375, -0.5, 0.3124999701976776, 0.375, -0.5, 0.3124999701976776, 0.3750000298023224, 0.5], [0.3124999701976776, 0.8750000596046448, 0.5, 0.3124999701976776, 0.875, -0.5, -0.3124999701976776, 0.875, -0.5, -0.3124999701976776, 0.8750000596046448, 0.5], [-0.3124999701976776, 0.375, -0.5, -0.3124999701976776, 0.875, -0.5, 0.3124999701976776, 0.875, -0.5, 0.3124999701976776, 0.375, -0.5], [0.3124999701976776, 0.3750000298023224, 0.5, 0.3124999701976776, 0.8750000596046448, 0.5, -0.3124999701976776, 0.8750000596046448, 0.5, -0.3124999701976776, 0.3750000298023224, 0.5], [0.3124999701976776, 0.3750000298023224, 0.5, 0.3124999701976776, 0.375, -0.5, 0.3124999701976776, 0.875, -0.5, 0.3124999701976776, 0.8750000596046448, 0.5], [-0.3124999701976776, 0.8750000596046448, 0.5, -0.3124999701976776, 0.875, -0.5, -0.3124999701976776, 0.375, -0.5, -0.3124999701976776, 0.3750000298023224, 0.5], [-0.25, 0.5, -0.875, -0.25, 1.0, -0.875, 0.25, 1.0, -0.875, 0.25, 0.5, -0.875], [0.25, 0.5, -0.375, 0.25, 1.0, -0.375, -0.25, 1.0, -0.375, -0.25, 0.5, -0.375], [-0.25, 1.0, -0.875, -0.25, 1.0, -0.375, 0.25, 1.0, -0.375, 0.25, 1.0, -0.875], [0.25, 0.5, -0.875, 0.25, 0.5, -0.375, -0.25, 0.5, -0.375, -0.25, 0.5, -0.875], [0.25, 0.5, -0.875, 0.25, 1.0, -0.875, 0.25, 1.0, -0.375, 0.25, 0.5, -0.375], [-0.25, 0.5, -0.375, -0.25, 1.0, -0.375, -0.25, 1.0, -0.875, -0.25, 0.5, -0.875], [-0.125, 0.5625, -0.9375, -0.125, 0.75, -0.9375, 0.125, 0.75, -0.9375, 0.125, 0.5625, -0.9375], [0.125, 0.5625, -0.875, 0.125, 0.75, -0.875, -0.125, 0.75, -0.875, -0.125, 0.5625, -0.875], [-0.125, 0.75, -0.9375, -0.125, 0.75, -0.875, 0.125, 0.75, -0.875, 0.125, 0.75, -0.9375], [0.125, 0.5625, -0.9375, 0.125, 0.5625, -0.875, -0.125, 0.5625, -0.875, -0.125, 0.5625, -0.9375], [0.125, 0.5625, -0.9375, 0.125, 0.75, -0.9375, 0.125, 0.75, -0.875, 0.125, 0.5625, -0.875], [-0.125, 0.5625, -0.875, -0.125, 0.75, -0.875, -0.125, 0.75, -0.9375, -0.125, 0.5625, -0.9375], [-0.3125, 0.0, 0.3125, -0.3125, 0.375, 0.3125, -0.0625, 0.375, 0.3125, -0.0625, 0.0, 0.3125], [-0.0625, 0.0, 0.5625, -0.0625, 0.375, 0.5625, -0.3125, 0.375, 0.5625, -0.3125, 0.0, 0.5625], [-0.3125, 0.375, 0.3125, -0.3125, 0.375, 0.5625, -0.0625, 0.375, 0.5625, -0.0625, 0.375, 0.3125], [-0.0625, 0.0, 0.3125, -0.0625, 0.0, 0.5625, -0.3125, 0.0, 0.5625, -0.3125, 0.0, 0.3125], [-0.0625, 0.0, 0.3125, -0.0625, 0.375, 0.3125, -0.0625, 0.375, 0.5625, -0.0625, 0.0, 0.5625], [-0.3125, 0.0, 0.5625, -0.3125, 0.375, 0.5625, -0.3125, 0.375, 0.3125, -0.3125, 0.0, 0.3125], [0.0625, 0.0, 0.3125, 0.0625, 0.375, 0.3125, 0.3125, 0.375, 0.3125, 0.3125, 0.0, 0.3125], [0.3125, 0.0, 0.5625, 0.3125, 0.375, 0.5625, 0.0625, 0.375, 0.5625, 0.0625, 0.0, 0.5625], [0.0625, 0.375, 0.3125, 0.0625, 0.375, 0.5625, 0.3125, 0.375, 0.5625, 0.3125, 0.375, 0.3125], [0.3125, 0.0, 0.3125, 0.3125, 0.0, 0.5625, 0.0625, 0.0, 0.5625, 0.0625, 0.0, 0.3125], [0.3125, 0.0, 0.3125, 0.3125, 0.375, 0.3125, 0.3125, 0.375, 0.5625, 0.3125, 0.0, 0.5625], [0.0625, 0.0, 0.5625, 0.0625, 0.375, 0.5625, 0.0625, 0.375, 0.3125, 0.0625, 0.0, 0.3125], [-0.3125, 0.0, -0.4375, -0.3125, 0.375, -0.4375, -0.0625, 0.375, -0.4375, -0.0625, 0.0, -0.4375], [-0.0625, 0.0, -0.1875, -0.0625, 0.375, -0.1875, -0.3125, 0.375, -0.1875, -0.3125, 0.0, -0.1875], [-0.3125, 0.375, -0.4375, -0.3125, 0.375, -0.1875, -0.0625, 0.375, -0.1875, -0.0625, 0.375, -0.4375], [-0.0625, 0.0, -0.4375, -0.0625, 0.0, -0.1875, -0.3125, 0.0, -0.1875, -0.3125, 0.0, -0.4375], [-0.0625, 0.0, -0.4375, -0.0625, 0.375, -0.4375, -0.0625, 0.375, -0.1875, -0.0625, 0.0, -0.1875], [-0.3125, 0.0, -0.1875, -0.3125, 0.375, -0.1875, -0.3125, 0.375, -0.4375, -0.3125, 0.0, -0.4375], [0.0625, 0.0, -0.4375, 0.0625, 0.375, -0.4375, 0.3125, 0.375, -0.4375, 0.3125, 0.0, -0.4375], [0.3125, 0.0, -0.1875, 0.3125, 0.375, -0.1875, 0.0625, 0.375, -0.1875, 0.0625, 0.0, -0.1875], [0.0625, 0.375, -0.4375, 0.0625, 0.375, -0.1875, 0.3125, 0.375, -0.1875, 0.3125, 0.375, -0.4375], [0.3125, 0.0, -0.4375, 0.3125, 0.0, -0.1875, 0.0625, 0.0, -0.1875, 0.0625, 0.0, -0.4375], [0.3125, 0.0, -0.4375, 0.3125, 0.375, -0.4375, 0.3125, 0.375, -0.1875, 0.3125, 0.0, -0.1875], [0.0625, 0.0, -0.1875, 0.0625, 0.375, -0.1875, 0.0625, 0.375, -0.4375, 0.0625, 0.0, -0.4375]] tex_coords = [[0.056338028169014086, 0.0, 0, 0.056338028169014086, 0.6666666666666667, 0, 0.1267605633802817, 0.6666666666666667, 0, 0.1267605633802817, 0.0, 0], [0.18309859154929578, 0.0, 0, 0.18309859154929578, 0.6666666666666667, 0, 0.2535211267605634, 0.6666666666666667, 0, 0.2535211267605634, 0.0, 0], [0.056338028169014086, 0.6666666666666667, 0, 0.056338028169014086, 1.0, 0, 0.1267605633802817, 1.0, 0, 0.1267605633802817, 0.6666666666666667, 0], [0.1267605633802817, 0.6666666666666667, 0, 0.1267605633802817, 1.0, 0, 0.19718309859154928, 1.0, 0, 0.19718309859154928, 0.6666666666666667, 0], [0.1267605633802817, 0.0, 0, 0.1267605633802817, 0.6666666666666667, 0, 0.18309859154929578, 0.6666666666666667, 0, 0.18309859154929578, 0.0, 0], [0.0, 0.0, 0, 0.0, 0.6666666666666667, 0, 0.056338028169014086, 0.6666666666666667, 0, 0.056338028169014086, 0.0, 0], [0.30985915492957744, 0.33333333333333337, 0, 0.30985915492957744, 0.6666666666666667, 0, 0.36619718309859156, 0.6666666666666667, 0, 0.36619718309859156, 0.33333333333333337, 0], [0.4225352112676056, 0.33333333333333337, 0, 0.4225352112676056, 0.6666666666666667, 0, 0.4788732394366197, 0.6666666666666667, 0, 0.4788732394366197, 0.33333333333333337, 0], [0.30985915492957744, 0.6666666666666667, 0, 0.30985915492957744, 1.0, 0, 0.36619718309859156, 1.0, 0, 0.36619718309859156, 0.6666666666666667, 0], [0.36619718309859156, 0.6666666666666667, 0, 0.36619718309859156, 1.0, 0, 0.4225352112676056, 1.0, 0, 0.4225352112676056, 0.6666666666666667, 0], [0.36619718309859156, 0.33333333333333337, 0, 0.36619718309859156, 0.6666666666666667, 0, 0.4225352112676056, 0.6666666666666667, 0, 0.4225352112676056, 0.33333333333333337, 0], [0.2535211267605634, 0.33333333333333337, 0, 0.2535211267605634, 0.6666666666666667, 0, 0.30985915492957744, 0.6666666666666667, 0, 0.30985915492957744, 0.33333333333333337, 0], [0.4859154929577465, 0.8333333333333334, 0, 0.4859154929577465, 0.9583333333333334, 0, 0.5140845070422535, 0.9583333333333334, 0, 0.5140845070422535, 0.8333333333333334, 0], [0.5211267605633803, 0.8333333333333334, 0, 0.5211267605633803, 0.9583333333333334, 0, 0.5492957746478874, 0.9583333333333334, 0, 0.5492957746478874, 0.8333333333333334, 0], [0.4859154929577465, 0.9583333333333334, 0, 0.4859154929577465, 1.0, 0, 0.5140845070422535, 1.0, 0, 0.5140845070422535, 0.9583333333333334, 0], [0.5140845070422535, 0.9583333333333334, 0, 0.5140845070422535, 1.0, 0, 0.5422535211267606, 1.0, 0, 0.5422535211267606, 0.9583333333333334, 0], [0.5140845070422535, 0.8333333333333334, 0, 0.5140845070422535, 0.9583333333333334, 0, 0.5211267605633803, 0.9583333333333334, 0, 0.5211267605633803, 0.8333333333333334, 0], [0.4788732394366197, 0.8333333333333334, 0, 0.4788732394366197, 0.9583333333333334, 0, 0.4859154929577465, 0.9583333333333334, 0, 0.4859154929577465, 0.8333333333333334, 0], [0.5774647887323944, 0.5833333333333333, 0, 0.5774647887323944, 0.8333333333333334, 0, 0.6056338028169014, 0.8333333333333334, 0, 0.6056338028169014, 0.5833333333333333, 0], [0.6338028169014085, 0.5833333333333333, 0, 0.6338028169014085, 0.8333333333333334, 0, 0.6619718309859155, 0.8333333333333334, 0, 0.6619718309859155, 0.5833333333333333, 0], [0.5774647887323944, 0.8333333333333334, 0, 0.5774647887323944, 1.0, 0, 0.6056338028169014, 1.0, 0, 0.6056338028169014, 0.8333333333333334, 0], [0.6056338028169014, 0.8333333333333334, 0, 0.6056338028169014, 1.0, 0, 0.6338028169014085, 1.0, 0, 0.6338028169014085, 0.8333333333333334, 0], [0.6056338028169014, 0.5833333333333333, 0, 0.6056338028169014, 0.8333333333333334, 0, 0.6338028169014085, 0.8333333333333334, 0, 0.6338028169014085, 0.5833333333333333, 0], [0.5492957746478874, 0.5833333333333333, 0, 0.5492957746478874, 0.8333333333333334, 0, 0.5774647887323944, 0.8333333333333334, 0, 0.5774647887323944, 0.5833333333333333, 0], [0.6901408450704225, 0.5833333333333333, 0, 0.6901408450704225, 0.8333333333333334, 0, 0.7183098591549296, 0.8333333333333334, 0, 0.7183098591549296, 0.5833333333333333, 0], [0.7464788732394366, 0.5833333333333333, 0, 0.7464788732394366, 0.8333333333333334, 0, 0.7746478873239436, 0.8333333333333334, 0, 0.7746478873239436, 0.5833333333333333, 0], [0.6901408450704225, 0.8333333333333334, 0, 0.6901408450704225, 1.0, 0, 0.7183098591549296, 1.0, 0, 0.7183098591549296, 0.8333333333333334, 0], [0.7183098591549296, 0.8333333333333334, 0, 0.7183098591549296, 1.0, 0, 0.7464788732394366, 1.0, 0, 0.7464788732394366, 0.8333333333333334, 0], [0.7183098591549296, 0.5833333333333333, 0, 0.7183098591549296, 0.8333333333333334, 0, 0.7464788732394366, 0.8333333333333334, 0, 0.7464788732394366, 0.5833333333333333, 0], [0.6619718309859155, 0.5833333333333333, 0, 0.6619718309859155, 0.8333333333333334, 0, 0.6901408450704225, 0.8333333333333334, 0, 0.6901408450704225, 0.5833333333333333, 0], [0.8028169014084507, 0.5833333333333333, 0, 0.8028169014084507, 0.8333333333333334, 0, 0.8309859154929577, 0.8333333333333334, 0, 0.8309859154929577, 0.5833333333333333, 0], [0.8591549295774648, 0.5833333333333333, 0, 0.8591549295774648, 0.8333333333333334, 0, 0.8873239436619719, 0.8333333333333334, 0, 0.8873239436619719, 0.5833333333333333, 0], [0.8028169014084507, 0.8333333333333334, 0, 0.8028169014084507, 1.0, 0, 0.8309859154929577, 1.0, 0, 0.8309859154929577, 0.8333333333333334, 0], [0.8309859154929577, 0.8333333333333334, 0, 0.8309859154929577, 1.0, 0, 0.8591549295774648, 1.0, 0, 0.8591549295774648, 0.8333333333333334, 0], [0.8309859154929577, 0.5833333333333333, 0, 0.8309859154929577, 0.8333333333333334, 0, 0.8591549295774648, 0.8333333333333334, 0, 0.8591549295774648, 0.5833333333333333, 0], [0.7746478873239436, 0.5833333333333333, 0, 0.7746478873239436, 0.8333333333333334, 0, 0.8028169014084507, 0.8333333333333334, 0, 0.8028169014084507, 0.5833333333333333, 0], [0.9154929577464789, 0.5833333333333333, 0, 0.9154929577464789, 0.8333333333333334, 0, 0.9436619718309859, 0.8333333333333334, 0, 0.9436619718309859, 0.5833333333333333, 0], [0.971830985915493, 0.5833333333333333, 0, 0.971830985915493, 0.8333333333333334, 0, 1.0, 0.8333333333333334, 0, 1.0, 0.5833333333333333, 0], [0.9154929577464789, 0.8333333333333334, 0, 0.9154929577464789, 1.0, 0, 0.9436619718309859, 1.0, 0, 0.9436619718309859, 0.8333333333333334, 0], [0.9436619718309859, 0.8333333333333334, 0, 0.9436619718309859, 1.0, 0, 0.971830985915493, 1.0, 0, 0.971830985915493, 0.8333333333333334, 0], [0.9436619718309859, 0.5833333333333333, 0, 0.9436619718309859, 0.8333333333333334, 0, 0.971830985915493, 0.8333333333333334, 0, 0.971830985915493, 0.5833333333333333, 0], [0.8873239436619719, 0.5833333333333333, 0, 0.8873239436619719, 0.8333333333333334, 0, 0.9154929577464789, 0.8333333333333334, 0, 0.9154929577464789, 0.5833333333333333, 0]] shading_values = [[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]] - diff --git a/episode-13/models/skeleton.py b/episode-13/models/skeleton.py index 6b6934bd..e528a48e 100644 --- a/episode-13/models/skeleton.py +++ b/episode-13/models/skeleton.py @@ -5,7 +5,6 @@ colliders = [] -vertex_positions = [[-0.22367310523986816, 0.7417320013046265, -0.125, -0.24984771013259888, 1.4912750720977783, -0.125, 0.24984771013259888, 1.5087249279022217, -0.125, 0.276022344827652, 0.7591817378997803, -0.125], [0.276022344827652, 0.7591817378997803, 0.125, 0.24984771013259888, 1.5087249279022217, 0.125, -0.24984771013259888, 1.4912750720977783, 0.125, -0.22367310523986816, 0.7417320013046265, 0.125], [-0.24984771013259888, 1.4912750720977783, -0.125, -0.24984771013259888, 1.4912750720977783, 0.125, 0.24984771013259888, 1.5087249279022217, 0.125, 0.24984771013259888, 1.5087249279022217, -0.125], [0.276022344827652, 0.7591817378997803, -0.125, 0.276022344827652, 0.7591817378997803, 0.125, -0.22367310523986816, 0.7417320013046265, 0.125, -0.22367310523986816, 0.7417320013046265, -0.125], [0.276022344827652, 0.7591817378997803, -0.125, 0.24984771013259888, 1.5087249279022217, -0.125, 0.24984771013259888, 1.5087249279022217, 0.125, 0.276022344827652, 0.7591817378997803, 0.125], [-0.22367310523986816, 0.7417320013046265, 0.125, -0.24984771013259888, 1.4912750720977783, 0.125, -0.24984771013259888, 1.4912750720977783, -0.125, -0.22367310523986816, 0.7417320013046265, -0.125], [-0.24939101934432983, 1.4825608730316162, -0.25, -0.2842692732810974, 1.9813429117202759, -0.25, 0.21451278030872345, 2.016221046447754, -0.25, 0.24939101934432983, 1.5174391269683838, -0.25], [0.24939101934432983, 1.5174391269683838, 0.25, 0.21451278030872345, 2.016221046447754, 0.25, -0.2842692732810974, 1.9813429117202759, 0.25, -0.24939101934432983, 1.4825608730316162, 0.25], [-0.2842692732810974, 1.9813429117202759, -0.25, -0.2842692732810974, 1.9813429117202759, 0.25, 0.21451278030872345, 2.016221046447754, 0.25, 0.21451278030872345, 2.016221046447754, -0.25], [0.24939101934432983, 1.5174391269683838, -0.25, 0.24939101934432983, 1.5174391269683838, 0.25, -0.24939101934432983, 1.4825608730316162, 0.25, -0.24939101934432983, 1.4825608730316162, -0.25], [0.24939101934432983, 1.5174391269683838, -0.25, 0.21451278030872345, 2.016221046447754, -0.25, 0.21451278030872345, 2.016221046447754, 0.25, 0.24939101934432983, 1.5174391269683838, 0.25], [-0.24939101934432983, 1.4825608730316162, 0.25, -0.2842692732810974, 1.9813429117202759, 0.25, -0.2842692732810974, 1.9813429117202759, -0.25, -0.24939101934432983, 1.4825608730316162, -0.25], [-0.24939101934432983, 1.4825608730316162, -0.25, -0.2842692732810974, 1.9813429117202759, -0.25, 0.21451278030872345, 2.016221046447754, -0.25, 0.24939101934432983, 1.5174391269683838, -0.25], [0.24939101934432983, 1.5174391269683838, 0.25, 0.21451278030872345, 2.016221046447754, 0.25, -0.2842692732810974, 1.9813429117202759, 0.25, -0.24939101934432983, 1.4825608730316162, 0.25], [-0.2842692732810974, 1.9813429117202759, -0.25, -0.2842692732810974, 1.9813429117202759, 0.25, 0.21451278030872345, 2.016221046447754, 0.25, 0.21451278030872345, 2.016221046447754, -0.25], [0.24939101934432983, 1.5174391269683838, -0.25, 0.24939101934432983, 1.5174391269683838, 0.25, -0.24939101934432983, 1.4825608730316162, 0.25, -0.24939101934432983, 1.4825608730316162, -0.25], [0.24939101934432983, 1.5174391269683838, -0.25, 0.21451278030872345, 2.016221046447754, -0.25, 0.21451278030872345, 2.016221046447754, 0.25, 0.24939101934432983, 1.5174391269683838, 0.25], [-0.24939101934432983, 1.4825608730316162, 0.25, -0.2842692732810974, 1.9813429117202759, 0.25, -0.2842692732810974, 1.9813429117202759, -0.25, -0.24939101934432983, 1.4825608730316162, -0.25], [-0.3640827238559723, 0.7490044236183167, -0.0625, -0.3771720230579376, 1.4988901615142822, -0.0625, -0.25219106674194336, 1.501071810722351, -0.0625, -0.23910176753997803, 0.751185953617096, -0.0625], [-0.23910176753997803, 0.751185953617096, 0.0625, -0.25219106674194336, 1.501071810722351, 0.0625, -0.3771720230579376, 1.4988901615142822, 0.0625, -0.3640827238559723, 0.7490044236183167, 0.0625], [-0.3771720230579376, 1.4988901615142822, -0.0625, -0.3771720230579376, 1.4988901615142822, 0.0625, -0.25219106674194336, 1.501071810722351, 0.0625, -0.25219106674194336, 1.501071810722351, -0.0625], [-0.23910176753997803, 0.751185953617096, -0.0625, -0.23910176753997803, 0.751185953617096, 0.0625, -0.3640827238559723, 0.7490044236183167, 0.0625, -0.3640827238559723, 0.7490044236183167, -0.0625], [-0.23910176753997803, 0.751185953617096, -0.0625, -0.25219106674194336, 1.501071810722351, -0.0625, -0.25219106674194336, 1.501071810722351, 0.0625, -0.23910176753997803, 0.751185953617096, 0.0625], [-0.3640827238559723, 0.7490044236183167, 0.0625, -0.3771720230579376, 1.4988901615142822, 0.0625, -0.3771720230579376, 1.4988901615142822, -0.0625, -0.3640827238559723, 0.7490044236183167, -0.0625], [0.2609173059463501, 0.7490045428276062, -0.0625, 0.24782797694206238, 1.4988902807235718, -0.0625, 0.37280896306037903, 1.5010719299316406, -0.0625, 0.38589826226234436, 0.7511860728263855, -0.0625], [0.38589826226234436, 0.7511860728263855, 0.0625, 0.37280896306037903, 1.5010719299316406, 0.0625, 0.24782797694206238, 1.4988902807235718, 0.0625, 0.2609173059463501, 0.7490045428276062, 0.0625], [0.24782797694206238, 1.4988902807235718, -0.0625, 0.24782797694206238, 1.4988902807235718, 0.0625, 0.37280896306037903, 1.5010719299316406, 0.0625, 0.37280896306037903, 1.5010719299316406, -0.0625], [0.38589826226234436, 0.7511860728263855, -0.0625, 0.38589826226234436, 0.7511860728263855, 0.0625, 0.2609173059463501, 0.7490045428276062, 0.0625, 0.2609173059463501, 0.7490045428276062, -0.0625], [0.38589826226234436, 0.7511860728263855, -0.0625, 0.37280896306037903, 1.5010719299316406, -0.0625, 0.37280896306037903, 1.5010719299316406, 0.0625, 0.38589826226234436, 0.7511860728263855, 0.0625], [0.2609173059463501, 0.7490045428276062, 0.0625, 0.24782797694206238, 1.4988902807235718, 0.0625, 0.24782797694206238, 1.4988902807235718, -0.0625, 0.2609173059463501, 0.7490045428276062, -0.0625], [-0.1744011789560318, -0.0009765936993062496, -0.0625, -0.18749047815799713, 0.7489091753959656, -0.0625, -0.06250951439142227, 0.7510907649993896, -0.0625, -0.04942021146416664, 0.0012049571378156543, -0.0625], [-0.04942021146416664, 0.0012049571378156543, 0.0625, -0.06250951439142227, 0.7510907649993896, 0.0625, -0.18749047815799713, 0.7489091753959656, 0.0625, -0.1744011789560318, -0.0009765936993062496, 0.0625], [-0.18749047815799713, 0.7489091753959656, -0.0625, -0.18749047815799713, 0.7489091753959656, 0.0625, -0.06250951439142227, 0.7510907649993896, 0.0625, -0.06250951439142227, 0.7510907649993896, -0.0625], [-0.04942021146416664, 0.0012049571378156543, -0.0625, -0.04942021146416664, 0.0012049571378156543, 0.0625, -0.1744011789560318, -0.0009765936993062496, 0.0625, -0.1744011789560318, -0.0009765936993062496, -0.0625], [-0.04942021146416664, 0.0012049571378156543, -0.0625, -0.06250951439142227, 0.7510907649993896, -0.0625, -0.06250951439142227, 0.7510907649993896, 0.0625, -0.04942021146416664, 0.0012049571378156543, 0.0625], [-0.1744011789560318, -0.0009765936993062496, 0.0625, -0.18749047815799713, 0.7489091753959656, 0.0625, -0.18749047815799713, 0.7489091753959656, -0.0625, -0.1744011789560318, -0.0009765936993062496, -0.0625], [0.0755988210439682, -0.0009765521390363574, -0.0625, 0.06250952184200287, 0.7489092350006104, -0.0625, 0.18749049305915833, 0.7510908246040344, -0.0625, 0.20057979226112366, 0.0012049986980855465, -0.0625], [0.20057979226112366, 0.0012049986980855465, 0.0625, 0.18749049305915833, 0.7510908246040344, 0.0625, 0.06250952184200287, 0.7489092350006104, 0.0625, 0.0755988210439682, -0.0009765521390363574, 0.0625], [0.06250952184200287, 0.7489092350006104, -0.0625, 0.06250952184200287, 0.7489092350006104, 0.0625, 0.18749049305915833, 0.7510908246040344, 0.0625, 0.18749049305915833, 0.7510908246040344, -0.0625], [0.20057979226112366, 0.0012049986980855465, -0.0625, 0.20057979226112366, 0.0012049986980855465, 0.0625, 0.0755988210439682, -0.0009765521390363574, 0.0625, 0.0755988210439682, -0.0009765521390363574, -0.0625], [0.20057979226112366, 0.0012049986980855465, -0.0625, 0.18749049305915833, 0.7510908246040344, -0.0625, 0.18749049305915833, 0.7510908246040344, 0.0625, 0.20057979226112366, 0.0012049986980855465, 0.0625], [0.0755988210439682, -0.0009765521390363574, 0.0625, 0.06250952184200287, 0.7489092350006104, 0.0625, 0.06250952184200287, 0.7489092350006104, -0.0625, 0.0755988210439682, -0.0009765521390363574, -0.0625]] +vertex_positions = [[-0.25, 0.75, -0.125, -0.25, 1.5, -0.125, 0.25, 1.5, -0.125, 0.25, 0.75, -0.125], [0.25, 0.75, 0.125, 0.25, 1.5, 0.125, -0.25, 1.5, 0.125, -0.25, 0.75, 0.125], [-0.25, 1.5, -0.125, -0.25, 1.5, 0.125, 0.25, 1.5, 0.125, 0.25, 1.5, -0.125], [0.25, 0.75, -0.125, 0.25, 0.75, 0.125, -0.25, 0.75, 0.125, -0.25, 0.75, -0.125], [0.25, 0.75, -0.125, 0.25, 1.5, -0.125, 0.25, 1.5, 0.125, 0.25, 0.75, 0.125], [-0.25, 0.75, 0.125, -0.25, 1.5, 0.125, -0.25, 1.5, -0.125, -0.25, 0.75, -0.125], [-0.25, 1.5, -0.25, -0.25, 2.0, -0.25, 0.25, 2.0, -0.25, 0.25, 1.5, -0.25], [0.25, 1.5, 0.25, 0.25, 2.0, 0.25, -0.25, 2.0, 0.25, -0.25, 1.5, 0.25], [-0.25, 2.0, -0.25, -0.25, 2.0, 0.25, 0.25, 2.0, 0.25, 0.25, 2.0, -0.25], [0.25, 1.5, -0.25, 0.25, 1.5, 0.25, -0.25, 1.5, 0.25, -0.25, 1.5, -0.25], [0.25, 1.5, -0.25, 0.25, 2.0, -0.25, 0.25, 2.0, 0.25, 0.25, 1.5, 0.25], [-0.25, 1.5, 0.25, -0.25, 2.0, 0.25, -0.25, 2.0, -0.25, -0.25, 1.5, -0.25], [-0.25, 1.5, -0.25, -0.25, 2.0, -0.25, 0.25, 2.0, -0.25, 0.25, 1.5, -0.25], [0.25, 1.5, 0.25, 0.25, 2.0, 0.25, -0.25, 2.0, 0.25, -0.25, 1.5, 0.25], [-0.25, 2.0, -0.25, -0.25, 2.0, 0.25, 0.25, 2.0, 0.25, 0.25, 2.0, -0.25], [0.25, 1.5, -0.25, 0.25, 1.5, 0.25, -0.25, 1.5, 0.25, -0.25, 1.5, -0.25], [0.25, 1.5, -0.25, 0.25, 2.0, -0.25, 0.25, 2.0, 0.25, 0.25, 1.5, 0.25], [-0.25, 1.5, 0.25, -0.25, 2.0, 0.25, -0.25, 2.0, -0.25, -0.25, 1.5, -0.25], [-0.375, 0.75, -0.0625, -0.375, 1.5, -0.0625, -0.25, 1.5, -0.0625, -0.25, 0.75, -0.0625], [-0.25, 0.75, 0.0625, -0.25, 1.5, 0.0625, -0.375, 1.5, 0.0625, -0.375, 0.75, 0.0625], [-0.375, 1.5, -0.0625, -0.375, 1.5, 0.0625, -0.25, 1.5, 0.0625, -0.25, 1.5, -0.0625], [-0.25, 0.75, -0.0625, -0.25, 0.75, 0.0625, -0.375, 0.75, 0.0625, -0.375, 0.75, -0.0625], [-0.25, 0.75, -0.0625, -0.25, 1.5, -0.0625, -0.25, 1.5, 0.0625, -0.25, 0.75, 0.0625], [-0.375, 0.75, 0.0625, -0.375, 1.5, 0.0625, -0.375, 1.5, -0.0625, -0.375, 0.75, -0.0625], [0.25, 0.75, -0.0625, 0.25, 1.5, -0.0625, 0.375, 1.5, -0.0625, 0.375, 0.75, -0.0625], [0.375, 0.75, 0.0625, 0.375, 1.5, 0.0625, 0.25, 1.5, 0.0625, 0.25, 0.75, 0.0625], [0.25, 1.5, -0.0625, 0.25, 1.5, 0.0625, 0.375, 1.5, 0.0625, 0.375, 1.5, -0.0625], [0.375, 0.75, -0.0625, 0.375, 0.75, 0.0625, 0.25, 0.75, 0.0625, 0.25, 0.75, -0.0625], [0.375, 0.75, -0.0625, 0.375, 1.5, -0.0625, 0.375, 1.5, 0.0625, 0.375, 0.75, 0.0625], [0.25, 0.75, 0.0625, 0.25, 1.5, 0.0625, 0.25, 1.5, -0.0625, 0.25, 0.75, -0.0625], [-0.1875, 0.0, -0.0625, -0.1875, 0.75, -0.0625, -0.0625, 0.75, -0.0625, -0.0625, 0.0, -0.0625], [-0.0625, 0.0, 0.0625, -0.0625, 0.75, 0.0625, -0.1875, 0.75, 0.0625, -0.1875, 0.0, 0.0625], [-0.1875, 0.75, -0.0625, -0.1875, 0.75, 0.0625, -0.0625, 0.75, 0.0625, -0.0625, 0.75, -0.0625], [-0.0625, 0.0, -0.0625, -0.0625, 0.0, 0.0625, -0.1875, 0.0, 0.0625, -0.1875, 0.0, -0.0625], [-0.0625, 0.0, -0.0625, -0.0625, 0.75, -0.0625, -0.0625, 0.75, 0.0625, -0.0625, 0.0, 0.0625], [-0.1875, 0.0, 0.0625, -0.1875, 0.75, 0.0625, -0.1875, 0.75, -0.0625, -0.1875, 0.0, -0.0625], [0.0625, 0.0, -0.0625, 0.0625, 0.75, -0.0625, 0.1875, 0.75, -0.0625, 0.1875, 0.0, -0.0625], [0.1875, 0.0, 0.0625, 0.1875, 0.75, 0.0625, 0.0625, 0.75, 0.0625, 0.0625, 0.0, 0.0625], [0.0625, 0.75, -0.0625, 0.0625, 0.75, 0.0625, 0.1875, 0.75, 0.0625, 0.1875, 0.75, -0.0625], [0.1875, 0.0, -0.0625, 0.1875, 0.0, 0.0625, 0.0625, 0.0, 0.0625, 0.0625, 0.0, -0.0625], [0.1875, 0.0, -0.0625, 0.1875, 0.75, -0.0625, 0.1875, 0.75, 0.0625, 0.1875, 0.0, 0.0625], [0.0625, 0.0, 0.0625, 0.0625, 0.75, 0.0625, 0.0625, 0.75, -0.0625, 0.0625, 0.0, -0.0625]] tex_coords = [[0.03333333333333333, 0.0, 0, 0.03333333333333333, 0.75, 0, 0.1, 0.75, 0, 0.1, 0.0, 0], [0.13333333333333333, 0.0, 0, 0.13333333333333333, 0.75, 0, 0.2, 0.75, 0, 0.2, 0.0, 0], [0.03333333333333333, 0.75, 0, 0.03333333333333333, 1.0, 0, 0.1, 1.0, 0, 0.1, 0.75, 0], [0.1, 0.75, 0, 0.1, 1.0, 0, 0.16666666666666666, 1.0, 0, 0.16666666666666666, 0.75, 0], [0.1, 0.0, 0, 0.1, 0.75, 0, 0.13333333333333333, 0.75, 0, 0.13333333333333333, 0.0, 0], [0.0, 0.0, 0, 0.0, 0.75, 0, 0.03333333333333333, 0.75, 0, 0.03333333333333333, 0.0, 0], [0.26666666666666666, 0.0, 0, 0.26666666666666666, 0.5, 0, 0.3333333333333333, 0.5, 0, 0.3333333333333333, 0.0, 0], [0.4, 0.0, 0, 0.4, 0.5, 0, 0.4666666666666667, 0.5, 0, 0.4666666666666667, 0.0, 0], [0.26666666666666666, 0.5, 0, 0.26666666666666666, 1.0, 0, 0.3333333333333333, 1.0, 0, 0.3333333333333333, 0.5, 0], [0.3333333333333333, 0.5, 0, 0.3333333333333333, 1.0, 0, 0.4, 1.0, 0, 0.4, 0.5, 0], [0.3333333333333333, 0.0, 0, 0.3333333333333333, 0.5, 0, 0.4, 0.5, 0, 0.4, 0.0, 0], [0.2, 0.0, 0, 0.2, 0.5, 0, 0.26666666666666666, 0.5, 0, 0.26666666666666666, 0.0, 0], [0.5333333333333333, 0.0, 0, 0.5333333333333333, 0.5, 0, 0.6, 0.5, 0, 0.6, 0.0, 0], [0.6666666666666666, 0.0, 0, 0.6666666666666666, 0.5, 0, 0.7333333333333333, 0.5, 0, 0.7333333333333333, 0.0, 0], [0.5333333333333333, 0.5, 0, 0.5333333333333333, 1.0, 0, 0.6, 1.0, 0, 0.6, 0.5, 0], [0.6, 0.5, 0, 0.6, 1.0, 0, 0.6666666666666666, 1.0, 0, 0.6666666666666666, 0.5, 0], [0.6, 0.0, 0, 0.6, 0.5, 0, 0.6666666666666666, 0.5, 0, 0.6666666666666666, 0.0, 0], [0.4666666666666667, 0.0, 0, 0.4666666666666667, 0.5, 0, 0.5333333333333333, 0.5, 0, 0.5333333333333333, 0.0, 0], [0.75, 0.125, 0, 0.75, 0.875, 0, 0.7666666666666667, 0.875, 0, 0.7666666666666667, 0.125, 0], [0.7833333333333333, 0.125, 0, 0.7833333333333333, 0.875, 0, 0.8, 0.875, 0, 0.8, 0.125, 0], [0.75, 0.875, 0, 0.75, 1.0, 0, 0.7666666666666667, 1.0, 0, 0.7666666666666667, 0.875, 0], [0.7666666666666667, 0.875, 0, 0.7666666666666667, 1.0, 0, 0.7833333333333333, 1.0, 0, 0.7833333333333333, 0.875, 0], [0.7666666666666667, 0.125, 0, 0.7666666666666667, 0.875, 0, 0.7833333333333333, 0.875, 0, 0.7833333333333333, 0.125, 0], [0.7333333333333333, 0.125, 0, 0.7333333333333333, 0.875, 0, 0.75, 0.875, 0, 0.75, 0.125, 0], [0.8166666666666667, 0.125, 0, 0.8166666666666667, 0.875, 0, 0.8333333333333334, 0.875, 0, 0.8333333333333334, 0.125, 0], [0.85, 0.125, 0, 0.85, 0.875, 0, 0.8666666666666667, 0.875, 0, 0.8666666666666667, 0.125, 0], [0.8166666666666667, 0.875, 0, 0.8166666666666667, 1.0, 0, 0.8333333333333334, 1.0, 0, 0.8333333333333334, 0.875, 0], [0.8333333333333334, 0.875, 0, 0.8333333333333334, 1.0, 0, 0.85, 1.0, 0, 0.85, 0.875, 0], [0.8333333333333334, 0.125, 0, 0.8333333333333334, 0.875, 0, 0.85, 0.875, 0, 0.85, 0.125, 0], [0.8, 0.125, 0, 0.8, 0.875, 0, 0.8166666666666667, 0.875, 0, 0.8166666666666667, 0.125, 0], [0.8833333333333333, 0.125, 0, 0.8833333333333333, 0.875, 0, 0.9, 0.875, 0, 0.9, 0.125, 0], [0.9166666666666666, 0.125, 0, 0.9166666666666666, 0.875, 0, 0.9333333333333333, 0.875, 0, 0.9333333333333333, 0.125, 0], [0.8833333333333333, 0.875, 0, 0.8833333333333333, 1.0, 0, 0.9, 1.0, 0, 0.9, 0.875, 0], [0.9, 0.875, 0, 0.9, 1.0, 0, 0.9166666666666666, 1.0, 0, 0.9166666666666666, 0.875, 0], [0.9, 0.125, 0, 0.9, 0.875, 0, 0.9166666666666666, 0.875, 0, 0.9166666666666666, 0.125, 0], [0.8666666666666667, 0.125, 0, 0.8666666666666667, 0.875, 0, 0.8833333333333333, 0.875, 0, 0.8833333333333333, 0.125, 0], [0.95, 0.125, 0, 0.95, 0.875, 0, 0.9666666666666667, 0.875, 0, 0.9666666666666667, 0.125, 0], [0.9833333333333333, 0.125, 0, 0.9833333333333333, 0.875, 0, 1.0, 0.875, 0, 1.0, 0.125, 0], [0.95, 0.875, 0, 0.95, 1.0, 0, 0.9666666666666667, 1.0, 0, 0.9666666666666667, 0.875, 0], [0.9666666666666667, 0.875, 0, 0.9666666666666667, 1.0, 0, 0.9833333333333333, 1.0, 0, 0.9833333333333333, 0.875, 0], [0.9666666666666667, 0.125, 0, 0.9666666666666667, 0.875, 0, 0.9833333333333333, 0.875, 0, 0.9833333333333333, 0.125, 0], [0.9333333333333333, 0.125, 0, 0.9333333333333333, 0.875, 0, 0.95, 0.875, 0, 0.95, 0.125, 0]] shading_values = [[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]] - diff --git a/episode-13/models/zombie.py b/episode-13/models/zombie.py index 3243789d..3bdc469d 100644 --- a/episode-13/models/zombie.py +++ b/episode-13/models/zombie.py @@ -5,7 +5,6 @@ colliders = [] -vertex_positions = [[-0.22367310523986816, 0.7417320013046265, -0.125, -0.24984771013259888, 1.4912750720977783, -0.125, 0.24984771013259888, 1.5087249279022217, -0.125, 0.276022344827652, 0.7591817378997803, -0.125], [0.276022344827652, 0.7591817378997803, 0.125, 0.24984771013259888, 1.5087249279022217, 0.125, -0.24984771013259888, 1.4912750720977783, 0.125, -0.22367310523986816, 0.7417320013046265, 0.125], [-0.24984771013259888, 1.4912750720977783, -0.125, -0.24984771013259888, 1.4912750720977783, 0.125, 0.24984771013259888, 1.5087249279022217, 0.125, 0.24984771013259888, 1.5087249279022217, -0.125], [0.276022344827652, 0.7591817378997803, -0.125, 0.276022344827652, 0.7591817378997803, 0.125, -0.22367310523986816, 0.7417320013046265, 0.125, -0.22367310523986816, 0.7417320013046265, -0.125], [0.276022344827652, 0.7591817378997803, -0.125, 0.24984771013259888, 1.5087249279022217, -0.125, 0.24984771013259888, 1.5087249279022217, 0.125, 0.276022344827652, 0.7591817378997803, 0.125], [-0.22367310523986816, 0.7417320013046265, 0.125, -0.24984771013259888, 1.4912750720977783, 0.125, -0.24984771013259888, 1.4912750720977783, -0.125, -0.22367310523986816, 0.7417320013046265, -0.125], [-0.24939101934432983, 1.4825608730316162, -0.25, -0.2842692732810974, 1.9813429117202759, -0.25, 0.21451278030872345, 2.016221046447754, -0.25, 0.24939101934432983, 1.5174391269683838, -0.25], [0.24939101934432983, 1.5174391269683838, 0.25, 0.21451278030872345, 2.016221046447754, 0.25, -0.2842692732810974, 1.9813429117202759, 0.25, -0.24939101934432983, 1.4825608730316162, 0.25], [-0.2842692732810974, 1.9813429117202759, -0.25, -0.2842692732810974, 1.9813429117202759, 0.25, 0.21451278030872345, 2.016221046447754, 0.25, 0.21451278030872345, 2.016221046447754, -0.25], [0.24939101934432983, 1.5174391269683838, -0.25, 0.24939101934432983, 1.5174391269683838, 0.25, -0.24939101934432983, 1.4825608730316162, 0.25, -0.24939101934432983, 1.4825608730316162, -0.25], [0.24939101934432983, 1.5174391269683838, -0.25, 0.21451278030872345, 2.016221046447754, -0.25, 0.21451278030872345, 2.016221046447754, 0.25, 0.24939101934432983, 1.5174391269683838, 0.25], [-0.24939101934432983, 1.4825608730316162, 0.25, -0.2842692732810974, 1.9813429117202759, 0.25, -0.2842692732810974, 1.9813429117202759, -0.25, -0.24939101934432983, 1.4825608730316162, -0.25], [-0.24939101934432983, 1.4825608730316162, -0.25, -0.2842692732810974, 1.9813429117202759, -0.25, 0.21451278030872345, 2.016221046447754, -0.25, 0.24939101934432983, 1.5174391269683838, -0.25], [0.24939101934432983, 1.5174391269683838, 0.25, 0.21451278030872345, 2.016221046447754, 0.25, -0.2842692732810974, 1.9813429117202759, 0.25, -0.24939101934432983, 1.4825608730316162, 0.25], [-0.2842692732810974, 1.9813429117202759, -0.25, -0.2842692732810974, 1.9813429117202759, 0.25, 0.21451278030872345, 2.016221046447754, 0.25, 0.21451278030872345, 2.016221046447754, -0.25], [0.24939101934432983, 1.5174391269683838, -0.25, 0.24939101934432983, 1.5174391269683838, 0.25, -0.24939101934432983, 1.4825608730316162, 0.25, -0.24939101934432983, 1.4825608730316162, -0.25], [0.24939101934432983, 1.5174391269683838, -0.25, 0.21451278030872345, 2.016221046447754, -0.25, 0.21451278030872345, 2.016221046447754, 0.25, 0.24939101934432983, 1.5174391269683838, 0.25], [-0.24939101934432983, 1.4825608730316162, 0.25, -0.2842692732810974, 1.9813429117202759, 0.25, -0.2842692732810974, 1.9813429117202759, -0.25, -0.24939101934432983, 1.4825608730316162, -0.25], [-0.4780735969543457, 0.7438370585441589, -0.125, -0.5042482614517212, 1.4933801889419556, -0.125, -0.2544005215167999, 1.5021049976348877, -0.125, -0.2282259166240692, 0.7525619268417358, -0.125], [-0.2282259166240692, 0.7525619268417358, 0.125, -0.2544005215167999, 1.5021049976348877, 0.125, -0.5042482614517212, 1.4933801889419556, 0.125, -0.4780735969543457, 0.7438370585441589, 0.125], [-0.5042482614517212, 1.4933801889419556, -0.125, -0.5042482614517212, 1.4933801889419556, 0.125, -0.2544005215167999, 1.5021049976348877, 0.125, -0.2544005215167999, 1.5021049976348877, -0.125], [-0.2282259166240692, 0.7525619268417358, -0.125, -0.2282259166240692, 0.7525619268417358, 0.125, -0.4780735969543457, 0.7438370585441589, 0.125, -0.4780735969543457, 0.7438370585441589, -0.125], [-0.2282259166240692, 0.7525619268417358, -0.125, -0.2544005215167999, 1.5021049976348877, -0.125, -0.2544005215167999, 1.5021049976348877, 0.125, -0.2282259166240692, 0.7525619268417358, 0.125], [-0.4780735969543457, 0.7438370585441589, 0.125, -0.5042482614517212, 1.4933801889419556, 0.125, -0.5042482614517212, 1.4933801889419556, -0.125, -0.4780735969543457, 0.7438370585441589, -0.125], [0.2718502879142761, 0.748199462890625, -0.125, 0.24567565321922302, 1.4977426528930664, -0.125, 0.4955233633518219, 1.5064674615859985, -0.125, 0.521697998046875, 0.7569243311882019, -0.125], [0.521697998046875, 0.7569243311882019, 0.125, 0.4955233633518219, 1.5064674615859985, 0.125, 0.24567565321922302, 1.4977426528930664, 0.125, 0.2718502879142761, 0.748199462890625, 0.125], [0.24567565321922302, 1.4977426528930664, -0.125, 0.24567565321922302, 1.4977426528930664, 0.125, 0.4955233633518219, 1.5064674615859985, 0.125, 0.4955233633518219, 1.5064674615859985, -0.125], [0.521697998046875, 0.7569243311882019, -0.125, 0.521697998046875, 0.7569243311882019, 0.125, 0.2718502879142761, 0.748199462890625, 0.125, 0.2718502879142761, 0.748199462890625, -0.125], [0.521697998046875, 0.7569243311882019, -0.125, 0.4955233633518219, 1.5064674615859985, -0.125, 0.4955233633518219, 1.5064674615859985, 0.125, 0.521697998046875, 0.7569243311882019, 0.125], [0.2718502879142761, 0.748199462890625, 0.125, 0.24567565321922302, 1.4977426528930664, 0.125, 0.24567565321922302, 1.4977426528930664, -0.125, 0.2718502879142761, 0.748199462890625, -0.125], [-0.21749922633171082, -0.00390557199716568, -0.125, -0.24367386102676392, 0.7456375360488892, -0.125, 0.006173852831125259, 0.7543624043464661, -0.125, 0.032348476350307465, 0.004819302354007959, -0.125], [0.032348476350307465, 0.004819302354007959, 0.125, 0.006173852831125259, 0.7543624043464661, 0.125, -0.24367386102676392, 0.7456375360488892, 0.125, -0.21749922633171082, -0.00390557199716568, 0.125], [-0.24367386102676392, 0.7456375360488892, -0.125, -0.24367386102676392, 0.7456375360488892, 0.125, 0.006173852831125259, 0.7543624043464661, 0.125, 0.006173852831125259, 0.7543624043464661, -0.125], [0.032348476350307465, 0.004819302354007959, -0.125, 0.032348476350307465, 0.004819302354007959, 0.125, -0.21749922633171082, -0.00390557199716568, 0.125, -0.21749922633171082, -0.00390557199716568, -0.125], [0.032348476350307465, 0.004819302354007959, -0.125, 0.006173852831125259, 0.7543624043464661, -0.125, 0.006173852831125259, 0.7543624043464661, 0.125, 0.032348476350307465, 0.004819302354007959, 0.125], [-0.21749922633171082, -0.00390557199716568, 0.125, -0.24367386102676392, 0.7456375360488892, 0.125, -0.24367386102676392, 0.7456375360488892, -0.125, -0.21749922633171082, -0.00390557199716568, -0.125], [0.020000765100121498, -0.003905563149601221, -0.125, -0.006173856556415558, 0.7456375956535339, -0.125, 0.24367386102676392, 0.7543624639511108, -0.125, 0.26984846591949463, 0.004819311201572418, -0.125], [0.26984846591949463, 0.004819311201572418, 0.125, 0.24367386102676392, 0.7543624639511108, 0.125, -0.006173856556415558, 0.7456375956535339, 0.125, 0.020000765100121498, -0.003905563149601221, 0.125], [-0.006173856556415558, 0.7456375956535339, -0.125, -0.006173856556415558, 0.7456375956535339, 0.125, 0.24367386102676392, 0.7543624639511108, 0.125, 0.24367386102676392, 0.7543624639511108, -0.125], [0.26984846591949463, 0.004819311201572418, -0.125, 0.26984846591949463, 0.004819311201572418, 0.125, 0.020000765100121498, -0.003905563149601221, 0.125, 0.020000765100121498, -0.003905563149601221, -0.125], [0.26984846591949463, 0.004819311201572418, -0.125, 0.24367386102676392, 0.7543624639511108, -0.125, 0.24367386102676392, 0.7543624639511108, 0.125, 0.26984846591949463, 0.004819311201572418, 0.125], [0.020000765100121498, -0.003905563149601221, 0.125, -0.006173856556415558, 0.7456375956535339, 0.125, -0.006173856556415558, 0.7456375956535339, -0.125, 0.020000765100121498, -0.003905563149601221, -0.125]] +vertex_positions = [[-0.25, 0.75, -0.125, -0.25, 1.5, -0.125, 0.25, 1.5, -0.125, 0.25, 0.75, -0.125], [0.25, 0.75, 0.125, 0.25, 1.5, 0.125, -0.25, 1.5, 0.125, -0.25, 0.75, 0.125], [-0.25, 1.5, -0.125, -0.25, 1.5, 0.125, 0.25, 1.5, 0.125, 0.25, 1.5, -0.125], [0.25, 0.75, -0.125, 0.25, 0.75, 0.125, -0.25, 0.75, 0.125, -0.25, 0.75, -0.125], [0.25, 0.75, -0.125, 0.25, 1.5, -0.125, 0.25, 1.5, 0.125, 0.25, 0.75, 0.125], [-0.25, 0.75, 0.125, -0.25, 1.5, 0.125, -0.25, 1.5, -0.125, -0.25, 0.75, -0.125], [-0.25, 1.5, -0.25, -0.25, 2.0, -0.25, 0.25, 2.0, -0.25, 0.25, 1.5, -0.25], [0.25, 1.5, 0.25, 0.25, 2.0, 0.25, -0.25, 2.0, 0.25, -0.25, 1.5, 0.25], [-0.25, 2.0, -0.25, -0.25, 2.0, 0.25, 0.25, 2.0, 0.25, 0.25, 2.0, -0.25], [0.25, 1.5, -0.25, 0.25, 1.5, 0.25, -0.25, 1.5, 0.25, -0.25, 1.5, -0.25], [0.25, 1.5, -0.25, 0.25, 2.0, -0.25, 0.25, 2.0, 0.25, 0.25, 1.5, 0.25], [-0.25, 1.5, 0.25, -0.25, 2.0, 0.25, -0.25, 2.0, -0.25, -0.25, 1.5, -0.25], [-0.25, 1.5, -0.25, -0.25, 2.0, -0.25, 0.25, 2.0, -0.25, 0.25, 1.5, -0.25], [0.25, 1.5, 0.25, 0.25, 2.0, 0.25, -0.25, 2.0, 0.25, -0.25, 1.5, 0.25], [-0.25, 2.0, -0.25, -0.25, 2.0, 0.25, 0.25, 2.0, 0.25, 0.25, 2.0, -0.25], [0.25, 1.5, -0.25, 0.25, 1.5, 0.25, -0.25, 1.5, 0.25, -0.25, 1.5, -0.25], [0.25, 1.5, -0.25, 0.25, 2.0, -0.25, 0.25, 2.0, 0.25, 0.25, 1.5, 0.25], [-0.25, 1.5, 0.25, -0.25, 2.0, 0.25, -0.25, 2.0, -0.25, -0.25, 1.5, -0.25], [-0.5, 0.75, -0.125, -0.5, 1.5, -0.125, -0.25, 1.5, -0.125, -0.25, 0.75, -0.125], [-0.25, 0.75, 0.125, -0.25, 1.5, 0.125, -0.5, 1.5, 0.125, -0.5, 0.75, 0.125], [-0.5, 1.5, -0.125, -0.5, 1.5, 0.125, -0.25, 1.5, 0.125, -0.25, 1.5, -0.125], [-0.25, 0.75, -0.125, -0.25, 0.75, 0.125, -0.5, 0.75, 0.125, -0.5, 0.75, -0.125], [-0.25, 0.75, -0.125, -0.25, 1.5, -0.125, -0.25, 1.5, 0.125, -0.25, 0.75, 0.125], [-0.5, 0.75, 0.125, -0.5, 1.5, 0.125, -0.5, 1.5, -0.125, -0.5, 0.75, -0.125], [0.25, 0.75, -0.125, 0.25, 1.5, -0.125, 0.5, 1.5, -0.125, 0.5, 0.75, -0.125], [0.5, 0.75, 0.125, 0.5, 1.5, 0.125, 0.25, 1.5, 0.125, 0.25, 0.75, 0.125], [0.25, 1.5, -0.125, 0.25, 1.5, 0.125, 0.5, 1.5, 0.125, 0.5, 1.5, -0.125], [0.5, 0.75, -0.125, 0.5, 0.75, 0.125, 0.25, 0.75, 0.125, 0.25, 0.75, -0.125], [0.5, 0.75, -0.125, 0.5, 1.5, -0.125, 0.5, 1.5, 0.125, 0.5, 0.75, 0.125], [0.25, 0.75, 0.125, 0.25, 1.5, 0.125, 0.25, 1.5, -0.125, 0.25, 0.75, -0.125], [-0.24375000596046448, 0.0, -0.125, -0.24375000596046448, 0.75, -0.125, 0.0062500000931322575, 0.75, -0.125, 0.0062500000931322575, 0.0, -0.125], [0.0062500000931322575, 0.0, 0.125, 0.0062500000931322575, 0.75, 0.125, -0.24375000596046448, 0.75, 0.125, -0.24375000596046448, 0.0, 0.125], [-0.24375000596046448, 0.75, -0.125, -0.24375000596046448, 0.75, 0.125, 0.0062500000931322575, 0.75, 0.125, 0.0062500000931322575, 0.75, -0.125], [0.0062500000931322575, 0.0, -0.125, 0.0062500000931322575, 0.0, 0.125, -0.24375000596046448, 0.0, 0.125, -0.24375000596046448, 0.0, -0.125], [0.0062500000931322575, 0.0, -0.125, 0.0062500000931322575, 0.75, -0.125, 0.0062500000931322575, 0.75, 0.125, 0.0062500000931322575, 0.0, 0.125], [-0.24375000596046448, 0.0, 0.125, -0.24375000596046448, 0.75, 0.125, -0.24375000596046448, 0.75, -0.125, -0.24375000596046448, 0.0, -0.125], [-0.0062500000931322575, 0.0, -0.125, -0.0062500000931322575, 0.75, -0.125, 0.24375000596046448, 0.75, -0.125, 0.24375000596046448, 0.0, -0.125], [0.24375000596046448, 0.0, 0.125, 0.24375000596046448, 0.75, 0.125, -0.0062500000931322575, 0.75, 0.125, -0.0062500000931322575, 0.0, 0.125], [-0.0062500000931322575, 0.75, -0.125, -0.0062500000931322575, 0.75, 0.125, 0.24375000596046448, 0.75, 0.125, 0.24375000596046448, 0.75, -0.125], [0.24375000596046448, 0.0, -0.125, 0.24375000596046448, 0.0, 0.125, -0.0062500000931322575, 0.0, 0.125, -0.0062500000931322575, 0.0, -0.125], [0.24375000596046448, 0.0, -0.125, 0.24375000596046448, 0.75, -0.125, 0.24375000596046448, 0.75, 0.125, 0.24375000596046448, 0.0, 0.125], [-0.0062500000931322575, 0.0, 0.125, -0.0062500000931322575, 0.75, 0.125, -0.0062500000931322575, 0.75, -0.125, -0.0062500000931322575, 0.0, -0.125]] tex_coords = [[0.02631578947368421, 0.0, 0, 0.02631578947368421, 0.75, 0, 0.07894736842105263, 0.75, 0, 0.07894736842105263, 0.0, 0], [0.10526315789473684, 0.0, 0, 0.10526315789473684, 0.75, 0, 0.15789473684210525, 0.75, 0, 0.15789473684210525, 0.0, 0], [0.02631578947368421, 0.75, 0, 0.02631578947368421, 1.0, 0, 0.07894736842105263, 1.0, 0, 0.07894736842105263, 0.75, 0], [0.07894736842105263, 0.75, 0, 0.07894736842105263, 1.0, 0, 0.13157894736842105, 1.0, 0, 0.13157894736842105, 0.75, 0], [0.07894736842105263, 0.0, 0, 0.07894736842105263, 0.75, 0, 0.10526315789473684, 0.75, 0, 0.10526315789473684, 0.0, 0], [0.0, 0.0, 0, 0.0, 0.75, 0, 0.02631578947368421, 0.75, 0, 0.02631578947368421, 0.0, 0], [0.21052631578947367, 0.0, 0, 0.21052631578947367, 0.5, 0, 0.2631578947368421, 0.5, 0, 0.2631578947368421, 0.0, 0], [0.3157894736842105, 0.0, 0, 0.3157894736842105, 0.5, 0, 0.3684210526315789, 0.5, 0, 0.3684210526315789, 0.0, 0], [0.21052631578947367, 0.5, 0, 0.21052631578947367, 1.0, 0, 0.2631578947368421, 1.0, 0, 0.2631578947368421, 0.5, 0], [0.2631578947368421, 0.5, 0, 0.2631578947368421, 1.0, 0, 0.3157894736842105, 1.0, 0, 0.3157894736842105, 0.5, 0], [0.2631578947368421, 0.0, 0, 0.2631578947368421, 0.5, 0, 0.3157894736842105, 0.5, 0, 0.3157894736842105, 0.0, 0], [0.15789473684210525, 0.0, 0, 0.15789473684210525, 0.5, 0, 0.21052631578947367, 0.5, 0, 0.21052631578947367, 0.0, 0], [0.42105263157894735, 0.0, 0, 0.42105263157894735, 0.5, 0, 0.47368421052631576, 0.5, 0, 0.47368421052631576, 0.0, 0], [0.5263157894736842, 0.0, 0, 0.5263157894736842, 0.5, 0, 0.5789473684210527, 0.5, 0, 0.5789473684210527, 0.0, 0], [0.42105263157894735, 0.5, 0, 0.42105263157894735, 1.0, 0, 0.47368421052631576, 1.0, 0, 0.47368421052631576, 0.5, 0], [0.47368421052631576, 0.5, 0, 0.47368421052631576, 1.0, 0, 0.5263157894736842, 1.0, 0, 0.5263157894736842, 0.5, 0], [0.47368421052631576, 0.0, 0, 0.47368421052631576, 0.5, 0, 0.5263157894736842, 0.5, 0, 0.5263157894736842, 0.0, 0], [0.3684210526315789, 0.0, 0, 0.3684210526315789, 0.5, 0, 0.42105263157894735, 0.5, 0, 0.42105263157894735, 0.0, 0], [0.6052631578947368, 0.0, 0, 0.6052631578947368, 0.75, 0, 0.631578947368421, 0.75, 0, 0.631578947368421, 0.0, 0], [0.6578947368421053, 0.0, 0, 0.6578947368421053, 0.75, 0, 0.6842105263157895, 0.75, 0, 0.6842105263157895, 0.0, 0], [0.6052631578947368, 0.75, 0, 0.6052631578947368, 1.0, 0, 0.631578947368421, 1.0, 0, 0.631578947368421, 0.75, 0], [0.631578947368421, 0.75, 0, 0.631578947368421, 1.0, 0, 0.6578947368421053, 1.0, 0, 0.6578947368421053, 0.75, 0], [0.631578947368421, 0.0, 0, 0.631578947368421, 0.75, 0, 0.6578947368421053, 0.75, 0, 0.6578947368421053, 0.0, 0], [0.5789473684210527, 0.0, 0, 0.5789473684210527, 0.75, 0, 0.6052631578947368, 0.75, 0, 0.6052631578947368, 0.0, 0], [0.7105263157894737, 0.0, 0, 0.7105263157894737, 0.75, 0, 0.7368421052631579, 0.75, 0, 0.7368421052631579, 0.0, 0], [0.7631578947368421, 0.0, 0, 0.7631578947368421, 0.75, 0, 0.7894736842105263, 0.75, 0, 0.7894736842105263, 0.0, 0], [0.7105263157894737, 0.75, 0, 0.7105263157894737, 1.0, 0, 0.7368421052631579, 1.0, 0, 0.7368421052631579, 0.75, 0], [0.7368421052631579, 0.75, 0, 0.7368421052631579, 1.0, 0, 0.7631578947368421, 1.0, 0, 0.7631578947368421, 0.75, 0], [0.7368421052631579, 0.0, 0, 0.7368421052631579, 0.75, 0, 0.7631578947368421, 0.75, 0, 0.7631578947368421, 0.0, 0], [0.6842105263157895, 0.0, 0, 0.6842105263157895, 0.75, 0, 0.7105263157894737, 0.75, 0, 0.7105263157894737, 0.0, 0], [0.8157894736842105, 0.0, 0, 0.8157894736842105, 0.75, 0, 0.8421052631578947, 0.75, 0, 0.8421052631578947, 0.0, 0], [0.868421052631579, 0.0, 0, 0.868421052631579, 0.75, 0, 0.8947368421052632, 0.75, 0, 0.8947368421052632, 0.0, 0], [0.8157894736842105, 0.75, 0, 0.8157894736842105, 1.0, 0, 0.8421052631578947, 1.0, 0, 0.8421052631578947, 0.75, 0], [0.8421052631578947, 0.75, 0, 0.8421052631578947, 1.0, 0, 0.868421052631579, 1.0, 0, 0.868421052631579, 0.75, 0], [0.8421052631578947, 0.0, 0, 0.8421052631578947, 0.75, 0, 0.868421052631579, 0.75, 0, 0.868421052631579, 0.0, 0], [0.7894736842105263, 0.0, 0, 0.7894736842105263, 0.75, 0, 0.8157894736842105, 0.75, 0, 0.8157894736842105, 0.0, 0], [0.9210526315789473, 0.0, 0, 0.9210526315789473, 0.75, 0, 0.9473684210526315, 0.75, 0, 0.9473684210526315, 0.0, 0], [0.9736842105263158, 0.0, 0, 0.9736842105263158, 0.75, 0, 1.0, 0.75, 0, 1.0, 0.0, 0], [0.9210526315789473, 0.75, 0, 0.9210526315789473, 1.0, 0, 0.9473684210526315, 1.0, 0, 0.9473684210526315, 0.75, 0], [0.9473684210526315, 0.75, 0, 0.9473684210526315, 1.0, 0, 0.9736842105263158, 1.0, 0, 0.9736842105263158, 0.75, 0], [0.9473684210526315, 0.0, 0, 0.9473684210526315, 0.75, 0, 0.9736842105263158, 0.75, 0, 0.9736842105263158, 0.0, 0], [0.8947368421052632, 0.0, 0, 0.8947368421052632, 0.75, 0, 0.9210526315789473, 0.75, 0, 0.9210526315789473, 0.0, 0]] shading_values = [[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]] - diff --git a/episode-13/player.py b/episode-13/player.py index 0a5e4dc0..68497021 100644 --- a/episode-13/player.py +++ b/episode-13/player.py @@ -46,12 +46,12 @@ def update(self, delta_time): # process physics & collisions &c super().update(delta_time) - + def update_matrices(self): # create projection matrix self.world.p_matrix.load_identity() - + self.world.p_matrix.perspective( 90 + 10 * (self.speed - WALKING_SPEED) / (SPRINTING_SPEED - WALKING_SPEED), float(self.view_width) / self.view_height, 0.1, 500) diff --git a/episode-13/shaders/entity/frag.glsl b/episode-13/shaders/entity/frag.glsl index ba59efb1..1c87c427 100644 --- a/episode-13/shaders/entity/frag.glsl +++ b/episode-13/shaders/entity/frag.glsl @@ -15,4 +15,4 @@ void main(void) { if (texture_colour.a == 0.0) { // discard if texel's alpha component is 0 (texel is transparent) discard; } -} \ No newline at end of file +} diff --git a/episode-13/work/convert.py b/episode-13/work/convert.py index 1e5d5191..0976c68d 100644 --- a/episode-13/work/convert.py +++ b/episode-13/work/convert.py @@ -1,8 +1,11 @@ +import sys import json import math import glm # from pyglm -f = open("models/mobs.json") +name = sys.argv[1] + +f = open(f"work/models/{name}.json") data, = json.load(f).values() f.close() @@ -33,6 +36,10 @@ def process_cube(cube): sx, sy, sz = cube["size"] u, v = cube["uv"] # note that UV's start from the top-left (because... well... just because... idk) + # snap rotation, because our dataset is a bit weird + + *rotation, = map(lambda x: round(x / 90) * 90, rotation) + # construct transformation matrix based on pivot & rotation matrix = glm.translate(glm.mat4(), glm.vec3(pivot)) @@ -162,4 +169,5 @@ def process_bone(bone): shading_values = {shading_values} """ -print(out) \ No newline at end of file +with open(f"models/{name}.py", "w") as f: + f.write(out) \ No newline at end of file From 690a7fdd9ef95abb1e06616d5b06e1b8acf937d3 Mon Sep 17 00:00:00 2001 From: obiwac Date: Sun, 26 Jun 2022 17:57:32 +0200 Subject: [PATCH 10/45] ep13: Loading mobs from saves --- episode-13/data/entities.mcpy | 18 ++++------- episode-13/main.py | 2 +- episode-13/models/__init__.py | 1 - episode-13/models/spider.py | 11 ------- episode-13/player.py | 2 +- episode-13/save.py | 41 +++++++++++++++++------- episode-13/world.py | 60 ++++++++++++++--------------------- 7 files changed, 60 insertions(+), 75 deletions(-) delete mode 100644 episode-13/models/spider.py diff --git a/episode-13/data/entities.mcpy b/episode-13/data/entities.mcpy index 5314ba17..5aa32c77 100644 --- a/episode-13/data/entities.mcpy +++ b/episode-13/data/entities.mcpy @@ -1,12 +1,6 @@ -# not actually sure of the ID's yet, I can't find a reference for them anywhere atm - -1: name "Player", width 0.6, height 1.8, model models.pig, texture pig -2: name "Pig", width 0.9, height 0.9, model models.pig, texture pig -3: name "Zombie", width 0.6, height 1.95, model models.zombie, texture zombie -4: name "Skeleton", width 0.6, height 1.99, model models.skeleton, texture skeleton -5: name "Creeper", width 0.6, height 1.7, model models.creeper, texture creeper -6: name "Spider", width 1.4, height 0.9, model models.spider, texture spider -#7: name "Sheep", width 0.9, height 1.3, model models.sheep, texture sheep -#8: name "Giant", width 3.6, height 12, model models.giant, texture giant -9: name "Cow", width 0.9, height 1.3, model models.cow, texture cow -#10: name "Slime", width 2.08, height 2.08, model models.slime, texture slime \ No newline at end of file +Player: name "Player", width 0.6, height 1.8, model models.pig, texture pig +Pig: name "Pig", width 0.9, height 0.9, model models.pig, texture pig +Zombie: name "Zombie", width 0.6, height 1.95, model models.zombie, texture zombie +Skeleton: name "Skeleton", width 0.6, height 1.99, model models.skeleton, texture skeleton +Creeper: name "Creeper", width 0.6, height 1.7, model models.creeper, texture creeper +Cow: name "Cow", width 0.9, height 1.3, model models.cow, texture cow \ No newline at end of file diff --git a/episode-13/main.py b/episode-13/main.py index ed570904..355a2960 100644 --- a/episode-13/main.py +++ b/episode-13/main.py @@ -138,7 +138,7 @@ def on_key_press(self, key, modifiers): entity.reset() elif key == pyglet.window.key.E: - _mob = mob.Mob(self.world, self.world.entity_types[random.choice([1, 2, 3, 4, 6])]) + _mob = mob.Mob(self.world, random.choice([*self.world.entity_types.values()])) self.world.entities.append(_mob) _mob.teleport(self.player.position) diff --git a/episode-13/models/__init__.py b/episode-13/models/__init__.py index bc04527b..e3c2af55 100644 --- a/episode-13/models/__init__.py +++ b/episode-13/models/__init__.py @@ -27,7 +27,6 @@ "zombie", "skeleton", "creeper", - "spider", "cow" ] diff --git a/episode-13/models/spider.py b/episode-13/models/spider.py deleted file mode 100644 index a1c167e4..00000000 --- a/episode-13/models/spider.py +++ /dev/null @@ -1,11 +0,0 @@ - -transparent = True -is_cube = False -glass = False - -colliders = [] - -vertex_positions = [[-0.19770455360412598, 0.2693909704685211, -0.6875, -0.2931090295314789, 0.760204553604126, -0.6875, 0.19770455360412598, 0.8556090593338013, -0.6875, 0.2931090295314789, 0.3647954761981964, -0.6875], [0.2931090295314789, 0.3647954761981964, -0.1875, 0.19770455360412598, 0.8556090593338013, -0.1875, -0.2931090295314789, 0.760204553604126, -0.1875, -0.19770455360412598, 0.2693909704685211, -0.1875], [-0.2931090295314789, 0.760204553604126, -0.6875, -0.2931090295314789, 0.760204553604126, -0.1875, 0.19770455360412598, 0.8556090593338013, -0.1875, 0.19770455360412598, 0.8556090593338013, -0.6875], [0.2931090295314789, 0.3647954761981964, -0.6875, 0.2931090295314789, 0.3647954761981964, -0.1875, -0.19770455360412598, 0.2693909704685211, -0.1875, -0.19770455360412598, 0.2693909704685211, -0.6875], [0.2931090295314789, 0.3647954761981964, -0.6875, 0.19770455360412598, 0.8556090593338013, -0.6875, 0.19770455360412598, 0.8556090593338013, -0.1875, 0.2931090295314789, 0.3647954761981964, -0.1875], [-0.19770455360412598, 0.2693909704685211, -0.1875, -0.2931090295314789, 0.760204553604126, -0.1875, -0.2931090295314789, 0.760204553604126, -0.6875, -0.19770455360412598, 0.2693909704685211, -0.6875], [-0.17743003368377686, 0.36544400453567505, -0.1875, -0.19705602526664734, 0.7399300336837769, -0.1875, 0.17743003368377686, 0.7595560550689697, -0.1875, 0.19705602526664734, 0.38506996631622314, -0.1875], [0.19705602526664734, 0.38506996631622314, 0.1875, 0.17743003368377686, 0.7595560550689697, 0.1875, -0.19705602526664734, 0.7399300336837769, 0.1875, -0.17743003368377686, 0.36544400453567505, 0.1875], [-0.19705602526664734, 0.7399300336837769, -0.1875, -0.19705602526664734, 0.7399300336837769, 0.1875, 0.17743003368377686, 0.7595560550689697, 0.1875, 0.17743003368377686, 0.7595560550689697, -0.1875], [0.19705602526664734, 0.38506996631622314, -0.1875, 0.19705602526664734, 0.38506996631622314, 0.1875, -0.17743003368377686, 0.36544400453567505, 0.1875, -0.17743003368377686, 0.36544400453567505, -0.1875], [0.19705602526664734, 0.38506996631622314, -0.1875, 0.17743003368377686, 0.7595560550689697, -0.1875, 0.17743003368377686, 0.7595560550689697, 0.1875, 0.19705602526664734, 0.38506996631622314, 0.1875], [-0.17743003368377686, 0.36544400453567505, 0.1875, -0.19705602526664734, 0.7399300336837769, 0.1875, -0.19705602526664734, 0.7399300336837769, -0.1875, -0.17743003368377686, 0.36544400453567505, -0.1875], [-0.32515570521354675, 0.32919761538505554, 0.1875, -0.2989877164363861, 0.8285123705863953, 0.1875, 0.32515570521354675, 0.7958024144172668, 0.1875, 0.2989877164363861, 0.2964876592159271, 0.1875], [0.2989877164363861, 0.2964876592159271, 0.9375, 0.32515570521354675, 0.7958024144172668, 0.9375, -0.2989877164363861, 0.8285123705863953, 0.9375, -0.32515570521354675, 0.32919761538505554, 0.9375], [-0.2989877164363861, 0.8285123705863953, 0.1875, -0.2989877164363861, 0.8285123705863953, 0.9375, 0.32515570521354675, 0.7958024144172668, 0.9375, 0.32515570521354675, 0.7958024144172668, 0.1875], [0.2989877164363861, 0.2964876592159271, 0.1875, 0.2989877164363861, 0.2964876592159271, 0.9375, -0.32515570521354675, 0.32919761538505554, 0.9375, -0.32515570521354675, 0.32919761538505554, 0.1875], [0.2989877164363861, 0.2964876592159271, 0.1875, 0.32515570521354675, 0.7958024144172668, 0.1875, 0.32515570521354675, 0.7958024144172668, 0.9375, 0.2989877164363861, 0.2964876592159271, 0.9375], [-0.32515570521354675, 0.32919761538505554, 0.9375, -0.2989877164363861, 0.8285123705863953, 0.9375, -0.2989877164363861, 0.8285123705863953, 0.1875, -0.32515570521354675, 0.32919761538505554, 0.1875], [-1.1850438117980957, 0.5163711309432983, 0.22640930116176605, -1.1828954219818115, 0.6413520574569702, 0.22603046894073486, -0.19823770225048065, 0.6238996982574463, 0.052408747375011444, -0.20038610696792603, 0.49891871213912964, 0.05278756469488144], [-0.17868007719516754, 0.49891871213912964, 0.1758885383605957, -0.17653167247772217, 0.6238996982574463, 0.17550970613956451, -1.1611894369125366, 0.6413520574569702, 0.34913143515586853, -1.1633378267288208, 0.5163711309432983, 0.3495102524757385], [-1.1828954219818115, 0.6413520574569702, 0.22603046894073486, -1.1611894369125366, 0.6413520574569702, 0.34913143515586853, -0.17653167247772217, 0.6238996982574463, 0.17550970613956451, -0.19823770225048065, 0.6238996982574463, 0.052408747375011444], [-0.20038610696792603, 0.49891871213912964, 0.05278756469488144, -0.17868007719516754, 0.49891871213912964, 0.1758885383605957, -1.1633378267288208, 0.5163711309432983, 0.3495102524757385, -1.1850438117980957, 0.5163711309432983, 0.22640930116176605], [-0.20038610696792603, 0.49891871213912964, 0.05278756469488144, -0.19823770225048065, 0.6238996982574463, 0.052408747375011444, -0.17653167247772217, 0.6238996982574463, 0.17550970613956451, -0.17868007719516754, 0.49891871213912964, 0.1758885383605957], [-1.1633378267288208, 0.5163711309432983, 0.3495102524757385, -1.1611894369125366, 0.6413520574569702, 0.34913143515586853, -1.1828954219818115, 0.6413520574569702, 0.22603046894073486, -1.1850438117980957, 0.5163711309432983, 0.22640930116176605], [0.18121345341205597, 0.5011003017425537, 0.06827930361032486, 0.18338671326637268, 0.6260812282562256, 0.06808917224407196, 1.1794297695159912, 0.6086288690567017, -0.019053295254707336, 1.177256464958191, 0.483647882938385, -0.018863163888454437], [1.1881510019302368, 0.483647882938385, 0.10566116869449615, 1.190324306488037, 0.6086288690567017, 0.10547103732824326, 0.1942811757326126, 0.6260812282562256, 0.19261349737644196, 0.1921079158782959, 0.5011003017425537, 0.19280363619327545], [0.18338671326637268, 0.6260812282562256, 0.06808917224407196, 0.1942811757326126, 0.6260812282562256, 0.19261349737644196, 1.190324306488037, 0.6086288690567017, 0.10547103732824326, 1.1794297695159912, 0.6086288690567017, -0.019053295254707336], [1.177256464958191, 0.483647882938385, -0.018863163888454437, 1.1881510019302368, 0.483647882938385, 0.10566116869449615, 0.1921079158782959, 0.5011003017425537, 0.19280363619327545, 0.18121345341205597, 0.5011003017425537, 0.06827930361032486], [1.177256464958191, 0.483647882938385, -0.018863163888454437, 1.1794297695159912, 0.6086288690567017, -0.019053295254707336, 1.190324306488037, 0.6086288690567017, 0.10547103732824326, 1.1881510019302368, 0.483647882938385, 0.10566116869449615], [0.1921079158782959, 0.5011003017425537, 0.19280363619327545, 0.1942811757326126, 0.6260812282562256, 0.19261349737644196, 0.18338671326637268, 0.6260812282562256, 0.06808917224407196, 0.18121345341205597, 0.5011003017425537, 0.06827930361032486], [-1.17848539352417, 0.5, -0.08147067576646805, -1.17848539352417, 0.625, -0.08147067576646805, -0.18229058384895325, 0.625, 0.00568506121635437, -0.18229058384895325, 0.5, 0.00568506121635437], [-0.19318504631519318, 0.5, 0.13020940124988556, -0.19318504631519318, 0.625, 0.13020940124988556, -1.1893798112869263, 0.625, 0.04305366426706314, -1.1893798112869263, 0.5, 0.04305366426706314], [-1.17848539352417, 0.625, -0.08147067576646805, -1.1893798112869263, 0.625, 0.04305366426706314, -0.19318504631519318, 0.625, 0.13020940124988556, -0.18229058384895325, 0.625, 0.00568506121635437], [-0.18229058384895325, 0.5, 0.00568506121635437, -0.19318504631519318, 0.5, 0.13020940124988556, -1.1893798112869263, 0.5, 0.04305366426706314, -1.17848539352417, 0.5, -0.08147067576646805], [-0.18229058384895325, 0.5, 0.00568506121635437, -0.18229058384895325, 0.625, 0.00568506121635437, -0.19318504631519318, 0.625, 0.13020940124988556, -0.19318504631519318, 0.5, 0.13020940124988556], [-1.1893798112869263, 0.5, 0.04305366426706314, -1.1893798112869263, 0.625, 0.04305366426706314, -1.17848539352417, 0.625, -0.08147067576646805, -1.17848539352417, 0.5, -0.08147067576646805], [0.20580583810806274, 0.5, -0.014046560972929, 0.20580583810806274, 0.625, -0.014046560972929, 1.17173171043396, 0.625, 0.24477249383926392, 1.17173171043396, 0.5, 0.24477249383926392], [1.1393792629241943, 0.5, 0.3655132055282593, 1.1393792629241943, 0.625, 0.3655132055282593, 0.1734534502029419, 0.625, 0.10669416189193726, 0.1734534502029419, 0.5, 0.10669416189193726], [0.20580583810806274, 0.625, -0.014046560972929, 0.1734534502029419, 0.625, 0.10669416189193726, 1.1393792629241943, 0.625, 0.3655132055282593, 1.17173171043396, 0.625, 0.24477249383926392], [1.17173171043396, 0.5, 0.24477249383926392, 1.1393792629241943, 0.5, 0.3655132055282593, 0.1734534502029419, 0.5, 0.10669416189193726, 0.20580583810806274, 0.5, -0.014046560972929], [1.17173171043396, 0.5, 0.24477249383926392, 1.17173171043396, 0.625, 0.24477249383926392, 1.1393792629241943, 0.625, 0.3655132055282593, 1.1393792629241943, 0.5, 0.3655132055282593], [0.1734534502029419, 0.5, 0.10669416189193726, 0.1734534502029419, 0.625, 0.10669416189193726, 0.20580583810806274, 0.625, -0.014046560972929, 0.20580583810806274, 0.5, -0.014046560972929], [-1.1611895561218262, 0.483647882938385, -0.22413143515586853, -1.1633379459381104, 0.6086288690567017, -0.22451026737689972, -0.17868007719516754, 0.6260812282562256, -0.0508885383605957, -0.17653167247772217, 0.5011003017425537, -0.05050971359014511], [-0.19823768734931946, 0.5011003017425537, 0.07259126007556915, -0.20038609206676483, 0.6260812282562256, 0.07221242785453796, -1.1850439310073853, 0.6086288690567017, -0.10140930116176605, -1.182895541191101, 0.483647882938385, -0.10103046894073486], [-1.1633379459381104, 0.6086288690567017, -0.22451026737689972, -1.1850439310073853, 0.6086288690567017, -0.10140930116176605, -0.20038609206676483, 0.6260812282562256, 0.07221242785453796, -0.17868007719516754, 0.6260812282562256, -0.0508885383605957], [-0.17653167247772217, 0.5011003017425537, -0.05050971359014511, -0.19823768734931946, 0.5011003017425537, 0.07259126007556915, -1.182895541191101, 0.483647882938385, -0.10103046894073486, -1.1611895561218262, 0.483647882938385, -0.22413143515586853], [-0.17653167247772217, 0.5011003017425537, -0.05050971359014511, -0.17868007719516754, 0.6260812282562256, -0.0508885383605957, -0.20038609206676483, 0.6260812282562256, 0.07221242785453796, -0.19823768734931946, 0.5011003017425537, 0.07259126007556915], [-1.182895541191101, 0.483647882938385, -0.10103046894073486, -1.1850439310073853, 0.6086288690567017, -0.10140930116176605, -1.1633379459381104, 0.6086288690567017, -0.22451026737689972, -1.1611895561218262, 0.483647882938385, -0.22413143515586853], [0.1942811757326126, 0.49891871213912964, -0.06761351227760315, 0.1921079158782959, 0.6238996982574463, -0.06780364364385605, 1.1881508827209473, 0.6413520574569702, 0.01933882385492325, 1.1903241872787476, 0.5163711309432983, 0.019528955221176147], [1.1794297695159912, 0.5163711309432983, 0.14405329525470734, 1.177256464958191, 0.6413520574569702, 0.14386317133903503, 0.18121343851089478, 0.6238996982574463, 0.05672069638967514, 0.1833866983652115, 0.49891871213912964, 0.056910835206508636], [0.1921079158782959, 0.6238996982574463, -0.06780364364385605, 0.18121343851089478, 0.6238996982574463, 0.05672069638967514, 1.177256464958191, 0.6413520574569702, 0.14386317133903503, 1.1881508827209473, 0.6413520574569702, 0.01933882385492325], [1.1903241872787476, 0.5163711309432983, 0.019528955221176147, 1.1794297695159912, 0.5163711309432983, 0.14405329525470734, 0.1833866983652115, 0.49891871213912964, 0.056910835206508636, 0.1942811757326126, 0.49891871213912964, -0.06761351227760315], [1.1903241872787476, 0.5163711309432983, 0.019528955221176147, 1.1881508827209473, 0.6413520574569702, 0.01933882385492325, 1.177256464958191, 0.6413520574569702, 0.14386317133903503, 1.1794297695159912, 0.5163711309432983, 0.14405329525470734], [0.1833866983652115, 0.49891871213912964, 0.056910835206508636, 0.18121343851089478, 0.6238996982574463, 0.05672069638967514, 0.1921079158782959, 0.6238996982574463, -0.06780364364385605, 0.1942811757326126, 0.49891871213912964, -0.06761351227760315], [-1.1866379976272583, 0.4673198163509369, -0.043293558061122894, -1.1909838914871216, 0.5922436118125916, -0.04291334003210068, -0.19539590179920197, 0.627143144607544, -0.13001598417758942, -0.19105006754398346, 0.5022193193435669, -0.13039620220661163], [-0.18015560507774353, 0.5022193193435669, -0.005871852859854698, -0.18450143933296204, 0.627143144607544, -0.005491642281413078, -1.1800893545150757, 0.5922436118125916, 0.08161100745201111, -1.1757434606552124, 0.4673198163509369, 0.08123078942298889], [-1.1909838914871216, 0.5922436118125916, -0.04291334003210068, -1.1800893545150757, 0.5922436118125916, 0.08161100745201111, -0.18450143933296204, 0.627143144607544, -0.005491642281413078, -0.19539590179920197, 0.627143144607544, -0.13001598417758942], [-0.19105006754398346, 0.5022193193435669, -0.13039620220661163, -0.18015560507774353, 0.5022193193435669, -0.005871852859854698, -1.1757434606552124, 0.4673198163509369, 0.08123078942298889, -1.1866379976272583, 0.4673198163509369, -0.043293558061122894], [-0.19105006754398346, 0.5022193193435669, -0.13039620220661163, -0.19539590179920197, 0.627143144607544, -0.13001598417758942, -0.18450143933296204, 0.627143144607544, -0.005491642281413078, -0.18015560507774353, 0.5022193193435669, -0.005871852859854698], [-1.1757434606552124, 0.4673198163509369, 0.08123078942298889, -1.1800893545150757, 0.5922436118125916, 0.08161100745201111, -1.1909838914871216, 0.5922436118125916, -0.04291334003210068, -1.1866379976272583, 0.4673198163509369, -0.043293558061122894], [0.17978206276893616, 0.49785685539245605, -0.11358284950256348, 0.17548590898513794, 0.6227806806564331, -0.11282531917095184, 1.1596938371658325, 0.6576802134513855, -0.2863677144050598, 1.1639900207519531, 0.5327563881874084, -0.28712522983551025], [1.185696005821228, 0.5327563881874084, -0.16402427852153778, 1.1813998222351074, 0.6576802134513855, -0.16326674818992615, 0.19719192385673523, 0.6227806806564331, 0.010275645181536674, 0.20148809254169464, 0.49785685539245605, 0.00951811671257019], [0.17548590898513794, 0.6227806806564331, -0.11282531917095184, 0.19719192385673523, 0.6227806806564331, 0.010275645181536674, 1.1813998222351074, 0.6576802134513855, -0.16326674818992615, 1.1596938371658325, 0.6576802134513855, -0.2863677144050598], [1.1639900207519531, 0.5327563881874084, -0.28712522983551025, 1.185696005821228, 0.5327563881874084, -0.16402427852153778, 0.20148809254169464, 0.49785685539245605, 0.00951811671257019, 0.17978206276893616, 0.49785685539245605, -0.11358284950256348], [1.1639900207519531, 0.5327563881874084, -0.28712522983551025, 1.1596938371658325, 0.6576802134513855, -0.2863677144050598, 1.1813998222351074, 0.6576802134513855, -0.16326674818992615, 1.185696005821228, 0.5327563881874084, -0.16402427852153778], [0.20148809254169464, 0.49785685539245605, 0.00951811671257019, 0.19719192385673523, 0.6227806806564331, 0.010275645181536674, 0.17548590898513794, 0.6227806806564331, -0.11282531917095184, 0.17978206276893616, 0.49785685539245605, -0.11358284950256348]] -tex_coords = [[0.020618556701030927, 0.19999999999999996, 0, 0.020618556701030927, 0.6, 0, 0.041237113402061855, 0.6, 0, 0.041237113402061855, 0.19999999999999996, 0], [0.061855670103092786, 0.19999999999999996, 0, 0.061855670103092786, 0.6, 0, 0.08247422680412371, 0.6, 0, 0.08247422680412371, 0.19999999999999996, 0], [0.020618556701030927, 0.6, 0, 0.020618556701030927, 1.0, 0, 0.041237113402061855, 1.0, 0, 0.041237113402061855, 0.6, 0], [0.041237113402061855, 0.6, 0, 0.041237113402061855, 1.0, 0, 0.061855670103092786, 1.0, 0, 0.061855670103092786, 0.6, 0], [0.041237113402061855, 0.19999999999999996, 0, 0.041237113402061855, 0.6, 0, 0.061855670103092786, 0.6, 0, 0.061855670103092786, 0.19999999999999996, 0], [0.0, 0.19999999999999996, 0, 0.0, 0.6, 0, 0.020618556701030927, 0.6, 0, 0.020618556701030927, 0.19999999999999996, 0], [0.0979381443298969, 0.4, 0, 0.0979381443298969, 0.7, 0, 0.1134020618556701, 0.7, 0, 0.1134020618556701, 0.4, 0], [0.12886597938144329, 0.4, 0, 0.12886597938144329, 0.7, 0, 0.14432989690721648, 0.7, 0, 0.14432989690721648, 0.4, 0], [0.0979381443298969, 0.7, 0, 0.0979381443298969, 1.0, 0, 0.1134020618556701, 1.0, 0, 0.1134020618556701, 0.7, 0], [0.1134020618556701, 0.7, 0, 0.1134020618556701, 1.0, 0, 0.12886597938144329, 1.0, 0, 0.12886597938144329, 0.7, 0], [0.1134020618556701, 0.4, 0, 0.1134020618556701, 0.7, 0, 0.12886597938144329, 0.7, 0, 0.12886597938144329, 0.4, 0], [0.08247422680412371, 0.4, 0, 0.08247422680412371, 0.7, 0, 0.0979381443298969, 0.7, 0, 0.0979381443298969, 0.4, 0], [0.17525773195876287, 0.0, 0, 0.17525773195876287, 0.4, 0, 0.20103092783505155, 0.4, 0, 0.20103092783505155, 0.0, 0], [0.23195876288659795, 0.0, 0, 0.23195876288659795, 0.4, 0, 0.25773195876288657, 0.4, 0, 0.25773195876288657, 0.0, 0], [0.17525773195876287, 0.4, 0, 0.17525773195876287, 1.0, 0, 0.20103092783505155, 1.0, 0, 0.20103092783505155, 0.4, 0], [0.20103092783505155, 0.4, 0, 0.20103092783505155, 1.0, 0, 0.2268041237113402, 1.0, 0, 0.2268041237113402, 0.4, 0], [0.20103092783505155, 0.0, 0, 0.20103092783505155, 0.4, 0, 0.23195876288659795, 0.4, 0, 0.23195876288659795, 0.0, 0], [0.14432989690721648, 0.0, 0, 0.14432989690721648, 0.4, 0, 0.17525773195876287, 0.4, 0, 0.17525773195876287, 0.0, 0], [0.26288659793814434, 0.8, 0, 0.26288659793814434, 0.9, 0, 0.30412371134020616, 0.9, 0, 0.30412371134020616, 0.8, 0], [0.30927835051546393, 0.8, 0, 0.30927835051546393, 0.9, 0, 0.35051546391752575, 0.9, 0, 0.35051546391752575, 0.8, 0], [0.26288659793814434, 0.9, 0, 0.26288659793814434, 1.0, 0, 0.30412371134020616, 1.0, 0, 0.30412371134020616, 0.9, 0], [0.30412371134020616, 0.9, 0, 0.30412371134020616, 1.0, 0, 0.34536082474226804, 1.0, 0, 0.34536082474226804, 0.9, 0], [0.30412371134020616, 0.8, 0, 0.30412371134020616, 0.9, 0, 0.30927835051546393, 0.9, 0, 0.30927835051546393, 0.8, 0], [0.25773195876288657, 0.8, 0, 0.25773195876288657, 0.9, 0, 0.26288659793814434, 0.9, 0, 0.26288659793814434, 0.8, 0], [0.3556701030927835, 0.8, 0, 0.3556701030927835, 0.9, 0, 0.39690721649484534, 0.9, 0, 0.39690721649484534, 0.8, 0], [0.4020618556701031, 0.8, 0, 0.4020618556701031, 0.9, 0, 0.44329896907216493, 0.9, 0, 0.44329896907216493, 0.8, 0], [0.3556701030927835, 0.9, 0, 0.3556701030927835, 1.0, 0, 0.39690721649484534, 1.0, 0, 0.39690721649484534, 0.9, 0], [0.39690721649484534, 0.9, 0, 0.39690721649484534, 1.0, 0, 0.4381443298969072, 1.0, 0, 0.4381443298969072, 0.9, 0], [0.39690721649484534, 0.8, 0, 0.39690721649484534, 0.9, 0, 0.4020618556701031, 0.9, 0, 0.4020618556701031, 0.8, 0], [0.35051546391752575, 0.8, 0, 0.35051546391752575, 0.9, 0, 0.3556701030927835, 0.9, 0, 0.3556701030927835, 0.8, 0], [0.4484536082474227, 0.8, 0, 0.4484536082474227, 0.9, 0, 0.4896907216494845, 0.9, 0, 0.4896907216494845, 0.8, 0], [0.4948453608247423, 0.8, 0, 0.4948453608247423, 0.9, 0, 0.5360824742268041, 0.9, 0, 0.5360824742268041, 0.8, 0], [0.4484536082474227, 0.9, 0, 0.4484536082474227, 1.0, 0, 0.4896907216494845, 1.0, 0, 0.4896907216494845, 0.9, 0], [0.4896907216494845, 0.9, 0, 0.4896907216494845, 1.0, 0, 0.5309278350515464, 1.0, 0, 0.5309278350515464, 0.9, 0], [0.4896907216494845, 0.8, 0, 0.4896907216494845, 0.9, 0, 0.4948453608247423, 0.9, 0, 0.4948453608247423, 0.8, 0], [0.44329896907216493, 0.8, 0, 0.44329896907216493, 0.9, 0, 0.4484536082474227, 0.9, 0, 0.4484536082474227, 0.8, 0], [0.5412371134020618, 0.8, 0, 0.5412371134020618, 0.9, 0, 0.5824742268041238, 0.9, 0, 0.5824742268041238, 0.8, 0], [0.5876288659793815, 0.8, 0, 0.5876288659793815, 0.9, 0, 0.6288659793814433, 0.9, 0, 0.6288659793814433, 0.8, 0], [0.5412371134020618, 0.9, 0, 0.5412371134020618, 1.0, 0, 0.5824742268041238, 1.0, 0, 0.5824742268041238, 0.9, 0], [0.5824742268041238, 0.9, 0, 0.5824742268041238, 1.0, 0, 0.6237113402061856, 1.0, 0, 0.6237113402061856, 0.9, 0], [0.5824742268041238, 0.8, 0, 0.5824742268041238, 0.9, 0, 0.5876288659793815, 0.9, 0, 0.5876288659793815, 0.8, 0], [0.5360824742268041, 0.8, 0, 0.5360824742268041, 0.9, 0, 0.5412371134020618, 0.9, 0, 0.5412371134020618, 0.8, 0], [0.634020618556701, 0.8, 0, 0.634020618556701, 0.9, 0, 0.6752577319587629, 0.9, 0, 0.6752577319587629, 0.8, 0], [0.6804123711340206, 0.8, 0, 0.6804123711340206, 0.9, 0, 0.7216494845360825, 0.9, 0, 0.7216494845360825, 0.8, 0], [0.634020618556701, 0.9, 0, 0.634020618556701, 1.0, 0, 0.6752577319587629, 1.0, 0, 0.6752577319587629, 0.9, 0], [0.6752577319587629, 0.9, 0, 0.6752577319587629, 1.0, 0, 0.7164948453608248, 1.0, 0, 0.7164948453608248, 0.9, 0], [0.6752577319587629, 0.8, 0, 0.6752577319587629, 0.9, 0, 0.6804123711340206, 0.9, 0, 0.6804123711340206, 0.8, 0], [0.6288659793814433, 0.8, 0, 0.6288659793814433, 0.9, 0, 0.634020618556701, 0.9, 0, 0.634020618556701, 0.8, 0], [0.7268041237113402, 0.8, 0, 0.7268041237113402, 0.9, 0, 0.7680412371134021, 0.9, 0, 0.7680412371134021, 0.8, 0], [0.7731958762886598, 0.8, 0, 0.7731958762886598, 0.9, 0, 0.8144329896907216, 0.9, 0, 0.8144329896907216, 0.8, 0], [0.7268041237113402, 0.9, 0, 0.7268041237113402, 1.0, 0, 0.7680412371134021, 1.0, 0, 0.7680412371134021, 0.9, 0], [0.7680412371134021, 0.9, 0, 0.7680412371134021, 1.0, 0, 0.8092783505154639, 1.0, 0, 0.8092783505154639, 0.9, 0], [0.7680412371134021, 0.8, 0, 0.7680412371134021, 0.9, 0, 0.7731958762886598, 0.9, 0, 0.7731958762886598, 0.8, 0], [0.7216494845360825, 0.8, 0, 0.7216494845360825, 0.9, 0, 0.7268041237113402, 0.9, 0, 0.7268041237113402, 0.8, 0], [0.8195876288659794, 0.8, 0, 0.8195876288659794, 0.9, 0, 0.8608247422680413, 0.9, 0, 0.8608247422680413, 0.8, 0], [0.865979381443299, 0.8, 0, 0.865979381443299, 0.9, 0, 0.9072164948453608, 0.9, 0, 0.9072164948453608, 0.8, 0], [0.8195876288659794, 0.9, 0, 0.8195876288659794, 1.0, 0, 0.8608247422680413, 1.0, 0, 0.8608247422680413, 0.9, 0], [0.8608247422680413, 0.9, 0, 0.8608247422680413, 1.0, 0, 0.9020618556701031, 1.0, 0, 0.9020618556701031, 0.9, 0], [0.8608247422680413, 0.8, 0, 0.8608247422680413, 0.9, 0, 0.865979381443299, 0.9, 0, 0.865979381443299, 0.8, 0], [0.8144329896907216, 0.8, 0, 0.8144329896907216, 0.9, 0, 0.8195876288659794, 0.9, 0, 0.8195876288659794, 0.8, 0], [0.9123711340206185, 0.8, 0, 0.9123711340206185, 0.9, 0, 0.9536082474226805, 0.9, 0, 0.9536082474226805, 0.8, 0], [0.9587628865979382, 0.8, 0, 0.9587628865979382, 0.9, 0, 1.0, 0.9, 0, 1.0, 0.8, 0], [0.9123711340206185, 0.9, 0, 0.9123711340206185, 1.0, 0, 0.9536082474226805, 1.0, 0, 0.9536082474226805, 0.9, 0], [0.9536082474226805, 0.9, 0, 0.9536082474226805, 1.0, 0, 0.9948453608247423, 1.0, 0, 0.9948453608247423, 0.9, 0], [0.9536082474226805, 0.8, 0, 0.9536082474226805, 0.9, 0, 0.9587628865979382, 0.9, 0, 0.9587628865979382, 0.8, 0], [0.9072164948453608, 0.8, 0, 0.9072164948453608, 0.9, 0, 0.9123711340206185, 0.9, 0, 0.9123711340206185, 0.8, 0]] -shading_values = [[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]] - diff --git a/episode-13/player.py b/episode-13/player.py index 68497021..85b66793 100644 --- a/episode-13/player.py +++ b/episode-13/player.py @@ -7,7 +7,7 @@ class Player(entity.Entity): def __init__(self, world, width, height): - super().__init__(world, world.entity_types[0]) + super().__init__(world, world.entity_types["Player"]) self.view_width = width self.view_height = height diff --git a/episode-13/save.py b/episode-13/save.py index 4b8fab47..fc5da524 100644 --- a/episode-13/save.py +++ b/episode-13/save.py @@ -2,32 +2,36 @@ import base36 import chunk +import mob class Save: def __init__(self, world, path = "save"): self.world = world self.path = path - + def chunk_position_to_path(self, chunk_position): x, y, z = chunk_position chunk_path = '/'.join((self.path, base36.dumps(x % 64), base36.dumps(z % 64), f"c.{base36.dumps(x)}.{base36.dumps(z)}.dat")) - + return chunk_path def load_chunk(self, chunk_position): # load the chunk file - + chunk_path = self.chunk_position_to_path(chunk_position) try: - chunk_blocks = nbt.load(chunk_path)["Level"]["Blocks"] - + chunk_data = nbt.load(chunk_path) + except FileNotFoundError: return + blocks = chunk_data["Level"]["Blocks"] + entities = chunk_data["Level"]["Entities"] + # create chunk and fill it with the blocks from our chunk file self.world.chunks[chunk_position] = chunk.Chunk(self.world, chunk_position) @@ -35,14 +39,27 @@ def load_chunk(self, chunk_position): for x in range(chunk.CHUNK_WIDTH): for y in range(chunk.CHUNK_HEIGHT): for z in range(chunk.CHUNK_LENGTH): - self.world.chunks[chunk_position].blocks[x][y][z] = chunk_blocks[ + self.world.chunks[chunk_position].blocks[x][y][z] = blocks[ x * chunk.CHUNK_LENGTH * chunk.CHUNK_HEIGHT + z * chunk.CHUNK_HEIGHT + y] + # load entities from chunk + + for entity in entities: + name = entity["id"] + + if name not in self.world.entity_types: + continue + + mob_ = mob.Mob(self.world, self.world.entity_types[name]) + *mob_.position, = entity["Pos"] + + self.world.entities.append(mob_) + def save_chunk(self, chunk_position): x, y, z = chunk_position - + # try to load the chunk file # if it doesn't exist, create a new one @@ -50,10 +67,10 @@ def save_chunk(self, chunk_position): try: chunk_data = nbt.load(chunk_path) - + except FileNotFoundError: chunk_data = nbt.File({"": nbt.Compound({"Level": nbt.Compound()})}) - + chunk_data["Level"]["xPos"] = x chunk_data["Level"]["zPos"] = z @@ -68,7 +85,7 @@ def save_chunk(self, chunk_position): x * chunk.CHUNK_LENGTH * chunk.CHUNK_HEIGHT + z * chunk.CHUNK_HEIGHT + y] = self.world.chunks[chunk_position].blocks[x][y][z] - + # save the chunk file chunk_data["Level"]["Blocks"] = chunk_blocks @@ -86,12 +103,12 @@ def load(self): for x in range(-1, 1): for y in range(-1, 1): self.load_chunk((x, 0, y)) - + def save(self): for chunk_position in self.world.chunks: if chunk_position[1] != 0: # reject all chunks above and below the world limit continue - + chunk = self.world.chunks[chunk_position] if chunk.modified: diff --git a/episode-13/world.py b/episode-13/world.py index 085ceb47..dcac9ad9 100644 --- a/episode-13/world.py +++ b/episode-13/world.py @@ -26,7 +26,7 @@ def __init__(self): self.texture_manager = texture_manager.Texture_manager(16, 16, 256) self.block_types = [None] - self.entity_types = [] + self.entity_types = {} # parse block type data file @@ -37,7 +37,7 @@ def __init__(self): for block in blocks_data: if block[0] in ['\n', '#']: # skip if empty line or comment continue - + number, props = block.split(':', 1) number = int(number) @@ -59,24 +59,24 @@ def __init__(self): name = self.block_types[sameas_number].name texture = self.block_types[sameas_number].block_face_textures model = self.block_types[sameas_number].model - + elif prop[0] == "name": name = eval(prop[1]) - + elif prop[0][:7] == "texture": _, side = prop[0].split('.') texture[side] = prop[1].strip() elif prop[0] == "model": model = eval(prop[1]) - + # add block type _block_type = block_type.Block_type(self.texture_manager, name, texture, model) if number < len(self.block_types): self.block_types[number] = _block_type - + else: self.block_types.append(_block_type) @@ -92,12 +92,10 @@ def __init__(self): if _entity[0] in ['\n', '#']: # skip if empty line or comment continue - number, props = _entity.split(':', 1) - number = int(number) + name, props = _entity.split(':', 1) # default entity - name = "Unknown" model = models.pig texture = "pig" @@ -110,10 +108,7 @@ def __init__(self): prop = prop.strip() prop = list(filter(None, prop.split(' ', 1))) - if prop[0] == "name": - name = eval(prop[1]) - - elif prop[0] == "width": + if prop[0] == "width": width = float(prop[1]) elif prop[0] == "height": @@ -124,17 +119,11 @@ def __init__(self): elif prop[0] == "model": model = eval(prop[1]) - + # add entity type - _entity_type = entity_type.Entity_type(self, name, texture, model, width, height) + self.entity_types[name] = entity_type.Entity_type(self, name, texture, model, width, height) - if number < len(self.entity_types): - self.entity_types[number] = _entity_type - - else: - self.entity_types.append(_entity_type) - # create shaders self.mvp_matrix = matrix.Matrix() # to be set by Player object @@ -155,16 +144,13 @@ def __init__(self): self.save = save.Save(self) self.chunks = {} + self.entities = [] + self.save.load() - + for chunk_position in self.chunks: self.chunks[chunk_position].update_subchunk_meshes() self.chunks[chunk_position].update_mesh() - - # TODO remme - # summon a few mobs - - self.entities = [] def get_chunk_position(self, position): x, y, z = position @@ -176,7 +162,7 @@ def get_chunk_position(self, position): def get_local_position(self, position): x, y, z = position - + return ( int(x % chunk.CHUNK_WIDTH), int(y % chunk.CHUNK_HEIGHT), @@ -188,7 +174,7 @@ def get_block_number(self, position): if not chunk_position in self.chunks: return 0 - + lx, ly, lz = self.get_local_position(position) block_number = self.chunks[chunk_position].blocks[lx][ly][lz] @@ -197,12 +183,12 @@ def get_block_number(self, position): def is_opaque_block(self, position): # get block type and check if it's opaque or not # air counts as a transparent block, so test for that too - + block_type = self.block_types[self.get_block_number(position)] if not block_type: return False - + return not block_type.transparent def set_block(self, position, number): # set number to 0 (air) to remove block @@ -214,10 +200,10 @@ def set_block(self, position, number): # set number to 0 (air) to remove block return # no point in creating a whole new chunk if we're not gonna be adding anything self.chunks[chunk_position] = chunk.Chunk(self, chunk_position) - + if self.get_block_number(position) == number: # no point updating mesh if the block is the same return - + lx, ly, lz = self.get_local_position(position) self.chunks[chunk_position].blocks[lx][ly][lz] = number @@ -232,7 +218,7 @@ def try_update_chunk_at_position(chunk_position, position): if chunk_position in self.chunks: self.chunks[chunk_position].update_at_position(position) self.chunks[chunk_position].update_mesh() - + if lx == chunk.CHUNK_WIDTH - 1: try_update_chunk_at_position((cx + 1, cy, cz), (x + 1, y, z)) if lx == 0: try_update_chunk_at_position((cx - 1, cy, cz), (x - 1, y, z)) @@ -247,13 +233,13 @@ def try_set_block(self, pos, num, collider): if not num: return self.set_block(pos, 0) - + # make sure the block doesn't intersect with the passed collider for block_collider in self.block_types[num].colliders: if collider & (block_collider + pos): return - + self.set_block(pos, num) def draw(self): @@ -274,7 +260,7 @@ def draw(self): for chunk_position in self.chunks: self.chunks[chunk_position].draw() - + # draw entities self.entity_shader.use() From 07fbd1f58866706c62f09f015a996fe834f1a37e Mon Sep 17 00:00:00 2001 From: obiwac Date: Sun, 26 Jun 2022 19:09:32 +0200 Subject: [PATCH 11/45] ep13: Add Stephen Curry --- episode-13/data/entities.mcpy | 3 +- episode-13/models/__init__.py | 3 +- episode-13/models/curry.py | 10 + episode-13/textures/entity/curry.png | Bin 0 -> 702 bytes episode-13/textures/entity/spider.png | Bin 2268 -> 0 bytes episode-13/work/convert.py | 4 +- episode-13/work/models/curry.json | 262 ++++++++++++++++++++++++++ 7 files changed, 278 insertions(+), 4 deletions(-) create mode 100644 episode-13/models/curry.py create mode 100644 episode-13/textures/entity/curry.png delete mode 100644 episode-13/textures/entity/spider.png create mode 100644 episode-13/work/models/curry.json diff --git a/episode-13/data/entities.mcpy b/episode-13/data/entities.mcpy index 5aa32c77..75a52c76 100644 --- a/episode-13/data/entities.mcpy +++ b/episode-13/data/entities.mcpy @@ -3,4 +3,5 @@ Pig: name "Pig", width 0.9, height 0.9, model models.pig, texture pig Zombie: name "Zombie", width 0.6, height 1.95, model models.zombie, texture zombie Skeleton: name "Skeleton", width 0.6, height 1.99, model models.skeleton, texture skeleton Creeper: name "Creeper", width 0.6, height 1.7, model models.creeper, texture creeper -Cow: name "Cow", width 0.9, height 1.3, model models.cow, texture cow \ No newline at end of file +Cow: name "Cow", width 0.9, height 1.3, model models.cow, texture cow +Curry: name "Curry", width 0.6, height 1.8, model models.curry, texture curry \ No newline at end of file diff --git a/episode-13/models/__init__.py b/episode-13/models/__init__.py index e3c2af55..472191d7 100644 --- a/episode-13/models/__init__.py +++ b/episode-13/models/__init__.py @@ -27,7 +27,8 @@ "zombie", "skeleton", "creeper", - "cow" + "cow", + "curry", ] from . import * diff --git a/episode-13/models/curry.py b/episode-13/models/curry.py new file mode 100644 index 00000000..9593b028 --- /dev/null +++ b/episode-13/models/curry.py @@ -0,0 +1,10 @@ + +transparent = True +is_cube = False +glass = False + +colliders = [] + +vertex_positions = [[-0.25, 0.75, -0.125, -0.25, 1.5, -0.125, 0.25, 1.5, -0.125, 0.25, 0.75, -0.125], [0.25, 0.75, 0.125, 0.25, 1.5, 0.125, -0.25, 1.5, 0.125, -0.25, 0.75, 0.125], [-0.25, 1.5, -0.125, -0.25, 1.5, 0.125, 0.25, 1.5, 0.125, 0.25, 1.5, -0.125], [0.25, 0.75, -0.125, 0.25, 0.75, 0.125, -0.25, 0.75, 0.125, -0.25, 0.75, -0.125], [0.25, 0.75, -0.125, 0.25, 1.5, -0.125, 0.25, 1.5, 0.125, 0.25, 0.75, 0.125], [-0.25, 0.75, 0.125, -0.25, 1.5, 0.125, -0.25, 1.5, -0.125, -0.25, 0.75, -0.125], [-0.2536456286907196, 1.497308611869812, -0.23161627352237701, -0.2536456286907196, 1.997308611869812, -0.23161627352237701, 0.2463543713092804, 1.997308611869812, -0.23161627352237701, 0.2463543713092804, 1.497308611869812, -0.23161627352237701], [0.2463543713092804, 1.497308611869812, 0.2683837413787842, 0.2463543713092804, 1.997308611869812, 0.2683837413787842, -0.2536456286907196, 1.997308611869812, 0.2683837413787842, -0.2536456286907196, 1.497308611869812, 0.2683837413787842], [-0.2536456286907196, 1.997308611869812, -0.23161627352237701, -0.2536456286907196, 1.997308611869812, 0.2683837413787842, 0.2463543713092804, 1.997308611869812, 0.2683837413787842, 0.2463543713092804, 1.997308611869812, -0.23161627352237701], [0.2463543713092804, 1.497308611869812, -0.23161627352237701, 0.2463543713092804, 1.497308611869812, 0.2683837413787842, -0.2536456286907196, 1.497308611869812, 0.2683837413787842, -0.2536456286907196, 1.497308611869812, -0.23161627352237701], [0.2463543713092804, 1.497308611869812, -0.23161627352237701, 0.2463543713092804, 1.997308611869812, -0.23161627352237701, 0.2463543713092804, 1.997308611869812, 0.2683837413787842, 0.2463543713092804, 1.497308611869812, 0.2683837413787842], [-0.2536456286907196, 1.497308611869812, 0.2683837413787842, -0.2536456286907196, 1.997308611869812, 0.2683837413787842, -0.2536456286907196, 1.997308611869812, -0.23161627352237701, -0.2536456286907196, 1.497308611869812, -0.23161627352237701], [0.2316092699766159, 0.8962944149971008, -0.21831698715686798, 0.2316092699766159, 1.396294355392456, -0.21831698715686798, 0.7316092848777771, 1.396294355392456, -0.21831698715686798, 0.7316092848777771, 0.8962944149971008, -0.21831698715686798], [0.7316092848777771, 0.8962944149971008, 0.2816829979419708, 0.7316092848777771, 1.396294355392456, 0.2816829979419708, 0.2316092699766159, 1.396294355392456, 0.2816829979419708, 0.2316092699766159, 0.8962944149971008, 0.2816829979419708], [0.2316092699766159, 1.396294355392456, -0.21831698715686798, 0.2316092699766159, 1.396294355392456, 0.2816829979419708, 0.7316092848777771, 1.396294355392456, 0.2816829979419708, 0.7316092848777771, 1.396294355392456, -0.21831698715686798], [0.7316092848777771, 0.8962944149971008, -0.21831698715686798, 0.7316092848777771, 0.8962944149971008, 0.2816829979419708, 0.2316092699766159, 0.8962944149971008, 0.2816829979419708, 0.2316092699766159, 0.8962944149971008, -0.21831698715686798], [0.7316092848777771, 0.8962944149971008, -0.21831698715686798, 0.7316092848777771, 1.396294355392456, -0.21831698715686798, 0.7316092848777771, 1.396294355392456, 0.2816829979419708, 0.7316092848777771, 0.8962944149971008, 0.2816829979419708], [0.2316092699766159, 0.8962944149971008, 0.2816829979419708, 0.2316092699766159, 1.396294355392456, 0.2816829979419708, 0.2316092699766159, 1.396294355392456, -0.21831698715686798, 0.2316092699766159, 0.8962944149971008, -0.21831698715686798], [-0.25, 1.5, -0.25, -0.25, 2.0, -0.25, 0.25, 2.0, -0.25, 0.25, 1.5, -0.25], [0.25, 1.5, 0.25, 0.25, 2.0, 0.25, -0.25, 2.0, 0.25, -0.25, 1.5, 0.25], [-0.25, 2.0, -0.25, -0.25, 2.0, 0.25, 0.25, 2.0, 0.25, 0.25, 2.0, -0.25], [0.25, 1.5, -0.25, 0.25, 1.5, 0.25, -0.25, 1.5, 0.25, -0.25, 1.5, -0.25], [0.25, 1.5, -0.25, 0.25, 2.0, -0.25, 0.25, 2.0, 0.25, 0.25, 1.5, 0.25], [-0.25, 1.5, 0.25, -0.25, 2.0, 0.25, -0.25, 2.0, -0.25, -0.25, 1.5, -0.25], [-0.5, 0.75, -0.125, -0.5, 1.5, -0.125, -0.25, 1.5, -0.125, -0.25, 0.75, -0.125], [-0.25, 0.75, 0.125, -0.25, 1.5, 0.125, -0.5, 1.5, 0.125, -0.5, 0.75, 0.125], [-0.5, 1.5, -0.125, -0.5, 1.5, 0.125, -0.25, 1.5, 0.125, -0.25, 1.5, -0.125], [-0.25, 0.75, -0.125, -0.25, 0.75, 0.125, -0.5, 0.75, 0.125, -0.5, 0.75, -0.125], [-0.25, 0.75, -0.125, -0.25, 1.5, -0.125, -0.25, 1.5, 0.125, -0.25, 0.75, 0.125], [-0.5, 0.75, 0.125, -0.5, 1.5, 0.125, -0.5, 1.5, -0.125, -0.5, 0.75, -0.125], [0.7019792795181274, 0.748781681060791, -0.02643335424363613, 0.7019792795181274, 1.498781681060791, -0.02643335424363613, 0.9519792795181274, 1.498781681060791, -0.02643335424363613, 0.9519792795181274, 0.748781681060791, -0.02643335424363613], [0.9519792795181274, 0.748781681060791, 0.22356665134429932, 0.9519792795181274, 1.498781681060791, 0.22356665134429932, 0.7019792795181274, 1.498781681060791, 0.22356665134429932, 0.7019792795181274, 0.748781681060791, 0.22356665134429932], [0.7019792795181274, 1.498781681060791, -0.02643335424363613, 0.7019792795181274, 1.498781681060791, 0.22356665134429932, 0.9519792795181274, 1.498781681060791, 0.22356665134429932, 0.9519792795181274, 1.498781681060791, -0.02643335424363613], [0.9519792795181274, 0.748781681060791, -0.02643335424363613, 0.9519792795181274, 0.748781681060791, 0.22356665134429932, 0.7019792795181274, 0.748781681060791, 0.22356665134429932, 0.7019792795181274, 0.748781681060791, -0.02643335424363613], [0.9519792795181274, 0.748781681060791, -0.02643335424363613, 0.9519792795181274, 1.498781681060791, -0.02643335424363613, 0.9519792795181274, 1.498781681060791, 0.22356665134429932, 0.9519792795181274, 0.748781681060791, 0.22356665134429932], [0.7019792795181274, 0.748781681060791, 0.22356665134429932, 0.7019792795181274, 1.498781681060791, 0.22356665134429932, 0.7019792795181274, 1.498781681060791, -0.02643335424363613, 0.7019792795181274, 0.748781681060791, -0.02643335424363613], [0.09342791140079498, 1.3167552947998047, -0.06984145194292068, 0.09342791140079498, 1.5042552947998047, -0.06984145194292068, 0.7184278964996338, 1.5042552947998047, -0.06984145194292068, 0.7184278964996338, 1.3167552947998047, -0.06984145194292068], [0.7184278964996338, 1.3167552947998047, 0.18015854060649872, 0.7184278964996338, 1.5042552947998047, 0.18015854060649872, 0.09342791140079498, 1.5042552947998047, 0.18015854060649872, 0.09342791140079498, 1.3167552947998047, 0.18015854060649872], [0.09342791140079498, 1.5042552947998047, -0.06984145194292068, 0.09342791140079498, 1.5042552947998047, 0.18015854060649872, 0.7184278964996338, 1.5042552947998047, 0.18015854060649872, 0.7184278964996338, 1.5042552947998047, -0.06984145194292068], [0.7184278964996338, 1.3167552947998047, -0.06984145194292068, 0.7184278964996338, 1.3167552947998047, 0.18015854060649872, 0.09342791140079498, 1.3167552947998047, 0.18015854060649872, 0.09342791140079498, 1.3167552947998047, -0.06984145194292068], [0.7184278964996338, 1.3167552947998047, -0.06984145194292068, 0.7184278964996338, 1.5042552947998047, -0.06984145194292068, 0.7184278964996338, 1.5042552947998047, 0.18015854060649872, 0.7184278964996338, 1.3167552947998047, 0.18015854060649872], [0.09342791140079498, 1.3167552947998047, 0.18015854060649872, 0.09342791140079498, 1.5042552947998047, 0.18015854060649872, 0.09342791140079498, 1.5042552947998047, -0.06984145194292068, 0.09342791140079498, 1.3167552947998047, -0.06984145194292068], [-0.24375000596046448, 0.0, -0.125, -0.24375000596046448, 0.75, -0.125, 0.0062500000931322575, 0.75, -0.125, 0.0062500000931322575, 0.0, -0.125], [0.0062500000931322575, 0.0, 0.125, 0.0062500000931322575, 0.75, 0.125, -0.24375000596046448, 0.75, 0.125, -0.24375000596046448, 0.0, 0.125], [-0.24375000596046448, 0.75, -0.125, -0.24375000596046448, 0.75, 0.125, 0.0062500000931322575, 0.75, 0.125, 0.0062500000931322575, 0.75, -0.125], [0.0062500000931322575, 0.0, -0.125, 0.0062500000931322575, 0.0, 0.125, -0.24375000596046448, 0.0, 0.125, -0.24375000596046448, 0.0, -0.125], [0.0062500000931322575, 0.0, -0.125, 0.0062500000931322575, 0.75, -0.125, 0.0062500000931322575, 0.75, 0.125, 0.0062500000931322575, 0.0, 0.125], [-0.24375000596046448, 0.0, 0.125, -0.24375000596046448, 0.75, 0.125, -0.24375000596046448, 0.75, -0.125, -0.24375000596046448, 0.0, -0.125], [-0.0062500000931322575, 0.0, -0.125, -0.0062500000931322575, 0.75, -0.125, 0.24375000596046448, 0.75, -0.125, 0.24375000596046448, 0.0, -0.125], [0.24375000596046448, 0.0, 0.125, 0.24375000596046448, 0.75, 0.125, -0.0062500000931322575, 0.75, 0.125, -0.0062500000931322575, 0.0, 0.125], [-0.0062500000931322575, 0.75, -0.125, -0.0062500000931322575, 0.75, 0.125, 0.24375000596046448, 0.75, 0.125, 0.24375000596046448, 0.75, -0.125], [0.24375000596046448, 0.0, -0.125, 0.24375000596046448, 0.0, 0.125, -0.0062500000931322575, 0.0, 0.125, -0.0062500000931322575, 0.0, -0.125], [0.24375000596046448, 0.0, -0.125, 0.24375000596046448, 0.75, -0.125, 0.24375000596046448, 0.75, 0.125, 0.24375000596046448, 0.0, 0.125], [-0.0062500000931322575, 0.0, 0.125, -0.0062500000931322575, 0.75, 0.125, -0.0062500000931322575, 0.75, -0.125, -0.0062500000931322575, 0.0, -0.125]] +tex_coords = [[0.018867924528301886, 0.0, 0, 0.018867924528301886, 0.75, 0, 0.05660377358490566, 0.75, 0, 0.05660377358490566, 0.0, 0], [0.07547169811320754, 0.0, 0, 0.07547169811320754, 0.75, 0, 0.11320754716981132, 0.75, 0, 0.11320754716981132, 0.0, 0], [0.018867924528301886, 0.75, 0, 0.018867924528301886, 1.0, 0, 0.05660377358490566, 1.0, 0, 0.05660377358490566, 0.75, 0], [0.05660377358490566, 0.75, 0, 0.05660377358490566, 1.0, 0, 0.09433962264150944, 1.0, 0, 0.09433962264150944, 0.75, 0], [0.05660377358490566, 0.0, 0, 0.05660377358490566, 0.75, 0, 0.07547169811320754, 0.75, 0, 0.07547169811320754, 0.0, 0], [0.0, 0.0, 0, 0.0, 0.75, 0, 0.018867924528301886, 0.75, 0, 0.018867924528301886, 0.0, 0], [0.1509433962264151, 0.0, 0, 0.1509433962264151, 0.5, 0, 0.18867924528301888, 0.5, 0, 0.18867924528301888, 0.0, 0], [0.22641509433962265, 0.0, 0, 0.22641509433962265, 0.5, 0, 0.2641509433962264, 0.5, 0, 0.2641509433962264, 0.0, 0], [0.1509433962264151, 0.5, 0, 0.1509433962264151, 1.0, 0, 0.18867924528301888, 1.0, 0, 0.18867924528301888, 0.5, 0], [0.18867924528301888, 0.5, 0, 0.18867924528301888, 1.0, 0, 0.22641509433962265, 1.0, 0, 0.22641509433962265, 0.5, 0], [0.18867924528301888, 0.0, 0, 0.18867924528301888, 0.5, 0, 0.22641509433962265, 0.5, 0, 0.22641509433962265, 0.0, 0], [0.11320754716981132, 0.0, 0, 0.11320754716981132, 0.5, 0, 0.1509433962264151, 0.5, 0, 0.1509433962264151, 0.0, 0], [0.3018867924528302, 0.0, 0, 0.3018867924528302, 0.5, 0, 0.33962264150943394, 0.5, 0, 0.33962264150943394, 0.0, 0], [0.37735849056603776, 0.0, 0, 0.37735849056603776, 0.5, 0, 0.41509433962264153, 0.5, 0, 0.41509433962264153, 0.0, 0], [0.3018867924528302, 0.5, 0, 0.3018867924528302, 1.0, 0, 0.33962264150943394, 1.0, 0, 0.33962264150943394, 0.5, 0], [0.33962264150943394, 0.5, 0, 0.33962264150943394, 1.0, 0, 0.37735849056603776, 1.0, 0, 0.37735849056603776, 0.5, 0], [0.33962264150943394, 0.0, 0, 0.33962264150943394, 0.5, 0, 0.37735849056603776, 0.5, 0, 0.37735849056603776, 0.0, 0], [0.2641509433962264, 0.0, 0, 0.2641509433962264, 0.5, 0, 0.3018867924528302, 0.5, 0, 0.3018867924528302, 0.0, 0], [0.4528301886792453, 0.0, 0, 0.4528301886792453, 0.5, 0, 0.49056603773584906, 0.5, 0, 0.49056603773584906, 0.0, 0], [0.5283018867924528, 0.0, 0, 0.5283018867924528, 0.5, 0, 0.5660377358490566, 0.5, 0, 0.5660377358490566, 0.0, 0], [0.4528301886792453, 0.5, 0, 0.4528301886792453, 1.0, 0, 0.49056603773584906, 1.0, 0, 0.49056603773584906, 0.5, 0], [0.49056603773584906, 0.5, 0, 0.49056603773584906, 1.0, 0, 0.5283018867924528, 1.0, 0, 0.5283018867924528, 0.5, 0], [0.49056603773584906, 0.0, 0, 0.49056603773584906, 0.5, 0, 0.5283018867924528, 0.5, 0, 0.5283018867924528, 0.0, 0], [0.41509433962264153, 0.0, 0, 0.41509433962264153, 0.5, 0, 0.4528301886792453, 0.5, 0, 0.4528301886792453, 0.0, 0], [0.5849056603773585, 0.0, 0, 0.5849056603773585, 0.75, 0, 0.6037735849056604, 0.75, 0, 0.6037735849056604, 0.0, 0], [0.6226415094339622, 0.0, 0, 0.6226415094339622, 0.75, 0, 0.6415094339622641, 0.75, 0, 0.6415094339622641, 0.0, 0], [0.5849056603773585, 0.75, 0, 0.5849056603773585, 1.0, 0, 0.6037735849056604, 1.0, 0, 0.6037735849056604, 0.75, 0], [0.6037735849056604, 0.75, 0, 0.6037735849056604, 1.0, 0, 0.6226415094339622, 1.0, 0, 0.6226415094339622, 0.75, 0], [0.6037735849056604, 0.0, 0, 0.6037735849056604, 0.75, 0, 0.6226415094339622, 0.75, 0, 0.6226415094339622, 0.0, 0], [0.5660377358490566, 0.0, 0, 0.5660377358490566, 0.75, 0, 0.5849056603773585, 0.75, 0, 0.5849056603773585, 0.0, 0], [0.660377358490566, 0.0, 0, 0.660377358490566, 0.75, 0, 0.6792452830188679, 0.75, 0, 0.6792452830188679, 0.0, 0], [0.6981132075471698, 0.0, 0, 0.6981132075471698, 0.75, 0, 0.7169811320754716, 0.75, 0, 0.7169811320754716, 0.0, 0], [0.660377358490566, 0.75, 0, 0.660377358490566, 1.0, 0, 0.6792452830188679, 1.0, 0, 0.6792452830188679, 0.75, 0], [0.6792452830188679, 0.75, 0, 0.6792452830188679, 1.0, 0, 0.6981132075471698, 1.0, 0, 0.6981132075471698, 0.75, 0], [0.6792452830188679, 0.0, 0, 0.6792452830188679, 0.75, 0, 0.6981132075471698, 0.75, 0, 0.6981132075471698, 0.0, 0], [0.6415094339622641, 0.0, 0, 0.6415094339622641, 0.75, 0, 0.660377358490566, 0.75, 0, 0.660377358490566, 0.0, 0], [0.7358490566037735, 0.5625, 0, 0.7358490566037735, 0.75, 0, 0.7830188679245284, 0.75, 0, 0.7830188679245284, 0.5625, 0], [0.8018867924528302, 0.5625, 0, 0.8018867924528302, 0.75, 0, 0.8490566037735849, 0.75, 0, 0.8490566037735849, 0.5625, 0], [0.7358490566037735, 0.75, 0, 0.7358490566037735, 1.0, 0, 0.7830188679245284, 1.0, 0, 0.7830188679245284, 0.75, 0], [0.7830188679245284, 0.75, 0, 0.7830188679245284, 1.0, 0, 0.8301886792452831, 1.0, 0, 0.8301886792452831, 0.75, 0], [0.7830188679245284, 0.5625, 0, 0.7830188679245284, 0.75, 0, 0.8018867924528302, 0.75, 0, 0.8018867924528302, 0.5625, 0], [0.7169811320754716, 0.5625, 0, 0.7169811320754716, 0.75, 0, 0.7358490566037735, 0.75, 0, 0.7358490566037735, 0.5625, 0], [0.8679245283018868, 0.0, 0, 0.8679245283018868, 0.75, 0, 0.8867924528301887, 0.75, 0, 0.8867924528301887, 0.0, 0], [0.9056603773584906, 0.0, 0, 0.9056603773584906, 0.75, 0, 0.9245283018867925, 0.75, 0, 0.9245283018867925, 0.0, 0], [0.8679245283018868, 0.75, 0, 0.8679245283018868, 1.0, 0, 0.8867924528301887, 1.0, 0, 0.8867924528301887, 0.75, 0], [0.8867924528301887, 0.75, 0, 0.8867924528301887, 1.0, 0, 0.9056603773584906, 1.0, 0, 0.9056603773584906, 0.75, 0], [0.8867924528301887, 0.0, 0, 0.8867924528301887, 0.75, 0, 0.9056603773584906, 0.75, 0, 0.9056603773584906, 0.0, 0], [0.8490566037735849, 0.0, 0, 0.8490566037735849, 0.75, 0, 0.8679245283018868, 0.75, 0, 0.8679245283018868, 0.0, 0], [0.9433962264150944, 0.0, 0, 0.9433962264150944, 0.75, 0, 0.9622641509433962, 0.75, 0, 0.9622641509433962, 0.0, 0], [0.9811320754716981, 0.0, 0, 0.9811320754716981, 0.75, 0, 1.0, 0.75, 0, 1.0, 0.0, 0], [0.9433962264150944, 0.75, 0, 0.9433962264150944, 1.0, 0, 0.9622641509433962, 1.0, 0, 0.9622641509433962, 0.75, 0], [0.9622641509433962, 0.75, 0, 0.9622641509433962, 1.0, 0, 0.9811320754716981, 1.0, 0, 0.9811320754716981, 0.75, 0], [0.9622641509433962, 0.0, 0, 0.9622641509433962, 0.75, 0, 0.9811320754716981, 0.75, 0, 0.9811320754716981, 0.0, 0], [0.9245283018867925, 0.0, 0, 0.9245283018867925, 0.75, 0, 0.9433962264150944, 0.75, 0, 0.9433962264150944, 0.0, 0]] +shading_values = [[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]] diff --git a/episode-13/textures/entity/curry.png b/episode-13/textures/entity/curry.png new file mode 100644 index 0000000000000000000000000000000000000000..3991d0fd1262997e48d9a1427244c9cef088616e GIT binary patch literal 702 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 Date: Sun, 26 Jun 2022 19:36:36 +0200 Subject: [PATCH 12/45] ep13: Move entity textures to `textures/` --- episode-13/data/entities.mcpy | 2 +- episode-13/entity_type.py | 6 +++--- episode-13/textures/{entity => }/cow.png | Bin episode-13/textures/{entity => }/creeper.png | Bin episode-13/textures/{entity => }/curry.png | Bin episode-13/textures/{entity => }/pig.png | Bin episode-13/textures/{entity => }/skeleton.png | Bin episode-13/textures/{entity => }/zombie.png | Bin 8 files changed, 4 insertions(+), 4 deletions(-) rename episode-13/textures/{entity => }/cow.png (100%) rename episode-13/textures/{entity => }/creeper.png (100%) rename episode-13/textures/{entity => }/curry.png (100%) rename episode-13/textures/{entity => }/pig.png (100%) rename episode-13/textures/{entity => }/skeleton.png (100%) rename episode-13/textures/{entity => }/zombie.png (100%) diff --git a/episode-13/data/entities.mcpy b/episode-13/data/entities.mcpy index 75a52c76..2d82e97f 100644 --- a/episode-13/data/entities.mcpy +++ b/episode-13/data/entities.mcpy @@ -4,4 +4,4 @@ Zombie: name "Zombie", width 0.6, height 1.95, model models.zombie, texture zo Skeleton: name "Skeleton", width 0.6, height 1.99, model models.skeleton, texture skeleton Creeper: name "Creeper", width 0.6, height 1.7, model models.creeper, texture creeper Cow: name "Cow", width 0.9, height 1.3, model models.cow, texture cow -Curry: name "Curry", width 0.6, height 1.8, model models.curry, texture curry \ No newline at end of file +Curry: name "Curry", width 0.9, height 1.8, model models.curry, texture curry \ No newline at end of file diff --git a/episode-13/entity_type.py b/episode-13/entity_type.py index 0c5cb66e..9fd4ff9d 100644 --- a/episode-13/entity_type.py +++ b/episode-13/entity_type.py @@ -8,7 +8,7 @@ class Entity_type: def __init__(self, world, name = "unknown", texture = "pig", model = models.pig, width = 0.6, height = 1.8): self.world = world - + self.name = name self.model = model @@ -17,7 +17,7 @@ def __init__(self, world, name = "unknown", texture = "pig", model = models.pig, # load texture image - texture_image = pyglet.image.load(f"textures/entity/{texture}.png").get_image_data() + texture_image = pyglet.image.load(f"textures/{texture}.png").get_image_data() self.texture_width = texture_image.width self.texture_height = texture_image.height @@ -36,7 +36,7 @@ def __init__(self, world, name = "unknown", texture = "pig", model = models.pig, self.texture_width, self.texture_height, 0, gl.GL_RGBA, gl.GL_UNSIGNED_BYTE, texture_image.get_data("RGBA", self.texture_width * 4)) - + gl.glGenerateMipmap(gl.GL_TEXTURE_2D) # convert model to arrays we can send to the GPU diff --git a/episode-13/textures/entity/cow.png b/episode-13/textures/cow.png similarity index 100% rename from episode-13/textures/entity/cow.png rename to episode-13/textures/cow.png diff --git a/episode-13/textures/entity/creeper.png b/episode-13/textures/creeper.png similarity index 100% rename from episode-13/textures/entity/creeper.png rename to episode-13/textures/creeper.png diff --git a/episode-13/textures/entity/curry.png b/episode-13/textures/curry.png similarity index 100% rename from episode-13/textures/entity/curry.png rename to episode-13/textures/curry.png diff --git a/episode-13/textures/entity/pig.png b/episode-13/textures/pig.png similarity index 100% rename from episode-13/textures/entity/pig.png rename to episode-13/textures/pig.png diff --git a/episode-13/textures/entity/skeleton.png b/episode-13/textures/skeleton.png similarity index 100% rename from episode-13/textures/entity/skeleton.png rename to episode-13/textures/skeleton.png diff --git a/episode-13/textures/entity/zombie.png b/episode-13/textures/zombie.png similarity index 100% rename from episode-13/textures/entity/zombie.png rename to episode-13/textures/zombie.png From 2b3569329ba54e67836a4f3d6be3fde73c445c4e Mon Sep 17 00:00:00 2001 From: obiwac Date: Sun, 26 Jun 2022 19:50:30 +0200 Subject: [PATCH 13/45] ep13: Remove redundant `ai` method in `Entity` --- episode-13/entity.py | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/episode-13/entity.py b/episode-13/entity.py index 579f9afd..0074a7c2 100644 --- a/episode-13/entity.py +++ b/episode-13/entity.py @@ -203,21 +203,6 @@ def update(self, delta_time): self.update_collider() - def ai(self, delta_time): - import random - - if not random.randint(0, 500): - self.rotation[0] += random.uniform(-3, 3) - - self.accel[0] = math.cos(self.rotation[0] + math.tau / 4) * 3 - self.accel[2] = -math.sin(self.rotation[0] + math.tau / 4) * 3 - - if not random.randint(0, 50): - self.jump() - - if self.position[1] < 0: - self.position = [0, 80, 0] - def draw(self): # compute transformation matrix From d3ffc74ef247e58bcd22f62c4215c4053f3ff4e5 Mon Sep 17 00:00:00 2001 From: obiwac Date: Sun, 26 Jun 2022 23:07:55 +0200 Subject: [PATCH 14/45] ep13: Syntax highlighting for `data/entities.mcpy` --- episode-13/mob.py | 6 +-- episode-13/save.py | 12 +++--- episode-13/vscode_mcpy_extension/package.json | 39 +++++++++++++------ .../syntaxes/mcpy_blocks.tmLanguage.json | 10 ++++- .../syntaxes/mcpy_entities.tmLanguage.json | 36 +++++++++++++++++ 5 files changed, 82 insertions(+), 21 deletions(-) create mode 100644 episode-13/vscode_mcpy_extension/syntaxes/mcpy_entities.tmLanguage.json diff --git a/episode-13/mob.py b/episode-13/mob.py index 6b4b4202..db666686 100644 --- a/episode-13/mob.py +++ b/episode-13/mob.py @@ -11,7 +11,7 @@ def __init__(self, world, entity_type): self.select_target() self.reset() - + def select_target(self): self.target = [x + random.randint(-10, 10) for x in self.position] @@ -26,7 +26,7 @@ def update(self, delta_time): if delta_time * 5 > 1: self.rotation[0] = self.heading - + else: self.rotation[0] += (self.heading - self.rotation[0]) * delta_time * 5 @@ -41,7 +41,7 @@ def update(self, delta_time): if self.wall and self.grounded: if random.randint(0, 3): self.jump() - + else: self.select_target() diff --git a/episode-13/save.py b/episode-13/save.py index fc5da524..18246a63 100644 --- a/episode-13/save.py +++ b/episode-13/save.py @@ -92,17 +92,17 @@ def save_chunk(self, chunk_position): chunk_data.save(chunk_path, gzipped = True) def load(self): - # for x in range(-16, 15): - # for y in range(-15, 16): - # self.load_chunk((x, 0, y)) + for x in range(-16, 15): + for y in range(-15, 16): + self.load_chunk((x, 0, y)) # for x in range(-4, 4): # for y in range(-4, 4): # self.load_chunk((x, 0, y)) - for x in range(-1, 1): - for y in range(-1, 1): - self.load_chunk((x, 0, y)) + # for x in range(-1, 1): + # for y in range(-1, 1): + # self.load_chunk((x, 0, y)) def save(self): for chunk_position in self.world.chunks: diff --git a/episode-13/vscode_mcpy_extension/package.json b/episode-13/vscode_mcpy_extension/package.json index 443213de..6d90c2ab 100644 --- a/episode-13/vscode_mcpy_extension/package.json +++ b/episode-13/vscode_mcpy_extension/package.json @@ -10,26 +10,43 @@ "name": "obiwac" }, "homepage": "https://github.com/obiwac/python-minecraft-clone", - "version": "0.0.1", + "version": "0.0.2", "engines": { "vscode": "^1.22.0" }, "contributes": { - "languages": [{ - "id": "mcpy_blocks", - "aliases": [ - "MCPY Blocks" - ], - "filenames": [ - "blocks.mcpy" - ], - "configuration": "./language-configuration.json" - }], + "languages": [ + { + "id": "mcpy_blocks", + "aliases": [ + "MCPY Blocks" + ], + "filenames": [ + "blocks.mcpy" + ], + "configuration": "./language-configuration.json" + }, + { + "id": "mcpy_entities", + "aliases": [ + "MCPY Entities" + ], + "filenames": [ + "entities.mcpy" + ], + "configuration": "./language-configuration.json" + } + ], "grammars": [ { "language": "mcpy_blocks", "scopeName": "source.mcpy_blocks", "path": "./syntaxes/mcpy_blocks.tmLanguage.json" + }, + { + "language": "mcpy_entities", + "scopeName": "source.mcpy_entities", + "path": "./syntaxes/mcpy_entities.tmLanguage.json" } ] } diff --git a/episode-13/vscode_mcpy_extension/syntaxes/mcpy_blocks.tmLanguage.json b/episode-13/vscode_mcpy_extension/syntaxes/mcpy_blocks.tmLanguage.json index 0e382d2d..64518887 100644 --- a/episode-13/vscode_mcpy_extension/syntaxes/mcpy_blocks.tmLanguage.json +++ b/episode-13/vscode_mcpy_extension/syntaxes/mcpy_blocks.tmLanguage.json @@ -11,7 +11,15 @@ "match": "\\b(sameas)\\b" }, { - "name": "constant.language.mcpy_blocks", + "name": "entity.name.tag.mcpy_blocks", + "match": "\\b^[0-9]+(:)|(:)\\b" + }, + { + "name": "variable.class.mcpy_blocks", + "match": "\\bmodels\\b" + }, + { + "name": "entity.name.function.mcpy_blocks", "match": "\\b(all|sides|x|y|z|top|bottom|front|back|left|right)\\b" }, { diff --git a/episode-13/vscode_mcpy_extension/syntaxes/mcpy_entities.tmLanguage.json b/episode-13/vscode_mcpy_extension/syntaxes/mcpy_entities.tmLanguage.json new file mode 100644 index 00000000..fa07dbc4 --- /dev/null +++ b/episode-13/vscode_mcpy_extension/syntaxes/mcpy_entities.tmLanguage.json @@ -0,0 +1,36 @@ +{ + "name": "mcpy_entities", + "scopeName": "source.mcpy_entities", + "patterns": [ + { + "name": "keyword.operator.mcpy_entities", + "match": "\\b(name|width|height|model|texture)\\b" + }, + { + "name": "entity.name.tag.mcpy_entities", + "match": "\\b^.+(:)|(:)\\b" + }, + { + "name": "variable.class.mcpy_entities", + "match": "\\bmodels\\b" + }, + { + "name": "constant.numeric.mcpy_entities", + "match": "\\b[0-9]+\\.*[0-9]*\\b" + }, + { + "name": "comment.line.mcpy_entities", + "begin": "#", + "end": "$" + }, + { + "name": "string.quoted.double.mcpy_entities", + "begin": "\"", + "end": "\"", + "patterns": [{ + "name": "constant.character.escape.mcpy_entities", + "match": "\\\\." + }] + } + ] +} \ No newline at end of file From cdb989b2447702535b39d905e95dd0c230e85a2c Mon Sep 17 00:00:00 2001 From: obiwac Date: Sun, 26 Jun 2022 23:30:44 +0200 Subject: [PATCH 15/45] ep13: Don't update entities more than 32 blocks away from the player --- episode-13/main.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/episode-13/main.py b/episode-13/main.py index 355a2960..b6dfc158 100644 --- a/episode-13/main.py +++ b/episode-13/main.py @@ -47,6 +47,11 @@ def update(self, delta_time): # update other entities for entity in self.world.entities: + dist = math.sqrt(sum(map(lambda x: (x[0] - x[1]) ** 2, zip(entity.position, self.player.position)))) + + if dist > 32: + continue + # entity.target = [self.player.position[0], self.player.position[2]] entity.update(delta_time) From 90585630d8f082beffca27e75310931657e3feb2 Mon Sep 17 00:00:00 2001 From: obiwac Date: Sun, 17 Jul 2022 17:08:41 +0200 Subject: [PATCH 16/45] ep13: Optimization attempts and 2D texture coordinates for entities --- episode-13/entity.py | 107 ++++++++++++++++++++------------------ episode-13/entity_type.py | 23 +++++--- episode-13/main.py | 17 +++--- episode-13/matrix.py | 70 ++++++++++++------------- episode-13/save.py | 14 ++--- episode-13/world.py | 23 ++++---- 6 files changed, 137 insertions(+), 117 deletions(-) diff --git a/episode-13/entity.py b/episode-13/entity.py index 0074a7c2..189da995 100644 --- a/episode-13/entity.py +++ b/episode-13/entity.py @@ -26,6 +26,7 @@ def __init__(self, world, entity_type): self.jump_height = 1.25 self.flying = False + self.ghost = False self.position = [0, 80, 0] self.rotation = [-math.tau / 4, 0] @@ -113,80 +114,84 @@ def friction(self): return DRAG_FALL - def update(self, delta_time): - # apply input acceleration, and adjust for friction/drag + def resolve_collision(self, delta_time): + adjusted_velocity = [v * delta_time for v in self.velocity] + vx, vy, vz = adjusted_velocity - self.velocity = [v + a * f * delta_time for v, a, f in zip(self.velocity, self.accel, self.friction)] - self.accel = [0, 0, 0] + # find all the blocks we could potentially be colliding with + # this step is known as "broad-phasing" - # compute collisions + step_x = 1 if vx > 0 else -1 + step_y = 1 if vy > 0 else -1 + step_z = 1 if vz > 0 else -1 - self.update_collider() + steps_xz = int(self.entity_type.width / 2) + steps_y = int(self.entity_type.height) - self.grounded = False - self.wall = False + x, y, z = map(int, self.position) + cx, cy, cz = [int(p + v) for p, v in zip(self.position, adjusted_velocity)] - for _ in range(3): - adjusted_velocity = [v * delta_time for v in self.velocity] - vx, vy, vz = adjusted_velocity + potential_collisions = [] - # find all the blocks we could potentially be colliding with - # this step is known as "broad-phasing" + for i in range(x - step_x * (steps_xz + 1), cx + step_x * (steps_xz + 2), step_x): + for j in range(y - step_y * (steps_y + 2), cy + step_y * (steps_y + 3), step_y): + for k in range(z - step_z * (steps_xz + 1), cz + step_z * (steps_xz + 2), step_z): + pos = (i, j, k) + num = self.world.get_block_number(pos) - step_x = 1 if vx > 0 else -1 - step_y = 1 if vy > 0 else -1 - step_z = 1 if vz > 0 else -1 + if not num: + continue - steps_xz = int(self.entity_type.width / 2) - steps_y = int(self.entity_type.height) + for _collider in self.world.block_types[num].colliders: + entry_time, normal = self.collider.collide(_collider + pos, adjusted_velocity) - x, y, z = map(int, self.position) - cx, cy, cz = [int(x + v) for x, v in zip(self.position, adjusted_velocity)] + if normal is None: + continue - potential_collisions = [] + potential_collisions.append((entry_time, normal)) - for i in range(x - step_x * (steps_xz + 1), cx + step_x * (steps_xz + 2), step_x): - for j in range(y - step_y * (steps_y + 2), cy + step_y * (steps_y + 3), step_y): - for k in range(z - step_z * (steps_xz + 1), cz + step_z * (steps_xz + 2), step_z): - pos = (i, j, k) - num = self.world.get_block_number(pos) + # get first collision - if not num: - continue + if not potential_collisions: + return - for _collider in self.world.block_types[num].colliders: - entry_time, normal = self.collider.collide(_collider + pos, adjusted_velocity) + entry_time, normal = min(potential_collisions, key = lambda x: x[0]) + entry_time -= 0.001 - if normal is None: - continue + if normal[0]: + self.velocity[0] = 0 + self.position[0] += vx * entry_time - potential_collisions.append((entry_time, normal)) + if normal[1]: + self.velocity[1] = 0 + self.position[1] += vy * entry_time - # get first collision + if normal[2]: + self.velocity[2] = 0 + self.position[2] += vz * entry_time - if not potential_collisions: - break + if normal[0] or normal[2]: + self.wall = True - entry_time, normal = min(potential_collisions, key = lambda x: x[0]) - entry_time -= 0.001 + if normal[1] == 1: + self.grounded = True - if normal[0]: - self.velocity[0] = 0 - self.position[0] += vx * entry_time + def update(self, delta_time): + # apply input acceleration, and adjust for friction/drag + + self.velocity = [v + a * f * delta_time for v, a, f in zip(self.velocity, self.accel, self.friction)] + self.accel = [0, 0, 0] - if normal[1]: - self.velocity[1] = 0 - self.position[1] += vy * entry_time + # compute collisions - if normal[2]: - self.velocity[2] = 0 - self.position[2] += vz * entry_time + self.update_collider() - if normal[0] or normal[2]: - self.wall = True + self.grounded = False + self.wall = False - if normal[1] == 1: - self.grounded = True + if not self.ghost: + for _ in range(3): + self.resolve_collision(delta_time) self.position = [x + v * delta_time for x, v in zip(self.position, self.velocity)] diff --git a/episode-13/entity_type.py b/episode-13/entity_type.py index 9fd4ff9d..9b6075a6 100644 --- a/episode-13/entity_type.py +++ b/episode-13/entity_type.py @@ -44,6 +44,8 @@ def __init__(self, world, name = "unknown", texture = "pig", model = models.pig, self.vertices = sum(model.vertex_positions, []) self.tex_coords = sum(model.tex_coords, []) + del self.tex_coords[2::3] + # get normal vector for each face self.normals = [] @@ -65,13 +67,12 @@ def __init__(self, world, name = "unknown", texture = "pig", model = models.pig, # compute indices self.indices = [] - index_counter = 0 for i in range(len(model.vertex_positions)): - self.indices.extend(x + index_counter for x in (0, 1, 2, 0, 2, 3)) - index_counter += 4 + self.indices.extend(x + i * 4 for x in (0, 1, 2, 0, 2, 3)) # create VAO/VBO/IBO + # vertex positions self.vao = gl.GLuint(0) gl.glGenVertexArrays(1, self.vao) @@ -85,11 +86,13 @@ def __init__(self, world, name = "unknown", texture = "pig", model = models.pig, gl.GL_ARRAY_BUFFER, ctypes.sizeof(gl.GLfloat * len(self.vertices)), (gl.GLfloat * len(self.vertices)) (*self.vertices), - gl.GL_STREAM_DRAW) + gl.GL_STATIC_DRAW) gl.glVertexAttribPointer(0, 3, gl.GL_FLOAT, gl.GL_FALSE, 0, 0) gl.glEnableVertexAttribArray(0) + # texture coordinates + self.tex_coords_vbo = gl.GLuint(0) gl.glGenBuffers(1, self.tex_coords_vbo) @@ -98,14 +101,16 @@ def __init__(self, world, name = "unknown", texture = "pig", model = models.pig, gl.GL_ARRAY_BUFFER, ctypes.sizeof(gl.GLfloat * len(self.tex_coords)), (gl.GLfloat * len(self.tex_coords)) (*self.tex_coords), - gl.GL_STREAM_DRAW) + gl.GL_STATIC_DRAW) # texture coordinates are still 3D here even though we don't use texture arrays (as is the case with blocks) # this is so that we can interchange block & entity models - gl.glVertexAttribPointer(1, 3, gl.GL_FLOAT, gl.GL_FALSE, 0, 0) + gl.glVertexAttribPointer(1, 2, gl.GL_FLOAT, gl.GL_FALSE, 0, 0) gl.glEnableVertexAttribArray(1) + # normals + self.normals_vbo = gl.GLuint(0) gl.glGenBuffers(1, self.normals_vbo) @@ -114,11 +119,13 @@ def __init__(self, world, name = "unknown", texture = "pig", model = models.pig, gl.GL_ARRAY_BUFFER, ctypes.sizeof(gl.GLfloat * len(self.normals)), (gl.GLfloat * len(self.normals)) (*self.normals), - gl.GL_STREAM_DRAW) + gl.GL_STATIC_DRAW) gl.glVertexAttribPointer(2, 3, gl.GL_FLOAT, gl.GL_FALSE, 0, 0) gl.glEnableVertexAttribArray(2) + # indices + self.ibo = gl.GLuint(0) gl.glGenBuffers(1, self.ibo) @@ -127,7 +134,7 @@ def __init__(self, world, name = "unknown", texture = "pig", model = models.pig, gl.GL_ELEMENT_ARRAY_BUFFER, ctypes.sizeof(gl.GLuint * len(self.indices)), (gl.GLuint * len(self.indices)) (*self.indices), - gl.GL_STREAM_DRAW) + gl.GL_STATIC_DRAW) def draw(self): # bind textures diff --git a/episode-13/main.py b/episode-13/main.py index b6dfc158..8cd105f8 100644 --- a/episode-13/main.py +++ b/episode-13/main.py @@ -34,9 +34,11 @@ def __init__(self, **args): # misc stuff + self.frame = 0 self.holding = 19 # 5 def update(self, delta_time): + self.frame += 1 # print(f"FPS: {1.0 / delta_time}") if not self.mouse_captured: @@ -46,14 +48,12 @@ def update(self, delta_time): # update other entities - for entity in self.world.entities: - dist = math.sqrt(sum(map(lambda x: (x[0] - x[1]) ** 2, zip(entity.position, self.player.position)))) + entities = sorted(self.world.entities, key = lambda e: math.sqrt(sum(map(lambda x: (x[0] - x[1]) ** 2, zip(e.position, self.player.position))))) - if dist > 32: - continue + PRECISION = 1 # 3 - # entity.target = [self.player.position[0], self.player.position[2]] - entity.update(delta_time) + for entity in entities[(self.frame % PRECISION)::PRECISION]: + entity.update(delta_time * PRECISION) def on_draw(self): self.player.update_matrices() @@ -65,7 +65,7 @@ def on_draw(self): gl.glClearColor(0.0, 0.0, 0.0, 0.0) self.clear() - self.world.draw() + self.world.draw(self.player) gl.glFinish() @@ -132,6 +132,9 @@ def on_key_press(self, key, modifiers): elif key == pyglet.window.key.G: self.holding = random.randint(1, len(self.world.block_types) - 1) + elif key == pyglet.window.key.N: + self.player.ghost = not self.player.ghost + elif key == pyglet.window.key.O: self.world.save.save() diff --git a/episode-13/matrix.py b/episode-13/matrix.py index f2a5c61c..ce6ac5a9 100644 --- a/episode-13/matrix.py +++ b/episode-13/matrix.py @@ -16,7 +16,7 @@ def copy_matrix(matrix): def multiply_matrices(x_matrix, y_matrix): result_matrix = copy_matrix(clean_matrix) - + for i in range(4): for j in range(4): result_matrix[i][j] = \ @@ -32,108 +32,108 @@ def __init__(self, base = None): if type(base) == Matrix: self.data = copy_matrix(base.data) elif type(base) == list: self.data = copy_matrix(base) else: self.data = copy_matrix(clean_matrix) - + def load_identity(self): self.data = copy_matrix(identity_matrix) - + def __mul__(self, matrix): return Matrix(multiply_matrices(self.data, matrix.data)) - + def __imul__(self, matrix): self.data = multiply_matrices(self.data, matrix.data) - + def scale(self, x, y, z): - for i in range(4): self.data[0][i] *= scale_x - for i in range(4): self.data[1][i] *= scale_y - for i in range(4): self.data[2][i] *= scale_z - + for i in range(4): self.data[0][i] *= x + for i in range(4): self.data[1][i] *= y + for i in range(4): self.data[2][i] *= z + def translate(self, x, y, z): for i in range(4): self.data[3][i] = self.data[3][i] + (self.data[0][i] * x + self.data[1][i] * y + self.data[2][i] * z) - + def rotate(self, angle, x, y, z): magnitude = math.sqrt(x * x + y * y + z * z) - + x /= -magnitude y /= -magnitude z /= -magnitude - + sin_angle = math.sin(angle) cos_angle = math.cos(angle) one_minus_cos = 1.0 - cos_angle - + xx = x * x yy = y * y zz = z * z - + xy = x * y yz = y * z zx = z * x - + xs = x * sin_angle ys = y * sin_angle zs = z * sin_angle - + rotation_matrix = copy_matrix(clean_matrix) - + rotation_matrix[0][0] = (one_minus_cos * xx) + cos_angle rotation_matrix[0][1] = (one_minus_cos * xy) - zs rotation_matrix[0][2] = (one_minus_cos * zx) + ys - + rotation_matrix[1][0] = (one_minus_cos * xy) + zs rotation_matrix[1][1] = (one_minus_cos * yy) + cos_angle rotation_matrix[1][2] = (one_minus_cos * yz) - xs - + rotation_matrix[2][0] = (one_minus_cos * zx) - ys rotation_matrix[2][1] = (one_minus_cos * yz) + xs rotation_matrix[2][2] = (one_minus_cos * zz) + cos_angle - + rotation_matrix[3][3] = 1.0 self.data = multiply_matrices(self.data, rotation_matrix) - + def rotate_2d(self, x, y): self.rotate(x, 0, 1.0, 0) self.rotate(-y, math.cos(x), 0, math.sin(x)) - + def frustum(self, left, right, bottom, top, near, far): deltax = right - left deltay = top - bottom deltaz = far - near - + frustum_matrix = copy_matrix(clean_matrix) - + frustum_matrix[0][0] = 2 * near / deltax frustum_matrix[1][1] = 2 * near / deltay - + frustum_matrix[2][0] = (right + left) / deltax frustum_matrix[2][1] = (top + bottom) / deltay frustum_matrix[2][2] = -(near + far) / deltaz - + frustum_matrix[2][3] = -1.0 frustum_matrix[3][2] = -2 * near * far / deltaz - + self.data = multiply_matrices(self.data, frustum_matrix) - + def perspective(self, fovy, aspect, near, far): frustum_y = math.tan(math.radians(fovy) / 2) frustum_x = frustum_y * aspect - + self.frustum(-frustum_x * near, frustum_x * near, -frustum_y * near, frustum_y * near, near, far) - + def orthographic(self, left, right, bottom, top, near, far): deltax = right - left deltay = top - bottom deltaz = far - near - + orthographic_matrix = copy_matrix(identity_matrix) - + orthographic_matrix[0][0] = 2.0 / deltax orthographic_matrix[3][0] = -(right + left) / deltax - + orthographic_matrix[1][1] = 2.0 / deltay orthographic_matrix[3][1] = -(top + bottom) / deltay - + orthographic_matrix[2][2] = 2.0 / deltax orthographic_matrix[3][2] = -(near + far) / deltaz - + self.data = multiply_matrices(self.data, orthographic_matrix) diff --git a/episode-13/save.py b/episode-13/save.py index 18246a63..b3a3c059 100644 --- a/episode-13/save.py +++ b/episode-13/save.py @@ -55,6 +55,8 @@ def load_chunk(self, chunk_position): mob_ = mob.Mob(self.world, self.world.entity_types[name]) *mob_.position, = entity["Pos"] + print(name, mob_.position) + self.world.entities.append(mob_) def save_chunk(self, chunk_position): @@ -92,17 +94,17 @@ def save_chunk(self, chunk_position): chunk_data.save(chunk_path, gzipped = True) def load(self): - for x in range(-16, 15): - for y in range(-15, 16): - self.load_chunk((x, 0, y)) + # for x in range(-16, 15): + # for y in range(-15, 16): + # self.load_chunk((x, 0, y)) # for x in range(-4, 4): # for y in range(-4, 4): # self.load_chunk((x, 0, y)) - # for x in range(-1, 1): - # for y in range(-1, 1): - # self.load_chunk((x, 0, y)) + for x in range(-1, 1): + for y in range(-1, 1): + self.load_chunk((x, 0, y)) def save(self): for chunk_position in self.world.chunks: diff --git a/episode-13/world.py b/episode-13/world.py index dcac9ad9..2331f0d9 100644 --- a/episode-13/world.py +++ b/episode-13/world.py @@ -30,9 +30,8 @@ def __init__(self): # parse block type data file - blocks_data_file = open("data/blocks.mcpy") - blocks_data = blocks_data_file.readlines() - blocks_data_file.close() + with open("data/blocks.mcpy") as f: + blocks_data = f.readlines() for block in blocks_data: if block[0] in ['\n', '#']: # skip if empty line or comment @@ -51,7 +50,7 @@ def __init__(self): for prop in props.split(','): prop = prop.strip() - prop = list(filter(None, prop.split(' ', 1))) + *prop, = filter(None, prop.split(' ', 1)) if prop[0] == "sameas": sameas_number = int(prop[1]) @@ -84,9 +83,8 @@ def __init__(self): # parse entity type data file - entities_data_file = open("data/entities.mcpy") - entities_data = entities_data_file.readlines() - entities_data_file.close() + with open("data/entities.mcpy") as f: + entities_data = f.readlines() for _entity in entities_data: if _entity[0] in ['\n', '#']: # skip if empty line or comment @@ -106,7 +104,7 @@ def __init__(self): for prop in props.split(','): prop = prop.strip() - prop = list(filter(None, prop.split(' ', 1))) + *prop, = filter(None, prop.split(' ', 1)) if prop[0] == "width": width = float(prop[1]) @@ -242,7 +240,7 @@ def try_set_block(self, pos, num, collider): self.set_block(pos, num) - def draw(self): + def draw(self, player): # setup block shader self.block_shader.use() @@ -267,4 +265,9 @@ def draw(self): gl.glDisable(gl.GL_CULL_FACE) for entity in self.entities: - entity.draw() \ No newline at end of file + dist = math.sqrt(sum(map(lambda x: (x[0] - x[1]) ** 2, zip(entity.position, player.position)))) + + if dist > 32: + continue + + entity.draw() From 5f57e913a13e311a3df30af56b26b9abc5a09d01 Mon Sep 17 00:00:00 2001 From: obiwac Date: Sun, 24 Jul 2022 17:00:18 +0200 Subject: [PATCH 17/45] ep13: Clean up code a little --- episode-13/entity.py | 14 ++++++------ episode-13/entity_type.py | 3 ++- episode-13/main.py | 6 ++--- episode-13/player.py | 2 +- episode-13/shaders/entity/vert.glsl | 6 ++--- episode-13/world.py | 34 ++++++++++++++--------------- 6 files changed, 31 insertions(+), 34 deletions(-) diff --git a/episode-13/entity.py b/episode-13/entity.py index 189da995..14f45edf 100644 --- a/episode-13/entity.py +++ b/episode-13/entity.py @@ -211,17 +211,17 @@ def update(self, delta_time): def draw(self): # compute transformation matrix - m_matrix = matrix.Matrix() - m_matrix.load_identity() + transform = matrix.Matrix() + transform.load_identity() - m_matrix.translate(*self.position) - m_matrix.rotate_2d(*self.rotation) + transform.translate(*self.position) + transform.rotate_2d(*self.rotation) - _matrix = self.world.mvp_matrix * m_matrix + _matrix = self.world.mvp_matrix * transform # actually draw entity - self.world.entity_shader.uniform_matrix(self.world.entity_shader_m_matrix_location, m_matrix) + self.world.entity_shader.uniform_matrix(self.world.entity_shader_transform_matrix_location, transform) self.world.entity_shader.uniform_matrix(self.world.entity_shader_matrix_location, _matrix) - self.entity_type.draw() \ No newline at end of file + self.entity_type.draw() diff --git a/episode-13/entity_type.py b/episode-13/entity_type.py index 9b6075a6..c9e6565b 100644 --- a/episode-13/entity_type.py +++ b/episode-13/entity_type.py @@ -72,12 +72,13 @@ def __init__(self, world, name = "unknown", texture = "pig", model = models.pig, self.indices.extend(x + i * 4 for x in (0, 1, 2, 0, 2, 3)) # create VAO/VBO/IBO - # vertex positions self.vao = gl.GLuint(0) gl.glGenVertexArrays(1, self.vao) gl.glBindVertexArray(self.vao) + # vertex positions + self.vertices_vbo = gl.GLuint(0) gl.glGenBuffers(1, self.vertices_vbo) diff --git a/episode-13/main.py b/episode-13/main.py index 8cd105f8..cfca9d8d 100644 --- a/episode-13/main.py +++ b/episode-13/main.py @@ -50,10 +50,8 @@ def update(self, delta_time): entities = sorted(self.world.entities, key = lambda e: math.sqrt(sum(map(lambda x: (x[0] - x[1]) ** 2, zip(e.position, self.player.position))))) - PRECISION = 1 # 3 - - for entity in entities[(self.frame % PRECISION)::PRECISION]: - entity.update(delta_time * PRECISION) + for entity in entities: + entity.update(delta_time) def on_draw(self): self.player.update_matrices() diff --git a/episode-13/player.py b/episode-13/player.py index 85b66793..7bf05d06 100644 --- a/episode-13/player.py +++ b/episode-13/player.py @@ -64,4 +64,4 @@ def update_matrices(self): # modelviewprojection matrix - self.world.mvp_matrix = self.world.p_matrix * self.world.mv_matrix \ No newline at end of file + self.world.mvp_matrix = self.world.p_matrix * self.world.mv_matrix diff --git a/episode-13/shaders/entity/vert.glsl b/episode-13/shaders/entity/vert.glsl index 5560d766..f538f972 100644 --- a/episode-13/shaders/entity/vert.glsl +++ b/episode-13/shaders/entity/vert.glsl @@ -8,7 +8,7 @@ out vec3 local_position; out vec3 interpolated_tex_coords; out float shading; -uniform mat4 m_matrix; +uniform mat4 transform_matrix; uniform mat4 matrix; void main(void) { @@ -16,10 +16,10 @@ void main(void) { interpolated_tex_coords = tex_coords; - vec3 adjusted_normal = (vec4(normal, 1.0) * m_matrix).xyz; + vec3 adjusted_normal = (vec4(normal, 1.0) * transform_matrix).xyz; vec3 sunlight = vec3(0.0, 0.0, 1.0); shading = 1.0 - 0.4 * abs(dot(normalize(adjusted_normal), normalize(sunlight))); gl_Position = matrix * vec4(vertex_position, 1.0); -} \ No newline at end of file +} diff --git a/episode-13/world.py b/episode-13/world.py index 2331f0d9..afc83789 100644 --- a/episode-13/world.py +++ b/episode-13/world.py @@ -1,23 +1,18 @@ -import pyglet -import pyglet.gl as gl - import math -import random - import matrix import save import chunk - import shader import block_type import texture_manager -import mob import entity_type -# import custom block & entity models +import pyglet.gl as gl + +# import custom block models import models @@ -30,8 +25,9 @@ def __init__(self): # parse block type data file - with open("data/blocks.mcpy") as f: - blocks_data = f.readlines() + blocks_data_file = open("data/blocks.mcpy") + blocks_data = blocks_data_file.readlines() + blocks_data_file.close() for block in blocks_data: if block[0] in ['\n', '#']: # skip if empty line or comment @@ -50,7 +46,7 @@ def __init__(self): for prop in props.split(','): prop = prop.strip() - *prop, = filter(None, prop.split(' ', 1)) + prop = list(filter(None, prop.split(' ', 1))) if prop[0] == "sameas": sameas_number = int(prop[1]) @@ -87,7 +83,7 @@ def __init__(self): entities_data = f.readlines() for _entity in entities_data: - if _entity[0] in ['\n', '#']: # skip if empty line or comment + if _entity[0] in "\n#": # skip if empty line or comment continue name, props = _entity.split(':', 1) @@ -122,11 +118,13 @@ def __init__(self): self.entity_types[name] = entity_type.Entity_type(self, name, texture, model, width, height) - # create shaders + # matrices + + self.mv_matrix = matrix.Matrix() + self.p_matrix = matrix.Matrix() + self.mvp_matrix = matrix.Matrix() - self.mvp_matrix = matrix.Matrix() # to be set by Player object - self.mv_matrix = matrix.Matrix() # to be set by Player object - self.p_matrix = matrix.Matrix() # to be set by Player object + # shaders self.block_shader = shader.Shader("shaders/block/vert.glsl", "shaders/block/frag.glsl") self.block_shader_sampler_location = self.block_shader.find_uniform(b"texture_array_sampler") @@ -134,7 +132,7 @@ def __init__(self): self.entity_shader = shader.Shader("shaders/entity/vert.glsl", "shaders/entity/frag.glsl") self.entity_shader_sampler_location = self.entity_shader.find_uniform(b"texture_sampler") - self.entity_shader_m_matrix_location = self.entity_shader.find_uniform(b"m_matrix") + self.entity_shader_transform_matrix_location = self.entity_shader.find_uniform(b"transform_matrix") self.entity_shader_matrix_location = self.entity_shader.find_uniform(b"matrix") # load the world @@ -246,7 +244,7 @@ def draw(self, player): self.block_shader.use() self.block_shader.uniform_matrix(self.block_shader_matrix_location, self.mvp_matrix) - # bind block textures + # bind textures gl.glActiveTexture(gl.GL_TEXTURE0) gl.glBindTexture(gl.GL_TEXTURE_2D_ARRAY, self.texture_manager.texture_array) From 38293266477fbaffbc7804fca455cb54c3b93d47 Mon Sep 17 00:00:00 2001 From: obiwac Date: Sun, 24 Jul 2022 17:20:19 +0200 Subject: [PATCH 18/45] ep13: Fix rotational interpolation for mobs --- episode-13/main.py | 2 +- episode-13/mob.py | 3 ++- episode-13/world.py | 1 - 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/episode-13/main.py b/episode-13/main.py index cfca9d8d..8675a82a 100644 --- a/episode-13/main.py +++ b/episode-13/main.py @@ -50,7 +50,7 @@ def update(self, delta_time): entities = sorted(self.world.entities, key = lambda e: math.sqrt(sum(map(lambda x: (x[0] - x[1]) ** 2, zip(e.position, self.player.position))))) - for entity in entities: + for entity in entities[:5]: entity.update(delta_time) def on_draw(self): diff --git a/episode-13/mob.py b/episode-13/mob.py index db666686..47253cfb 100644 --- a/episode-13/mob.py +++ b/episode-13/mob.py @@ -23,6 +23,7 @@ def update(self, delta_time): delta_y = self.position[2] - self.target[2] self.heading = -math.atan2(delta_y, delta_x) + math.tau / 4 + self.heading += math.modf((self.rotation[0] - math.tau / 4) / math.tau)[1] * math.tau if delta_time * 5 > 1: self.rotation[0] = self.heading @@ -46,4 +47,4 @@ def update(self, delta_time): self.select_target() if self.position[1] < 0: - self.teleport((0, 80, 0)) \ No newline at end of file + self.teleport((0, 80, 0)) diff --git a/episode-13/world.py b/episode-13/world.py index afc83789..631caa86 100644 --- a/episode-13/world.py +++ b/episode-13/world.py @@ -165,7 +165,6 @@ def get_local_position(self, position): int(z % chunk.CHUNK_LENGTH)) def get_block_number(self, position): - x, y, z = position chunk_position = self.get_chunk_position(position) if not chunk_position in self.chunks: From f07f5245efa4b632978a92f7fd16d3aa7eb82d80 Mon Sep 17 00:00:00 2001 From: obiwac Date: Sun, 24 Jul 2022 18:19:10 +0200 Subject: [PATCH 19/45] community: Add mobs (segfaults on Python 3.10) --- community/chunk.py | 75 +++++---- community/controller.py | 11 +- community/data/entities.mcpy | 7 + community/entity.py | 194 ++++++++++++++++-------- community/entity_type.py | 150 ++++++++++++++++++ community/keyboard_mouse.py | 3 +- community/main.py | 48 +++--- community/mob.py | 50 ++++++ community/models/__init__.py | 9 +- community/models/button.py | 6 +- community/models/cactus.py | 6 +- community/models/cow.py | 10 ++ community/models/creeper.py | 10 ++ community/models/crop.py | 4 +- community/models/cube.py | 7 +- community/models/curry.py | 10 ++ community/models/door.py | 4 +- community/models/fire.py | 4 +- community/models/flat.py | 4 +- community/models/glass.py | 4 +- community/models/ladder.py | 4 +- community/models/leaves.py | 4 +- community/models/lever.py | 2 +- community/models/liquid.py | 5 +- community/models/pig.py | 10 ++ community/models/plant.py | 6 +- community/models/pressure_plate.py | 4 +- community/models/sign.py | 4 +- community/models/sign_post.py | 4 +- community/models/skeleton.py | 10 ++ community/models/slab.py | 4 +- community/models/snow.py | 4 +- community/models/soil.py | 4 +- community/models/stairs.py | 4 +- community/models/tinted_glass.py | 4 +- community/models/torch.py | 2 +- community/models/zombie.py | 10 ++ community/player.py | 54 +++---- community/save.py | 30 ++-- community/shader.py | 8 +- community/shaders/entity/frag.glsl | 18 +++ community/shaders/entity/vert.glsl | 25 +++ community/textures/cow.png | Bin 0 -> 1948 bytes community/textures/creeper.png | Bin 0 -> 3074 bytes community/textures/curry.png | Bin 0 -> 702 bytes community/textures/pig.png | Bin 0 -> 1391 bytes community/textures/skeleton.png | Bin 0 -> 1183 bytes community/textures/zombie.png | Bin 0 -> 1734 bytes community/world.py | 234 ++++++++++++++++++++--------- 49 files changed, 757 insertions(+), 313 deletions(-) create mode 100644 community/data/entities.mcpy create mode 100644 community/entity_type.py create mode 100644 community/mob.py create mode 100644 community/models/cow.py create mode 100644 community/models/creeper.py create mode 100644 community/models/curry.py create mode 100644 community/models/pig.py create mode 100644 community/models/skeleton.py create mode 100644 community/models/zombie.py create mode 100644 community/shaders/entity/frag.glsl create mode 100644 community/shaders/entity/vert.glsl create mode 100644 community/textures/cow.png create mode 100644 community/textures/creeper.png create mode 100644 community/textures/curry.png create mode 100644 community/textures/pig.png create mode 100644 community/textures/skeleton.png create mode 100644 community/textures/zombie.png diff --git a/community/chunk.py b/community/chunk.py index ae351415..0d99093f 100644 --- a/community/chunk.py +++ b/community/chunk.py @@ -3,7 +3,7 @@ import pyglet.gl as gl -import subchunk +import subchunk import options @@ -14,8 +14,7 @@ class Chunk: def __init__(self, world, chunk_position): self.world = world - self.shader_chunk_offset_location = self.world.shader.find_uniform(b"u_ChunkPosition") - + self.modified = False self.chunk_position = chunk_position @@ -23,7 +22,7 @@ def __init__(self, world, chunk_position): self.chunk_position[0] * CHUNK_WIDTH, self.chunk_position[1] * CHUNK_HEIGHT, self.chunk_position[2] * CHUNK_LENGTH) - + self.blocks = [[[0 for z in range(CHUNK_LENGTH)] for y in range(CHUNK_HEIGHT)] for x in range(CHUNK_WIDTH)] @@ -31,10 +30,10 @@ def __init__(self, world, chunk_position): self.lightmap = [[[0 for z in range(CHUNK_LENGTH)] for y in range(CHUNK_HEIGHT)] for x in range(CHUNK_WIDTH)] - + self.subchunks = {} self.chunk_update_queue = deque() - + for x in range(int(CHUNK_WIDTH / subchunk.SUBCHUNK_WIDTH)): for y in range(int(CHUNK_HEIGHT / subchunk.SUBCHUNK_HEIGHT)): for z in range(int(CHUNK_LENGTH / subchunk.SUBCHUNK_LENGTH)): @@ -53,48 +52,48 @@ def __init__(self, world, chunk_position): self.vao = gl.GLuint(0) gl.glGenVertexArrays(1, self.vao) gl.glBindVertexArray(self.vao) - + self.vbo = gl.GLuint(0) gl.glGenBuffers(1, self.vbo) gl.glBindBuffer(gl.GL_ARRAY_BUFFER, self.vbo) gl.glBufferData(gl.GL_ARRAY_BUFFER, ctypes.sizeof(gl.GLfloat * CHUNK_WIDTH * CHUNK_HEIGHT * CHUNK_LENGTH * 7), None, gl.GL_DYNAMIC_DRAW) - gl.glVertexAttribPointer(0, 3, gl.GL_FLOAT, + gl.glVertexAttribPointer(0, 3, gl.GL_FLOAT, gl.GL_FALSE, 7 * ctypes.sizeof(gl.GLfloat), 0) gl.glEnableVertexAttribArray(0) - gl.glVertexAttribPointer(1, 1, gl.GL_FLOAT, + gl.glVertexAttribPointer(1, 1, gl.GL_FLOAT, gl.GL_FALSE, 7 * ctypes.sizeof(gl.GLfloat), 3 * ctypes.sizeof(gl.GLfloat)) gl.glEnableVertexAttribArray(1) - gl.glVertexAttribPointer(2, 1, gl.GL_FLOAT, + gl.glVertexAttribPointer(2, 1, gl.GL_FLOAT, gl.GL_FALSE, 7 * ctypes.sizeof(gl.GLfloat), 4 * ctypes.sizeof(gl.GLfloat)) gl.glEnableVertexAttribArray(2) - gl.glVertexAttribPointer(3, 1, gl.GL_FLOAT, + gl.glVertexAttribPointer(3, 1, gl.GL_FLOAT, gl.GL_FALSE, 7 * ctypes.sizeof(gl.GLfloat), 5 * ctypes.sizeof(gl.GLfloat)) gl.glEnableVertexAttribArray(3) - gl.glVertexAttribPointer(4, 1, gl.GL_FLOAT, + gl.glVertexAttribPointer(4, 1, gl.GL_FLOAT, gl.GL_FALSE, 7 * ctypes.sizeof(gl.GLfloat), 6 * ctypes.sizeof(gl.GLfloat)) gl.glEnableVertexAttribArray(4) - + gl.glBindBuffer(gl.GL_ELEMENT_ARRAY_BUFFER, world.ibo) - + if self.world.options.INDIRECT_RENDERING: self.indirect_command_buffer = gl.GLuint(0) gl.glGenBuffers(1, self.indirect_command_buffer) gl.glBindBuffer(gl.GL_DRAW_INDIRECT_BUFFER, self.indirect_command_buffer) gl.glBufferData( - gl.GL_DRAW_INDIRECT_BUFFER, + gl.GL_DRAW_INDIRECT_BUFFER, ctypes.sizeof(gl.GLuint * 10), None, gl.GL_DYNAMIC_DRAW - ) + ) self.draw_commands = [] self.occlusion_query = gl.GLuint(0) gl.glGenQueries(1, self.occlusion_query) - + def __del__(self): gl.glDeleteQueries(1, self.occlusion_query) @@ -132,20 +131,20 @@ def get_transparency(self, position): if not block_type: return 2 - + return block_type.transparent def is_opaque_block(self, position): # get block type and check if it's opaque or not # air counts as a transparent block, so test for that too - + block_type = self.world.block_types[self.get_block_number(position)] - + if not block_type: return False - + return not block_type.transparent - + def update_subchunk_meshes(self): self.chunk_update_queue.clear() for subchunk in self.subchunks.values(): @@ -193,7 +192,7 @@ def process_chunk_updates(self): def update_mesh(self): # combine all the small subchunk meshes into one big chunk mesh - + for subchunk in self.subchunks.values(): self.mesh += subchunk.mesh self.translucent_mesh += subchunk.translucent_mesh @@ -208,7 +207,7 @@ def update_mesh(self): self.mesh = [] self.translucent_mesh = [] - + def send_mesh_data_to_gpu(self): # pass mesh data to gpu if not self.mesh_quad_count: return @@ -217,8 +216,8 @@ def send_mesh_data_to_gpu(self): # pass mesh data to gpu gl.glBindBuffer(gl.GL_ARRAY_BUFFER, self.vbo) gl.glBufferData(gl.GL_ARRAY_BUFFER, # Orphaning - ctypes.sizeof(gl.GLfloat * CHUNK_WIDTH * CHUNK_HEIGHT * CHUNK_LENGTH * 7), - None, + ctypes.sizeof(gl.GLfloat * CHUNK_WIDTH * CHUNK_HEIGHT * CHUNK_LENGTH * 7), + None, gl.GL_DYNAMIC_DRAW ) gl.glBufferSubData( @@ -236,7 +235,7 @@ def send_mesh_data_to_gpu(self): # pass mesh data to gpu if not self.world.options.INDIRECT_RENDERING: return - + self.draw_commands = [ # Index Count Instance Count Base Index Base Vertex Base Instance self.mesh_quad_count * 6, 1, 0, 0, 0, # Opaque mesh commands @@ -255,7 +254,7 @@ def draw_direct(self, mode): if not self.mesh_quad_count: return gl.glBindVertexArray(self.vao) - gl.glUniform2i(self.shader_chunk_offset_location, self.chunk_position[0], self.chunk_position[2]) + gl.glUniform2i(self.world.block_shader_chunk_offset_location, self.chunk_position[0], self.chunk_position[2]) gl.glDrawElements( mode, self.mesh_quad_count * 6, @@ -269,7 +268,7 @@ def draw_indirect(self, mode): gl.glBindVertexArray(self.vao) gl.glBindBuffer(gl.GL_DRAW_INDIRECT_BUFFER, self.indirect_command_buffer) - gl.glUniform2i(self.shader_chunk_offset_location, self.chunk_position[0], self.chunk_position[2]) + gl.glUniform2i(self.world.block_shader_chunk_offset_location, self.chunk_position[0], self.chunk_position[2]) gl.glDrawElementsIndirect( mode, @@ -282,7 +281,7 @@ def draw_direct_advanced(self, mode): return gl.glBindVertexArray(self.vao) - gl.glUniform2i(self.shader_chunk_offset_location, self.chunk_position[0], self.chunk_position[2]) + gl.glUniform2i(self.world.block_shader_chunk_offset_location, self.chunk_position[0], self.chunk_position[2]) gl.glBeginQuery(gl.GL_ANY_SAMPLES_PASSED, self.occlusion_query) gl.glDrawElements( @@ -293,7 +292,7 @@ def draw_direct_advanced(self, mode): ) gl.glEndQuery(gl.GL_ANY_SAMPLES_PASSED) - + gl.glBeginConditionalRender(self.occlusion_query, gl.GL_QUERY_BY_REGION_WAIT) gl.glDrawElements( mode, @@ -309,7 +308,7 @@ def draw_indirect_advanced(self, mode): gl.glBindVertexArray(self.vao) gl.glBindBuffer(gl.GL_DRAW_INDIRECT_BUFFER, self.indirect_command_buffer) - gl.glUniform2i(self.shader_chunk_offset_location, self.chunk_position[0], self.chunk_position[2]) + gl.glUniform2i(self.world.block_shader_chunk_offset_location, self.chunk_position[0], self.chunk_position[2]) gl.glBeginQuery(gl.GL_ANY_SAMPLES_PASSED, self.occlusion_query) gl.glDrawElementsIndirect( @@ -319,7 +318,7 @@ def draw_indirect_advanced(self, mode): ) gl.glEndQuery(gl.GL_ANY_SAMPLES_PASSED) - + gl.glBeginConditionalRender(self.occlusion_query, gl.GL_QUERY_BY_REGION_WAIT) gl.glDrawElementsIndirect( mode, @@ -335,9 +334,9 @@ def draw_indirect_advanced(self, mode): def draw_translucent_direct(self, mode): if not self.mesh_quad_count: return - + gl.glBindVertexArray(self.vao) - gl.glUniform2i(self.shader_chunk_offset_location, self.chunk_position[0], self.chunk_position[2]) + gl.glUniform2i(self.world.block_shader_chunk_offset_location, self.chunk_position[0], self.chunk_position[2]) gl.glDrawElementsBaseVertex( mode, @@ -350,10 +349,10 @@ def draw_translucent_direct(self, mode): def draw_translucent_indirect(self, mode): if not self.translucent_quad_count: return - + gl.glBindVertexArray(self.vao) gl.glBindBuffer(gl.GL_DRAW_INDIRECT_BUFFER, self.indirect_command_buffer) - gl.glUniform2i(self.shader_chunk_offset_location, self.chunk_position[0], self.chunk_position[2]) + gl.glUniform2i(self.world.block_shader_chunk_offset_location, self.chunk_position[0], self.chunk_position[2]) gl.glMemoryBarrier(gl.GL_COMMAND_BARRIER_BIT) @@ -364,4 +363,4 @@ def draw_translucent_indirect(self, mode): ) draw_translucent = draw_translucent_indirect if options.INDIRECT_RENDERING else draw_translucent_direct - + diff --git a/community/controller.py b/community/controller.py index 7972e38c..408bb119 100644 --- a/community/controller.py +++ b/community/controller.py @@ -2,6 +2,7 @@ import player import chunk import hit +import mob from enum import IntEnum @@ -21,6 +22,7 @@ class MiscMode(IntEnum): TELEPORT = 6 TOGGLE_F3 = 7 TOGGLE_AO = 8 + SPAWN = 9 class MoveMode(IntEnum): LEFT = 0 @@ -54,6 +56,13 @@ def hit_callback(current_block, next_block): def misc(self, mode): if mode == self.MiscMode.RANDOM: self.game.holding = random.randint(1, len(self.game.world.block_types) - 1) + + elif mode == self.MiscMode.SPAWN: + _mob = mob.Mob(self.game.world, random.choice([*self.game.world.entity_types.values()])) + self.game.world.entities.append(_mob) + + _mob.teleport(self.game.player.position) + elif mode == self.MiscMode.SAVE: self.game.world.save.save() elif mode == self.MiscMode.ESCAPE: @@ -121,4 +130,4 @@ def start_modifier(self, mode): def end_modifier(self, mode): if mode == self.ModifierMode.SPRINT: - self.game.player.target_speed = player.WALKING_SPEED \ No newline at end of file + self.game.player.target_speed = player.WALKING_SPEED diff --git a/community/data/entities.mcpy b/community/data/entities.mcpy new file mode 100644 index 00000000..1f9176db --- /dev/null +++ b/community/data/entities.mcpy @@ -0,0 +1,7 @@ +Player: name "Player", width 0.6, height 1.8, model models.pig, texture pig +Pig: name "Pig", width 0.9, height 0.9, model models.pig, texture pig +Zombie: name "Zombie", width 0.6, height 1.95, model models.zombie, texture zombie +Skeleton: name "Skeleton", width 0.6, height 1.99, model models.skeleton, texture skeleton +Creeper: name "Creeper", width 0.6, height 1.7, model models.creeper, texture creeper +Cow: name "Cow", width 0.9, height 1.3, model models.cow, texture cow +Curry: name "Curry", width 0.9, height 1.8, model models.curry, texture curry diff --git a/community/entity.py b/community/entity.py index 27ab70ae..7f9d5d00 100644 --- a/community/entity.py +++ b/community/entity.py @@ -1,10 +1,15 @@ import math +import random + +import glm + import collider +import chunk FLYING_ACCEL = (0, 0, 0) GRAVITY_ACCEL = (0, -32, 0) -# these values all come (losely) from Minecraft, but are multiplied by 20 (since Minecraft runs at 20 TPS) +# these values all come (loosely) from Minecraft, but are multiplied by 20 (since Minecraft runs at 20 TPS) FRICTION = ( 20, 20, 20) @@ -13,13 +18,15 @@ DRAG_FALL = (1.8, 0.4, 1.8) class Entity: - def __init__(self, world): + def __init__(self, world, entity_type): self.world = world + self.entity_type = entity_type # physical variables self.jump_height = 1.25 self.flying = False + self.ghost = False self.position = [0, 80, 0] self.rotation = [-math.tau / 4, 0] @@ -34,23 +41,22 @@ def __init__(self, world): # collision variables - self.width = 0.6 - self.height = 1.8 - self.collider = collider.Collider() + self.grounded = False + self.wall = False def update_collider(self): x, y, z = self.position - self.collider.x1 = x - self.width / 2 - self.collider.x2 = x + self.width / 2 + self.collider.x1 = x - self.entity_type.width / 2 + self.collider.x2 = x + self.entity_type.width / 2 self.collider.y1 = y - self.collider.y2 = y + self.height + self.collider.y2 = y + self.entity_type.height - self.collider.z1 = z - self.width / 2 - self.collider.z2 = z + self.width / 2 + self.collider.z1 = z - self.entity_type.width / 2 + self.collider.z2 = z + self.entity_type.width / 2 def teleport(self, pos): self.position = list(pos) @@ -65,7 +71,40 @@ def jump(self, height = None): if height is None: height = self.jump_height - self.velocity[1] = math.sqrt(2 * height * -GRAVITY_ACCEL[1]) + self.velocity[1] = math.sqrt(-2 * GRAVITY_ACCEL[1] * height) + + def reset(self): + # how large is the world? + + max_y = 0 + + max_x, max_z = (0, 0) + min_x, min_z = (0, 0) + + for pos in self.world.chunks: + x, y, z = pos + + max_y = max(max_y, (y + 1) * chunk.CHUNK_HEIGHT) + + max_x = max(max_x, (x + 1) * chunk.CHUNK_WIDTH) + min_x = min(min_x, x * chunk.CHUNK_WIDTH) + + max_z = max(max_z, (z + 1) * chunk.CHUNK_LENGTH) + min_z = min(min_z, z * chunk.CHUNK_LENGTH) + + # get random X & Z coordinates to teleport the player to + + x = random.randint(min_x, max_x) + z = random.randint(min_z, max_z) + + # find height at which to teleport to, by finding the first non-air block from the top of the world + + for y in range(chunk.CHUNK_HEIGHT - 1, -1, -1): + if not self.world.get_block_number((x, y, z)): + continue + + self.teleport((x, y + 1, z)) + break @property def friction(self): @@ -80,84 +119,93 @@ def friction(self): return DRAG_FALL - def update(self, delta_time): - self.step = 1 - self.old_position = tuple(self.position) - - # apply input acceleration, and adjust for friction/drag + def resolve_collision(self, delta_time): + adjusted_velocity = [v * delta_time for v in self.velocity] + vx, vy, vz = adjusted_velocity - self.velocity = [v + a * f * delta_time for v, a, f in zip(self.velocity, self.accel, self.friction)] - self.accel = [0, 0, 0] + # find all the blocks we could potentially be colliding with + # this step is known as "broad-phasing" - # compute collisions + step_x = 1 if vx > 0 else -1 + step_y = 1 if vy > 0 else -1 + step_z = 1 if vz > 0 else -1 - self.update_collider() - self.grounded = False + steps_xz = int(self.entity_type.width / 2) + steps_y = int(self.entity_type.height) - for _ in range(3): - adjusted_velocity = [v * delta_time for v in self.velocity] - vx, vy, vz = adjusted_velocity + x, y, z = map(int, self.position) + cx, cy, cz = [int(p + v) for p, v in zip(self.position, adjusted_velocity)] - # find all the blocks we could potentially be colliding with - # this step is known as "broad-phasing" + potential_collisions = [] - step_x = 1 if vx > 0 else -1 - step_y = 1 if vy > 0 else -1 - step_z = 1 if vz > 0 else -1 + for i in range(x - step_x * (steps_xz + 1), cx + step_x * (steps_xz + 2), step_x): + for j in range(y - step_y * (steps_y + 2), cy + step_y * (steps_y + 3), step_y): + for k in range(z - step_z * (steps_xz + 1), cz + step_z * (steps_xz + 2), step_z): + pos = (i, j, k) + num = self.world.get_block_number(pos) - steps_xz = int(self.width / 2) - steps_y = int(self.height) + if not num: + continue - x, y, z = map(int, self.position) - cx, cy, cz = [int(x + v) for x, v in zip(self.position, adjusted_velocity)] + for _collider in self.world.block_types[num].colliders: + entry_time, normal = self.collider.collide(_collider + pos, adjusted_velocity) - potential_collisions = [] + if normal is None: + continue - for i in range(x - step_x * (steps_xz + 1), cx + step_x * (steps_xz + 2), step_x): - for j in range(y - step_y * (steps_y + 2), cy + step_y * (steps_y + 3), step_y): - for k in range(z - step_z * (steps_xz + 1), cz + step_z * (steps_xz + 2), step_z): - pos = (i, j, k) - num = self.world.get_block_number(pos) + potential_collisions.append((entry_time, normal)) - if not num: - continue + # get first collision + + if not potential_collisions: + return + + entry_time, normal = min(potential_collisions, key = lambda x: x[0]) + entry_time -= 0.001 + + if normal[0]: + self.velocity[0] = 0 + self.position[0] += vx * entry_time - for _collider in self.world.block_types[num].colliders: - entry_time, normal = self.collider.collide(_collider + pos, adjusted_velocity) + if normal[1]: + self.velocity[1] = 0 + self.position[1] += vy * entry_time - if normal is None: - continue + if normal[2]: + self.velocity[2] = 0 + self.position[2] += vz * entry_time - potential_collisions.append((entry_time, normal)) + if normal[0] or normal[2]: + self.wall = True - # get first collision + if normal[1] == 1: + self.grounded = True + + def update(self, delta_time): + self.step = 1 + self.old_position = tuple(self.position) + + # apply input acceleration, and adjust for friction/drag - if not potential_collisions: - break + self.velocity = [v + a * f * delta_time for v, a, f in zip(self.velocity, self.accel, self.friction)] + self.accel = [0, 0, 0] - entry_time, normal = min(potential_collisions, key = lambda x: x[0]) - entry_time -= 0.001 + # compute collisions - if normal[0]: - self.velocity[0] = 0 - self.position[0] += vx * entry_time - - if normal[1]: - self.velocity[1] = 0 - self.position[1] += vy * entry_time + self.update_collider() - if normal[2]: - self.velocity[2] = 0 - self.position[2] += vz * entry_time + self.grounded = False + self.wall = False - if normal[1] == 1: - self.grounded = True + if not self.ghost: + for _ in range(3): + self.resolve_collision(delta_time) self.position = [x + v * delta_time for x, v in zip(self.position, self.velocity)] # apply gravity acceleration - gravity = (GRAVITY_ACCEL, FLYING_ACCEL)[self.flying] + gravity = FLYING_ACCEL if self.flying else GRAVITY_ACCEL self.velocity = [v + a * delta_time for v, a in zip(self.velocity, gravity)] # apply friction/drag @@ -166,4 +214,20 @@ def update(self, delta_time): # make sure we can rely on the entity's collider outside of this function - self.update_collider() \ No newline at end of file + self.update_collider() + + def draw(self): + # compute transformation matrix + + transform = glm.mat4(1) + + transform = glm.translate(transform, glm.vec3(*self.position)) + transform = glm.rotate(transform, self.rotation[1], glm.vec3(1, 0, 0)) + transform = glm.rotate(transform, self.rotation[0], glm.vec3(0, 1, 0)) + + # actually draw entity + + self.world.entity_shader.uniform_matrix(self.world.entity_shader_transform_matrix_location, transform) + self.world.entity_shader.uniform_matrix(self.world.entity_shader_matrix_location, self.world.mvp_matrix * transform) + + self.entity_type.draw() diff --git a/community/entity_type.py b/community/entity_type.py new file mode 100644 index 00000000..c9e6565b --- /dev/null +++ b/community/entity_type.py @@ -0,0 +1,150 @@ +import ctypes +import pyglet + +import pyglet.gl as gl + +import models.pig # default model + +class Entity_type: + def __init__(self, world, name = "unknown", texture = "pig", model = models.pig, width = 0.6, height = 1.8): + self.world = world + + self.name = name + self.model = model + + self.width = width + self.height = height + + # load texture image + + texture_image = pyglet.image.load(f"textures/{texture}.png").get_image_data() + + self.texture_width = texture_image.width + self.texture_height = texture_image.height + + # create texture + + self.texture = gl.GLuint(0) + gl.glGenTextures(1, self.texture) + gl.glBindTexture(gl.GL_TEXTURE_2D, self.texture) + + gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MIN_FILTER, gl.GL_NEAREST) + gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MAG_FILTER, gl.GL_NEAREST) + + gl.glTexImage2D( + gl.GL_TEXTURE_2D, 0, gl.GL_RGBA, + self.texture_width, self.texture_height, + 0, gl.GL_RGBA, gl.GL_UNSIGNED_BYTE, + texture_image.get_data("RGBA", self.texture_width * 4)) + + gl.glGenerateMipmap(gl.GL_TEXTURE_2D) + + # convert model to arrays we can send to the GPU + + self.vertices = sum(model.vertex_positions, []) + self.tex_coords = sum(model.tex_coords, []) + + del self.tex_coords[2::3] + + # get normal vector for each face + + self.normals = [] + + for face in model.vertex_positions: + # take the cross product between two vectors we know are on the plane the face belongs to + + u = [face[0] - face[3], face[1] - face[4], face[2] - face[5]] + v = [face[0] - face[6], face[1] - face[7], face[2] - face[8]] + + n = [ + u[1] * v[2] - u[2] * v[1], + -u[0] * v[2] + u[2] * v[0], + u[0] * v[1] - u[1] * v[0], + ] + + self.normals.extend(n * 4) + + # compute indices + + self.indices = [] + + for i in range(len(model.vertex_positions)): + self.indices.extend(x + i * 4 for x in (0, 1, 2, 0, 2, 3)) + + # create VAO/VBO/IBO + + self.vao = gl.GLuint(0) + gl.glGenVertexArrays(1, self.vao) + gl.glBindVertexArray(self.vao) + + # vertex positions + + self.vertices_vbo = gl.GLuint(0) + gl.glGenBuffers(1, self.vertices_vbo) + + gl.glBindBuffer(gl.GL_ARRAY_BUFFER, self.vertices_vbo) + gl.glBufferData( + gl.GL_ARRAY_BUFFER, + ctypes.sizeof(gl.GLfloat * len(self.vertices)), + (gl.GLfloat * len(self.vertices)) (*self.vertices), + gl.GL_STATIC_DRAW) + + gl.glVertexAttribPointer(0, 3, gl.GL_FLOAT, gl.GL_FALSE, 0, 0) + gl.glEnableVertexAttribArray(0) + + # texture coordinates + + self.tex_coords_vbo = gl.GLuint(0) + gl.glGenBuffers(1, self.tex_coords_vbo) + + gl.glBindBuffer(gl.GL_ARRAY_BUFFER, self.tex_coords_vbo) + gl.glBufferData( + gl.GL_ARRAY_BUFFER, + ctypes.sizeof(gl.GLfloat * len(self.tex_coords)), + (gl.GLfloat * len(self.tex_coords)) (*self.tex_coords), + gl.GL_STATIC_DRAW) + + # texture coordinates are still 3D here even though we don't use texture arrays (as is the case with blocks) + # this is so that we can interchange block & entity models + + gl.glVertexAttribPointer(1, 2, gl.GL_FLOAT, gl.GL_FALSE, 0, 0) + gl.glEnableVertexAttribArray(1) + + # normals + + self.normals_vbo = gl.GLuint(0) + gl.glGenBuffers(1, self.normals_vbo) + + gl.glBindBuffer(gl.GL_ARRAY_BUFFER, self.normals_vbo) + gl.glBufferData( + gl.GL_ARRAY_BUFFER, + ctypes.sizeof(gl.GLfloat * len(self.normals)), + (gl.GLfloat * len(self.normals)) (*self.normals), + gl.GL_STATIC_DRAW) + + gl.glVertexAttribPointer(2, 3, gl.GL_FLOAT, gl.GL_FALSE, 0, 0) + gl.glEnableVertexAttribArray(2) + + # indices + + self.ibo = gl.GLuint(0) + gl.glGenBuffers(1, self.ibo) + + gl.glBindBuffer(gl.GL_ELEMENT_ARRAY_BUFFER, self.ibo) + gl.glBufferData( + gl.GL_ELEMENT_ARRAY_BUFFER, + ctypes.sizeof(gl.GLuint * len(self.indices)), + (gl.GLuint * len(self.indices)) (*self.indices), + gl.GL_STATIC_DRAW) + + def draw(self): + # bind textures + + gl.glActiveTexture(gl.GL_TEXTURE0) + gl.glBindTexture(gl.GL_TEXTURE_2D, self.texture) + gl.glUniform1i(self.world.entity_shader_sampler_location, 0) + + # draw entity + + gl.glBindVertexArray(self.vao) + gl.glDrawElements(gl.GL_TRIANGLES, len(self.indices), gl.GL_UNSIGNED_INT, None) diff --git a/community/keyboard_mouse.py b/community/keyboard_mouse.py index c1146707..419019dc 100644 --- a/community/keyboard_mouse.py +++ b/community/keyboard_mouse.py @@ -50,6 +50,7 @@ def on_key_press(self, key, modifiers): elif key == pyglet.window.key.LCTRL : self.start_modifier(self.ModifierMode.SPRINT) + elif key == pyglet.window.key.E: self.misc(self.MiscMode.SPAWN) elif key == pyglet.window.key.F: self.misc(self.MiscMode.FLY) elif key == pyglet.window.key.G: self.misc(self.MiscMode.RANDOM) elif key == pyglet.window.key.O: self.misc(self.MiscMode.SAVE) @@ -71,4 +72,4 @@ def on_key_release(self, key, modifiers): elif key == pyglet.window.key.SPACE : self.end_move(self.MoveMode.UP) elif key == pyglet.window.key.LSHIFT: self.end_move(self.MoveMode.DOWN) - elif key == pyglet.window.key.LCTRL : self.end_modifier(self.ModifierMode.SPRINT) \ No newline at end of file + elif key == pyglet.window.key.LCTRL : self.end_modifier(self.ModifierMode.SPRINT) diff --git a/community/main.py b/community/main.py index 40743f3e..4affeada 100644 --- a/community/main.py +++ b/community/main.py @@ -1,5 +1,6 @@ import platform import ctypes +import math import logging import random import time @@ -13,7 +14,6 @@ pyglet.options["audio"] = ("openal", "pulse", "directsound", "xaudio2", "silent") import pyglet.gl as gl -import shader import player import texture_manager @@ -42,7 +42,6 @@ def __init__(self, options): self.COLORED_LIGHTING = options.COLORED_LIGHTING self.ANTIALIASING = options.ANTIALIASING - class Window(pyglet.window.Window): def __init__(self, **args): super().__init__(**args) @@ -52,9 +51,9 @@ def __init__(self, **args): if self.options.INDIRECT_RENDERING and not gl.gl_info.have_version(4, 2): raise RuntimeError("""Indirect Rendering is not supported on your hardware - This feature is only supported on OpenGL 4.2+, but your driver doesnt seem to support it, + This feature is only supported on OpenGL 4.2+, but your driver doesnt seem to support it, Please disable "INDIRECT_RENDERING" in options.py""") - + # F3 Debug Screen self.show_f3 = False @@ -67,19 +66,10 @@ def __init__(self, **args): self.system_info = f"""Python: {platform.python_implementation()} {platform.python_version()} System: {platform.machine()} {platform.system()} {platform.release()} {platform.version()} CPU: {platform.processor()} -Display: {gl.gl_info.get_renderer()} +Display: {gl.gl_info.get_renderer()} {gl.gl_info.get_version()}""" logging.info(f"System Info: {self.system_info}") - # create shader - - logging.info("Compiling Shaders") - if not self.options.COLORED_LIGHTING: - self.shader = shader.Shader("shaders/alpha_lighting/vert.glsl", "shaders/alpha_lighting/frag.glsl") - else: - self.shader = shader.Shader("shaders/colored_lighting/vert.glsl", "shaders/colored_lighting/frag.glsl") - self.shader_sampler_location = self.shader.find_uniform(b"u_TextureArraySampler") - self.shader.use() # create textures logging.info("Creating Texture Array") @@ -87,12 +77,12 @@ def __init__(self, **args): # create world - self.world = world.World(self.shader, None, self.texture_manager, self.options) + self.world = world.World(None, self.texture_manager, self.options) # player stuff logging.info("Setting up player & camera") - self.player = player.Player(self.world, self.shader, self.width, self.height) + self.player = player.Player(self.world, self.width, self.height) self.world.player = self.player # pyglet stuff @@ -104,18 +94,11 @@ def __init__(self, **args): self.holding = 50 - # bind textures - - gl.glActiveTexture(gl.GL_TEXTURE0) - gl.glBindTexture(gl.GL_TEXTURE_2D_ARRAY, self.world.texture_manager.texture_array) - gl.glUniform1i(self.shader_sampler_location, 0) - # enable cool stuff gl.glEnable(gl.GL_DEPTH_TEST) - gl.glEnable(gl.GL_CULL_FACE) gl.glBlendFunc(gl.GL_SRC_ALPHA, gl.GL_ONE_MINUS_SRC_ALPHA) - + if self.options.ANTIALIASING: gl.glEnable(gl.GL_MULTISAMPLE) gl.glEnable(gl.GL_SAMPLE_ALPHA_TO_COVERAGE) @@ -151,7 +134,7 @@ def __init__(self, **args): # GPU command syncs self.fences = deque() - + def toggle_fullscreen(self): self.set_fullscreen(not self.fullscreen) @@ -214,9 +197,15 @@ def update(self, delta_time): self.world.tick(delta_time) + # update other entities + + entities = sorted(self.world.entities, key = lambda e: math.sqrt(sum(map(lambda x: (x[0] - x[1]) ** 2, zip(e.position, self.player.position))))) + + for entity in entities[:5]: + entity.update(delta_time) + def on_draw(self): gl.glEnable(gl.GL_DEPTH_TEST) - self.shader.use() self.player.update_matrices() while len(self.fences) > self.options.MAX_CPU_AHEAD_FRAMES: @@ -241,7 +230,7 @@ def on_draw(self): def draw_f3(self): """Draws the f3 debug screen. Current uses the fixed-function pipeline since pyglet labels uses it""" gl.glDisable(gl.GL_DEPTH_TEST) - gl.glUseProgram(0) + gl.glUseProgram(0) gl.glBindVertexArray(0) gl.glMatrixMode(gl.GL_MODELVIEW) gl.glPushMatrix() @@ -259,7 +248,6 @@ def draw_f3(self): gl.glMatrixMode(gl.GL_MODELVIEW) gl.glPopMatrix() - # input functions def on_resize(self, width, height): @@ -278,7 +266,7 @@ def __init__(self): depth_size = 16, sample_buffers=bool(options.ANTIALIASING), samples=options.ANTIALIASING) self.window = Window(config = self.config, width = 852, height = 480, caption = "Minecraft clone", resizable = True, vsync = options.VSYNC) - def run(self): + def run(self): pyglet.app.run() @@ -294,7 +282,7 @@ def init_logger(): with open(log_path, 'x') as file: file.write("[LOGS]\n") - logging.basicConfig(level=logging.INFO, filename=log_path, + logging.basicConfig(level=logging.INFO, filename=log_path, format="[%(asctime)s] [%(processName)s/%(threadName)s/%(levelname)s] (%(module)s.py/%(funcName)s) %(message)s") diff --git a/community/mob.py b/community/mob.py new file mode 100644 index 00000000..47253cfb --- /dev/null +++ b/community/mob.py @@ -0,0 +1,50 @@ +import random +import math + +import entity + +class Mob(entity.Entity): + def __init__(self, world, entity_type): + super().__init__(world, entity_type) + + self.heading = 0 + self.select_target() + + self.reset() + + def select_target(self): + self.target = [x + random.randint(-10, 10) for x in self.position] + + def update(self, delta_time): + if not random.randint(0, int(3 / delta_time)): # change target every 3 seconds on average + self.select_target() + + delta_x = self.position[0] - self.target[0] + delta_y = self.position[2] - self.target[2] + + self.heading = -math.atan2(delta_y, delta_x) + math.tau / 4 + self.heading += math.modf((self.rotation[0] - math.tau / 4) / math.tau)[1] * math.tau + + if delta_time * 5 > 1: + self.rotation[0] = self.heading + + else: + self.rotation[0] += (self.heading - self.rotation[0]) * delta_time * 5 + + target_dist = math.sqrt(delta_x ** 2 + delta_y ** 2) + + if target_dist > 1: + self.accel[0] = math.cos(self.rotation[0] + math.tau / 4) * 3 + self.accel[2] = -math.sin(self.rotation[0] + math.tau / 4) * 3 + + super().update(delta_time) + + if self.wall and self.grounded: + if random.randint(0, 3): + self.jump() + + else: + self.select_target() + + if self.position[1] < 0: + self.teleport((0, 80, 0)) diff --git a/community/models/__init__.py b/community/models/__init__.py index 10395346..472191d7 100644 --- a/community/models/__init__.py +++ b/community/models/__init__.py @@ -22,8 +22,13 @@ "button", "snow", "cactus", - "tinted_glass" + "tinted_glass", + "pig", + "zombie", + "skeleton", + "creeper", + "cow", + "curry", ] from . import * - diff --git a/community/models/button.py b/community/models/button.py index 3f7f6584..e56c4960 100644 --- a/community/models/button.py +++ b/community/models/button.py @@ -1,7 +1,7 @@ -translucent = False -transparent = 2 +transparent = True is_cube = False glass = False +translucent = False colliders = [] @@ -30,4 +30,4 @@ [0.4, 0.4, 0.4, 0.4], [0.8, 0.8, 0.8, 0.8], [0.8, 0.8, 0.8, 0.8], -] \ No newline at end of file +] diff --git a/community/models/cactus.py b/community/models/cactus.py index 8f04ef2d..722dcc1c 100644 --- a/community/models/cactus.py +++ b/community/models/cactus.py @@ -1,7 +1,7 @@ -translucent = False -transparent = 1 +transparent = True is_cube = False glass = False +translucent = False colliders = [ [ @@ -35,4 +35,4 @@ [0.4, 0.4, 0.4, 0.4], [0.8, 0.8, 0.8, 0.8], [0.8, 0.8, 0.8, 0.8], -] \ No newline at end of file +] diff --git a/community/models/cow.py b/community/models/cow.py new file mode 100644 index 00000000..08097faa --- /dev/null +++ b/community/models/cow.py @@ -0,0 +1,10 @@ + +transparent = True +is_cube = False +glass = False + +colliders = [] + +vertex_positions = [[-0.3749999701976776, 0.7499999403953552, 0.625, -0.3749999701976776, 0.7499999403953552, -0.5, 0.3749999701976776, 0.7499999403953552, -0.5, 0.3749999701976776, 0.7499999403953552, 0.625], [0.3749999701976776, 1.375, 0.625, 0.3749999701976776, 1.3749998807907104, -0.5, -0.3749999701976776, 1.3749998807907104, -0.5, -0.3749999701976776, 1.375, 0.625], [-0.3749999701976776, 0.7499999403953552, -0.5, -0.3749999701976776, 1.3749998807907104, -0.5, 0.3749999701976776, 1.3749998807907104, -0.5, 0.3749999701976776, 0.7499999403953552, -0.5], [0.3749999701976776, 0.7499999403953552, 0.625, 0.3749999701976776, 1.375, 0.625, -0.3749999701976776, 1.375, 0.625, -0.3749999701976776, 0.7499999403953552, 0.625], [0.3749999701976776, 0.7499999403953552, 0.625, 0.3749999701976776, 0.7499999403953552, -0.5, 0.3749999701976776, 1.3749998807907104, -0.5, 0.3749999701976776, 1.375, 0.625], [-0.3749999701976776, 1.375, 0.625, -0.3749999701976776, 1.3749998807907104, -0.5, -0.3749999701976776, 0.7499999403953552, -0.5, -0.3749999701976776, 0.7499999403953552, 0.625], [-0.1249999925494194, 0.6874999403953552, 0.625, -0.1249999925494194, 0.6874999403953552, 0.25, 0.1249999925494194, 0.6874999403953552, 0.25, 0.1249999925494194, 0.6874999403953552, 0.625], [0.1249999925494194, 0.7499999403953552, 0.625, 0.1249999925494194, 0.7499999403953552, 0.25, -0.1249999925494194, 0.7499999403953552, 0.25, -0.1249999925494194, 0.7499999403953552, 0.625], [-0.1249999925494194, 0.6874999403953552, 0.25, -0.1249999925494194, 0.7499999403953552, 0.25, 0.1249999925494194, 0.7499999403953552, 0.25, 0.1249999925494194, 0.6874999403953552, 0.25], [0.1249999925494194, 0.6874999403953552, 0.625, 0.1249999925494194, 0.7499999403953552, 0.625, -0.1249999925494194, 0.7499999403953552, 0.625, -0.1249999925494194, 0.6874999403953552, 0.625], [0.1249999925494194, 0.6874999403953552, 0.625, 0.1249999925494194, 0.6874999403953552, 0.25, 0.1249999925494194, 0.7499999403953552, 0.25, 0.1249999925494194, 0.7499999403953552, 0.625], [-0.1249999925494194, 0.7499999403953552, 0.625, -0.1249999925494194, 0.7499999403953552, 0.25, -0.1249999925494194, 0.6874999403953552, 0.25, -0.1249999925494194, 0.6874999403953552, 0.625], [-0.25, 1.0, -0.875, -0.25, 1.5, -0.875, 0.25, 1.5, -0.875, 0.25, 1.0, -0.875], [0.25, 1.0, -0.5, 0.25, 1.5, -0.5, -0.25, 1.5, -0.5, -0.25, 1.0, -0.5], [-0.25, 1.5, -0.875, -0.25, 1.5, -0.5, 0.25, 1.5, -0.5, 0.25, 1.5, -0.875], [0.25, 1.0, -0.875, 0.25, 1.0, -0.5, -0.25, 1.0, -0.5, -0.25, 1.0, -0.875], [0.25, 1.0, -0.875, 0.25, 1.5, -0.875, 0.25, 1.5, -0.5, 0.25, 1.0, -0.5], [-0.25, 1.0, -0.5, -0.25, 1.5, -0.5, -0.25, 1.5, -0.875, -0.25, 1.0, -0.875], [-0.3125, 1.375, -0.75, -0.3125, 1.5625, -0.75, -0.25, 1.5625, -0.75, -0.25, 1.375, -0.75], [-0.25, 1.375, -0.6875, -0.25, 1.5625, -0.6875, -0.3125, 1.5625, -0.6875, -0.3125, 1.375, -0.6875], [-0.3125, 1.5625, -0.75, -0.3125, 1.5625, -0.6875, -0.25, 1.5625, -0.6875, -0.25, 1.5625, -0.75], [-0.25, 1.375, -0.75, -0.25, 1.375, -0.6875, -0.3125, 1.375, -0.6875, -0.3125, 1.375, -0.75], [-0.25, 1.375, -0.75, -0.25, 1.5625, -0.75, -0.25, 1.5625, -0.6875, -0.25, 1.375, -0.6875], [-0.3125, 1.375, -0.6875, -0.3125, 1.5625, -0.6875, -0.3125, 1.5625, -0.75, -0.3125, 1.375, -0.75], [0.25, 1.375, -0.75, 0.25, 1.5625, -0.75, 0.3125, 1.5625, -0.75, 0.3125, 1.375, -0.75], [0.3125, 1.375, -0.6875, 0.3125, 1.5625, -0.6875, 0.25, 1.5625, -0.6875, 0.25, 1.375, -0.6875], [0.25, 1.5625, -0.75, 0.25, 1.5625, -0.6875, 0.3125, 1.5625, -0.6875, 0.3125, 1.5625, -0.75], [0.3125, 1.375, -0.75, 0.3125, 1.375, -0.6875, 0.25, 1.375, -0.6875, 0.25, 1.375, -0.75], [0.3125, 1.375, -0.75, 0.3125, 1.5625, -0.75, 0.3125, 1.5625, -0.6875, 0.3125, 1.375, -0.6875], [0.25, 1.375, -0.6875, 0.25, 1.5625, -0.6875, 0.25, 1.5625, -0.75, 0.25, 1.375, -0.75], [-0.3125, 0.0, 0.3125, -0.3125, 0.75, 0.3125, -0.0625, 0.75, 0.3125, -0.0625, 0.0, 0.3125], [-0.0625, 0.0, 0.5625, -0.0625, 0.75, 0.5625, -0.3125, 0.75, 0.5625, -0.3125, 0.0, 0.5625], [-0.3125, 0.75, 0.3125, -0.3125, 0.75, 0.5625, -0.0625, 0.75, 0.5625, -0.0625, 0.75, 0.3125], [-0.0625, 0.0, 0.3125, -0.0625, 0.0, 0.5625, -0.3125, 0.0, 0.5625, -0.3125, 0.0, 0.3125], [-0.0625, 0.0, 0.3125, -0.0625, 0.75, 0.3125, -0.0625, 0.75, 0.5625, -0.0625, 0.0, 0.5625], [-0.3125, 0.0, 0.5625, -0.3125, 0.75, 0.5625, -0.3125, 0.75, 0.3125, -0.3125, 0.0, 0.3125], [0.0625, 0.0, 0.3125, 0.0625, 0.75, 0.3125, 0.3125, 0.75, 0.3125, 0.3125, 0.0, 0.3125], [0.3125, 0.0, 0.5625, 0.3125, 0.75, 0.5625, 0.0625, 0.75, 0.5625, 0.0625, 0.0, 0.5625], [0.0625, 0.75, 0.3125, 0.0625, 0.75, 0.5625, 0.3125, 0.75, 0.5625, 0.3125, 0.75, 0.3125], [0.3125, 0.0, 0.3125, 0.3125, 0.0, 0.5625, 0.0625, 0.0, 0.5625, 0.0625, 0.0, 0.3125], [0.3125, 0.0, 0.3125, 0.3125, 0.75, 0.3125, 0.3125, 0.75, 0.5625, 0.3125, 0.0, 0.5625], [0.0625, 0.0, 0.5625, 0.0625, 0.75, 0.5625, 0.0625, 0.75, 0.3125, 0.0625, 0.0, 0.3125], [-0.3125, 0.0, -0.4375, -0.3125, 0.75, -0.4375, -0.0625, 0.75, -0.4375, -0.0625, 0.0, -0.4375], [-0.0625, 0.0, -0.1875, -0.0625, 0.75, -0.1875, -0.3125, 0.75, -0.1875, -0.3125, 0.0, -0.1875], [-0.3125, 0.75, -0.4375, -0.3125, 0.75, -0.1875, -0.0625, 0.75, -0.1875, -0.0625, 0.75, -0.4375], [-0.0625, 0.0, -0.4375, -0.0625, 0.0, -0.1875, -0.3125, 0.0, -0.1875, -0.3125, 0.0, -0.4375], [-0.0625, 0.0, -0.4375, -0.0625, 0.75, -0.4375, -0.0625, 0.75, -0.1875, -0.0625, 0.0, -0.1875], [-0.3125, 0.0, -0.1875, -0.3125, 0.75, -0.1875, -0.3125, 0.75, -0.4375, -0.3125, 0.0, -0.4375], [0.0625, 0.0, -0.4375, 0.0625, 0.75, -0.4375, 0.3125, 0.75, -0.4375, 0.3125, 0.0, -0.4375], [0.3125, 0.0, -0.1875, 0.3125, 0.75, -0.1875, 0.0625, 0.75, -0.1875, 0.0625, 0.0, -0.1875], [0.0625, 0.75, -0.4375, 0.0625, 0.75, -0.1875, 0.3125, 0.75, -0.1875, 0.3125, 0.75, -0.4375], [0.3125, 0.0, -0.4375, 0.3125, 0.0, -0.1875, 0.0625, 0.0, -0.1875, 0.0625, 0.0, -0.4375], [0.3125, 0.0, -0.4375, 0.3125, 0.75, -0.4375, 0.3125, 0.75, -0.1875, 0.3125, 0.0, -0.1875], [0.0625, 0.0, -0.1875, 0.0625, 0.75, -0.1875, 0.0625, 0.75, -0.4375, 0.0625, 0.0, -0.4375]] +tex_coords = [[0.06493506493506493, 0.0, 0, 0.06493506493506493, 0.6428571428571428, 0, 0.14285714285714285, 0.6428571428571428, 0, 0.14285714285714285, 0.0, 0], [0.2077922077922078, 0.0, 0, 0.2077922077922078, 0.6428571428571428, 0, 0.2857142857142857, 0.6428571428571428, 0, 0.2857142857142857, 0.0, 0], [0.06493506493506493, 0.6428571428571428, 0, 0.06493506493506493, 1.0, 0, 0.14285714285714285, 1.0, 0, 0.14285714285714285, 0.6428571428571428, 0], [0.14285714285714285, 0.6428571428571428, 0, 0.14285714285714285, 1.0, 0, 0.22077922077922077, 1.0, 0, 0.22077922077922077, 0.6428571428571428, 0], [0.14285714285714285, 0.0, 0, 0.14285714285714285, 0.6428571428571428, 0, 0.2077922077922078, 0.6428571428571428, 0, 0.2077922077922078, 0.0, 0], [0.0, 0.0, 0, 0.0, 0.6428571428571428, 0, 0.06493506493506493, 0.6428571428571428, 0, 0.06493506493506493, 0.0, 0], [0.2922077922077922, 0.75, 0, 0.2922077922077922, 0.9642857142857143, 0, 0.3181818181818182, 0.9642857142857143, 0, 0.3181818181818182, 0.75, 0], [0.3246753246753247, 0.75, 0, 0.3246753246753247, 0.9642857142857143, 0, 0.35064935064935066, 0.9642857142857143, 0, 0.35064935064935066, 0.75, 0], [0.2922077922077922, 0.9642857142857143, 0, 0.2922077922077922, 1.0, 0, 0.3181818181818182, 1.0, 0, 0.3181818181818182, 0.9642857142857143, 0], [0.3181818181818182, 0.9642857142857143, 0, 0.3181818181818182, 1.0, 0, 0.34415584415584416, 1.0, 0, 0.34415584415584416, 0.9642857142857143, 0], [0.3181818181818182, 0.75, 0, 0.3181818181818182, 0.9642857142857143, 0, 0.3246753246753247, 0.9642857142857143, 0, 0.3246753246753247, 0.75, 0], [0.2857142857142857, 0.75, 0, 0.2857142857142857, 0.9642857142857143, 0, 0.2922077922077922, 0.9642857142857143, 0, 0.2922077922077922, 0.75, 0], [0.38961038961038963, 0.5, 0, 0.38961038961038963, 0.7857142857142857, 0, 0.44155844155844154, 0.7857142857142857, 0, 0.44155844155844154, 0.5, 0], [0.4805194805194805, 0.5, 0, 0.4805194805194805, 0.7857142857142857, 0, 0.5324675324675324, 0.7857142857142857, 0, 0.5324675324675324, 0.5, 0], [0.38961038961038963, 0.7857142857142857, 0, 0.38961038961038963, 1.0, 0, 0.44155844155844154, 1.0, 0, 0.44155844155844154, 0.7857142857142857, 0], [0.44155844155844154, 0.7857142857142857, 0, 0.44155844155844154, 1.0, 0, 0.4935064935064935, 1.0, 0, 0.4935064935064935, 0.7857142857142857, 0], [0.44155844155844154, 0.5, 0, 0.44155844155844154, 0.7857142857142857, 0, 0.4805194805194805, 0.7857142857142857, 0, 0.4805194805194805, 0.5, 0], [0.35064935064935066, 0.5, 0, 0.35064935064935066, 0.7857142857142857, 0, 0.38961038961038963, 0.7857142857142857, 0, 0.38961038961038963, 0.5, 0], [0.538961038961039, 0.8571428571428572, 0, 0.538961038961039, 0.9642857142857143, 0, 0.5454545454545454, 0.9642857142857143, 0, 0.5454545454545454, 0.8571428571428572, 0], [0.551948051948052, 0.8571428571428572, 0, 0.551948051948052, 0.9642857142857143, 0, 0.5584415584415584, 0.9642857142857143, 0, 0.5584415584415584, 0.8571428571428572, 0], [0.538961038961039, 0.9642857142857143, 0, 0.538961038961039, 1.0, 0, 0.5454545454545454, 1.0, 0, 0.5454545454545454, 0.9642857142857143, 0], [0.5454545454545454, 0.9642857142857143, 0, 0.5454545454545454, 1.0, 0, 0.551948051948052, 1.0, 0, 0.551948051948052, 0.9642857142857143, 0], [0.5454545454545454, 0.8571428571428572, 0, 0.5454545454545454, 0.9642857142857143, 0, 0.551948051948052, 0.9642857142857143, 0, 0.551948051948052, 0.8571428571428572, 0], [0.5324675324675324, 0.8571428571428572, 0, 0.5324675324675324, 0.9642857142857143, 0, 0.538961038961039, 0.9642857142857143, 0, 0.538961038961039, 0.8571428571428572, 0], [0.564935064935065, 0.8571428571428572, 0, 0.564935064935065, 0.9642857142857143, 0, 0.5714285714285714, 0.9642857142857143, 0, 0.5714285714285714, 0.8571428571428572, 0], [0.577922077922078, 0.8571428571428572, 0, 0.577922077922078, 0.9642857142857143, 0, 0.5844155844155844, 0.9642857142857143, 0, 0.5844155844155844, 0.8571428571428572, 0], [0.564935064935065, 0.9642857142857143, 0, 0.564935064935065, 1.0, 0, 0.5714285714285714, 1.0, 0, 0.5714285714285714, 0.9642857142857143, 0], [0.5714285714285714, 0.9642857142857143, 0, 0.5714285714285714, 1.0, 0, 0.577922077922078, 1.0, 0, 0.577922077922078, 0.9642857142857143, 0], [0.5714285714285714, 0.8571428571428572, 0, 0.5714285714285714, 0.9642857142857143, 0, 0.577922077922078, 0.9642857142857143, 0, 0.577922077922078, 0.8571428571428572, 0], [0.5584415584415584, 0.8571428571428572, 0, 0.5584415584415584, 0.9642857142857143, 0, 0.564935064935065, 0.9642857142857143, 0, 0.564935064935065, 0.8571428571428572, 0], [0.6103896103896104, 0.4285714285714286, 0, 0.6103896103896104, 0.8571428571428572, 0, 0.6363636363636364, 0.8571428571428572, 0, 0.6363636363636364, 0.4285714285714286, 0], [0.6623376623376623, 0.4285714285714286, 0, 0.6623376623376623, 0.8571428571428572, 0, 0.6883116883116883, 0.8571428571428572, 0, 0.6883116883116883, 0.4285714285714286, 0], [0.6103896103896104, 0.8571428571428572, 0, 0.6103896103896104, 1.0, 0, 0.6363636363636364, 1.0, 0, 0.6363636363636364, 0.8571428571428572, 0], [0.6363636363636364, 0.8571428571428572, 0, 0.6363636363636364, 1.0, 0, 0.6623376623376623, 1.0, 0, 0.6623376623376623, 0.8571428571428572, 0], [0.6363636363636364, 0.4285714285714286, 0, 0.6363636363636364, 0.8571428571428572, 0, 0.6623376623376623, 0.8571428571428572, 0, 0.6623376623376623, 0.4285714285714286, 0], [0.5844155844155844, 0.4285714285714286, 0, 0.5844155844155844, 0.8571428571428572, 0, 0.6103896103896104, 0.8571428571428572, 0, 0.6103896103896104, 0.4285714285714286, 0], [0.7142857142857143, 0.4285714285714286, 0, 0.7142857142857143, 0.8571428571428572, 0, 0.7402597402597403, 0.8571428571428572, 0, 0.7402597402597403, 0.4285714285714286, 0], [0.7662337662337663, 0.4285714285714286, 0, 0.7662337662337663, 0.8571428571428572, 0, 0.7922077922077922, 0.8571428571428572, 0, 0.7922077922077922, 0.4285714285714286, 0], [0.7142857142857143, 0.8571428571428572, 0, 0.7142857142857143, 1.0, 0, 0.7402597402597403, 1.0, 0, 0.7402597402597403, 0.8571428571428572, 0], [0.7402597402597403, 0.8571428571428572, 0, 0.7402597402597403, 1.0, 0, 0.7662337662337663, 1.0, 0, 0.7662337662337663, 0.8571428571428572, 0], [0.7402597402597403, 0.4285714285714286, 0, 0.7402597402597403, 0.8571428571428572, 0, 0.7662337662337663, 0.8571428571428572, 0, 0.7662337662337663, 0.4285714285714286, 0], [0.6883116883116883, 0.4285714285714286, 0, 0.6883116883116883, 0.8571428571428572, 0, 0.7142857142857143, 0.8571428571428572, 0, 0.7142857142857143, 0.4285714285714286, 0], [0.8181818181818182, 0.4285714285714286, 0, 0.8181818181818182, 0.8571428571428572, 0, 0.8441558441558441, 0.8571428571428572, 0, 0.8441558441558441, 0.4285714285714286, 0], [0.8701298701298701, 0.4285714285714286, 0, 0.8701298701298701, 0.8571428571428572, 0, 0.8961038961038961, 0.8571428571428572, 0, 0.8961038961038961, 0.4285714285714286, 0], [0.8181818181818182, 0.8571428571428572, 0, 0.8181818181818182, 1.0, 0, 0.8441558441558441, 1.0, 0, 0.8441558441558441, 0.8571428571428572, 0], [0.8441558441558441, 0.8571428571428572, 0, 0.8441558441558441, 1.0, 0, 0.8701298701298701, 1.0, 0, 0.8701298701298701, 0.8571428571428572, 0], [0.8441558441558441, 0.4285714285714286, 0, 0.8441558441558441, 0.8571428571428572, 0, 0.8701298701298701, 0.8571428571428572, 0, 0.8701298701298701, 0.4285714285714286, 0], [0.7922077922077922, 0.4285714285714286, 0, 0.7922077922077922, 0.8571428571428572, 0, 0.8181818181818182, 0.8571428571428572, 0, 0.8181818181818182, 0.4285714285714286, 0], [0.922077922077922, 0.4285714285714286, 0, 0.922077922077922, 0.8571428571428572, 0, 0.948051948051948, 0.8571428571428572, 0, 0.948051948051948, 0.4285714285714286, 0], [0.974025974025974, 0.4285714285714286, 0, 0.974025974025974, 0.8571428571428572, 0, 1.0, 0.8571428571428572, 0, 1.0, 0.4285714285714286, 0], [0.922077922077922, 0.8571428571428572, 0, 0.922077922077922, 1.0, 0, 0.948051948051948, 1.0, 0, 0.948051948051948, 0.8571428571428572, 0], [0.948051948051948, 0.8571428571428572, 0, 0.948051948051948, 1.0, 0, 0.974025974025974, 1.0, 0, 0.974025974025974, 0.8571428571428572, 0], [0.948051948051948, 0.4285714285714286, 0, 0.948051948051948, 0.8571428571428572, 0, 0.974025974025974, 0.8571428571428572, 0, 0.974025974025974, 0.4285714285714286, 0], [0.8961038961038961, 0.4285714285714286, 0, 0.8961038961038961, 0.8571428571428572, 0, 0.922077922077922, 0.8571428571428572, 0, 0.922077922077922, 0.4285714285714286, 0]] +shading_values = [[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]] diff --git a/community/models/creeper.py b/community/models/creeper.py new file mode 100644 index 00000000..ac48d1fd --- /dev/null +++ b/community/models/creeper.py @@ -0,0 +1,10 @@ + +transparent = True +is_cube = False +glass = False + +colliders = [] + +vertex_positions = [[-0.25, 0.375, -0.125, -0.25, 1.125, -0.125, 0.25, 1.125, -0.125, 0.25, 0.375, -0.125], [0.25, 0.375, 0.125, 0.25, 1.125, 0.125, -0.25, 1.125, 0.125, -0.25, 0.375, 0.125], [-0.25, 1.125, -0.125, -0.25, 1.125, 0.125, 0.25, 1.125, 0.125, 0.25, 1.125, -0.125], [0.25, 0.375, -0.125, 0.25, 0.375, 0.125, -0.25, 0.375, 0.125, -0.25, 0.375, -0.125], [0.25, 0.375, -0.125, 0.25, 1.125, -0.125, 0.25, 1.125, 0.125, 0.25, 0.375, 0.125], [-0.25, 0.375, 0.125, -0.25, 1.125, 0.125, -0.25, 1.125, -0.125, -0.25, 0.375, -0.125], [-0.25, 1.125, -0.25, -0.25, 1.625, -0.25, 0.25, 1.625, -0.25, 0.25, 1.125, -0.25], [0.25, 1.125, 0.25, 0.25, 1.625, 0.25, -0.25, 1.625, 0.25, -0.25, 1.125, 0.25], [-0.25, 1.625, -0.25, -0.25, 1.625, 0.25, 0.25, 1.625, 0.25, 0.25, 1.625, -0.25], [0.25, 1.125, -0.25, 0.25, 1.125, 0.25, -0.25, 1.125, 0.25, -0.25, 1.125, -0.25], [0.25, 1.125, -0.25, 0.25, 1.625, -0.25, 0.25, 1.625, 0.25, 0.25, 1.125, 0.25], [-0.25, 1.125, 0.25, -0.25, 1.625, 0.25, -0.25, 1.625, -0.25, -0.25, 1.125, -0.25], [-0.25, 0.0, 0.125, -0.25, 0.375, 0.125, 0.0, 0.375, 0.125, 0.0, 0.0, 0.125], [0.0, 0.0, 0.375, 0.0, 0.375, 0.375, -0.25, 0.375, 0.375, -0.25, 0.0, 0.375], [-0.25, 0.375, 0.125, -0.25, 0.375, 0.375, 0.0, 0.375, 0.375, 0.0, 0.375, 0.125], [0.0, 0.0, 0.125, 0.0, 0.0, 0.375, -0.25, 0.0, 0.375, -0.25, 0.0, 0.125], [0.0, 0.0, 0.125, 0.0, 0.375, 0.125, 0.0, 0.375, 0.375, 0.0, 0.0, 0.375], [-0.25, 0.0, 0.375, -0.25, 0.375, 0.375, -0.25, 0.375, 0.125, -0.25, 0.0, 0.125], [0.0, 0.0, 0.125, 0.0, 0.375, 0.125, 0.25, 0.375, 0.125, 0.25, 0.0, 0.125], [0.25, 0.0, 0.375, 0.25, 0.375, 0.375, 0.0, 0.375, 0.375, 0.0, 0.0, 0.375], [0.0, 0.375, 0.125, 0.0, 0.375, 0.375, 0.25, 0.375, 0.375, 0.25, 0.375, 0.125], [0.25, 0.0, 0.125, 0.25, 0.0, 0.375, 0.0, 0.0, 0.375, 0.0, 0.0, 0.125], [0.25, 0.0, 0.125, 0.25, 0.375, 0.125, 0.25, 0.375, 0.375, 0.25, 0.0, 0.375], [0.0, 0.0, 0.375, 0.0, 0.375, 0.375, 0.0, 0.375, 0.125, 0.0, 0.0, 0.125], [-0.25, 0.0, -0.375, -0.25, 0.375, -0.375, 0.0, 0.375, -0.375, 0.0, 0.0, -0.375], [0.0, 0.0, -0.125, 0.0, 0.375, -0.125, -0.25, 0.375, -0.125, -0.25, 0.0, -0.125], [-0.25, 0.375, -0.375, -0.25, 0.375, -0.125, 0.0, 0.375, -0.125, 0.0, 0.375, -0.375], [0.0, 0.0, -0.375, 0.0, 0.0, -0.125, -0.25, 0.0, -0.125, -0.25, 0.0, -0.375], [0.0, 0.0, -0.375, 0.0, 0.375, -0.375, 0.0, 0.375, -0.125, 0.0, 0.0, -0.125], [-0.25, 0.0, -0.125, -0.25, 0.375, -0.125, -0.25, 0.375, -0.375, -0.25, 0.0, -0.375], [0.0, 0.0, -0.375, 0.0, 0.375, -0.375, 0.25, 0.375, -0.375, 0.25, 0.0, -0.375], [0.25, 0.0, -0.125, 0.25, 0.375, -0.125, 0.0, 0.375, -0.125, 0.0, 0.0, -0.125], [0.0, 0.375, -0.375, 0.0, 0.375, -0.125, 0.25, 0.375, -0.125, 0.25, 0.375, -0.375], [0.25, 0.0, -0.375, 0.25, 0.0, -0.125, 0.0, 0.0, -0.125, 0.0, 0.0, -0.375], [0.25, 0.0, -0.375, 0.25, 0.375, -0.375, 0.25, 0.375, -0.125, 0.25, 0.0, -0.125], [0.0, 0.0, -0.125, 0.0, 0.375, -0.125, 0.0, 0.375, -0.375, 0.0, 0.0, -0.375]] +tex_coords = [[0.03333333333333333, 0.0, 0, 0.03333333333333333, 0.75, 0, 0.1, 0.75, 0, 0.1, 0.0, 0], [0.13333333333333333, 0.0, 0, 0.13333333333333333, 0.75, 0, 0.2, 0.75, 0, 0.2, 0.0, 0], [0.03333333333333333, 0.75, 0, 0.03333333333333333, 1.0, 0, 0.1, 1.0, 0, 0.1, 0.75, 0], [0.1, 0.75, 0, 0.1, 1.0, 0, 0.16666666666666666, 1.0, 0, 0.16666666666666666, 0.75, 0], [0.1, 0.0, 0, 0.1, 0.75, 0, 0.13333333333333333, 0.75, 0, 0.13333333333333333, 0.0, 0], [0.0, 0.0, 0, 0.0, 0.75, 0, 0.03333333333333333, 0.75, 0, 0.03333333333333333, 0.0, 0], [0.26666666666666666, 0.0, 0, 0.26666666666666666, 0.5, 0, 0.3333333333333333, 0.5, 0, 0.3333333333333333, 0.0, 0], [0.4, 0.0, 0, 0.4, 0.5, 0, 0.4666666666666667, 0.5, 0, 0.4666666666666667, 0.0, 0], [0.26666666666666666, 0.5, 0, 0.26666666666666666, 1.0, 0, 0.3333333333333333, 1.0, 0, 0.3333333333333333, 0.5, 0], [0.3333333333333333, 0.5, 0, 0.3333333333333333, 1.0, 0, 0.4, 1.0, 0, 0.4, 0.5, 0], [0.3333333333333333, 0.0, 0, 0.3333333333333333, 0.5, 0, 0.4, 0.5, 0, 0.4, 0.0, 0], [0.2, 0.0, 0, 0.2, 0.5, 0, 0.26666666666666666, 0.5, 0, 0.26666666666666666, 0.0, 0], [0.5, 0.375, 0, 0.5, 0.75, 0, 0.5333333333333333, 0.75, 0, 0.5333333333333333, 0.375, 0], [0.5666666666666667, 0.375, 0, 0.5666666666666667, 0.75, 0, 0.6, 0.75, 0, 0.6, 0.375, 0], [0.5, 0.75, 0, 0.5, 1.0, 0, 0.5333333333333333, 1.0, 0, 0.5333333333333333, 0.75, 0], [0.5333333333333333, 0.75, 0, 0.5333333333333333, 1.0, 0, 0.5666666666666667, 1.0, 0, 0.5666666666666667, 0.75, 0], [0.5333333333333333, 0.375, 0, 0.5333333333333333, 0.75, 0, 0.5666666666666667, 0.75, 0, 0.5666666666666667, 0.375, 0], [0.4666666666666667, 0.375, 0, 0.4666666666666667, 0.75, 0, 0.5, 0.75, 0, 0.5, 0.375, 0], [0.6333333333333333, 0.375, 0, 0.6333333333333333, 0.75, 0, 0.6666666666666666, 0.75, 0, 0.6666666666666666, 0.375, 0], [0.7, 0.375, 0, 0.7, 0.75, 0, 0.7333333333333333, 0.75, 0, 0.7333333333333333, 0.375, 0], [0.6333333333333333, 0.75, 0, 0.6333333333333333, 1.0, 0, 0.6666666666666666, 1.0, 0, 0.6666666666666666, 0.75, 0], [0.6666666666666666, 0.75, 0, 0.6666666666666666, 1.0, 0, 0.7, 1.0, 0, 0.7, 0.75, 0], [0.6666666666666666, 0.375, 0, 0.6666666666666666, 0.75, 0, 0.7, 0.75, 0, 0.7, 0.375, 0], [0.6, 0.375, 0, 0.6, 0.75, 0, 0.6333333333333333, 0.75, 0, 0.6333333333333333, 0.375, 0], [0.7666666666666667, 0.375, 0, 0.7666666666666667, 0.75, 0, 0.8, 0.75, 0, 0.8, 0.375, 0], [0.8333333333333334, 0.375, 0, 0.8333333333333334, 0.75, 0, 0.8666666666666667, 0.75, 0, 0.8666666666666667, 0.375, 0], [0.7666666666666667, 0.75, 0, 0.7666666666666667, 1.0, 0, 0.8, 1.0, 0, 0.8, 0.75, 0], [0.8, 0.75, 0, 0.8, 1.0, 0, 0.8333333333333334, 1.0, 0, 0.8333333333333334, 0.75, 0], [0.8, 0.375, 0, 0.8, 0.75, 0, 0.8333333333333334, 0.75, 0, 0.8333333333333334, 0.375, 0], [0.7333333333333333, 0.375, 0, 0.7333333333333333, 0.75, 0, 0.7666666666666667, 0.75, 0, 0.7666666666666667, 0.375, 0], [0.9, 0.375, 0, 0.9, 0.75, 0, 0.9333333333333333, 0.75, 0, 0.9333333333333333, 0.375, 0], [0.9666666666666667, 0.375, 0, 0.9666666666666667, 0.75, 0, 1.0, 0.75, 0, 1.0, 0.375, 0], [0.9, 0.75, 0, 0.9, 1.0, 0, 0.9333333333333333, 1.0, 0, 0.9333333333333333, 0.75, 0], [0.9333333333333333, 0.75, 0, 0.9333333333333333, 1.0, 0, 0.9666666666666667, 1.0, 0, 0.9666666666666667, 0.75, 0], [0.9333333333333333, 0.375, 0, 0.9333333333333333, 0.75, 0, 0.9666666666666667, 0.75, 0, 0.9666666666666667, 0.375, 0], [0.8666666666666667, 0.375, 0, 0.8666666666666667, 0.75, 0, 0.9, 0.75, 0, 0.9, 0.375, 0]] +shading_values = [[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]] diff --git a/community/models/crop.py b/community/models/crop.py index d0326697..3da7e278 100644 --- a/community/models/crop.py +++ b/community/models/crop.py @@ -1,4 +1,4 @@ -transparent = 2 +transparent = True is_cube = False glass = False translucent = False @@ -36,4 +36,4 @@ [0.8, 0.8, 0.8, 0.8], [0.8, 0.8, 0.8, 0.8], [0.8, 0.8, 0.8, 0.8], -] \ No newline at end of file +] diff --git a/community/models/cube.py b/community/models/cube.py index 2de79983..78cf7a2c 100644 --- a/community/models/cube.py +++ b/community/models/cube.py @@ -1,7 +1,7 @@ -transparent = 0 +transparent = False +translucent = False is_cube = True glass = False -translucent = False colliders = [ [ @@ -19,7 +19,6 @@ [ 0.5, 0.5, -0.5, 0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, 0.5, -0.5], # back ] -# Deprecating tex_coords = [ [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], @@ -36,4 +35,4 @@ [0.4, 0.4, 0.4, 0.4], [0.8, 0.8, 0.8, 0.8], [0.8, 0.8, 0.8, 0.8], -] \ No newline at end of file +] diff --git a/community/models/curry.py b/community/models/curry.py new file mode 100644 index 00000000..9593b028 --- /dev/null +++ b/community/models/curry.py @@ -0,0 +1,10 @@ + +transparent = True +is_cube = False +glass = False + +colliders = [] + +vertex_positions = [[-0.25, 0.75, -0.125, -0.25, 1.5, -0.125, 0.25, 1.5, -0.125, 0.25, 0.75, -0.125], [0.25, 0.75, 0.125, 0.25, 1.5, 0.125, -0.25, 1.5, 0.125, -0.25, 0.75, 0.125], [-0.25, 1.5, -0.125, -0.25, 1.5, 0.125, 0.25, 1.5, 0.125, 0.25, 1.5, -0.125], [0.25, 0.75, -0.125, 0.25, 0.75, 0.125, -0.25, 0.75, 0.125, -0.25, 0.75, -0.125], [0.25, 0.75, -0.125, 0.25, 1.5, -0.125, 0.25, 1.5, 0.125, 0.25, 0.75, 0.125], [-0.25, 0.75, 0.125, -0.25, 1.5, 0.125, -0.25, 1.5, -0.125, -0.25, 0.75, -0.125], [-0.2536456286907196, 1.497308611869812, -0.23161627352237701, -0.2536456286907196, 1.997308611869812, -0.23161627352237701, 0.2463543713092804, 1.997308611869812, -0.23161627352237701, 0.2463543713092804, 1.497308611869812, -0.23161627352237701], [0.2463543713092804, 1.497308611869812, 0.2683837413787842, 0.2463543713092804, 1.997308611869812, 0.2683837413787842, -0.2536456286907196, 1.997308611869812, 0.2683837413787842, -0.2536456286907196, 1.497308611869812, 0.2683837413787842], [-0.2536456286907196, 1.997308611869812, -0.23161627352237701, -0.2536456286907196, 1.997308611869812, 0.2683837413787842, 0.2463543713092804, 1.997308611869812, 0.2683837413787842, 0.2463543713092804, 1.997308611869812, -0.23161627352237701], [0.2463543713092804, 1.497308611869812, -0.23161627352237701, 0.2463543713092804, 1.497308611869812, 0.2683837413787842, -0.2536456286907196, 1.497308611869812, 0.2683837413787842, -0.2536456286907196, 1.497308611869812, -0.23161627352237701], [0.2463543713092804, 1.497308611869812, -0.23161627352237701, 0.2463543713092804, 1.997308611869812, -0.23161627352237701, 0.2463543713092804, 1.997308611869812, 0.2683837413787842, 0.2463543713092804, 1.497308611869812, 0.2683837413787842], [-0.2536456286907196, 1.497308611869812, 0.2683837413787842, -0.2536456286907196, 1.997308611869812, 0.2683837413787842, -0.2536456286907196, 1.997308611869812, -0.23161627352237701, -0.2536456286907196, 1.497308611869812, -0.23161627352237701], [0.2316092699766159, 0.8962944149971008, -0.21831698715686798, 0.2316092699766159, 1.396294355392456, -0.21831698715686798, 0.7316092848777771, 1.396294355392456, -0.21831698715686798, 0.7316092848777771, 0.8962944149971008, -0.21831698715686798], [0.7316092848777771, 0.8962944149971008, 0.2816829979419708, 0.7316092848777771, 1.396294355392456, 0.2816829979419708, 0.2316092699766159, 1.396294355392456, 0.2816829979419708, 0.2316092699766159, 0.8962944149971008, 0.2816829979419708], [0.2316092699766159, 1.396294355392456, -0.21831698715686798, 0.2316092699766159, 1.396294355392456, 0.2816829979419708, 0.7316092848777771, 1.396294355392456, 0.2816829979419708, 0.7316092848777771, 1.396294355392456, -0.21831698715686798], [0.7316092848777771, 0.8962944149971008, -0.21831698715686798, 0.7316092848777771, 0.8962944149971008, 0.2816829979419708, 0.2316092699766159, 0.8962944149971008, 0.2816829979419708, 0.2316092699766159, 0.8962944149971008, -0.21831698715686798], [0.7316092848777771, 0.8962944149971008, -0.21831698715686798, 0.7316092848777771, 1.396294355392456, -0.21831698715686798, 0.7316092848777771, 1.396294355392456, 0.2816829979419708, 0.7316092848777771, 0.8962944149971008, 0.2816829979419708], [0.2316092699766159, 0.8962944149971008, 0.2816829979419708, 0.2316092699766159, 1.396294355392456, 0.2816829979419708, 0.2316092699766159, 1.396294355392456, -0.21831698715686798, 0.2316092699766159, 0.8962944149971008, -0.21831698715686798], [-0.25, 1.5, -0.25, -0.25, 2.0, -0.25, 0.25, 2.0, -0.25, 0.25, 1.5, -0.25], [0.25, 1.5, 0.25, 0.25, 2.0, 0.25, -0.25, 2.0, 0.25, -0.25, 1.5, 0.25], [-0.25, 2.0, -0.25, -0.25, 2.0, 0.25, 0.25, 2.0, 0.25, 0.25, 2.0, -0.25], [0.25, 1.5, -0.25, 0.25, 1.5, 0.25, -0.25, 1.5, 0.25, -0.25, 1.5, -0.25], [0.25, 1.5, -0.25, 0.25, 2.0, -0.25, 0.25, 2.0, 0.25, 0.25, 1.5, 0.25], [-0.25, 1.5, 0.25, -0.25, 2.0, 0.25, -0.25, 2.0, -0.25, -0.25, 1.5, -0.25], [-0.5, 0.75, -0.125, -0.5, 1.5, -0.125, -0.25, 1.5, -0.125, -0.25, 0.75, -0.125], [-0.25, 0.75, 0.125, -0.25, 1.5, 0.125, -0.5, 1.5, 0.125, -0.5, 0.75, 0.125], [-0.5, 1.5, -0.125, -0.5, 1.5, 0.125, -0.25, 1.5, 0.125, -0.25, 1.5, -0.125], [-0.25, 0.75, -0.125, -0.25, 0.75, 0.125, -0.5, 0.75, 0.125, -0.5, 0.75, -0.125], [-0.25, 0.75, -0.125, -0.25, 1.5, -0.125, -0.25, 1.5, 0.125, -0.25, 0.75, 0.125], [-0.5, 0.75, 0.125, -0.5, 1.5, 0.125, -0.5, 1.5, -0.125, -0.5, 0.75, -0.125], [0.7019792795181274, 0.748781681060791, -0.02643335424363613, 0.7019792795181274, 1.498781681060791, -0.02643335424363613, 0.9519792795181274, 1.498781681060791, -0.02643335424363613, 0.9519792795181274, 0.748781681060791, -0.02643335424363613], [0.9519792795181274, 0.748781681060791, 0.22356665134429932, 0.9519792795181274, 1.498781681060791, 0.22356665134429932, 0.7019792795181274, 1.498781681060791, 0.22356665134429932, 0.7019792795181274, 0.748781681060791, 0.22356665134429932], [0.7019792795181274, 1.498781681060791, -0.02643335424363613, 0.7019792795181274, 1.498781681060791, 0.22356665134429932, 0.9519792795181274, 1.498781681060791, 0.22356665134429932, 0.9519792795181274, 1.498781681060791, -0.02643335424363613], [0.9519792795181274, 0.748781681060791, -0.02643335424363613, 0.9519792795181274, 0.748781681060791, 0.22356665134429932, 0.7019792795181274, 0.748781681060791, 0.22356665134429932, 0.7019792795181274, 0.748781681060791, -0.02643335424363613], [0.9519792795181274, 0.748781681060791, -0.02643335424363613, 0.9519792795181274, 1.498781681060791, -0.02643335424363613, 0.9519792795181274, 1.498781681060791, 0.22356665134429932, 0.9519792795181274, 0.748781681060791, 0.22356665134429932], [0.7019792795181274, 0.748781681060791, 0.22356665134429932, 0.7019792795181274, 1.498781681060791, 0.22356665134429932, 0.7019792795181274, 1.498781681060791, -0.02643335424363613, 0.7019792795181274, 0.748781681060791, -0.02643335424363613], [0.09342791140079498, 1.3167552947998047, -0.06984145194292068, 0.09342791140079498, 1.5042552947998047, -0.06984145194292068, 0.7184278964996338, 1.5042552947998047, -0.06984145194292068, 0.7184278964996338, 1.3167552947998047, -0.06984145194292068], [0.7184278964996338, 1.3167552947998047, 0.18015854060649872, 0.7184278964996338, 1.5042552947998047, 0.18015854060649872, 0.09342791140079498, 1.5042552947998047, 0.18015854060649872, 0.09342791140079498, 1.3167552947998047, 0.18015854060649872], [0.09342791140079498, 1.5042552947998047, -0.06984145194292068, 0.09342791140079498, 1.5042552947998047, 0.18015854060649872, 0.7184278964996338, 1.5042552947998047, 0.18015854060649872, 0.7184278964996338, 1.5042552947998047, -0.06984145194292068], [0.7184278964996338, 1.3167552947998047, -0.06984145194292068, 0.7184278964996338, 1.3167552947998047, 0.18015854060649872, 0.09342791140079498, 1.3167552947998047, 0.18015854060649872, 0.09342791140079498, 1.3167552947998047, -0.06984145194292068], [0.7184278964996338, 1.3167552947998047, -0.06984145194292068, 0.7184278964996338, 1.5042552947998047, -0.06984145194292068, 0.7184278964996338, 1.5042552947998047, 0.18015854060649872, 0.7184278964996338, 1.3167552947998047, 0.18015854060649872], [0.09342791140079498, 1.3167552947998047, 0.18015854060649872, 0.09342791140079498, 1.5042552947998047, 0.18015854060649872, 0.09342791140079498, 1.5042552947998047, -0.06984145194292068, 0.09342791140079498, 1.3167552947998047, -0.06984145194292068], [-0.24375000596046448, 0.0, -0.125, -0.24375000596046448, 0.75, -0.125, 0.0062500000931322575, 0.75, -0.125, 0.0062500000931322575, 0.0, -0.125], [0.0062500000931322575, 0.0, 0.125, 0.0062500000931322575, 0.75, 0.125, -0.24375000596046448, 0.75, 0.125, -0.24375000596046448, 0.0, 0.125], [-0.24375000596046448, 0.75, -0.125, -0.24375000596046448, 0.75, 0.125, 0.0062500000931322575, 0.75, 0.125, 0.0062500000931322575, 0.75, -0.125], [0.0062500000931322575, 0.0, -0.125, 0.0062500000931322575, 0.0, 0.125, -0.24375000596046448, 0.0, 0.125, -0.24375000596046448, 0.0, -0.125], [0.0062500000931322575, 0.0, -0.125, 0.0062500000931322575, 0.75, -0.125, 0.0062500000931322575, 0.75, 0.125, 0.0062500000931322575, 0.0, 0.125], [-0.24375000596046448, 0.0, 0.125, -0.24375000596046448, 0.75, 0.125, -0.24375000596046448, 0.75, -0.125, -0.24375000596046448, 0.0, -0.125], [-0.0062500000931322575, 0.0, -0.125, -0.0062500000931322575, 0.75, -0.125, 0.24375000596046448, 0.75, -0.125, 0.24375000596046448, 0.0, -0.125], [0.24375000596046448, 0.0, 0.125, 0.24375000596046448, 0.75, 0.125, -0.0062500000931322575, 0.75, 0.125, -0.0062500000931322575, 0.0, 0.125], [-0.0062500000931322575, 0.75, -0.125, -0.0062500000931322575, 0.75, 0.125, 0.24375000596046448, 0.75, 0.125, 0.24375000596046448, 0.75, -0.125], [0.24375000596046448, 0.0, -0.125, 0.24375000596046448, 0.0, 0.125, -0.0062500000931322575, 0.0, 0.125, -0.0062500000931322575, 0.0, -0.125], [0.24375000596046448, 0.0, -0.125, 0.24375000596046448, 0.75, -0.125, 0.24375000596046448, 0.75, 0.125, 0.24375000596046448, 0.0, 0.125], [-0.0062500000931322575, 0.0, 0.125, -0.0062500000931322575, 0.75, 0.125, -0.0062500000931322575, 0.75, -0.125, -0.0062500000931322575, 0.0, -0.125]] +tex_coords = [[0.018867924528301886, 0.0, 0, 0.018867924528301886, 0.75, 0, 0.05660377358490566, 0.75, 0, 0.05660377358490566, 0.0, 0], [0.07547169811320754, 0.0, 0, 0.07547169811320754, 0.75, 0, 0.11320754716981132, 0.75, 0, 0.11320754716981132, 0.0, 0], [0.018867924528301886, 0.75, 0, 0.018867924528301886, 1.0, 0, 0.05660377358490566, 1.0, 0, 0.05660377358490566, 0.75, 0], [0.05660377358490566, 0.75, 0, 0.05660377358490566, 1.0, 0, 0.09433962264150944, 1.0, 0, 0.09433962264150944, 0.75, 0], [0.05660377358490566, 0.0, 0, 0.05660377358490566, 0.75, 0, 0.07547169811320754, 0.75, 0, 0.07547169811320754, 0.0, 0], [0.0, 0.0, 0, 0.0, 0.75, 0, 0.018867924528301886, 0.75, 0, 0.018867924528301886, 0.0, 0], [0.1509433962264151, 0.0, 0, 0.1509433962264151, 0.5, 0, 0.18867924528301888, 0.5, 0, 0.18867924528301888, 0.0, 0], [0.22641509433962265, 0.0, 0, 0.22641509433962265, 0.5, 0, 0.2641509433962264, 0.5, 0, 0.2641509433962264, 0.0, 0], [0.1509433962264151, 0.5, 0, 0.1509433962264151, 1.0, 0, 0.18867924528301888, 1.0, 0, 0.18867924528301888, 0.5, 0], [0.18867924528301888, 0.5, 0, 0.18867924528301888, 1.0, 0, 0.22641509433962265, 1.0, 0, 0.22641509433962265, 0.5, 0], [0.18867924528301888, 0.0, 0, 0.18867924528301888, 0.5, 0, 0.22641509433962265, 0.5, 0, 0.22641509433962265, 0.0, 0], [0.11320754716981132, 0.0, 0, 0.11320754716981132, 0.5, 0, 0.1509433962264151, 0.5, 0, 0.1509433962264151, 0.0, 0], [0.3018867924528302, 0.0, 0, 0.3018867924528302, 0.5, 0, 0.33962264150943394, 0.5, 0, 0.33962264150943394, 0.0, 0], [0.37735849056603776, 0.0, 0, 0.37735849056603776, 0.5, 0, 0.41509433962264153, 0.5, 0, 0.41509433962264153, 0.0, 0], [0.3018867924528302, 0.5, 0, 0.3018867924528302, 1.0, 0, 0.33962264150943394, 1.0, 0, 0.33962264150943394, 0.5, 0], [0.33962264150943394, 0.5, 0, 0.33962264150943394, 1.0, 0, 0.37735849056603776, 1.0, 0, 0.37735849056603776, 0.5, 0], [0.33962264150943394, 0.0, 0, 0.33962264150943394, 0.5, 0, 0.37735849056603776, 0.5, 0, 0.37735849056603776, 0.0, 0], [0.2641509433962264, 0.0, 0, 0.2641509433962264, 0.5, 0, 0.3018867924528302, 0.5, 0, 0.3018867924528302, 0.0, 0], [0.4528301886792453, 0.0, 0, 0.4528301886792453, 0.5, 0, 0.49056603773584906, 0.5, 0, 0.49056603773584906, 0.0, 0], [0.5283018867924528, 0.0, 0, 0.5283018867924528, 0.5, 0, 0.5660377358490566, 0.5, 0, 0.5660377358490566, 0.0, 0], [0.4528301886792453, 0.5, 0, 0.4528301886792453, 1.0, 0, 0.49056603773584906, 1.0, 0, 0.49056603773584906, 0.5, 0], [0.49056603773584906, 0.5, 0, 0.49056603773584906, 1.0, 0, 0.5283018867924528, 1.0, 0, 0.5283018867924528, 0.5, 0], [0.49056603773584906, 0.0, 0, 0.49056603773584906, 0.5, 0, 0.5283018867924528, 0.5, 0, 0.5283018867924528, 0.0, 0], [0.41509433962264153, 0.0, 0, 0.41509433962264153, 0.5, 0, 0.4528301886792453, 0.5, 0, 0.4528301886792453, 0.0, 0], [0.5849056603773585, 0.0, 0, 0.5849056603773585, 0.75, 0, 0.6037735849056604, 0.75, 0, 0.6037735849056604, 0.0, 0], [0.6226415094339622, 0.0, 0, 0.6226415094339622, 0.75, 0, 0.6415094339622641, 0.75, 0, 0.6415094339622641, 0.0, 0], [0.5849056603773585, 0.75, 0, 0.5849056603773585, 1.0, 0, 0.6037735849056604, 1.0, 0, 0.6037735849056604, 0.75, 0], [0.6037735849056604, 0.75, 0, 0.6037735849056604, 1.0, 0, 0.6226415094339622, 1.0, 0, 0.6226415094339622, 0.75, 0], [0.6037735849056604, 0.0, 0, 0.6037735849056604, 0.75, 0, 0.6226415094339622, 0.75, 0, 0.6226415094339622, 0.0, 0], [0.5660377358490566, 0.0, 0, 0.5660377358490566, 0.75, 0, 0.5849056603773585, 0.75, 0, 0.5849056603773585, 0.0, 0], [0.660377358490566, 0.0, 0, 0.660377358490566, 0.75, 0, 0.6792452830188679, 0.75, 0, 0.6792452830188679, 0.0, 0], [0.6981132075471698, 0.0, 0, 0.6981132075471698, 0.75, 0, 0.7169811320754716, 0.75, 0, 0.7169811320754716, 0.0, 0], [0.660377358490566, 0.75, 0, 0.660377358490566, 1.0, 0, 0.6792452830188679, 1.0, 0, 0.6792452830188679, 0.75, 0], [0.6792452830188679, 0.75, 0, 0.6792452830188679, 1.0, 0, 0.6981132075471698, 1.0, 0, 0.6981132075471698, 0.75, 0], [0.6792452830188679, 0.0, 0, 0.6792452830188679, 0.75, 0, 0.6981132075471698, 0.75, 0, 0.6981132075471698, 0.0, 0], [0.6415094339622641, 0.0, 0, 0.6415094339622641, 0.75, 0, 0.660377358490566, 0.75, 0, 0.660377358490566, 0.0, 0], [0.7358490566037735, 0.5625, 0, 0.7358490566037735, 0.75, 0, 0.7830188679245284, 0.75, 0, 0.7830188679245284, 0.5625, 0], [0.8018867924528302, 0.5625, 0, 0.8018867924528302, 0.75, 0, 0.8490566037735849, 0.75, 0, 0.8490566037735849, 0.5625, 0], [0.7358490566037735, 0.75, 0, 0.7358490566037735, 1.0, 0, 0.7830188679245284, 1.0, 0, 0.7830188679245284, 0.75, 0], [0.7830188679245284, 0.75, 0, 0.7830188679245284, 1.0, 0, 0.8301886792452831, 1.0, 0, 0.8301886792452831, 0.75, 0], [0.7830188679245284, 0.5625, 0, 0.7830188679245284, 0.75, 0, 0.8018867924528302, 0.75, 0, 0.8018867924528302, 0.5625, 0], [0.7169811320754716, 0.5625, 0, 0.7169811320754716, 0.75, 0, 0.7358490566037735, 0.75, 0, 0.7358490566037735, 0.5625, 0], [0.8679245283018868, 0.0, 0, 0.8679245283018868, 0.75, 0, 0.8867924528301887, 0.75, 0, 0.8867924528301887, 0.0, 0], [0.9056603773584906, 0.0, 0, 0.9056603773584906, 0.75, 0, 0.9245283018867925, 0.75, 0, 0.9245283018867925, 0.0, 0], [0.8679245283018868, 0.75, 0, 0.8679245283018868, 1.0, 0, 0.8867924528301887, 1.0, 0, 0.8867924528301887, 0.75, 0], [0.8867924528301887, 0.75, 0, 0.8867924528301887, 1.0, 0, 0.9056603773584906, 1.0, 0, 0.9056603773584906, 0.75, 0], [0.8867924528301887, 0.0, 0, 0.8867924528301887, 0.75, 0, 0.9056603773584906, 0.75, 0, 0.9056603773584906, 0.0, 0], [0.8490566037735849, 0.0, 0, 0.8490566037735849, 0.75, 0, 0.8679245283018868, 0.75, 0, 0.8679245283018868, 0.0, 0], [0.9433962264150944, 0.0, 0, 0.9433962264150944, 0.75, 0, 0.9622641509433962, 0.75, 0, 0.9622641509433962, 0.0, 0], [0.9811320754716981, 0.0, 0, 0.9811320754716981, 0.75, 0, 1.0, 0.75, 0, 1.0, 0.0, 0], [0.9433962264150944, 0.75, 0, 0.9433962264150944, 1.0, 0, 0.9622641509433962, 1.0, 0, 0.9622641509433962, 0.75, 0], [0.9622641509433962, 0.75, 0, 0.9622641509433962, 1.0, 0, 0.9811320754716981, 1.0, 0, 0.9811320754716981, 0.75, 0], [0.9622641509433962, 0.0, 0, 0.9622641509433962, 0.75, 0, 0.9811320754716981, 0.75, 0, 0.9811320754716981, 0.0, 0], [0.9245283018867925, 0.0, 0, 0.9245283018867925, 0.75, 0, 0.9433962264150944, 0.75, 0, 0.9433962264150944, 0.0, 0]] +shading_values = [[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]] diff --git a/community/models/door.py b/community/models/door.py index 80646339..b8582013 100644 --- a/community/models/door.py +++ b/community/models/door.py @@ -1,4 +1,4 @@ -transparent = 0 +transparent = False is_cube = True glass = False translucent = False @@ -30,4 +30,4 @@ [0.4, 0.4, 0.4, 0.4], [0.8, 0.8, 0.8, 0.8], [0.8, 0.8, 0.8, 0.8], -] \ No newline at end of file +] diff --git a/community/models/fire.py b/community/models/fire.py index 226d0f58..30be93c3 100644 --- a/community/models/fire.py +++ b/community/models/fire.py @@ -1,4 +1,4 @@ -transparent = 2 +transparent = True is_cube = False glass = False translucent = False @@ -24,4 +24,4 @@ [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], -] \ No newline at end of file +] diff --git a/community/models/flat.py b/community/models/flat.py index 4e6f824b..06288849 100644 --- a/community/models/flat.py +++ b/community/models/flat.py @@ -1,4 +1,4 @@ -transparent = 2 +transparent = True is_cube = False glass = False translucent = False @@ -18,4 +18,4 @@ shading_values = [ [1.0, 1.0, 1.0, 1.0], [0.4, 0.4, 0.4, 0.4], -] \ No newline at end of file +] diff --git a/community/models/glass.py b/community/models/glass.py index 847a51da..a5077276 100644 --- a/community/models/glass.py +++ b/community/models/glass.py @@ -1,4 +1,4 @@ -transparent = 2 +transparent = True is_cube = True glass = True translucent = False @@ -35,4 +35,4 @@ [0.4, 0.4, 0.4, 0.4], [0.8, 0.8, 0.8, 0.8], [0.8, 0.8, 0.8, 0.8], -] \ No newline at end of file +] diff --git a/community/models/ladder.py b/community/models/ladder.py index 226d0f58..30be93c3 100644 --- a/community/models/ladder.py +++ b/community/models/ladder.py @@ -1,4 +1,4 @@ -transparent = 2 +transparent = True is_cube = False glass = False translucent = False @@ -24,4 +24,4 @@ [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], -] \ No newline at end of file +] diff --git a/community/models/leaves.py b/community/models/leaves.py index bf05836d..2dc98fb8 100644 --- a/community/models/leaves.py +++ b/community/models/leaves.py @@ -1,4 +1,4 @@ -transparent = 1 +transparent = True is_cube = True glass = False translucent = False @@ -35,4 +35,4 @@ [0.4, 0.4, 0.4, 0.4], [0.8, 0.8, 0.8, 0.8], [0.8, 0.8, 0.8, 0.8], -] \ No newline at end of file +] diff --git a/community/models/lever.py b/community/models/lever.py index 4f7eb5ab..e56c4960 100644 --- a/community/models/lever.py +++ b/community/models/lever.py @@ -30,4 +30,4 @@ [0.4, 0.4, 0.4, 0.4], [0.8, 0.8, 0.8, 0.8], [0.8, 0.8, 0.8, 0.8], -] \ No newline at end of file +] diff --git a/community/models/liquid.py b/community/models/liquid.py index d8f58426..7b9d3eaa 100644 --- a/community/models/liquid.py +++ b/community/models/liquid.py @@ -1,10 +1,10 @@ # in the end, it'd be nice to have it so that liquids fill up the whole block when they have a block above them # this would avoid the problems this solution has -translucent = True -transparent = 1 +transparent = True is_cube = True glass = True +translucent = True colliders = [] @@ -26,7 +26,6 @@ [0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0], ] - shading_values = [ [0.6, 0.6, 0.6, 0.6], [0.6, 0.6, 0.6, 0.6], diff --git a/community/models/pig.py b/community/models/pig.py new file mode 100644 index 00000000..d454f0b1 --- /dev/null +++ b/community/models/pig.py @@ -0,0 +1,10 @@ + +transparent = True +is_cube = False +glass = False + +colliders = [] + +vertex_positions = [[-0.3124999701976776, 0.3750000298023224, 0.5, -0.3124999701976776, 0.375, -0.5, 0.3124999701976776, 0.375, -0.5, 0.3124999701976776, 0.3750000298023224, 0.5], [0.3124999701976776, 0.8750000596046448, 0.5, 0.3124999701976776, 0.875, -0.5, -0.3124999701976776, 0.875, -0.5, -0.3124999701976776, 0.8750000596046448, 0.5], [-0.3124999701976776, 0.375, -0.5, -0.3124999701976776, 0.875, -0.5, 0.3124999701976776, 0.875, -0.5, 0.3124999701976776, 0.375, -0.5], [0.3124999701976776, 0.3750000298023224, 0.5, 0.3124999701976776, 0.8750000596046448, 0.5, -0.3124999701976776, 0.8750000596046448, 0.5, -0.3124999701976776, 0.3750000298023224, 0.5], [0.3124999701976776, 0.3750000298023224, 0.5, 0.3124999701976776, 0.375, -0.5, 0.3124999701976776, 0.875, -0.5, 0.3124999701976776, 0.8750000596046448, 0.5], [-0.3124999701976776, 0.8750000596046448, 0.5, -0.3124999701976776, 0.875, -0.5, -0.3124999701976776, 0.375, -0.5, -0.3124999701976776, 0.3750000298023224, 0.5], [-0.25, 0.5, -0.875, -0.25, 1.0, -0.875, 0.25, 1.0, -0.875, 0.25, 0.5, -0.875], [0.25, 0.5, -0.375, 0.25, 1.0, -0.375, -0.25, 1.0, -0.375, -0.25, 0.5, -0.375], [-0.25, 1.0, -0.875, -0.25, 1.0, -0.375, 0.25, 1.0, -0.375, 0.25, 1.0, -0.875], [0.25, 0.5, -0.875, 0.25, 0.5, -0.375, -0.25, 0.5, -0.375, -0.25, 0.5, -0.875], [0.25, 0.5, -0.875, 0.25, 1.0, -0.875, 0.25, 1.0, -0.375, 0.25, 0.5, -0.375], [-0.25, 0.5, -0.375, -0.25, 1.0, -0.375, -0.25, 1.0, -0.875, -0.25, 0.5, -0.875], [-0.125, 0.5625, -0.9375, -0.125, 0.75, -0.9375, 0.125, 0.75, -0.9375, 0.125, 0.5625, -0.9375], [0.125, 0.5625, -0.875, 0.125, 0.75, -0.875, -0.125, 0.75, -0.875, -0.125, 0.5625, -0.875], [-0.125, 0.75, -0.9375, -0.125, 0.75, -0.875, 0.125, 0.75, -0.875, 0.125, 0.75, -0.9375], [0.125, 0.5625, -0.9375, 0.125, 0.5625, -0.875, -0.125, 0.5625, -0.875, -0.125, 0.5625, -0.9375], [0.125, 0.5625, -0.9375, 0.125, 0.75, -0.9375, 0.125, 0.75, -0.875, 0.125, 0.5625, -0.875], [-0.125, 0.5625, -0.875, -0.125, 0.75, -0.875, -0.125, 0.75, -0.9375, -0.125, 0.5625, -0.9375], [-0.3125, 0.0, 0.3125, -0.3125, 0.375, 0.3125, -0.0625, 0.375, 0.3125, -0.0625, 0.0, 0.3125], [-0.0625, 0.0, 0.5625, -0.0625, 0.375, 0.5625, -0.3125, 0.375, 0.5625, -0.3125, 0.0, 0.5625], [-0.3125, 0.375, 0.3125, -0.3125, 0.375, 0.5625, -0.0625, 0.375, 0.5625, -0.0625, 0.375, 0.3125], [-0.0625, 0.0, 0.3125, -0.0625, 0.0, 0.5625, -0.3125, 0.0, 0.5625, -0.3125, 0.0, 0.3125], [-0.0625, 0.0, 0.3125, -0.0625, 0.375, 0.3125, -0.0625, 0.375, 0.5625, -0.0625, 0.0, 0.5625], [-0.3125, 0.0, 0.5625, -0.3125, 0.375, 0.5625, -0.3125, 0.375, 0.3125, -0.3125, 0.0, 0.3125], [0.0625, 0.0, 0.3125, 0.0625, 0.375, 0.3125, 0.3125, 0.375, 0.3125, 0.3125, 0.0, 0.3125], [0.3125, 0.0, 0.5625, 0.3125, 0.375, 0.5625, 0.0625, 0.375, 0.5625, 0.0625, 0.0, 0.5625], [0.0625, 0.375, 0.3125, 0.0625, 0.375, 0.5625, 0.3125, 0.375, 0.5625, 0.3125, 0.375, 0.3125], [0.3125, 0.0, 0.3125, 0.3125, 0.0, 0.5625, 0.0625, 0.0, 0.5625, 0.0625, 0.0, 0.3125], [0.3125, 0.0, 0.3125, 0.3125, 0.375, 0.3125, 0.3125, 0.375, 0.5625, 0.3125, 0.0, 0.5625], [0.0625, 0.0, 0.5625, 0.0625, 0.375, 0.5625, 0.0625, 0.375, 0.3125, 0.0625, 0.0, 0.3125], [-0.3125, 0.0, -0.4375, -0.3125, 0.375, -0.4375, -0.0625, 0.375, -0.4375, -0.0625, 0.0, -0.4375], [-0.0625, 0.0, -0.1875, -0.0625, 0.375, -0.1875, -0.3125, 0.375, -0.1875, -0.3125, 0.0, -0.1875], [-0.3125, 0.375, -0.4375, -0.3125, 0.375, -0.1875, -0.0625, 0.375, -0.1875, -0.0625, 0.375, -0.4375], [-0.0625, 0.0, -0.4375, -0.0625, 0.0, -0.1875, -0.3125, 0.0, -0.1875, -0.3125, 0.0, -0.4375], [-0.0625, 0.0, -0.4375, -0.0625, 0.375, -0.4375, -0.0625, 0.375, -0.1875, -0.0625, 0.0, -0.1875], [-0.3125, 0.0, -0.1875, -0.3125, 0.375, -0.1875, -0.3125, 0.375, -0.4375, -0.3125, 0.0, -0.4375], [0.0625, 0.0, -0.4375, 0.0625, 0.375, -0.4375, 0.3125, 0.375, -0.4375, 0.3125, 0.0, -0.4375], [0.3125, 0.0, -0.1875, 0.3125, 0.375, -0.1875, 0.0625, 0.375, -0.1875, 0.0625, 0.0, -0.1875], [0.0625, 0.375, -0.4375, 0.0625, 0.375, -0.1875, 0.3125, 0.375, -0.1875, 0.3125, 0.375, -0.4375], [0.3125, 0.0, -0.4375, 0.3125, 0.0, -0.1875, 0.0625, 0.0, -0.1875, 0.0625, 0.0, -0.4375], [0.3125, 0.0, -0.4375, 0.3125, 0.375, -0.4375, 0.3125, 0.375, -0.1875, 0.3125, 0.0, -0.1875], [0.0625, 0.0, -0.1875, 0.0625, 0.375, -0.1875, 0.0625, 0.375, -0.4375, 0.0625, 0.0, -0.4375]] +tex_coords = [[0.056338028169014086, 0.0, 0, 0.056338028169014086, 0.6666666666666667, 0, 0.1267605633802817, 0.6666666666666667, 0, 0.1267605633802817, 0.0, 0], [0.18309859154929578, 0.0, 0, 0.18309859154929578, 0.6666666666666667, 0, 0.2535211267605634, 0.6666666666666667, 0, 0.2535211267605634, 0.0, 0], [0.056338028169014086, 0.6666666666666667, 0, 0.056338028169014086, 1.0, 0, 0.1267605633802817, 1.0, 0, 0.1267605633802817, 0.6666666666666667, 0], [0.1267605633802817, 0.6666666666666667, 0, 0.1267605633802817, 1.0, 0, 0.19718309859154928, 1.0, 0, 0.19718309859154928, 0.6666666666666667, 0], [0.1267605633802817, 0.0, 0, 0.1267605633802817, 0.6666666666666667, 0, 0.18309859154929578, 0.6666666666666667, 0, 0.18309859154929578, 0.0, 0], [0.0, 0.0, 0, 0.0, 0.6666666666666667, 0, 0.056338028169014086, 0.6666666666666667, 0, 0.056338028169014086, 0.0, 0], [0.30985915492957744, 0.33333333333333337, 0, 0.30985915492957744, 0.6666666666666667, 0, 0.36619718309859156, 0.6666666666666667, 0, 0.36619718309859156, 0.33333333333333337, 0], [0.4225352112676056, 0.33333333333333337, 0, 0.4225352112676056, 0.6666666666666667, 0, 0.4788732394366197, 0.6666666666666667, 0, 0.4788732394366197, 0.33333333333333337, 0], [0.30985915492957744, 0.6666666666666667, 0, 0.30985915492957744, 1.0, 0, 0.36619718309859156, 1.0, 0, 0.36619718309859156, 0.6666666666666667, 0], [0.36619718309859156, 0.6666666666666667, 0, 0.36619718309859156, 1.0, 0, 0.4225352112676056, 1.0, 0, 0.4225352112676056, 0.6666666666666667, 0], [0.36619718309859156, 0.33333333333333337, 0, 0.36619718309859156, 0.6666666666666667, 0, 0.4225352112676056, 0.6666666666666667, 0, 0.4225352112676056, 0.33333333333333337, 0], [0.2535211267605634, 0.33333333333333337, 0, 0.2535211267605634, 0.6666666666666667, 0, 0.30985915492957744, 0.6666666666666667, 0, 0.30985915492957744, 0.33333333333333337, 0], [0.4859154929577465, 0.8333333333333334, 0, 0.4859154929577465, 0.9583333333333334, 0, 0.5140845070422535, 0.9583333333333334, 0, 0.5140845070422535, 0.8333333333333334, 0], [0.5211267605633803, 0.8333333333333334, 0, 0.5211267605633803, 0.9583333333333334, 0, 0.5492957746478874, 0.9583333333333334, 0, 0.5492957746478874, 0.8333333333333334, 0], [0.4859154929577465, 0.9583333333333334, 0, 0.4859154929577465, 1.0, 0, 0.5140845070422535, 1.0, 0, 0.5140845070422535, 0.9583333333333334, 0], [0.5140845070422535, 0.9583333333333334, 0, 0.5140845070422535, 1.0, 0, 0.5422535211267606, 1.0, 0, 0.5422535211267606, 0.9583333333333334, 0], [0.5140845070422535, 0.8333333333333334, 0, 0.5140845070422535, 0.9583333333333334, 0, 0.5211267605633803, 0.9583333333333334, 0, 0.5211267605633803, 0.8333333333333334, 0], [0.4788732394366197, 0.8333333333333334, 0, 0.4788732394366197, 0.9583333333333334, 0, 0.4859154929577465, 0.9583333333333334, 0, 0.4859154929577465, 0.8333333333333334, 0], [0.5774647887323944, 0.5833333333333333, 0, 0.5774647887323944, 0.8333333333333334, 0, 0.6056338028169014, 0.8333333333333334, 0, 0.6056338028169014, 0.5833333333333333, 0], [0.6338028169014085, 0.5833333333333333, 0, 0.6338028169014085, 0.8333333333333334, 0, 0.6619718309859155, 0.8333333333333334, 0, 0.6619718309859155, 0.5833333333333333, 0], [0.5774647887323944, 0.8333333333333334, 0, 0.5774647887323944, 1.0, 0, 0.6056338028169014, 1.0, 0, 0.6056338028169014, 0.8333333333333334, 0], [0.6056338028169014, 0.8333333333333334, 0, 0.6056338028169014, 1.0, 0, 0.6338028169014085, 1.0, 0, 0.6338028169014085, 0.8333333333333334, 0], [0.6056338028169014, 0.5833333333333333, 0, 0.6056338028169014, 0.8333333333333334, 0, 0.6338028169014085, 0.8333333333333334, 0, 0.6338028169014085, 0.5833333333333333, 0], [0.5492957746478874, 0.5833333333333333, 0, 0.5492957746478874, 0.8333333333333334, 0, 0.5774647887323944, 0.8333333333333334, 0, 0.5774647887323944, 0.5833333333333333, 0], [0.6901408450704225, 0.5833333333333333, 0, 0.6901408450704225, 0.8333333333333334, 0, 0.7183098591549296, 0.8333333333333334, 0, 0.7183098591549296, 0.5833333333333333, 0], [0.7464788732394366, 0.5833333333333333, 0, 0.7464788732394366, 0.8333333333333334, 0, 0.7746478873239436, 0.8333333333333334, 0, 0.7746478873239436, 0.5833333333333333, 0], [0.6901408450704225, 0.8333333333333334, 0, 0.6901408450704225, 1.0, 0, 0.7183098591549296, 1.0, 0, 0.7183098591549296, 0.8333333333333334, 0], [0.7183098591549296, 0.8333333333333334, 0, 0.7183098591549296, 1.0, 0, 0.7464788732394366, 1.0, 0, 0.7464788732394366, 0.8333333333333334, 0], [0.7183098591549296, 0.5833333333333333, 0, 0.7183098591549296, 0.8333333333333334, 0, 0.7464788732394366, 0.8333333333333334, 0, 0.7464788732394366, 0.5833333333333333, 0], [0.6619718309859155, 0.5833333333333333, 0, 0.6619718309859155, 0.8333333333333334, 0, 0.6901408450704225, 0.8333333333333334, 0, 0.6901408450704225, 0.5833333333333333, 0], [0.8028169014084507, 0.5833333333333333, 0, 0.8028169014084507, 0.8333333333333334, 0, 0.8309859154929577, 0.8333333333333334, 0, 0.8309859154929577, 0.5833333333333333, 0], [0.8591549295774648, 0.5833333333333333, 0, 0.8591549295774648, 0.8333333333333334, 0, 0.8873239436619719, 0.8333333333333334, 0, 0.8873239436619719, 0.5833333333333333, 0], [0.8028169014084507, 0.8333333333333334, 0, 0.8028169014084507, 1.0, 0, 0.8309859154929577, 1.0, 0, 0.8309859154929577, 0.8333333333333334, 0], [0.8309859154929577, 0.8333333333333334, 0, 0.8309859154929577, 1.0, 0, 0.8591549295774648, 1.0, 0, 0.8591549295774648, 0.8333333333333334, 0], [0.8309859154929577, 0.5833333333333333, 0, 0.8309859154929577, 0.8333333333333334, 0, 0.8591549295774648, 0.8333333333333334, 0, 0.8591549295774648, 0.5833333333333333, 0], [0.7746478873239436, 0.5833333333333333, 0, 0.7746478873239436, 0.8333333333333334, 0, 0.8028169014084507, 0.8333333333333334, 0, 0.8028169014084507, 0.5833333333333333, 0], [0.9154929577464789, 0.5833333333333333, 0, 0.9154929577464789, 0.8333333333333334, 0, 0.9436619718309859, 0.8333333333333334, 0, 0.9436619718309859, 0.5833333333333333, 0], [0.971830985915493, 0.5833333333333333, 0, 0.971830985915493, 0.8333333333333334, 0, 1.0, 0.8333333333333334, 0, 1.0, 0.5833333333333333, 0], [0.9154929577464789, 0.8333333333333334, 0, 0.9154929577464789, 1.0, 0, 0.9436619718309859, 1.0, 0, 0.9436619718309859, 0.8333333333333334, 0], [0.9436619718309859, 0.8333333333333334, 0, 0.9436619718309859, 1.0, 0, 0.971830985915493, 1.0, 0, 0.971830985915493, 0.8333333333333334, 0], [0.9436619718309859, 0.5833333333333333, 0, 0.9436619718309859, 0.8333333333333334, 0, 0.971830985915493, 0.8333333333333334, 0, 0.971830985915493, 0.5833333333333333, 0], [0.8873239436619719, 0.5833333333333333, 0, 0.8873239436619719, 0.8333333333333334, 0, 0.9154929577464789, 0.8333333333333334, 0, 0.9154929577464789, 0.5833333333333333, 0]] +shading_values = [[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]] diff --git a/community/models/plant.py b/community/models/plant.py index 226d0f58..acb53dc4 100644 --- a/community/models/plant.py +++ b/community/models/plant.py @@ -1,7 +1,7 @@ -transparent = 2 +transparent = True +translucent = False is_cube = False glass = False -translucent = False colliders = [] @@ -24,4 +24,4 @@ [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], -] \ No newline at end of file +] diff --git a/community/models/pressure_plate.py b/community/models/pressure_plate.py index 4e6f824b..06288849 100644 --- a/community/models/pressure_plate.py +++ b/community/models/pressure_plate.py @@ -1,4 +1,4 @@ -transparent = 2 +transparent = True is_cube = False glass = False translucent = False @@ -18,4 +18,4 @@ shading_values = [ [1.0, 1.0, 1.0, 1.0], [0.4, 0.4, 0.4, 0.4], -] \ No newline at end of file +] diff --git a/community/models/sign.py b/community/models/sign.py index 226d0f58..30be93c3 100644 --- a/community/models/sign.py +++ b/community/models/sign.py @@ -1,4 +1,4 @@ -transparent = 2 +transparent = True is_cube = False glass = False translucent = False @@ -24,4 +24,4 @@ [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], -] \ No newline at end of file +] diff --git a/community/models/sign_post.py b/community/models/sign_post.py index 226d0f58..30be93c3 100644 --- a/community/models/sign_post.py +++ b/community/models/sign_post.py @@ -1,4 +1,4 @@ -transparent = 2 +transparent = True is_cube = False glass = False translucent = False @@ -24,4 +24,4 @@ [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], -] \ No newline at end of file +] diff --git a/community/models/skeleton.py b/community/models/skeleton.py new file mode 100644 index 00000000..e528a48e --- /dev/null +++ b/community/models/skeleton.py @@ -0,0 +1,10 @@ + +transparent = True +is_cube = False +glass = False + +colliders = [] + +vertex_positions = [[-0.25, 0.75, -0.125, -0.25, 1.5, -0.125, 0.25, 1.5, -0.125, 0.25, 0.75, -0.125], [0.25, 0.75, 0.125, 0.25, 1.5, 0.125, -0.25, 1.5, 0.125, -0.25, 0.75, 0.125], [-0.25, 1.5, -0.125, -0.25, 1.5, 0.125, 0.25, 1.5, 0.125, 0.25, 1.5, -0.125], [0.25, 0.75, -0.125, 0.25, 0.75, 0.125, -0.25, 0.75, 0.125, -0.25, 0.75, -0.125], [0.25, 0.75, -0.125, 0.25, 1.5, -0.125, 0.25, 1.5, 0.125, 0.25, 0.75, 0.125], [-0.25, 0.75, 0.125, -0.25, 1.5, 0.125, -0.25, 1.5, -0.125, -0.25, 0.75, -0.125], [-0.25, 1.5, -0.25, -0.25, 2.0, -0.25, 0.25, 2.0, -0.25, 0.25, 1.5, -0.25], [0.25, 1.5, 0.25, 0.25, 2.0, 0.25, -0.25, 2.0, 0.25, -0.25, 1.5, 0.25], [-0.25, 2.0, -0.25, -0.25, 2.0, 0.25, 0.25, 2.0, 0.25, 0.25, 2.0, -0.25], [0.25, 1.5, -0.25, 0.25, 1.5, 0.25, -0.25, 1.5, 0.25, -0.25, 1.5, -0.25], [0.25, 1.5, -0.25, 0.25, 2.0, -0.25, 0.25, 2.0, 0.25, 0.25, 1.5, 0.25], [-0.25, 1.5, 0.25, -0.25, 2.0, 0.25, -0.25, 2.0, -0.25, -0.25, 1.5, -0.25], [-0.25, 1.5, -0.25, -0.25, 2.0, -0.25, 0.25, 2.0, -0.25, 0.25, 1.5, -0.25], [0.25, 1.5, 0.25, 0.25, 2.0, 0.25, -0.25, 2.0, 0.25, -0.25, 1.5, 0.25], [-0.25, 2.0, -0.25, -0.25, 2.0, 0.25, 0.25, 2.0, 0.25, 0.25, 2.0, -0.25], [0.25, 1.5, -0.25, 0.25, 1.5, 0.25, -0.25, 1.5, 0.25, -0.25, 1.5, -0.25], [0.25, 1.5, -0.25, 0.25, 2.0, -0.25, 0.25, 2.0, 0.25, 0.25, 1.5, 0.25], [-0.25, 1.5, 0.25, -0.25, 2.0, 0.25, -0.25, 2.0, -0.25, -0.25, 1.5, -0.25], [-0.375, 0.75, -0.0625, -0.375, 1.5, -0.0625, -0.25, 1.5, -0.0625, -0.25, 0.75, -0.0625], [-0.25, 0.75, 0.0625, -0.25, 1.5, 0.0625, -0.375, 1.5, 0.0625, -0.375, 0.75, 0.0625], [-0.375, 1.5, -0.0625, -0.375, 1.5, 0.0625, -0.25, 1.5, 0.0625, -0.25, 1.5, -0.0625], [-0.25, 0.75, -0.0625, -0.25, 0.75, 0.0625, -0.375, 0.75, 0.0625, -0.375, 0.75, -0.0625], [-0.25, 0.75, -0.0625, -0.25, 1.5, -0.0625, -0.25, 1.5, 0.0625, -0.25, 0.75, 0.0625], [-0.375, 0.75, 0.0625, -0.375, 1.5, 0.0625, -0.375, 1.5, -0.0625, -0.375, 0.75, -0.0625], [0.25, 0.75, -0.0625, 0.25, 1.5, -0.0625, 0.375, 1.5, -0.0625, 0.375, 0.75, -0.0625], [0.375, 0.75, 0.0625, 0.375, 1.5, 0.0625, 0.25, 1.5, 0.0625, 0.25, 0.75, 0.0625], [0.25, 1.5, -0.0625, 0.25, 1.5, 0.0625, 0.375, 1.5, 0.0625, 0.375, 1.5, -0.0625], [0.375, 0.75, -0.0625, 0.375, 0.75, 0.0625, 0.25, 0.75, 0.0625, 0.25, 0.75, -0.0625], [0.375, 0.75, -0.0625, 0.375, 1.5, -0.0625, 0.375, 1.5, 0.0625, 0.375, 0.75, 0.0625], [0.25, 0.75, 0.0625, 0.25, 1.5, 0.0625, 0.25, 1.5, -0.0625, 0.25, 0.75, -0.0625], [-0.1875, 0.0, -0.0625, -0.1875, 0.75, -0.0625, -0.0625, 0.75, -0.0625, -0.0625, 0.0, -0.0625], [-0.0625, 0.0, 0.0625, -0.0625, 0.75, 0.0625, -0.1875, 0.75, 0.0625, -0.1875, 0.0, 0.0625], [-0.1875, 0.75, -0.0625, -0.1875, 0.75, 0.0625, -0.0625, 0.75, 0.0625, -0.0625, 0.75, -0.0625], [-0.0625, 0.0, -0.0625, -0.0625, 0.0, 0.0625, -0.1875, 0.0, 0.0625, -0.1875, 0.0, -0.0625], [-0.0625, 0.0, -0.0625, -0.0625, 0.75, -0.0625, -0.0625, 0.75, 0.0625, -0.0625, 0.0, 0.0625], [-0.1875, 0.0, 0.0625, -0.1875, 0.75, 0.0625, -0.1875, 0.75, -0.0625, -0.1875, 0.0, -0.0625], [0.0625, 0.0, -0.0625, 0.0625, 0.75, -0.0625, 0.1875, 0.75, -0.0625, 0.1875, 0.0, -0.0625], [0.1875, 0.0, 0.0625, 0.1875, 0.75, 0.0625, 0.0625, 0.75, 0.0625, 0.0625, 0.0, 0.0625], [0.0625, 0.75, -0.0625, 0.0625, 0.75, 0.0625, 0.1875, 0.75, 0.0625, 0.1875, 0.75, -0.0625], [0.1875, 0.0, -0.0625, 0.1875, 0.0, 0.0625, 0.0625, 0.0, 0.0625, 0.0625, 0.0, -0.0625], [0.1875, 0.0, -0.0625, 0.1875, 0.75, -0.0625, 0.1875, 0.75, 0.0625, 0.1875, 0.0, 0.0625], [0.0625, 0.0, 0.0625, 0.0625, 0.75, 0.0625, 0.0625, 0.75, -0.0625, 0.0625, 0.0, -0.0625]] +tex_coords = [[0.03333333333333333, 0.0, 0, 0.03333333333333333, 0.75, 0, 0.1, 0.75, 0, 0.1, 0.0, 0], [0.13333333333333333, 0.0, 0, 0.13333333333333333, 0.75, 0, 0.2, 0.75, 0, 0.2, 0.0, 0], [0.03333333333333333, 0.75, 0, 0.03333333333333333, 1.0, 0, 0.1, 1.0, 0, 0.1, 0.75, 0], [0.1, 0.75, 0, 0.1, 1.0, 0, 0.16666666666666666, 1.0, 0, 0.16666666666666666, 0.75, 0], [0.1, 0.0, 0, 0.1, 0.75, 0, 0.13333333333333333, 0.75, 0, 0.13333333333333333, 0.0, 0], [0.0, 0.0, 0, 0.0, 0.75, 0, 0.03333333333333333, 0.75, 0, 0.03333333333333333, 0.0, 0], [0.26666666666666666, 0.0, 0, 0.26666666666666666, 0.5, 0, 0.3333333333333333, 0.5, 0, 0.3333333333333333, 0.0, 0], [0.4, 0.0, 0, 0.4, 0.5, 0, 0.4666666666666667, 0.5, 0, 0.4666666666666667, 0.0, 0], [0.26666666666666666, 0.5, 0, 0.26666666666666666, 1.0, 0, 0.3333333333333333, 1.0, 0, 0.3333333333333333, 0.5, 0], [0.3333333333333333, 0.5, 0, 0.3333333333333333, 1.0, 0, 0.4, 1.0, 0, 0.4, 0.5, 0], [0.3333333333333333, 0.0, 0, 0.3333333333333333, 0.5, 0, 0.4, 0.5, 0, 0.4, 0.0, 0], [0.2, 0.0, 0, 0.2, 0.5, 0, 0.26666666666666666, 0.5, 0, 0.26666666666666666, 0.0, 0], [0.5333333333333333, 0.0, 0, 0.5333333333333333, 0.5, 0, 0.6, 0.5, 0, 0.6, 0.0, 0], [0.6666666666666666, 0.0, 0, 0.6666666666666666, 0.5, 0, 0.7333333333333333, 0.5, 0, 0.7333333333333333, 0.0, 0], [0.5333333333333333, 0.5, 0, 0.5333333333333333, 1.0, 0, 0.6, 1.0, 0, 0.6, 0.5, 0], [0.6, 0.5, 0, 0.6, 1.0, 0, 0.6666666666666666, 1.0, 0, 0.6666666666666666, 0.5, 0], [0.6, 0.0, 0, 0.6, 0.5, 0, 0.6666666666666666, 0.5, 0, 0.6666666666666666, 0.0, 0], [0.4666666666666667, 0.0, 0, 0.4666666666666667, 0.5, 0, 0.5333333333333333, 0.5, 0, 0.5333333333333333, 0.0, 0], [0.75, 0.125, 0, 0.75, 0.875, 0, 0.7666666666666667, 0.875, 0, 0.7666666666666667, 0.125, 0], [0.7833333333333333, 0.125, 0, 0.7833333333333333, 0.875, 0, 0.8, 0.875, 0, 0.8, 0.125, 0], [0.75, 0.875, 0, 0.75, 1.0, 0, 0.7666666666666667, 1.0, 0, 0.7666666666666667, 0.875, 0], [0.7666666666666667, 0.875, 0, 0.7666666666666667, 1.0, 0, 0.7833333333333333, 1.0, 0, 0.7833333333333333, 0.875, 0], [0.7666666666666667, 0.125, 0, 0.7666666666666667, 0.875, 0, 0.7833333333333333, 0.875, 0, 0.7833333333333333, 0.125, 0], [0.7333333333333333, 0.125, 0, 0.7333333333333333, 0.875, 0, 0.75, 0.875, 0, 0.75, 0.125, 0], [0.8166666666666667, 0.125, 0, 0.8166666666666667, 0.875, 0, 0.8333333333333334, 0.875, 0, 0.8333333333333334, 0.125, 0], [0.85, 0.125, 0, 0.85, 0.875, 0, 0.8666666666666667, 0.875, 0, 0.8666666666666667, 0.125, 0], [0.8166666666666667, 0.875, 0, 0.8166666666666667, 1.0, 0, 0.8333333333333334, 1.0, 0, 0.8333333333333334, 0.875, 0], [0.8333333333333334, 0.875, 0, 0.8333333333333334, 1.0, 0, 0.85, 1.0, 0, 0.85, 0.875, 0], [0.8333333333333334, 0.125, 0, 0.8333333333333334, 0.875, 0, 0.85, 0.875, 0, 0.85, 0.125, 0], [0.8, 0.125, 0, 0.8, 0.875, 0, 0.8166666666666667, 0.875, 0, 0.8166666666666667, 0.125, 0], [0.8833333333333333, 0.125, 0, 0.8833333333333333, 0.875, 0, 0.9, 0.875, 0, 0.9, 0.125, 0], [0.9166666666666666, 0.125, 0, 0.9166666666666666, 0.875, 0, 0.9333333333333333, 0.875, 0, 0.9333333333333333, 0.125, 0], [0.8833333333333333, 0.875, 0, 0.8833333333333333, 1.0, 0, 0.9, 1.0, 0, 0.9, 0.875, 0], [0.9, 0.875, 0, 0.9, 1.0, 0, 0.9166666666666666, 1.0, 0, 0.9166666666666666, 0.875, 0], [0.9, 0.125, 0, 0.9, 0.875, 0, 0.9166666666666666, 0.875, 0, 0.9166666666666666, 0.125, 0], [0.8666666666666667, 0.125, 0, 0.8666666666666667, 0.875, 0, 0.8833333333333333, 0.875, 0, 0.8833333333333333, 0.125, 0], [0.95, 0.125, 0, 0.95, 0.875, 0, 0.9666666666666667, 0.875, 0, 0.9666666666666667, 0.125, 0], [0.9833333333333333, 0.125, 0, 0.9833333333333333, 0.875, 0, 1.0, 0.875, 0, 1.0, 0.125, 0], [0.95, 0.875, 0, 0.95, 1.0, 0, 0.9666666666666667, 1.0, 0, 0.9666666666666667, 0.875, 0], [0.9666666666666667, 0.875, 0, 0.9666666666666667, 1.0, 0, 0.9833333333333333, 1.0, 0, 0.9833333333333333, 0.875, 0], [0.9666666666666667, 0.125, 0, 0.9666666666666667, 0.875, 0, 0.9833333333333333, 0.875, 0, 0.9833333333333333, 0.125, 0], [0.9333333333333333, 0.125, 0, 0.9333333333333333, 0.875, 0, 0.95, 0.875, 0, 0.95, 0.125, 0]] +shading_values = [[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]] diff --git a/community/models/slab.py b/community/models/slab.py index 14eacc5d..28bd94bb 100644 --- a/community/models/slab.py +++ b/community/models/slab.py @@ -1,4 +1,4 @@ -transparent = 2 +transparent = True is_cube = False glass = False translucent = False @@ -35,4 +35,4 @@ [0.4, 0.4, 0.4, 0.4], [0.8, 0.8, 0.8, 0.8], [0.8, 0.8, 0.8, 0.8], -] \ No newline at end of file +] diff --git a/community/models/snow.py b/community/models/snow.py index 12cff385..79d04fb4 100644 --- a/community/models/snow.py +++ b/community/models/snow.py @@ -1,4 +1,4 @@ -transparent = 2 +transparent = True is_cube = False glass = False translucent = False @@ -23,4 +23,4 @@ shading_values = [ [1.0, 1.0, 1.0, 1.0], [0.4, 0.4, 0.4, 0.4], -] \ No newline at end of file +] diff --git a/community/models/soil.py b/community/models/soil.py index 90643cac..18de7a0e 100644 --- a/community/models/soil.py +++ b/community/models/soil.py @@ -1,4 +1,4 @@ -transparent = 2 +transparent = True is_cube = False glass = False translucent = False @@ -35,4 +35,4 @@ [0.4, 0.4, 0.4, 0.4], [0.8, 0.8, 0.8, 0.8], [0.8, 0.8, 0.8, 0.8], -] \ No newline at end of file +] diff --git a/community/models/stairs.py b/community/models/stairs.py index 14eacc5d..28bd94bb 100644 --- a/community/models/stairs.py +++ b/community/models/stairs.py @@ -1,4 +1,4 @@ -transparent = 2 +transparent = True is_cube = False glass = False translucent = False @@ -35,4 +35,4 @@ [0.4, 0.4, 0.4, 0.4], [0.8, 0.8, 0.8, 0.8], [0.8, 0.8, 0.8, 0.8], -] \ No newline at end of file +] diff --git a/community/models/tinted_glass.py b/community/models/tinted_glass.py index 1a7e14c3..fbee5972 100644 --- a/community/models/tinted_glass.py +++ b/community/models/tinted_glass.py @@ -1,4 +1,4 @@ -transparent = 1 +transparent = True is_cube = True glass = True translucent = True @@ -35,4 +35,4 @@ [0.4, 0.4, 0.4, 0.4], [0.8, 0.8, 0.8, 0.8], [0.8, 0.8, 0.8, 0.8], -] \ No newline at end of file +] diff --git a/community/models/torch.py b/community/models/torch.py index 6b0482ff..f8bde5fd 100644 --- a/community/models/torch.py +++ b/community/models/torch.py @@ -1,4 +1,4 @@ -transparent = 2 +transparent = True is_cube = False glass = False translucent = False diff --git a/community/models/zombie.py b/community/models/zombie.py new file mode 100644 index 00000000..3bdc469d --- /dev/null +++ b/community/models/zombie.py @@ -0,0 +1,10 @@ + +transparent = True +is_cube = False +glass = False + +colliders = [] + +vertex_positions = [[-0.25, 0.75, -0.125, -0.25, 1.5, -0.125, 0.25, 1.5, -0.125, 0.25, 0.75, -0.125], [0.25, 0.75, 0.125, 0.25, 1.5, 0.125, -0.25, 1.5, 0.125, -0.25, 0.75, 0.125], [-0.25, 1.5, -0.125, -0.25, 1.5, 0.125, 0.25, 1.5, 0.125, 0.25, 1.5, -0.125], [0.25, 0.75, -0.125, 0.25, 0.75, 0.125, -0.25, 0.75, 0.125, -0.25, 0.75, -0.125], [0.25, 0.75, -0.125, 0.25, 1.5, -0.125, 0.25, 1.5, 0.125, 0.25, 0.75, 0.125], [-0.25, 0.75, 0.125, -0.25, 1.5, 0.125, -0.25, 1.5, -0.125, -0.25, 0.75, -0.125], [-0.25, 1.5, -0.25, -0.25, 2.0, -0.25, 0.25, 2.0, -0.25, 0.25, 1.5, -0.25], [0.25, 1.5, 0.25, 0.25, 2.0, 0.25, -0.25, 2.0, 0.25, -0.25, 1.5, 0.25], [-0.25, 2.0, -0.25, -0.25, 2.0, 0.25, 0.25, 2.0, 0.25, 0.25, 2.0, -0.25], [0.25, 1.5, -0.25, 0.25, 1.5, 0.25, -0.25, 1.5, 0.25, -0.25, 1.5, -0.25], [0.25, 1.5, -0.25, 0.25, 2.0, -0.25, 0.25, 2.0, 0.25, 0.25, 1.5, 0.25], [-0.25, 1.5, 0.25, -0.25, 2.0, 0.25, -0.25, 2.0, -0.25, -0.25, 1.5, -0.25], [-0.25, 1.5, -0.25, -0.25, 2.0, -0.25, 0.25, 2.0, -0.25, 0.25, 1.5, -0.25], [0.25, 1.5, 0.25, 0.25, 2.0, 0.25, -0.25, 2.0, 0.25, -0.25, 1.5, 0.25], [-0.25, 2.0, -0.25, -0.25, 2.0, 0.25, 0.25, 2.0, 0.25, 0.25, 2.0, -0.25], [0.25, 1.5, -0.25, 0.25, 1.5, 0.25, -0.25, 1.5, 0.25, -0.25, 1.5, -0.25], [0.25, 1.5, -0.25, 0.25, 2.0, -0.25, 0.25, 2.0, 0.25, 0.25, 1.5, 0.25], [-0.25, 1.5, 0.25, -0.25, 2.0, 0.25, -0.25, 2.0, -0.25, -0.25, 1.5, -0.25], [-0.5, 0.75, -0.125, -0.5, 1.5, -0.125, -0.25, 1.5, -0.125, -0.25, 0.75, -0.125], [-0.25, 0.75, 0.125, -0.25, 1.5, 0.125, -0.5, 1.5, 0.125, -0.5, 0.75, 0.125], [-0.5, 1.5, -0.125, -0.5, 1.5, 0.125, -0.25, 1.5, 0.125, -0.25, 1.5, -0.125], [-0.25, 0.75, -0.125, -0.25, 0.75, 0.125, -0.5, 0.75, 0.125, -0.5, 0.75, -0.125], [-0.25, 0.75, -0.125, -0.25, 1.5, -0.125, -0.25, 1.5, 0.125, -0.25, 0.75, 0.125], [-0.5, 0.75, 0.125, -0.5, 1.5, 0.125, -0.5, 1.5, -0.125, -0.5, 0.75, -0.125], [0.25, 0.75, -0.125, 0.25, 1.5, -0.125, 0.5, 1.5, -0.125, 0.5, 0.75, -0.125], [0.5, 0.75, 0.125, 0.5, 1.5, 0.125, 0.25, 1.5, 0.125, 0.25, 0.75, 0.125], [0.25, 1.5, -0.125, 0.25, 1.5, 0.125, 0.5, 1.5, 0.125, 0.5, 1.5, -0.125], [0.5, 0.75, -0.125, 0.5, 0.75, 0.125, 0.25, 0.75, 0.125, 0.25, 0.75, -0.125], [0.5, 0.75, -0.125, 0.5, 1.5, -0.125, 0.5, 1.5, 0.125, 0.5, 0.75, 0.125], [0.25, 0.75, 0.125, 0.25, 1.5, 0.125, 0.25, 1.5, -0.125, 0.25, 0.75, -0.125], [-0.24375000596046448, 0.0, -0.125, -0.24375000596046448, 0.75, -0.125, 0.0062500000931322575, 0.75, -0.125, 0.0062500000931322575, 0.0, -0.125], [0.0062500000931322575, 0.0, 0.125, 0.0062500000931322575, 0.75, 0.125, -0.24375000596046448, 0.75, 0.125, -0.24375000596046448, 0.0, 0.125], [-0.24375000596046448, 0.75, -0.125, -0.24375000596046448, 0.75, 0.125, 0.0062500000931322575, 0.75, 0.125, 0.0062500000931322575, 0.75, -0.125], [0.0062500000931322575, 0.0, -0.125, 0.0062500000931322575, 0.0, 0.125, -0.24375000596046448, 0.0, 0.125, -0.24375000596046448, 0.0, -0.125], [0.0062500000931322575, 0.0, -0.125, 0.0062500000931322575, 0.75, -0.125, 0.0062500000931322575, 0.75, 0.125, 0.0062500000931322575, 0.0, 0.125], [-0.24375000596046448, 0.0, 0.125, -0.24375000596046448, 0.75, 0.125, -0.24375000596046448, 0.75, -0.125, -0.24375000596046448, 0.0, -0.125], [-0.0062500000931322575, 0.0, -0.125, -0.0062500000931322575, 0.75, -0.125, 0.24375000596046448, 0.75, -0.125, 0.24375000596046448, 0.0, -0.125], [0.24375000596046448, 0.0, 0.125, 0.24375000596046448, 0.75, 0.125, -0.0062500000931322575, 0.75, 0.125, -0.0062500000931322575, 0.0, 0.125], [-0.0062500000931322575, 0.75, -0.125, -0.0062500000931322575, 0.75, 0.125, 0.24375000596046448, 0.75, 0.125, 0.24375000596046448, 0.75, -0.125], [0.24375000596046448, 0.0, -0.125, 0.24375000596046448, 0.0, 0.125, -0.0062500000931322575, 0.0, 0.125, -0.0062500000931322575, 0.0, -0.125], [0.24375000596046448, 0.0, -0.125, 0.24375000596046448, 0.75, -0.125, 0.24375000596046448, 0.75, 0.125, 0.24375000596046448, 0.0, 0.125], [-0.0062500000931322575, 0.0, 0.125, -0.0062500000931322575, 0.75, 0.125, -0.0062500000931322575, 0.75, -0.125, -0.0062500000931322575, 0.0, -0.125]] +tex_coords = [[0.02631578947368421, 0.0, 0, 0.02631578947368421, 0.75, 0, 0.07894736842105263, 0.75, 0, 0.07894736842105263, 0.0, 0], [0.10526315789473684, 0.0, 0, 0.10526315789473684, 0.75, 0, 0.15789473684210525, 0.75, 0, 0.15789473684210525, 0.0, 0], [0.02631578947368421, 0.75, 0, 0.02631578947368421, 1.0, 0, 0.07894736842105263, 1.0, 0, 0.07894736842105263, 0.75, 0], [0.07894736842105263, 0.75, 0, 0.07894736842105263, 1.0, 0, 0.13157894736842105, 1.0, 0, 0.13157894736842105, 0.75, 0], [0.07894736842105263, 0.0, 0, 0.07894736842105263, 0.75, 0, 0.10526315789473684, 0.75, 0, 0.10526315789473684, 0.0, 0], [0.0, 0.0, 0, 0.0, 0.75, 0, 0.02631578947368421, 0.75, 0, 0.02631578947368421, 0.0, 0], [0.21052631578947367, 0.0, 0, 0.21052631578947367, 0.5, 0, 0.2631578947368421, 0.5, 0, 0.2631578947368421, 0.0, 0], [0.3157894736842105, 0.0, 0, 0.3157894736842105, 0.5, 0, 0.3684210526315789, 0.5, 0, 0.3684210526315789, 0.0, 0], [0.21052631578947367, 0.5, 0, 0.21052631578947367, 1.0, 0, 0.2631578947368421, 1.0, 0, 0.2631578947368421, 0.5, 0], [0.2631578947368421, 0.5, 0, 0.2631578947368421, 1.0, 0, 0.3157894736842105, 1.0, 0, 0.3157894736842105, 0.5, 0], [0.2631578947368421, 0.0, 0, 0.2631578947368421, 0.5, 0, 0.3157894736842105, 0.5, 0, 0.3157894736842105, 0.0, 0], [0.15789473684210525, 0.0, 0, 0.15789473684210525, 0.5, 0, 0.21052631578947367, 0.5, 0, 0.21052631578947367, 0.0, 0], [0.42105263157894735, 0.0, 0, 0.42105263157894735, 0.5, 0, 0.47368421052631576, 0.5, 0, 0.47368421052631576, 0.0, 0], [0.5263157894736842, 0.0, 0, 0.5263157894736842, 0.5, 0, 0.5789473684210527, 0.5, 0, 0.5789473684210527, 0.0, 0], [0.42105263157894735, 0.5, 0, 0.42105263157894735, 1.0, 0, 0.47368421052631576, 1.0, 0, 0.47368421052631576, 0.5, 0], [0.47368421052631576, 0.5, 0, 0.47368421052631576, 1.0, 0, 0.5263157894736842, 1.0, 0, 0.5263157894736842, 0.5, 0], [0.47368421052631576, 0.0, 0, 0.47368421052631576, 0.5, 0, 0.5263157894736842, 0.5, 0, 0.5263157894736842, 0.0, 0], [0.3684210526315789, 0.0, 0, 0.3684210526315789, 0.5, 0, 0.42105263157894735, 0.5, 0, 0.42105263157894735, 0.0, 0], [0.6052631578947368, 0.0, 0, 0.6052631578947368, 0.75, 0, 0.631578947368421, 0.75, 0, 0.631578947368421, 0.0, 0], [0.6578947368421053, 0.0, 0, 0.6578947368421053, 0.75, 0, 0.6842105263157895, 0.75, 0, 0.6842105263157895, 0.0, 0], [0.6052631578947368, 0.75, 0, 0.6052631578947368, 1.0, 0, 0.631578947368421, 1.0, 0, 0.631578947368421, 0.75, 0], [0.631578947368421, 0.75, 0, 0.631578947368421, 1.0, 0, 0.6578947368421053, 1.0, 0, 0.6578947368421053, 0.75, 0], [0.631578947368421, 0.0, 0, 0.631578947368421, 0.75, 0, 0.6578947368421053, 0.75, 0, 0.6578947368421053, 0.0, 0], [0.5789473684210527, 0.0, 0, 0.5789473684210527, 0.75, 0, 0.6052631578947368, 0.75, 0, 0.6052631578947368, 0.0, 0], [0.7105263157894737, 0.0, 0, 0.7105263157894737, 0.75, 0, 0.7368421052631579, 0.75, 0, 0.7368421052631579, 0.0, 0], [0.7631578947368421, 0.0, 0, 0.7631578947368421, 0.75, 0, 0.7894736842105263, 0.75, 0, 0.7894736842105263, 0.0, 0], [0.7105263157894737, 0.75, 0, 0.7105263157894737, 1.0, 0, 0.7368421052631579, 1.0, 0, 0.7368421052631579, 0.75, 0], [0.7368421052631579, 0.75, 0, 0.7368421052631579, 1.0, 0, 0.7631578947368421, 1.0, 0, 0.7631578947368421, 0.75, 0], [0.7368421052631579, 0.0, 0, 0.7368421052631579, 0.75, 0, 0.7631578947368421, 0.75, 0, 0.7631578947368421, 0.0, 0], [0.6842105263157895, 0.0, 0, 0.6842105263157895, 0.75, 0, 0.7105263157894737, 0.75, 0, 0.7105263157894737, 0.0, 0], [0.8157894736842105, 0.0, 0, 0.8157894736842105, 0.75, 0, 0.8421052631578947, 0.75, 0, 0.8421052631578947, 0.0, 0], [0.868421052631579, 0.0, 0, 0.868421052631579, 0.75, 0, 0.8947368421052632, 0.75, 0, 0.8947368421052632, 0.0, 0], [0.8157894736842105, 0.75, 0, 0.8157894736842105, 1.0, 0, 0.8421052631578947, 1.0, 0, 0.8421052631578947, 0.75, 0], [0.8421052631578947, 0.75, 0, 0.8421052631578947, 1.0, 0, 0.868421052631579, 1.0, 0, 0.868421052631579, 0.75, 0], [0.8421052631578947, 0.0, 0, 0.8421052631578947, 0.75, 0, 0.868421052631579, 0.75, 0, 0.868421052631579, 0.0, 0], [0.7894736842105263, 0.0, 0, 0.7894736842105263, 0.75, 0, 0.8157894736842105, 0.75, 0, 0.8157894736842105, 0.0, 0], [0.9210526315789473, 0.0, 0, 0.9210526315789473, 0.75, 0, 0.9473684210526315, 0.75, 0, 0.9473684210526315, 0.0, 0], [0.9736842105263158, 0.0, 0, 0.9736842105263158, 0.75, 0, 1.0, 0.75, 0, 1.0, 0.0, 0], [0.9210526315789473, 0.75, 0, 0.9210526315789473, 1.0, 0, 0.9473684210526315, 1.0, 0, 0.9473684210526315, 0.75, 0], [0.9473684210526315, 0.75, 0, 0.9473684210526315, 1.0, 0, 0.9736842105263158, 1.0, 0, 0.9736842105263158, 0.75, 0], [0.9473684210526315, 0.0, 0, 0.9473684210526315, 0.75, 0, 0.9736842105263158, 0.75, 0, 0.9736842105263158, 0.0, 0], [0.8947368421052632, 0.0, 0, 0.8947368421052632, 0.75, 0, 0.9210526315789473, 0.75, 0, 0.9210526315789473, 0.0, 0]] +shading_values = [[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]] diff --git a/community/player.py b/community/player.py index 3e27c02d..8ec7b1bc 100644 --- a/community/player.py +++ b/community/player.py @@ -18,29 +18,16 @@ class Frustum: def normalize(plane): return plane / glm.length(plane.xyz) - class Player(entity.Entity): - def __init__(self, world, shader, width, height): - super().__init__(world) + def __init__(self, world, width, height): + super().__init__(world, world.entity_types["Player"]) self.view_width = width self.view_height = height - # create matrices - - self.mv_matrix = glm.mat4() - self.p_matrix = glm.mat4() - - # shaders - - self.shader = shader - - self.mvp_matrix_location = self.shader.find_uniform(b"u_MVPMatrix") - - # camera variables - self.eyelevel = self.height - 0.2 + self.eyelevel = self.entity_type.height - 0.2 self.input = [0, 0, 0] self.target_speed = WALKING_SPEED @@ -53,7 +40,7 @@ def __init__(self, world, shader, width, height): def update(self, delta_time): # process input - self.view_ray = glm.vec3(glm.cos(self.rotation[0]) * glm.cos(self.rotation[1]), + self.view_ray = glm.vec3(glm.cos(self.rotation[0]) * glm.cos(self.rotation[1]), glm.sin(self.rotation[1]), glm.sin(self.rotation[0]) * glm.cos(self.rotation[1])) @@ -82,38 +69,37 @@ def update(self, delta_time): super().update(delta_time) self.rounded_position = [round(i) for i in self.position] - + def update_interpolation(self, delta_time): self.interpolated_position = glm.mix(glm.vec3(self.position), glm.vec3(self.old_position), self.step) self.step -= delta_time - def update_frustum(self, mat): - mat = glm.transpose(mat) - for i in range(4): + def update_frustum(self): + mat = glm.transpose(self.world.mvp_matrix) + for i in range(4): Frustum.left[i] = mat[3][i] + mat[0][i] Frustum.right[i] = mat[3][i] - mat[0][i] Frustum.bottom[i] = mat[3][i] + mat[1][i] Frustum.top[i] = mat[3][i] - mat[1][i] Frustum.near[i] = mat[3][i] + mat[2][i] Frustum.far[i] = mat[3][i] - mat[2][i] - + Frustum.left = normalize(Frustum.left) Frustum.right = normalize(Frustum.right) Frustum.bottom = normalize(Frustum.bottom) Frustum.top = normalize(Frustum.top) Frustum.near = normalize(Frustum.near) Frustum.far = normalize(Frustum.far) - + def check_in_frustum(self, chunk_pos): """Frustum check of each chunk. If the chunk is not in the view frustum, it is discarded""" planes = (Frustum.left, Frustum.right, Frustum.bottom, Frustum.top, Frustum.near, Frustum.far) result = 2 center = glm.vec3(chunk_pos * glm.ivec3(chunk.CHUNK_WIDTH, 0, chunk.CHUNK_LENGTH) - + glm.ivec3(chunk.CHUNK_WIDTH / 2, + + glm.ivec3(chunk.CHUNK_WIDTH / 2, chunk.CHUNK_HEIGHT / 2, chunk.CHUNK_LENGTH / 2)) - for plane in planes: _in = 0 _out = 0 @@ -151,7 +137,7 @@ def check_in_frustum(self, chunk_pos): _out += 1 else: _in += 1 - + if not _in: return 0 elif _out: @@ -160,20 +146,20 @@ def check_in_frustum(self, chunk_pos): def update_matrices(self): # create projection matrix - - self.p_matrix = glm.perspective( + + self.world.p_matrix = glm.perspective( glm.radians(options.FOV + 10 * (self.speed - WALKING_SPEED) / (SPRINTING_SPEED - WALKING_SPEED)), float(self.view_width) / self.view_height, 0.1, 500) # create modelview matrix - self.mv_matrix = glm.mat4(1.0) - self.mv_matrix = glm.rotate(self.mv_matrix, self.rotation[1], -glm.vec3(1.0, 0.0, 0.0)) - self.mv_matrix = glm.rotate(self.mv_matrix, self.rotation[0] + math.tau / 4, glm.vec3(0.0, 1.0, 0.0)) + self.world.mv_matrix = glm.mat4(1.0) + self.world.mv_matrix = glm.rotate(self.world.mv_matrix, self.rotation[1], -glm.vec3(1.0, 0.0, 0.0)) + self.world.mv_matrix = glm.rotate(self.world.mv_matrix, self.rotation[0] + math.tau / 4, glm.vec3(0.0, 1.0, 0.0)) - self.mv_matrix = glm.translate(self.mv_matrix, -glm.vec3(*self.interpolated_position) - glm.vec3(0, self.eyelevel, 0)) + self.world.mv_matrix = glm.translate(self.world.mv_matrix, -self.interpolated_position - glm.vec3(0, self.eyelevel, 0)) # modelviewprojection matrix - self.shader.uniform_matrix(self.mvp_matrix_location, self.p_matrix * self.mv_matrix) - self.update_frustum(self.p_matrix * self.mv_matrix) \ No newline at end of file + self.world.mvp_matrix = self.world.p_matrix * self.world.mv_matrix + self.update_frustum() diff --git a/community/save.py b/community/save.py index 3483accb..f7a5b779 100644 --- a/community/save.py +++ b/community/save.py @@ -9,25 +9,25 @@ class Save: def __init__(self, world, path = "save"): self.world = world self.path = path - + def chunk_position_to_path(self, chunk_position): x, _, z = chunk_position chunk_path = '/'.join((self.path, base36.dumps(x % 64), base36.dumps(z % 64), f"c.{base36.dumps(x)}.{base36.dumps(z)}.dat")) - + return chunk_path def load_chunk(self, chunk_position): logging.debug(f"Loading chunk at position {chunk_position}") # load the chunk file - + chunk_path = self.chunk_position_to_path(chunk_position) try: chunk_blocks = nbt.load(chunk_path)["Level"]["Blocks"] - + except FileNotFoundError: return @@ -46,7 +46,7 @@ def load_chunk(self, chunk_position): def save_chunk(self, chunk_position): logging.debug(f"Saving chunk at position {chunk_position}") x, y, z = chunk_position - + # try to load the chunk file # if it doesn't exist, create a new one @@ -54,10 +54,10 @@ def save_chunk(self, chunk_position): try: chunk_data = nbt.load(chunk_path) - + except FileNotFoundError: chunk_data = nbt.File({"": nbt.Compound({"Level": nbt.Compound()})}) - + chunk_data["Level"]["xPos"] = x chunk_data["Level"]["zPos"] = z @@ -72,7 +72,7 @@ def save_chunk(self, chunk_position): x * chunk.CHUNK_LENGTH * chunk.CHUNK_HEIGHT + z * chunk.CHUNK_HEIGHT + y] = self.world.chunks[chunk_position].blocks[x][y][z] - + # save the chunk file chunk_data["Level"]["Blocks"] = chunk_blocks @@ -85,13 +85,13 @@ def load(self): # for y in range(-15, 1): # self.load_chunk((x, 0, y)) - for x in range(-4, 4): - for y in range(-4, 4): - self.load_chunk((x, 0, y)) + # for x in range(-4, 4): + # for y in range(-4, 4): + # self.load_chunk((x, 0, y)) - # for x in range(-1, 1): - # for y in range(-1, 1): - # self.load_chunk((x, 0, y)) + for x in range(-1, 1): + for y in range(-1, 1): + self.load_chunk((x, 0, y)) for chunk_position, unlit_chunk in self.world.chunks.items(): for x in range(chunk.CHUNK_WIDTH): @@ -110,7 +110,7 @@ def save(self): for chunk_position in self.world.chunks: if chunk_position[1] != 0: # reject all chunks above and below the world limit continue - + chunk = self.world.chunks[chunk_position] if chunk.modified: diff --git a/community/shader.py b/community/shader.py index 1d571aa5..4e484a38 100644 --- a/community/shader.py +++ b/community/shader.py @@ -12,7 +12,7 @@ def create_shader(target, source_path): with open(source_path, "rb") as source_file: source = source_file.read() - + source_length = ctypes.c_int(len(source) + 1) source_buffer = ctypes.create_string_buffer(source) @@ -20,7 +20,7 @@ def create_shader(target, source_path): buffer_pointer = ctypes.cast( ctypes.pointer(ctypes.pointer(source_buffer)), ctypes.POINTER(ctypes.POINTER(ctypes.c_char))) - + # compile shader gl.glShaderSource(target, 1, buffer_pointer, ctypes.byref(source_length)) @@ -59,13 +59,13 @@ def __init__(self, vert_path, frag_path): gl.glDeleteShader(self.vert_shader) gl.glDeleteShader(self.frag_shader) - + def __del__(self): gl.glDeleteProgram(self.program) def find_uniform(self, name): return gl.glGetUniformLocation(self.program, ctypes.create_string_buffer(name)) - + def uniform_matrix(self, location, matrix): gl.glUniformMatrix4fv(location, 1, gl.GL_FALSE, glm.value_ptr(matrix)) diff --git a/community/shaders/entity/frag.glsl b/community/shaders/entity/frag.glsl new file mode 100644 index 00000000..1c87c427 --- /dev/null +++ b/community/shaders/entity/frag.glsl @@ -0,0 +1,18 @@ +#version 330 + +out vec4 fragment_colour; + +uniform sampler2D texture_sampler; + +in vec3 local_position; +in vec3 interpolated_tex_coords; +in float shading; + +void main(void) { + vec4 texture_colour = texture(texture_sampler, interpolated_tex_coords.xy); + fragment_colour = texture_colour * shading; + + if (texture_colour.a == 0.0) { // discard if texel's alpha component is 0 (texel is transparent) + discard; + } +} diff --git a/community/shaders/entity/vert.glsl b/community/shaders/entity/vert.glsl new file mode 100644 index 00000000..f538f972 --- /dev/null +++ b/community/shaders/entity/vert.glsl @@ -0,0 +1,25 @@ +#version 330 + +layout(location = 0) in vec3 vertex_position; +layout(location = 1) in vec3 tex_coords; +layout(location = 2) in vec3 normal; + +out vec3 local_position; +out vec3 interpolated_tex_coords; +out float shading; + +uniform mat4 transform_matrix; +uniform mat4 matrix; + +void main(void) { + local_position = vertex_position; + + interpolated_tex_coords = tex_coords; + + vec3 adjusted_normal = (vec4(normal, 1.0) * transform_matrix).xyz; + vec3 sunlight = vec3(0.0, 0.0, 1.0); + + shading = 1.0 - 0.4 * abs(dot(normalize(adjusted_normal), normalize(sunlight))); + + gl_Position = matrix * vec4(vertex_position, 1.0); +} diff --git a/community/textures/cow.png b/community/textures/cow.png new file mode 100644 index 0000000000000000000000000000000000000000..f5ebec713b7507cf94ff472dd779d92de2dcd749 GIT binary patch literal 1948 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 literal 0 HcmV?d00001 diff --git a/community/textures/skeleton.png b/community/textures/skeleton.png new file mode 100644 index 0000000000000000000000000000000000000000..7e3f09575451c6887916e1870d323405fd9f5d7c GIT binary patch literal 1183 zcmV;Q1YrA#P)c+-|S>1(^&XRx*tutUMZOe8>3P3MWw0h}+m1?mB>=$iZm9Z8 zdnJ$}!SV5NX5IM!U=)myGjrN8qhK`m{x`qAS?hV5f^FN8e8*8RnpyWUeY@3;q%LRX z&}=qW((kOhP|LCuiIN;Snd`bynwPgM3*6@*MKaaj@Am=BC$ZgXr+VHd5GPM($jkI` zozCFr>DMNh`&?a1VsyGyVObUcfE39L$(Cg)lAkLsE-oS=1PX-$gb<)*3L(Ty|0;R_ zO0KH^Y25`6?}o5#J90Ws#C?w8-4L$pMo!0x;vqW?!f^;nDHvm^jAa{PWDNiSrF0|h z9U10iSeTbfUDs8F0)RL0An#+0f!#9DGKJG|B5&X+OHAep9k|aGx!rD8E$;t7GAR;- z;}F2ayPmqeqswpYRy%TCHk{K8F6W3jfMK! zVQrGaf&l#CLA6;hae`&~j4lT^&Keopwj=3H{eB>&i7en%SWko^=$USqs zI@WE8bbX8TNlVww2c$E$?}>Oc+k~9!!Hu&$a&lD-;SUGNqA12pCxd0_mi7AM6c0=!&dWko>r^qJuvnDNYc{ z=V6#80AP1_cS>iNCJfV@B05f>nir2-gSpS%AmrN8%H;lbU8yBF>D8+qKMwDPYT_iq zaR`D(0+adn{{CK@gC)`N!YfJKHW2wEA>S{JT>B(z5p+jrLI`zjWDR%&57kOlkr@U7 zemg%00Q`P_4*u|fR;#7j(!;sW)xGgK0n9b3csGPM@Q^cesb%sQa~=6z3D%vH z#?Mwsk>KRu1eceWQ)6EL@*1Q_@WIyG@exdGv=f2Z^oRi}db^Yz1Z>ZPn==b{=1tT@*GCY^RO+N}dgTWVs z<4}dO(q0Lb$}0eme`~6hDk_y%=-u>`_Y?{R7+C}1IGj2Eh=26 xB5H@Vnf$9e?BG6Ep81lN@s-_f`ulA?{sklb;7#+Ts&4=Q002ovPDHLkV1n|DH6Z{1 literal 0 HcmV?d00001 diff --git a/community/textures/zombie.png b/community/textures/zombie.png new file mode 100644 index 0000000000000000000000000000000000000000..81ec3d1240f4b2f4ff70cf5257384e093f270037 GIT binary patch literal 1734 zcmV;%208hOP)LIq2000J!Nkl7(26@@wgMdaH!>@VoFV6jQ<7OczBg~Ak!okE9|Jvr zFz?N~XEYq1IrqNH0$XwA%J`e_{g5nN{>iUcdE=MthHE$9EASY2<;O3Mhmk?i95IXx z05#T+Sr|qJ7eD^!Ej~i*kNNHUe=6)H|NF0B8SC@w zx86vt-@JMAf6AZAx`+|(?{`)-M^r2eHyQw>#=7vbcuyRpI40wgT_EyN41vCBhj(s;3 z|FC^E7hj~v^+~|;vJ%S0GjDSG^A7-ni)Y>x;xSDju=V7E96v6OQe1K@MfM2jhanZL zZRd6?@SiB$zn`A#F0>!(j|kgr=K7df{Hc^!bj;2QVSx~xL{_{MlM zH4&O+vGE|HIH6Z8i#{RL%PF4R82lfP2i<-4gFl7mLA5GotE<9dr9ft9VRJJr96jFi z5^?!{5+}!xATp5#4dqyU#2jGmm`Uu96On0nV#Kw&ntomj3s9?xdAGaw>l4`JCVr4@ zCP(Tg`FH2Kn)iacKw3;+mp?_dDsC(bJEgg;@xH%3W^)r}XE}ZLr7;Mn(zn!*>=^Y{ zgnpEDm^f!-UPJcLloOJ;Tgfi)o1b4k&>HO(CwcHV@IpI=c5>>k&fin(Pv721@$WkK za`FGh^VsG8p8Af|PvQsb^n$zFgp`Lrl@d#}y0fUHOX-4?Z_X}|B67O}=!$vKLkKf)OG8PG8+#f<%CkKeUjLNgml`HU0~xugyob7 z-5AR$;m0w6`uqUZc}H=L05<)NTzpxSOILwxhtkJK8!xMvy!>nj(^H*Zf9YdgT(+IK zm=vgOLlh}T(s!f)eMDhjZ%1+!$_Rm11 zRC(^OG#=$kBJb0WW4xY=<;>x=T-8*TFB?GTUYACr#;Ba1F9ora7`E;TN*7)$18XhH76F%@J;QphOq@V><0XojVMDv|(gWvJ0wT1!26!NQdD}MOK(YZdoF+Yg{V`0@U!m_ zx-q}L@HqhA{?SPlS8tT*v;&-)wXF`5Yx4gU&5=r-hXr~Xvr8oaYBLVKUOVMbfD(rh zmu3;JtpHCZg)U26mOZn`|Gp=Xtep>xibJd z&F}TTpwkZ21FTq= light_level: self.light_increase_queue.append((neighbour_pos, neighbour_level)) - def decrease_skylight(self, world_pos, light_update=True): chunk = self.chunks[get_chunk_position(world_pos)] local_pos = get_local_position(world_pos) old_light = chunk.get_sky_light(local_pos) chunk.set_sky_light(local_pos, 0) self.skylight_decrease_queue.append((world_pos, old_light)) - + self.propagate_skylight_decrease(light_update) self.propagate_skylight_increase(light_update) - def propagate_skylight_decrease(self, light_update=True): - """Similar to the block light algorithm, but + """Similar to the block light algorithm, but always unlight in the downward direction""" while self.skylight_decrease_queue: pos, light_level = self.skylight_decrease_queue.popleft() @@ -353,8 +411,8 @@ def propagate_skylight_decrease(self, light_update=True): elif neighbour_level >= light_level: self.skylight_increase_queue.append((neighbour_pos, neighbour_level)) - # Getter and setters - + # Getters and setters + def get_raw_light(self, position): chunk = self.chunks.get(get_chunk_position(position), None) if not chunk: @@ -362,15 +420,13 @@ def get_raw_light(self, position): local_position = self.get_local_position(position) return chunk.get_raw_light(local_position) - def get_light(self, position): chunk = self.chunks.get(get_chunk_position(position), None) if not chunk: return 0 local_position = self.get_local_position(position) return chunk.get_block_light(local_position) - - + def get_skylight(self, position): chunk = self.chunks.get(get_chunk_position(position), None) if not chunk: @@ -378,13 +434,11 @@ def get_skylight(self, position): local_position = self.get_local_position(position) return chunk.get_sky_light(local_position) - def set_light(self, position, light): chunk = self.chunks.get(get_chunk_position(position), None) local_position = get_local_position(position) chunk.set_block_light(local_position, light) - def set_skylight(self, position, light): chunk = self.chunks.get(get_chunk_position(position), None) local_position = get_local_position(position) @@ -392,43 +446,40 @@ def set_skylight(self, position, light): ################################################# - def get_block_number(self, position): chunk_position = get_chunk_position(position) if not chunk_position in self.chunks: return 0 - + lx, ly, lz = get_local_position(position) block_number = self.chunks[chunk_position].blocks[lx][ly][lz] return block_number - def get_transparency(self, position): block_type = self.block_types[self.get_block_number(position)] if not block_type: return 2 - + return block_type.transparent - def is_opaque_block(self, position): # get block type and check if it's opaque or not # air counts as a transparent block, so test for that too - + block_type = self.block_types[self.get_block_number(position)] - + if not block_type: return False - + return not block_type.transparent - + def create_chunk(self, chunk_position): self.chunks[chunk_position] = chunk.Chunk(self, chunk_position) self.init_skylight(self.chunks[chunk_position]) - + def set_block(self, position, number): # set number to 0 (air) to remove block x, y, z = position chunk_position = get_chunk_position(position) @@ -439,10 +490,10 @@ def set_block(self, position, number): # set number to 0 (air) to remove block self.create_chunk(chunk_position) - + if self.get_block_number(position) == number: # no point updating mesh if the block is the same return - + lx, ly, lz = get_local_position(position) self.chunks[chunk_position].blocks[lx][ly][lz] = number @@ -457,7 +508,7 @@ def set_block(self, position, number): # set number to 0 (air) to remove block elif self.block_types[number].transparent != 2: self.decrease_light(position) self.decrease_skylight(position) - + elif not number: self.decrease_light(position) self.decrease_skylight(position) @@ -467,7 +518,7 @@ def set_block(self, position, number): # set number to 0 (air) to remove block def try_update_chunk_at_position(chunk_position, position): if chunk_position in self.chunks: self.chunks[chunk_position].update_at_position(position) - + if lx == chunk.CHUNK_WIDTH - 1: try_update_chunk_at_position(glm.ivec3(cx + 1, cy, cz), (x + 1, y, z)) if lx == 0: try_update_chunk_at_position(glm.ivec3(cx - 1, cy, cz), (x - 1, y, z)) @@ -477,7 +528,6 @@ def try_update_chunk_at_position(chunk_position, position): if lz == chunk.CHUNK_LENGTH - 1: try_update_chunk_at_position(glm.ivec3(cx, cy, cz + 1), (x, y, z + 1)) if lz == 0: try_update_chunk_at_position(glm.ivec3(cx, cy, cz - 1), (x, y, z - 1)) - def try_set_block(self, position, number, collider): # if we're trying to remove a block, whatever let it go through @@ -489,7 +539,7 @@ def try_set_block(self, position, number, collider): for block_collider in self.block_types[number].colliders: if collider & (block_collider + position): return - + self.set_block(position, number) def toggle_AO(self): @@ -502,7 +552,7 @@ def speed_daytime(self): self.incrementer = 1 if self.daylight >= 1800: self.incrementer = -1 - + def can_render_chunk(self, chunk_position): return self.player.check_in_frustum(chunk_position) and math.dist(self.get_chunk_position(self.player.position), chunk_position) <= self.options.RENDER_DISTANCE @@ -510,13 +560,13 @@ def prepare_rendering(self): self.visible_chunks = [self.chunks[chunk_position] for chunk_position in self.chunks if self.can_render_chunk(chunk_position)] self.sort_chunks() - + def sort_chunks(self): player_chunk_pos = self.get_chunk_position(self.player.position) - self.visible_chunks.sort(key = cmp_to_key(lambda a, b: math.dist(player_chunk_pos, a.chunk_position) + self.visible_chunks.sort(key = cmp_to_key(lambda a, b: math.dist(player_chunk_pos, a.chunk_position) - math.dist(player_chunk_pos, b.chunk_position))) self.sorted_chunks = tuple(reversed(self.visible_chunks)) - + def draw_translucent_fast(self): gl.glEnable(gl.GL_BLEND) gl.glDisable(gl.GL_CULL_FACE) @@ -536,9 +586,9 @@ def draw_translucent_fancy(self): for render_chunk in self.sorted_chunks: render_chunk.draw_translucent(gl.GL_TRIANGLES) - + gl.glFrontFace(gl.GL_CCW) - + for render_chunk in self.sorted_chunks: render_chunk.draw_translucent(gl.GL_TRIANGLES) @@ -546,18 +596,53 @@ def draw_translucent_fancy(self): gl.glDepthMask(gl.GL_TRUE) draw_translucent = draw_translucent_fancy if options.FANCY_TRANSLUCENCY else draw_translucent_fast - + def draw(self): + # daylight stuff + self.c = 0 daylight_multiplier = self.daylight / 1800 - gl.glClearColor(0.5 * (daylight_multiplier - 0.26), - 0.8 * (daylight_multiplier - 0.26), + gl.glClearColor(0.5 * (daylight_multiplier - 0.26), + 0.8 * (daylight_multiplier - 0.26), (daylight_multiplier - 0.26) * 1.36, 1.0) - gl.glUniform1f(self.shader_daylight_location, daylight_multiplier) + + # setup block shader + + self.block_shader.use() + self.block_shader.uniform_matrix(self.block_shader_matrix_location, self.mvp_matrix) + gl.glUniform1f(self.block_shader_daylight_location, daylight_multiplier) + + # bind textures + + gl.glActiveTexture(gl.GL_TEXTURE0) + gl.glBindTexture(gl.GL_TEXTURE_2D_ARRAY, self.texture_manager.texture_array) + gl.glUniform1i(self.block_shader_sampler_location, 0) + + # draw chunks + + gl.glEnable(gl.GL_CULL_FACE) for render_chunk in self.visible_chunks: render_chunk.draw(gl.GL_TRIANGLES) + # draw entities + + self.entity_shader.use() + gl.glDisable(gl.GL_CULL_FACE) + + for entity in self.entities: + dist = math.sqrt(sum(map(lambda x: (x[0] - x[1]) ** 2, zip(entity.position, self.player.position)))) + + if dist > 32: + continue + + entity.draw() + + # draw translucent chunks + + gl.glEnable(gl.GL_CULL_FACE) + self.block_shader.use() + self.draw_translucent() def update_daylight(self): @@ -574,7 +659,7 @@ def update_daylight(self): self.incrementer = -1 self.daylight += self.incrementer - + def build_pending_chunks(self): if self.chunk_building_queue: pending_chunk = self.chunk_building_queue.popleft() @@ -584,7 +669,6 @@ def process_chunk_updates(self): for chunk in self.visible_chunks: chunk.process_chunk_updates() - def tick(self, delta_time): self.chunk_update_counter = 0 self.time += 1 @@ -592,8 +676,8 @@ def tick(self, delta_time): self.update_daylight() self.build_pending_chunks() self.process_chunk_updates() - - - - - + + + + + From 362680242f9546123460a840583b192d57eaf670 Mon Sep 17 00:00:00 2001 From: Jukitsu Date: Mon, 25 Jul 2022 13:51:34 +0200 Subject: [PATCH 20/45] Fix Segfault on community --- community/world.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/community/world.py b/community/world.py index 385b8f1c..2f566771 100644 --- a/community/world.py +++ b/community/world.py @@ -149,6 +149,8 @@ def __init__(self, player, texture_manager, options): self.entity_types[name] = entity_type.Entity_type(self, name, texture, model, width, height) + gl.glBindVertexArray(0) + indices = [] for nquad in range(chunk.CHUNK_WIDTH * chunk.CHUNK_HEIGHT * chunk.CHUNK_LENGTH * 8): From 996af6dfa91a048347db93d30cf8d2db7c34fb00 Mon Sep 17 00:00:00 2001 From: Jukitsu Date: Wed, 28 Sep 2022 15:40:16 +0200 Subject: [PATCH 21/45] Fix transparent values --- community/main.py | 2 +- community/models/button.py | 2 +- community/models/cactus.py | 2 +- community/models/crop.py | 2 +- community/models/fire.py | 2 +- community/models/flat.py | 2 +- community/models/glass.py | 2 +- community/models/ladder.py | 2 +- community/models/leaves.py | 2 +- community/models/lever.py | 2 +- community/models/liquid.py | 2 +- community/models/plant.py | 2 +- community/models/pressure_plate.py | 2 +- community/models/sign.py | 2 +- community/models/sign_post.py | 2 +- community/models/slab.py | 2 +- community/models/snow.py | 2 +- community/models/soil.py | 2 +- community/models/stairs.py | 2 +- community/models/tinted_glass.py | 2 +- community/models/torch.py | 2 +- 21 files changed, 21 insertions(+), 21 deletions(-) diff --git a/community/main.py b/community/main.py index 4affeada..e7a9c23f 100644 --- a/community/main.py +++ b/community/main.py @@ -144,7 +144,7 @@ def on_close(self): for fence in self.fences: gl.glDeleteSync(fence) - pyglet.app.exit() + super().on_close() def update_f3(self, delta_time): """Update the F3 debug screen content""" diff --git a/community/models/button.py b/community/models/button.py index e56c4960..98e58f02 100644 --- a/community/models/button.py +++ b/community/models/button.py @@ -1,4 +1,4 @@ -transparent = True +transparent = 2 is_cube = False glass = False translucent = False diff --git a/community/models/cactus.py b/community/models/cactus.py index 722dcc1c..0dbc9152 100644 --- a/community/models/cactus.py +++ b/community/models/cactus.py @@ -1,4 +1,4 @@ -transparent = True +transparent = 2 is_cube = False glass = False translucent = False diff --git a/community/models/crop.py b/community/models/crop.py index 3da7e278..b994196a 100644 --- a/community/models/crop.py +++ b/community/models/crop.py @@ -1,4 +1,4 @@ -transparent = True +transparent = 2 is_cube = False glass = False translucent = False diff --git a/community/models/fire.py b/community/models/fire.py index 30be93c3..1e6c9e14 100644 --- a/community/models/fire.py +++ b/community/models/fire.py @@ -1,4 +1,4 @@ -transparent = True +transparent = 2 is_cube = False glass = False translucent = False diff --git a/community/models/flat.py b/community/models/flat.py index 06288849..89460959 100644 --- a/community/models/flat.py +++ b/community/models/flat.py @@ -1,4 +1,4 @@ -transparent = True +transparent = 2 is_cube = False glass = False translucent = False diff --git a/community/models/glass.py b/community/models/glass.py index a5077276..180c4987 100644 --- a/community/models/glass.py +++ b/community/models/glass.py @@ -1,4 +1,4 @@ -transparent = True +transparent = 2 is_cube = True glass = True translucent = False diff --git a/community/models/ladder.py b/community/models/ladder.py index 30be93c3..1e6c9e14 100644 --- a/community/models/ladder.py +++ b/community/models/ladder.py @@ -1,4 +1,4 @@ -transparent = True +transparent = 2 is_cube = False glass = False translucent = False diff --git a/community/models/leaves.py b/community/models/leaves.py index 2dc98fb8..15b2f576 100644 --- a/community/models/leaves.py +++ b/community/models/leaves.py @@ -1,4 +1,4 @@ -transparent = True +transparent = 1 is_cube = True glass = False translucent = False diff --git a/community/models/lever.py b/community/models/lever.py index e56c4960..98e58f02 100644 --- a/community/models/lever.py +++ b/community/models/lever.py @@ -1,4 +1,4 @@ -transparent = True +transparent = 2 is_cube = False glass = False translucent = False diff --git a/community/models/liquid.py b/community/models/liquid.py index 7b9d3eaa..982cc252 100644 --- a/community/models/liquid.py +++ b/community/models/liquid.py @@ -1,7 +1,7 @@ # in the end, it'd be nice to have it so that liquids fill up the whole block when they have a block above them # this would avoid the problems this solution has -transparent = True +transparent = 1 is_cube = True glass = True translucent = True diff --git a/community/models/plant.py b/community/models/plant.py index acb53dc4..55a9aeea 100644 --- a/community/models/plant.py +++ b/community/models/plant.py @@ -1,4 +1,4 @@ -transparent = True +transparent = 2 translucent = False is_cube = False glass = False diff --git a/community/models/pressure_plate.py b/community/models/pressure_plate.py index 06288849..89460959 100644 --- a/community/models/pressure_plate.py +++ b/community/models/pressure_plate.py @@ -1,4 +1,4 @@ -transparent = True +transparent = 2 is_cube = False glass = False translucent = False diff --git a/community/models/sign.py b/community/models/sign.py index 30be93c3..1e6c9e14 100644 --- a/community/models/sign.py +++ b/community/models/sign.py @@ -1,4 +1,4 @@ -transparent = True +transparent = 2 is_cube = False glass = False translucent = False diff --git a/community/models/sign_post.py b/community/models/sign_post.py index 30be93c3..1e6c9e14 100644 --- a/community/models/sign_post.py +++ b/community/models/sign_post.py @@ -1,4 +1,4 @@ -transparent = True +transparent = 2 is_cube = False glass = False translucent = False diff --git a/community/models/slab.py b/community/models/slab.py index 28bd94bb..c96e69d0 100644 --- a/community/models/slab.py +++ b/community/models/slab.py @@ -1,4 +1,4 @@ -transparent = True +transparent = 2 is_cube = False glass = False translucent = False diff --git a/community/models/snow.py b/community/models/snow.py index 79d04fb4..97d9ab93 100644 --- a/community/models/snow.py +++ b/community/models/snow.py @@ -1,4 +1,4 @@ -transparent = True +transparent = 2 is_cube = False glass = False translucent = False diff --git a/community/models/soil.py b/community/models/soil.py index 18de7a0e..ed339194 100644 --- a/community/models/soil.py +++ b/community/models/soil.py @@ -1,4 +1,4 @@ -transparent = True +transparent = 2 is_cube = False glass = False translucent = False diff --git a/community/models/stairs.py b/community/models/stairs.py index 28bd94bb..c96e69d0 100644 --- a/community/models/stairs.py +++ b/community/models/stairs.py @@ -1,4 +1,4 @@ -transparent = True +transparent = 2 is_cube = False glass = False translucent = False diff --git a/community/models/tinted_glass.py b/community/models/tinted_glass.py index fbee5972..1d6cfa78 100644 --- a/community/models/tinted_glass.py +++ b/community/models/tinted_glass.py @@ -1,4 +1,4 @@ -transparent = True +transparent = 1 is_cube = True glass = True translucent = True diff --git a/community/models/torch.py b/community/models/torch.py index f8bde5fd..6b0482ff 100644 --- a/community/models/torch.py +++ b/community/models/torch.py @@ -1,4 +1,4 @@ -transparent = True +transparent = 2 is_cube = False glass = False translucent = False From 13b4fad604e4cb15acb9dc02e5ba21565b812bcd Mon Sep 17 00:00:00 2001 From: Jukitsu Date: Wed, 28 Sep 2022 16:08:39 +0200 Subject: [PATCH 22/45] Light affects mob --- community/entity.py | 3 +++ community/options.py | 5 +++-- community/shader.py | 3 +++ community/shaders/entity/vert.glsl | 3 ++- community/world.py | 1 + 5 files changed, 12 insertions(+), 3 deletions(-) diff --git a/community/entity.py b/community/entity.py index 7f9d5d00..ab92d49c 100644 --- a/community/entity.py +++ b/community/entity.py @@ -229,5 +229,8 @@ def draw(self): self.world.entity_shader.uniform_matrix(self.world.entity_shader_transform_matrix_location, transform) self.world.entity_shader.uniform_matrix(self.world.entity_shader_matrix_location, self.world.mvp_matrix * transform) + self.world.entity_shader.uniform_float(self.world.entity_shader_lighting_location, + max(0.8 ** (15 - self.world.get_skylight(tuple(round(t) for t in self.position))) * self.world.daylight / 1800, 0.8 ** (15 - self.world.get_light(tuple(round(t) for t in self.position)))) + ) self.entity_type.draw() diff --git a/community/options.py b/community/options.py index deed5e31..2dbc6fdf 100644 --- a/community/options.py +++ b/community/options.py @@ -29,6 +29,7 @@ # Higher values gives higher framerate but causes framerate instability and higher frame spikes # Lower values causes average lower framerate but gives smoother framerate # Recommended values are between 0 and 9 + # Usually 3 - 4 in most rendering scenarios # Legacy Smooth FPS SMOOTH_FPS = False # Legacy way to force the flushing of command buffer and forces the CPU to wait for the GPU to finish rendering. @@ -40,8 +41,8 @@ # Ambient Occlusion and Smooth Lighting SMOOTH_LIGHTING = True # Smooth Lighting smoothes the light of each vertex to achieve a linear interpolation # of light on each fragment, hence creating a smoother light effect - # It also adds ambient occlusion, to simulate light blocked by opaqua objects - # Chunk updates / building will be severely affecteds by this feature + # It also adds ambient occlusion, to simulate light blocked by opaque objects + # Chunk updates / building will be severely affected by this feature # Better Translucency blending FANCY_TRANSLUCENCY = True diff --git a/community/shader.py b/community/shader.py index 4e484a38..134e2e77 100644 --- a/community/shader.py +++ b/community/shader.py @@ -69,6 +69,9 @@ def find_uniform(self, name): def uniform_matrix(self, location, matrix): gl.glUniformMatrix4fv(location, 1, gl.GL_FALSE, glm.value_ptr(matrix)) + def uniform_float(self, location, value): + gl.glUniform1f(location, value) + def use(self): gl.glUseProgram(self.program) diff --git a/community/shaders/entity/vert.glsl b/community/shaders/entity/vert.glsl index f538f972..2a2fe90e 100644 --- a/community/shaders/entity/vert.glsl +++ b/community/shaders/entity/vert.glsl @@ -10,6 +10,7 @@ out float shading; uniform mat4 transform_matrix; uniform mat4 matrix; +uniform float lighting; void main(void) { local_position = vertex_position; @@ -19,7 +20,7 @@ void main(void) { vec3 adjusted_normal = (vec4(normal, 1.0) * transform_matrix).xyz; vec3 sunlight = vec3(0.0, 0.0, 1.0); - shading = 1.0 - 0.4 * abs(dot(normalize(adjusted_normal), normalize(sunlight))); + shading = (1.0 - 0.4 * abs(dot(normalize(adjusted_normal), normalize(sunlight)))) * lighting; gl_Position = matrix * vec4(vertex_position, 1.0); } diff --git a/community/world.py b/community/world.py index 2f566771..ab15be07 100644 --- a/community/world.py +++ b/community/world.py @@ -196,6 +196,7 @@ def __init__(self, player, texture_manager, options): self.entity_shader_sampler_location = self.entity_shader.find_uniform(b"texture_sampler") self.entity_shader_transform_matrix_location = self.entity_shader.find_uniform(b"transform_matrix") self.entity_shader_matrix_location = self.entity_shader.find_uniform(b"matrix") + self.entity_shader_lighting_location = self.entity_shader.find_uniform(b"lighting") # load the world From 4eadaf99c2144ecbaea87348184478131d18efa8 Mon Sep 17 00:00:00 2001 From: Jukitsu Date: Wed, 28 Sep 2022 16:45:36 +0200 Subject: [PATCH 23/45] Fix some _ lying around --- community/world.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/community/world.py b/community/world.py index ab15be07..7c6d3eb5 100644 --- a/community/world.py +++ b/community/world.py @@ -317,23 +317,23 @@ def propagate_skylight_increase(self, light_update): if neighbour_pos.y > chunk.CHUNK_HEIGHT: continue - _chunk = self.chunks.get(get_chunk_position(neighbour_pos), None) - if not _chunk: continue + chunk = self.chunks.get(get_chunk_position(neighbour_pos), None) + if not chunk: continue local_pos = get_local_position(neighbour_pos) transparency = self.get_transparency(neighbour_pos) - if transparency and _chunk.get_sky_light(local_pos) < light_level: + if transparency and chunk.get_sky_light(local_pos) < light_level: newlight = light_level - (2 - transparency) if light_update: - _chunk.update_at_position(neighbour_pos) + chunk.update_at_position(neighbour_pos) if direction.y == -1: - _chunk.set_sky_light(local_pos, newlight) + chunk.set_sky_light(local_pos, newlight) self.skylight_increase_queue.append((neighbour_pos, newlight)) - elif _chunk.get_sky_light(local_pos) + 2 <= light_level: - _chunk.set_sky_light(local_pos, newlight - 1) + elif chunk.get_sky_light(local_pos) + 2 <= light_level: + chunk.set_sky_light(local_pos, newlight - 1) self.skylight_increase_queue.append((neighbour_pos, newlight - 1)) def decrease_light(self, world_pos): From 3576816513c4589a2e3654fdd8dd92a9337e725f Mon Sep 17 00:00:00 2001 From: Jukitsu Date: Wed, 28 Sep 2022 16:46:51 +0200 Subject: [PATCH 24/45] Revert fix --- community/world.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/community/world.py b/community/world.py index 7c6d3eb5..ab15be07 100644 --- a/community/world.py +++ b/community/world.py @@ -317,23 +317,23 @@ def propagate_skylight_increase(self, light_update): if neighbour_pos.y > chunk.CHUNK_HEIGHT: continue - chunk = self.chunks.get(get_chunk_position(neighbour_pos), None) - if not chunk: continue + _chunk = self.chunks.get(get_chunk_position(neighbour_pos), None) + if not _chunk: continue local_pos = get_local_position(neighbour_pos) transparency = self.get_transparency(neighbour_pos) - if transparency and chunk.get_sky_light(local_pos) < light_level: + if transparency and _chunk.get_sky_light(local_pos) < light_level: newlight = light_level - (2 - transparency) if light_update: - chunk.update_at_position(neighbour_pos) + _chunk.update_at_position(neighbour_pos) if direction.y == -1: - chunk.set_sky_light(local_pos, newlight) + _chunk.set_sky_light(local_pos, newlight) self.skylight_increase_queue.append((neighbour_pos, newlight)) - elif chunk.get_sky_light(local_pos) + 2 <= light_level: - chunk.set_sky_light(local_pos, newlight - 1) + elif _chunk.get_sky_light(local_pos) + 2 <= light_level: + _chunk.set_sky_light(local_pos, newlight - 1) self.skylight_increase_queue.append((neighbour_pos, newlight - 1)) def decrease_light(self, world_pos): From 3984b90f65582e1dead56415d4f6560fc555366c Mon Sep 17 00:00:00 2001 From: Jukitsu Date: Wed, 28 Sep 2022 18:37:39 +0200 Subject: [PATCH 25/45] Frustum culling for entities --- community/entity.py | 2 +- community/main.py | 1 + community/player.py | 52 +++++++++++++++++++++++++++++++++++++++++++++ community/world.py | 13 +++++++++--- 4 files changed, 64 insertions(+), 4 deletions(-) diff --git a/community/entity.py b/community/entity.py index ab92d49c..5bba7ace 100644 --- a/community/entity.py +++ b/community/entity.py @@ -218,7 +218,7 @@ def update(self, delta_time): def draw(self): # compute transformation matrix - + transform = glm.mat4(1) transform = glm.translate(transform, glm.vec3(*self.position)) diff --git a/community/main.py b/community/main.py index e7a9c23f..82252813 100644 --- a/community/main.py +++ b/community/main.py @@ -159,6 +159,7 @@ def update_f3(self, delta_time): f""" {round(pyglet.clock.get_fps())} FPS ({self.world.chunk_update_counter} Chunk Updates) {"inf" if not self.options.VSYNC else "vsync"}{"ao" if self.options.SMOOTH_LIGHTING else ""} C: {visible_chunk_count} / {chunk_count} pC: {self.world.pending_chunk_update_count} pU: {len(self.world.chunk_building_queue)} aB: {chunk_count} +E: {self.world.visible_entities} / {len(self.world.entities)} Client Singleplayer @{round(delta_time * 1000)} ms tick {round(1 / delta_time)} TPS XYZ: ( X: {round(self.player.position[0], 3)} / Y: {round(self.player.position[1], 3)} / Z: {round(self.player.position[2], 3)} ) diff --git a/community/player.py b/community/player.py index 8ec7b1bc..e178ffc9 100644 --- a/community/player.py +++ b/community/player.py @@ -91,6 +91,58 @@ def update_frustum(self): Frustum.near = normalize(Frustum.near) Frustum.far = normalize(Frustum.far) + def check_in_frustum_aabb(self, collider): + "Frustum check for AABB boxes" + planes = (Frustum.left, Frustum.right, Frustum.bottom, Frustum.top, Frustum.near, Frustum.far) + result = 2 + + if collider.x1 is None or collider.y1 is None or collider.z1 is None \ + or collider.x2 is None or collider.y2 is None or collider.z2 is None: + return 0 + + for plane in planes: + _in = 0 + _out = 0 + normal = plane.xyz + w = plane.w + if glm.dot(normal, glm.vec3(collider.x1, collider.y1, collider.z1)) + w < 0: + _out += 1 + else: + _in += 1 + if glm.dot(normal, glm.vec3(collider.x2, collider.y1, collider.z1)) + w < 0: + _out += 1 + else: + _in += 1 + if glm.dot(normal, glm.vec3(collider.x2, collider.y2, collider.z1)) + w < 0: + _out += 1 + else: + _in += 1 + if glm.dot(normal, glm.vec3(collider.x1, collider.y2, collider.z1)) + w < 0: + _out += 1 + else: + _in += 1 + if glm.dot(normal, glm.vec3(collider.x1, collider.y2, collider.z2)) + w < 0: + _out += 1 + else: + _in += 1 + if glm.dot(normal, glm.vec3(collider.x1, collider.y1, collider.z2)) + w < 0: + _out += 1 + else: + _in += 1 + if glm.dot(normal, glm.vec3(collider.x2, collider.y1, collider.z2)) + w < 0: + _out += 1 + else: + _in += 1 + if glm.dot(normal, glm.vec3(collider.x1, collider.y2, collider.z2)) + w < 0: + _out += 1 + else: + _in += 1 + if not _in: + return 0 + elif _out: + result = 1 + return result + def check_in_frustum(self, chunk_pos): """Frustum check of each chunk. If the chunk is not in the view frustum, it is discarded""" planes = (Frustum.left, Frustum.right, Frustum.bottom, Frustum.top, Frustum.near, Frustum.far) diff --git a/community/world.py b/community/world.py index ab15be07..bb005039 100644 --- a/community/world.py +++ b/community/world.py @@ -47,7 +47,7 @@ def __init__(self, player, texture_manager, options): self.daylight = 1800 self.incrementer = 0 self.time = 0 - self.c = 0 + # Compat self.get_chunk_position = get_chunk_position @@ -232,6 +232,8 @@ def __init__(self, player, texture_manager, options): self.pending_chunk_update_count = 0 self.chunk_update_counter = 0 + self.c = 0 + self.visible_entities = 0 def __del__(self): gl.glDeleteBuffers(1, ctypes.byref(self.ibo)) @@ -601,9 +603,13 @@ def draw_translucent_fancy(self): draw_translucent = draw_translucent_fancy if options.FANCY_TRANSLUCENCY else draw_translucent_fast def draw(self): - # daylight stuff + # Debug variables + self.visible_entities = 0 self.c = 0 + + # daylight stuff + daylight_multiplier = self.daylight / 1800 gl.glClearColor(0.5 * (daylight_multiplier - 0.26), 0.8 * (daylight_multiplier - 0.26), @@ -636,10 +642,11 @@ def draw(self): for entity in self.entities: dist = math.sqrt(sum(map(lambda x: (x[0] - x[1]) ** 2, zip(entity.position, self.player.position)))) - if dist > 32: + if dist > 32 or not self.player.check_in_frustum_aabb(entity.collider): continue entity.draw() + self.visible_entities += 1 # draw translucent chunks From d9f290cb705e6ba6038a10737f4744d5341d8ebb Mon Sep 17 00:00:00 2001 From: Jukitsu Date: Wed, 28 Sep 2022 18:52:45 +0200 Subject: [PATCH 26/45] Changed some stuff as requested by our lord and savior --- community/entity.py | 6 ++++-- community/main.py | 2 +- community/models/button.py | 3 ++- community/models/cactus.py | 3 ++- community/models/crop.py | 3 ++- community/models/cube.py | 3 ++- community/models/door.py | 3 ++- community/models/fire.py | 3 ++- community/models/flat.py | 3 ++- community/models/glass.py | 3 ++- community/models/ladder.py | 3 ++- community/models/leaves.py | 3 ++- community/models/lever.py | 3 ++- community/models/liquid.py | 4 ++-- community/models/plant.py | 3 ++- community/models/pressure_plate.py | 3 ++- community/models/properties.py | 6 ++++++ community/models/sign.py | 3 ++- community/models/sign_post.py | 3 ++- community/models/slab.py | 3 ++- community/models/snow.py | 3 ++- community/models/soil.py | 3 ++- community/models/stairs.py | 3 ++- community/models/tinted_glass.py | 3 ++- community/models/torch.py | 3 ++- 25 files changed, 55 insertions(+), 26 deletions(-) create mode 100644 community/models/properties.py diff --git a/community/entity.py b/community/entity.py index 5bba7ace..91268f21 100644 --- a/community/entity.py +++ b/community/entity.py @@ -224,13 +224,15 @@ def draw(self): transform = glm.translate(transform, glm.vec3(*self.position)) transform = glm.rotate(transform, self.rotation[1], glm.vec3(1, 0, 0)) transform = glm.rotate(transform, self.rotation[0], glm.vec3(0, 1, 0)) - + skylight = self.world.get_skylight(tuple(round(t) for t in self.position)) + light = self.world.get_light(tuple(round(t) for t in self.position)) + # actually draw entity self.world.entity_shader.uniform_matrix(self.world.entity_shader_transform_matrix_location, transform) self.world.entity_shader.uniform_matrix(self.world.entity_shader_matrix_location, self.world.mvp_matrix * transform) self.world.entity_shader.uniform_float(self.world.entity_shader_lighting_location, - max(0.8 ** (15 - self.world.get_skylight(tuple(round(t) for t in self.position))) * self.world.daylight / 1800, 0.8 ** (15 - self.world.get_light(tuple(round(t) for t in self.position)))) + max(0.8 ** (15 - skylight) * self.world.daylight / 1800, 0.8 ** (15 - light)) ) self.entity_type.draw() diff --git a/community/main.py b/community/main.py index 82252813..cc53d9ea 100644 --- a/community/main.py +++ b/community/main.py @@ -144,7 +144,7 @@ def on_close(self): for fence in self.fences: gl.glDeleteSync(fence) - super().on_close() + self.close() def update_f3(self, delta_time): """Update the F3 debug screen content""" diff --git a/community/models/button.py b/community/models/button.py index 98e58f02..810a8658 100644 --- a/community/models/button.py +++ b/community/models/button.py @@ -1,4 +1,5 @@ -transparent = 2 +from properties import * +transparent = TRANSPARENT is_cube = False glass = False translucent = False diff --git a/community/models/cactus.py b/community/models/cactus.py index 0dbc9152..7485d750 100644 --- a/community/models/cactus.py +++ b/community/models/cactus.py @@ -1,4 +1,5 @@ -transparent = 2 +from properties import * +transparent = TRANSPARENT is_cube = False glass = False translucent = False diff --git a/community/models/crop.py b/community/models/crop.py index b994196a..f1b9449a 100644 --- a/community/models/crop.py +++ b/community/models/crop.py @@ -1,4 +1,5 @@ -transparent = 2 +from properties import * +transparent = TRANSPARENT is_cube = False glass = False translucent = False diff --git a/community/models/cube.py b/community/models/cube.py index 78cf7a2c..0f3b2da4 100644 --- a/community/models/cube.py +++ b/community/models/cube.py @@ -1,4 +1,5 @@ -transparent = False +from properties import * +transparent = OPAQUE translucent = False is_cube = True glass = False diff --git a/community/models/door.py b/community/models/door.py index b8582013..50dfe813 100644 --- a/community/models/door.py +++ b/community/models/door.py @@ -1,4 +1,5 @@ -transparent = False +from properties import * +transparent = OPAQUE is_cube = True glass = False translucent = False diff --git a/community/models/fire.py b/community/models/fire.py index 1e6c9e14..3ac97e20 100644 --- a/community/models/fire.py +++ b/community/models/fire.py @@ -1,4 +1,5 @@ -transparent = 2 +from properties import * +transparent = TRANSPARENT is_cube = False glass = False translucent = False diff --git a/community/models/flat.py b/community/models/flat.py index 89460959..64ec3210 100644 --- a/community/models/flat.py +++ b/community/models/flat.py @@ -1,4 +1,5 @@ -transparent = 2 +from properties import * +transparent = TRANSPARENT is_cube = False glass = False translucent = False diff --git a/community/models/glass.py b/community/models/glass.py index 180c4987..27a1a4b3 100644 --- a/community/models/glass.py +++ b/community/models/glass.py @@ -1,4 +1,5 @@ -transparent = 2 +from properties import * +transparent = TRANSPARENT is_cube = True glass = True translucent = False diff --git a/community/models/ladder.py b/community/models/ladder.py index 1e6c9e14..3ac97e20 100644 --- a/community/models/ladder.py +++ b/community/models/ladder.py @@ -1,4 +1,5 @@ -transparent = 2 +from properties import * +transparent = TRANSPARENT is_cube = False glass = False translucent = False diff --git a/community/models/leaves.py b/community/models/leaves.py index 15b2f576..6de86501 100644 --- a/community/models/leaves.py +++ b/community/models/leaves.py @@ -1,4 +1,5 @@ -transparent = 1 +from properties import * +transparent = CUTOFF is_cube = True glass = False translucent = False diff --git a/community/models/lever.py b/community/models/lever.py index 98e58f02..810a8658 100644 --- a/community/models/lever.py +++ b/community/models/lever.py @@ -1,4 +1,5 @@ -transparent = 2 +from properties import * +transparent = TRANSPARENT is_cube = False glass = False translucent = False diff --git a/community/models/liquid.py b/community/models/liquid.py index 982cc252..d27a4b47 100644 --- a/community/models/liquid.py +++ b/community/models/liquid.py @@ -1,7 +1,7 @@ # in the end, it'd be nice to have it so that liquids fill up the whole block when they have a block above them # this would avoid the problems this solution has - -transparent = 1 +from properties import * +transparent = TRANSLUCENT is_cube = True glass = True translucent = True diff --git a/community/models/plant.py b/community/models/plant.py index 55a9aeea..589ca2b0 100644 --- a/community/models/plant.py +++ b/community/models/plant.py @@ -1,4 +1,5 @@ -transparent = 2 +from properties import * +transparent = TRANSPARENT translucent = False is_cube = False glass = False diff --git a/community/models/pressure_plate.py b/community/models/pressure_plate.py index 89460959..64ec3210 100644 --- a/community/models/pressure_plate.py +++ b/community/models/pressure_plate.py @@ -1,4 +1,5 @@ -transparent = 2 +from properties import * +transparent = TRANSPARENT is_cube = False glass = False translucent = False diff --git a/community/models/properties.py b/community/models/properties.py new file mode 100644 index 00000000..f2aaaac4 --- /dev/null +++ b/community/models/properties.py @@ -0,0 +1,6 @@ +from enum import IntEnum + +OPAQUE = 0 +CUTOFF = 1 +TRANSLUCENT = 1 +TRANSPARENT = 2 \ No newline at end of file diff --git a/community/models/sign.py b/community/models/sign.py index 1e6c9e14..3ac97e20 100644 --- a/community/models/sign.py +++ b/community/models/sign.py @@ -1,4 +1,5 @@ -transparent = 2 +from properties import * +transparent = TRANSPARENT is_cube = False glass = False translucent = False diff --git a/community/models/sign_post.py b/community/models/sign_post.py index 1e6c9e14..3ac97e20 100644 --- a/community/models/sign_post.py +++ b/community/models/sign_post.py @@ -1,4 +1,5 @@ -transparent = 2 +from properties import * +transparent = TRANSPARENT is_cube = False glass = False translucent = False diff --git a/community/models/slab.py b/community/models/slab.py index c96e69d0..ddc757bd 100644 --- a/community/models/slab.py +++ b/community/models/slab.py @@ -1,4 +1,5 @@ -transparent = 2 +from properties import * +transparent = TRANSPARENT is_cube = False glass = False translucent = False diff --git a/community/models/snow.py b/community/models/snow.py index 97d9ab93..c023e3a2 100644 --- a/community/models/snow.py +++ b/community/models/snow.py @@ -1,4 +1,5 @@ -transparent = 2 +from properties import * +transparent = TRANSPARENT is_cube = False glass = False translucent = False diff --git a/community/models/soil.py b/community/models/soil.py index ed339194..ac3e8a7c 100644 --- a/community/models/soil.py +++ b/community/models/soil.py @@ -1,4 +1,5 @@ -transparent = 2 +from properties import * +transparent = TRANSPARENT is_cube = False glass = False translucent = False diff --git a/community/models/stairs.py b/community/models/stairs.py index c96e69d0..ddc757bd 100644 --- a/community/models/stairs.py +++ b/community/models/stairs.py @@ -1,4 +1,5 @@ -transparent = 2 +from properties import * +transparent = TRANSPARENT is_cube = False glass = False translucent = False diff --git a/community/models/tinted_glass.py b/community/models/tinted_glass.py index 1d6cfa78..e188c0fb 100644 --- a/community/models/tinted_glass.py +++ b/community/models/tinted_glass.py @@ -1,4 +1,5 @@ -transparent = 1 +from properties import * +transparent = TRANSLUCENT is_cube = True glass = True translucent = True diff --git a/community/models/torch.py b/community/models/torch.py index 6b0482ff..b902b8e7 100644 --- a/community/models/torch.py +++ b/community/models/torch.py @@ -1,4 +1,5 @@ -transparent = 2 +from properties import * +transparent = TRANSPARENT is_cube = False glass = False translucent = False From 0f2ef9fc12e4f2daa4fdf62dfde7043cffdd146a Mon Sep 17 00:00:00 2001 From: Jukitsu Date: Wed, 28 Sep 2022 19:01:10 +0200 Subject: [PATCH 27/45] This is what happens when you don't test: you commit bad code (previous commit) --- community/models/__init__.py | 1 + community/models/button.py | 2 +- community/models/cactus.py | 2 +- community/models/{properties.py => constants.py} | 2 -- community/models/crop.py | 2 +- community/models/cube.py | 2 +- community/models/door.py | 2 +- community/models/fire.py | 2 +- community/models/flat.py | 2 +- community/models/glass.py | 2 +- community/models/ladder.py | 2 +- community/models/leaves.py | 2 +- community/models/lever.py | 2 +- community/models/liquid.py | 2 +- community/models/plant.py | 2 +- community/models/pressure_plate.py | 2 +- community/models/sign.py | 2 +- community/models/sign_post.py | 2 +- community/models/slab.py | 2 +- community/models/snow.py | 2 +- community/models/soil.py | 2 +- community/models/stairs.py | 2 +- community/models/tinted_glass.py | 2 +- community/models/torch.py | 2 +- 24 files changed, 23 insertions(+), 24 deletions(-) rename community/models/{properties.py => constants.py} (67%) diff --git a/community/models/__init__.py b/community/models/__init__.py index 472191d7..9d2a79e2 100644 --- a/community/models/__init__.py +++ b/community/models/__init__.py @@ -2,6 +2,7 @@ __all__ = [ "cube", + "constants", "plant", "liquid", "leaves", diff --git a/community/models/button.py b/community/models/button.py index 810a8658..393ecfb5 100644 --- a/community/models/button.py +++ b/community/models/button.py @@ -1,4 +1,4 @@ -from properties import * +from .constants import * transparent = TRANSPARENT is_cube = False glass = False diff --git a/community/models/cactus.py b/community/models/cactus.py index 7485d750..fa0784a0 100644 --- a/community/models/cactus.py +++ b/community/models/cactus.py @@ -1,4 +1,4 @@ -from properties import * +from .constants import * transparent = TRANSPARENT is_cube = False glass = False diff --git a/community/models/properties.py b/community/models/constants.py similarity index 67% rename from community/models/properties.py rename to community/models/constants.py index f2aaaac4..ed3bdbe1 100644 --- a/community/models/properties.py +++ b/community/models/constants.py @@ -1,5 +1,3 @@ -from enum import IntEnum - OPAQUE = 0 CUTOFF = 1 TRANSLUCENT = 1 diff --git a/community/models/crop.py b/community/models/crop.py index f1b9449a..51a8b614 100644 --- a/community/models/crop.py +++ b/community/models/crop.py @@ -1,4 +1,4 @@ -from properties import * +from .constants import * transparent = TRANSPARENT is_cube = False glass = False diff --git a/community/models/cube.py b/community/models/cube.py index 0f3b2da4..c3bce72b 100644 --- a/community/models/cube.py +++ b/community/models/cube.py @@ -1,4 +1,4 @@ -from properties import * +from .constants import * transparent = OPAQUE translucent = False is_cube = True diff --git a/community/models/door.py b/community/models/door.py index 50dfe813..7eeca5d9 100644 --- a/community/models/door.py +++ b/community/models/door.py @@ -1,4 +1,4 @@ -from properties import * +from .constants import * transparent = OPAQUE is_cube = True glass = False diff --git a/community/models/fire.py b/community/models/fire.py index 3ac97e20..98408787 100644 --- a/community/models/fire.py +++ b/community/models/fire.py @@ -1,4 +1,4 @@ -from properties import * +from .constants import * transparent = TRANSPARENT is_cube = False glass = False diff --git a/community/models/flat.py b/community/models/flat.py index 64ec3210..e8b3a73a 100644 --- a/community/models/flat.py +++ b/community/models/flat.py @@ -1,4 +1,4 @@ -from properties import * +from .constants import * transparent = TRANSPARENT is_cube = False glass = False diff --git a/community/models/glass.py b/community/models/glass.py index 27a1a4b3..f199a5be 100644 --- a/community/models/glass.py +++ b/community/models/glass.py @@ -1,4 +1,4 @@ -from properties import * +from .constants import * transparent = TRANSPARENT is_cube = True glass = True diff --git a/community/models/ladder.py b/community/models/ladder.py index 3ac97e20..98408787 100644 --- a/community/models/ladder.py +++ b/community/models/ladder.py @@ -1,4 +1,4 @@ -from properties import * +from .constants import * transparent = TRANSPARENT is_cube = False glass = False diff --git a/community/models/leaves.py b/community/models/leaves.py index 6de86501..7e3f40ea 100644 --- a/community/models/leaves.py +++ b/community/models/leaves.py @@ -1,4 +1,4 @@ -from properties import * +from .constants import * transparent = CUTOFF is_cube = True glass = False diff --git a/community/models/lever.py b/community/models/lever.py index 810a8658..393ecfb5 100644 --- a/community/models/lever.py +++ b/community/models/lever.py @@ -1,4 +1,4 @@ -from properties import * +from .constants import * transparent = TRANSPARENT is_cube = False glass = False diff --git a/community/models/liquid.py b/community/models/liquid.py index d27a4b47..9d015228 100644 --- a/community/models/liquid.py +++ b/community/models/liquid.py @@ -1,6 +1,6 @@ # in the end, it'd be nice to have it so that liquids fill up the whole block when they have a block above them # this would avoid the problems this solution has -from properties import * +from .constants import * transparent = TRANSLUCENT is_cube = True glass = True diff --git a/community/models/plant.py b/community/models/plant.py index 589ca2b0..1ba1b839 100644 --- a/community/models/plant.py +++ b/community/models/plant.py @@ -1,4 +1,4 @@ -from properties import * +from .constants import * transparent = TRANSPARENT translucent = False is_cube = False diff --git a/community/models/pressure_plate.py b/community/models/pressure_plate.py index 64ec3210..e8b3a73a 100644 --- a/community/models/pressure_plate.py +++ b/community/models/pressure_plate.py @@ -1,4 +1,4 @@ -from properties import * +from .constants import * transparent = TRANSPARENT is_cube = False glass = False diff --git a/community/models/sign.py b/community/models/sign.py index 3ac97e20..98408787 100644 --- a/community/models/sign.py +++ b/community/models/sign.py @@ -1,4 +1,4 @@ -from properties import * +from .constants import * transparent = TRANSPARENT is_cube = False glass = False diff --git a/community/models/sign_post.py b/community/models/sign_post.py index 3ac97e20..98408787 100644 --- a/community/models/sign_post.py +++ b/community/models/sign_post.py @@ -1,4 +1,4 @@ -from properties import * +from .constants import * transparent = TRANSPARENT is_cube = False glass = False diff --git a/community/models/slab.py b/community/models/slab.py index ddc757bd..97fea695 100644 --- a/community/models/slab.py +++ b/community/models/slab.py @@ -1,4 +1,4 @@ -from properties import * +from .constants import * transparent = TRANSPARENT is_cube = False glass = False diff --git a/community/models/snow.py b/community/models/snow.py index c023e3a2..a340e924 100644 --- a/community/models/snow.py +++ b/community/models/snow.py @@ -1,4 +1,4 @@ -from properties import * +from .constants import * transparent = TRANSPARENT is_cube = False glass = False diff --git a/community/models/soil.py b/community/models/soil.py index ac3e8a7c..030bbebf 100644 --- a/community/models/soil.py +++ b/community/models/soil.py @@ -1,4 +1,4 @@ -from properties import * +from .constants import * transparent = TRANSPARENT is_cube = False glass = False diff --git a/community/models/stairs.py b/community/models/stairs.py index ddc757bd..97fea695 100644 --- a/community/models/stairs.py +++ b/community/models/stairs.py @@ -1,4 +1,4 @@ -from properties import * +from .constants import * transparent = TRANSPARENT is_cube = False glass = False diff --git a/community/models/tinted_glass.py b/community/models/tinted_glass.py index e188c0fb..8e5ce5e6 100644 --- a/community/models/tinted_glass.py +++ b/community/models/tinted_glass.py @@ -1,4 +1,4 @@ -from properties import * +from .constants import * transparent = TRANSLUCENT is_cube = True glass = True diff --git a/community/models/torch.py b/community/models/torch.py index b902b8e7..d8c5907f 100644 --- a/community/models/torch.py +++ b/community/models/torch.py @@ -1,4 +1,4 @@ -from properties import * +from .constants import * transparent = TRANSPARENT is_cube = False glass = False From 80df20288723633b6545e34a698423f360e74cd0 Mon Sep 17 00:00:00 2001 From: Jukitsu Date: Thu, 29 Sep 2022 13:12:13 +0200 Subject: [PATCH 28/45] Refactors --- community/block_type.py | 1 + community/main.py | 8 +- community/models/__init__.py | 1 - community/models/button.py | 4 +- community/models/cactus.py | 4 +- community/models/constants.py | 4 - community/models/crop.py | 4 +- community/models/cube.py | 4 +- community/models/door.py | 4 +- community/models/fire.py | 4 +- community/models/flat.py | 4 +- community/models/glass.py | 4 +- community/models/ladder.py | 4 +- community/models/leaves.py | 4 +- community/models/lever.py | 4 +- community/models/liquid.py | 4 +- community/models/plant.py | 4 +- community/models/pressure_plate.py | 4 +- community/models/sign.py | 4 +- community/models/sign_post.py | 4 +- community/models/slab.py | 4 +- community/models/snow.py | 4 +- community/models/soil.py | 4 +- community/models/stairs.py | 4 +- community/models/tinted_glass.py | 4 +- community/models/torch.py | 4 +- community/player.py | 129 ++++++++--------------------- community/world.py | 11 ++- 28 files changed, 88 insertions(+), 154 deletions(-) delete mode 100644 community/models/constants.py diff --git a/community/block_type.py b/community/block_type.py index d0e99746..9a692401 100644 --- a/community/block_type.py +++ b/community/block_type.py @@ -11,6 +11,7 @@ def __init__(self, texture_manager, name = "unknown", block_face_textures = {"al # create members based on model attributes self.transparent = model.transparent + self.transparency = model.transparency self.is_cube = model.is_cube self.glass = model.glass self.translucent = model.translucent diff --git a/community/main.py b/community/main.py index cc53d9ea..fd23e038 100644 --- a/community/main.py +++ b/community/main.py @@ -154,7 +154,7 @@ def update_f3(self, delta_time): chunk_count = len(self.world.chunks) visible_chunk_count = len(self.world.visible_chunks) quad_count = sum(chunk.mesh_quad_count for chunk in self.world.chunks.values()) - visible_quad_count = sum(chunk.mesh_quad_count for chunk in self.world.visible_chunks) + visible_quad_count = sum(chunk.mesh_quad_count for chunk in self.world.visible_chunks) self.f3.text = \ f""" {round(pyglet.clock.get_fps())} FPS ({self.world.chunk_update_counter} Chunk Updates) {"inf" if not self.options.VSYNC else "vsync"}{"ao" if self.options.SMOOTH_LIGHTING else ""} @@ -171,13 +171,13 @@ def update_f3(self, delta_time): Renderer: {"OpenGL 3.3 VAOs" if not self.options.INDIRECT_RENDERING else "OpenGL 4.0 VAOs Indirect"} {"Conditional" if self.options.ADVANCED_OPENGL else ""} Buffers: {chunk_count} -Vertex Data: {round(quad_count * 28 * ctypes.sizeof(gl.GLfloat) / 1048576, 3)} MiB ({quad_count} Quads) -Visible Quads: {visible_quad_count} +Chunk Vertex Data: {round(quad_count * 28 * ctypes.sizeof(gl.GLfloat) / 1048576, 3)} MiB ({quad_count} Quads) +Chunk Visible Quads: {visible_quad_count} Buffer Uploading: Direct (glBufferSubData) """ def update(self, delta_time): - """Every tick""" + # Every tick if self.show_f3: self.update_f3(delta_time) diff --git a/community/models/__init__.py b/community/models/__init__.py index 9d2a79e2..472191d7 100644 --- a/community/models/__init__.py +++ b/community/models/__init__.py @@ -2,7 +2,6 @@ __all__ = [ "cube", - "constants", "plant", "liquid", "leaves", diff --git a/community/models/button.py b/community/models/button.py index 393ecfb5..87f38e7d 100644 --- a/community/models/button.py +++ b/community/models/button.py @@ -1,5 +1,5 @@ -from .constants import * -transparent = TRANSPARENT +transparent = True +transparency = 2 is_cube = False glass = False translucent = False diff --git a/community/models/cactus.py b/community/models/cactus.py index fa0784a0..4e919573 100644 --- a/community/models/cactus.py +++ b/community/models/cactus.py @@ -1,5 +1,5 @@ -from .constants import * -transparent = TRANSPARENT +transparent = True +transparency = 2 is_cube = False glass = False translucent = False diff --git a/community/models/constants.py b/community/models/constants.py deleted file mode 100644 index ed3bdbe1..00000000 --- a/community/models/constants.py +++ /dev/null @@ -1,4 +0,0 @@ -OPAQUE = 0 -CUTOFF = 1 -TRANSLUCENT = 1 -TRANSPARENT = 2 \ No newline at end of file diff --git a/community/models/crop.py b/community/models/crop.py index 51a8b614..c8d29610 100644 --- a/community/models/crop.py +++ b/community/models/crop.py @@ -1,5 +1,5 @@ -from .constants import * -transparent = TRANSPARENT +transparent = True +transparency = 2 is_cube = False glass = False translucent = False diff --git a/community/models/cube.py b/community/models/cube.py index c3bce72b..50c204f7 100644 --- a/community/models/cube.py +++ b/community/models/cube.py @@ -1,5 +1,5 @@ -from .constants import * -transparent = OPAQUE +transparent = False +transparency = 0 translucent = False is_cube = True glass = False diff --git a/community/models/door.py b/community/models/door.py index 7eeca5d9..74bcb7bb 100644 --- a/community/models/door.py +++ b/community/models/door.py @@ -1,5 +1,5 @@ -from .constants import * -transparent = OPAQUE +transparent = False +transparency = 0 is_cube = True glass = False translucent = False diff --git a/community/models/fire.py b/community/models/fire.py index 98408787..84edeec7 100644 --- a/community/models/fire.py +++ b/community/models/fire.py @@ -1,5 +1,5 @@ -from .constants import * -transparent = TRANSPARENT +transparent = True +transparency = 2 is_cube = False glass = False translucent = False diff --git a/community/models/flat.py b/community/models/flat.py index e8b3a73a..75f8cfdd 100644 --- a/community/models/flat.py +++ b/community/models/flat.py @@ -1,5 +1,5 @@ -from .constants import * -transparent = TRANSPARENT +transparent = True +transparency = 2 is_cube = False glass = False translucent = False diff --git a/community/models/glass.py b/community/models/glass.py index f199a5be..a204622e 100644 --- a/community/models/glass.py +++ b/community/models/glass.py @@ -1,5 +1,5 @@ -from .constants import * -transparent = TRANSPARENT +transparent = True +transparency = 2 is_cube = True glass = True translucent = False diff --git a/community/models/ladder.py b/community/models/ladder.py index 98408787..84edeec7 100644 --- a/community/models/ladder.py +++ b/community/models/ladder.py @@ -1,5 +1,5 @@ -from .constants import * -transparent = TRANSPARENT +transparent = True +transparency = 2 is_cube = False glass = False translucent = False diff --git a/community/models/leaves.py b/community/models/leaves.py index 7e3f40ea..3e0c2b91 100644 --- a/community/models/leaves.py +++ b/community/models/leaves.py @@ -1,5 +1,5 @@ -from .constants import * -transparent = CUTOFF +transparent = True +transparency = 1 is_cube = True glass = False translucent = False diff --git a/community/models/lever.py b/community/models/lever.py index 393ecfb5..87f38e7d 100644 --- a/community/models/lever.py +++ b/community/models/lever.py @@ -1,5 +1,5 @@ -from .constants import * -transparent = TRANSPARENT +transparent = True +transparency = 2 is_cube = False glass = False translucent = False diff --git a/community/models/liquid.py b/community/models/liquid.py index 9d015228..ed42871c 100644 --- a/community/models/liquid.py +++ b/community/models/liquid.py @@ -1,7 +1,7 @@ # in the end, it'd be nice to have it so that liquids fill up the whole block when they have a block above them # this would avoid the problems this solution has -from .constants import * -transparent = TRANSLUCENT +transparent = True +transparency = 1 is_cube = True glass = True translucent = True diff --git a/community/models/plant.py b/community/models/plant.py index 1ba1b839..9aa6a127 100644 --- a/community/models/plant.py +++ b/community/models/plant.py @@ -1,5 +1,5 @@ -from .constants import * -transparent = TRANSPARENT +transparent = True +transparency = 2 translucent = False is_cube = False glass = False diff --git a/community/models/pressure_plate.py b/community/models/pressure_plate.py index e8b3a73a..75f8cfdd 100644 --- a/community/models/pressure_plate.py +++ b/community/models/pressure_plate.py @@ -1,5 +1,5 @@ -from .constants import * -transparent = TRANSPARENT +transparent = True +transparency = 2 is_cube = False glass = False translucent = False diff --git a/community/models/sign.py b/community/models/sign.py index 98408787..84edeec7 100644 --- a/community/models/sign.py +++ b/community/models/sign.py @@ -1,5 +1,5 @@ -from .constants import * -transparent = TRANSPARENT +transparent = True +transparency = 2 is_cube = False glass = False translucent = False diff --git a/community/models/sign_post.py b/community/models/sign_post.py index 98408787..84edeec7 100644 --- a/community/models/sign_post.py +++ b/community/models/sign_post.py @@ -1,5 +1,5 @@ -from .constants import * -transparent = TRANSPARENT +transparent = True +transparency = 2 is_cube = False glass = False translucent = False diff --git a/community/models/slab.py b/community/models/slab.py index 97fea695..794cc01e 100644 --- a/community/models/slab.py +++ b/community/models/slab.py @@ -1,5 +1,5 @@ -from .constants import * -transparent = TRANSPARENT +transparent = True +transparency = 2 is_cube = False glass = False translucent = False diff --git a/community/models/snow.py b/community/models/snow.py index a340e924..4a2bab4e 100644 --- a/community/models/snow.py +++ b/community/models/snow.py @@ -1,5 +1,5 @@ -from .constants import * -transparent = TRANSPARENT +transparent = True +transparency = 2 is_cube = False glass = False translucent = False diff --git a/community/models/soil.py b/community/models/soil.py index 030bbebf..b54d522e 100644 --- a/community/models/soil.py +++ b/community/models/soil.py @@ -1,5 +1,5 @@ -from .constants import * -transparent = TRANSPARENT +transparent = True +transparency = 2 is_cube = False glass = False translucent = False diff --git a/community/models/stairs.py b/community/models/stairs.py index 97fea695..794cc01e 100644 --- a/community/models/stairs.py +++ b/community/models/stairs.py @@ -1,5 +1,5 @@ -from .constants import * -transparent = TRANSPARENT +transparent = True +transparency = 2 is_cube = False glass = False translucent = False diff --git a/community/models/tinted_glass.py b/community/models/tinted_glass.py index 8e5ce5e6..c5b6daee 100644 --- a/community/models/tinted_glass.py +++ b/community/models/tinted_glass.py @@ -1,5 +1,5 @@ -from .constants import * -transparent = TRANSLUCENT +transparent = True +transparency = 1 is_cube = True glass = True translucent = True diff --git a/community/models/torch.py b/community/models/torch.py index d8c5907f..37d47795 100644 --- a/community/models/torch.py +++ b/community/models/torch.py @@ -1,5 +1,5 @@ -from .constants import * -transparent = TRANSPARENT +transparent = True +transparency = 2 is_cube = False glass = False translucent = False diff --git a/community/player.py b/community/player.py index e178ffc9..63aa0938 100644 --- a/community/player.py +++ b/community/player.py @@ -3,6 +3,8 @@ import glm import options import chunk +from enum import IntEnum +import collider WALKING_SPEED = 4.317 SPRINTING_SPEED = 7 # faster than in Minecraft, feels better @@ -15,6 +17,11 @@ class Frustum: near = glm.vec4(1.0) far = glm.vec4(1.0) +class FrustumCheckResult(IntEnum): + OUTSIDE = 0 + INTERSECTS = 1 + INSIDE = 2 + def normalize(plane): return plane / glm.length(plane.xyz) @@ -91,111 +98,43 @@ def update_frustum(self): Frustum.near = normalize(Frustum.near) Frustum.far = normalize(Frustum.far) - def check_in_frustum_aabb(self, collider): - "Frustum check for AABB boxes" - planes = (Frustum.left, Frustum.right, Frustum.bottom, Frustum.top, Frustum.near, Frustum.far) - result = 2 + def check_in_frustum(self, collider): + # Frustum check for AABB boxes if collider.x1 is None or collider.y1 is None or collider.z1 is None \ or collider.x2 is None or collider.y2 is None or collider.z2 is None: return 0 - for plane in planes: - _in = 0 - _out = 0 - normal = plane.xyz - w = plane.w - if glm.dot(normal, glm.vec3(collider.x1, collider.y1, collider.z1)) + w < 0: - _out += 1 - else: - _in += 1 - if glm.dot(normal, glm.vec3(collider.x2, collider.y1, collider.z1)) + w < 0: - _out += 1 - else: - _in += 1 - if glm.dot(normal, glm.vec3(collider.x2, collider.y2, collider.z1)) + w < 0: - _out += 1 - else: - _in += 1 - if glm.dot(normal, glm.vec3(collider.x1, collider.y2, collider.z1)) + w < 0: - _out += 1 - else: - _in += 1 - if glm.dot(normal, glm.vec3(collider.x1, collider.y2, collider.z2)) + w < 0: - _out += 1 - else: - _in += 1 - if glm.dot(normal, glm.vec3(collider.x1, collider.y1, collider.z2)) + w < 0: - _out += 1 - else: - _in += 1 - if glm.dot(normal, glm.vec3(collider.x2, collider.y1, collider.z2)) + w < 0: - _out += 1 - else: - _in += 1 - if glm.dot(normal, glm.vec3(collider.x1, collider.y2, collider.z2)) + w < 0: - _out += 1 - else: - _in += 1 - if not _in: - return 0 - elif _out: - result = 1 - return result - - def check_in_frustum(self, chunk_pos): - """Frustum check of each chunk. If the chunk is not in the view frustum, it is discarded""" planes = (Frustum.left, Frustum.right, Frustum.bottom, Frustum.top, Frustum.near, Frustum.far) - result = 2 - center = glm.vec3(chunk_pos * glm.ivec3(chunk.CHUNK_WIDTH, 0, chunk.CHUNK_LENGTH) - + glm.ivec3(chunk.CHUNK_WIDTH / 2, - chunk.CHUNK_HEIGHT / 2, - chunk.CHUNK_LENGTH / 2)) + result = FrustumCheckResult.INSIDE for plane in planes: - _in = 0 - _out = 0 - normal = plane.xyz - w = plane.w - if glm.dot(normal, center + glm.vec3(chunk.CHUNK_WIDTH / 2, chunk.CHUNK_HEIGHT / 2, chunk.CHUNK_LENGTH / 2)) + w < 0: - _out += 1 - else: - _in += 1 - if glm.dot(normal, center + glm.vec3(-chunk.CHUNK_WIDTH / 2, chunk.CHUNK_HEIGHT / 2, chunk.CHUNK_LENGTH / 2)) + w < 0: - _out += 1 - else: - _in += 1 - if glm.dot(normal, center + glm.vec3(chunk.CHUNK_WIDTH / 2, chunk.CHUNK_HEIGHT / 2, -chunk.CHUNK_LENGTH / 2)) + w < 0: - _out += 1 - else: - _in += 1 - if glm.dot(normal, center + glm.vec3(-chunk.CHUNK_WIDTH / 2, chunk.CHUNK_HEIGHT / 2, -chunk.CHUNK_LENGTH / 2)) + w < 0: - _out += 1 - else: - _in += 1 - if glm.dot(normal, center + glm.vec3(chunk.CHUNK_WIDTH / 2, -chunk.CHUNK_HEIGHT / 2, chunk.CHUNK_LENGTH / 2)) + w < 0: - _out += 1 - else: - _in += 1 - if glm.dot(normal, center + glm.vec3(-chunk.CHUNK_WIDTH / 2, -chunk.CHUNK_HEIGHT / 2, chunk.CHUNK_LENGTH / 2)) + w < 0: - _out += 1 - else: - _in += 1 - if glm.dot(normal, center + glm.vec3(chunk.CHUNK_WIDTH / 2, -chunk.CHUNK_HEIGHT / 2, -chunk.CHUNK_LENGTH / 2)) + w < 0: - _out += 1 - else: - _in += 1 - if glm.dot(normal, center + glm.vec3(-chunk.CHUNK_WIDTH / 2, -chunk.CHUNK_HEIGHT / 2, -chunk.CHUNK_LENGTH / 2)) + w < 0: - _out += 1 - else: - _in += 1 - - if not _in: - return 0 - elif _out: - result = 1 + out = map( + lambda v: glm.dot(plane.xyz, v) < -plane.w, + [ + glm.vec3(collider.x1, collider.y1, collider.z1), + glm.vec3(collider.x2, collider.y1, collider.z1), + glm.vec3(collider.x2, collider.y2, collider.z1), + glm.vec3(collider.x1, collider.y2, collider.z1), + glm.vec3(collider.x1, collider.y2, collider.z2), + glm.vec3(collider.x1, collider.y1, collider.z2), + glm.vec3(collider.x2, collider.y1, collider.z2), + glm.vec3(collider.x2, collider.y2, collider.z2) + ] + ) + if all(out): + return FrustumCheckResult.OUTSIDE + if any(out): + result = FrustumCheckResult.INTERSECTS return result + def check_chunk_in_frustum(self, chunk_pos): + chunk_collider = collider.Collider( + chunk_pos * glm.ivec3(chunk.CHUNK_WIDTH, 0, chunk.CHUNK_LENGTH), + chunk_pos * glm.ivec3(chunk.CHUNK_WIDTH, 0, chunk.CHUNK_LENGTH) + glm.ivec3(chunk.CHUNK_WIDTH, chunk.CHUNK_HEIGHT, chunk.CHUNK_LENGTH) + ) + return self.check_in_frustum(chunk_collider) + def update_matrices(self): # create projection matrix diff --git a/community/world.py b/community/world.py index bb005039..386af22e 100644 --- a/community/world.py +++ b/community/world.py @@ -232,7 +232,6 @@ def __init__(self, player, texture_manager, options): self.pending_chunk_update_count = 0 self.chunk_update_counter = 0 - self.c = 0 self.visible_entities = 0 def __del__(self): @@ -276,7 +275,7 @@ def propagate_increase(self, light_update): chunk.update_at_position(neighbour_pos) def init_skylight(self, pending_chunk): - """ Initializes the skylight of each chunks + """Initializes the skylight of each chunks To avoid unsufferable lag from propagating from the top of the chunks when most of the heights would be air, it instead runs a simple algorithm to check where the highest point of the chunk is and propagates skylight from @@ -394,6 +393,7 @@ def decrease_skylight(self, world_pos, light_update=True): def propagate_skylight_decrease(self, light_update=True): """Similar to the block light algorithm, but always unlight in the downward direction""" + while self.skylight_decrease_queue: pos, light_level = self.skylight_decrease_queue.popleft() @@ -468,7 +468,7 @@ def get_transparency(self, position): if not block_type: return 2 - return block_type.transparent + return block_type.transparency def is_opaque_block(self, position): # get block type and check if it's opaque or not @@ -559,7 +559,7 @@ def speed_daytime(self): self.incrementer = -1 def can_render_chunk(self, chunk_position): - return self.player.check_in_frustum(chunk_position) and math.dist(self.get_chunk_position(self.player.position), chunk_position) <= self.options.RENDER_DISTANCE + return self.player.check_chunk_in_frustum(chunk_position) and math.dist(self.get_chunk_position(self.player.position), chunk_position) <= self.options.RENDER_DISTANCE def prepare_rendering(self): self.visible_chunks = [self.chunks[chunk_position] @@ -606,7 +606,6 @@ def draw(self): # Debug variables self.visible_entities = 0 - self.c = 0 # daylight stuff @@ -642,7 +641,7 @@ def draw(self): for entity in self.entities: dist = math.sqrt(sum(map(lambda x: (x[0] - x[1]) ** 2, zip(entity.position, self.player.position)))) - if dist > 32 or not self.player.check_in_frustum_aabb(entity.collider): + if dist > 32 or not self.player.check_in_frustum(entity.collider): continue entity.draw() From 7824b942456f214504be0612e443eac0a583fa68 Mon Sep 17 00:00:00 2001 From: Jukitsu Date: Thu, 3 Nov 2022 10:24:12 +0100 Subject: [PATCH 29/45] Fix entity lighting --- community/entity.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/community/entity.py b/community/entity.py index 91268f21..163441e0 100644 --- a/community/entity.py +++ b/community/entity.py @@ -232,7 +232,7 @@ def draw(self): self.world.entity_shader.uniform_matrix(self.world.entity_shader_transform_matrix_location, transform) self.world.entity_shader.uniform_matrix(self.world.entity_shader_matrix_location, self.world.mvp_matrix * transform) self.world.entity_shader.uniform_float(self.world.entity_shader_lighting_location, - max(0.8 ** (15 - skylight) * self.world.daylight / 1800, 0.8 ** (15 - light)) + max(0.8 ** (15 - skylight * self.world.daylight / 1800), 0.8 ** (15 - light)) ) self.entity_type.draw() From 95a91e6e5f418a7cde7384f7e16795cea0314bfd Mon Sep 17 00:00:00 2001 From: Jukitsu <84381972+Jukitsu@users.noreply.github.com> Date: Sat, 31 Dec 2022 00:41:52 +0100 Subject: [PATCH 30/45] Rudimentary fix in main.py for pyglet 2 --- community/main.py | 32 ++++++++++---------------------- 1 file changed, 10 insertions(+), 22 deletions(-) diff --git a/community/main.py b/community/main.py index fd23e038..40e268a5 100644 --- a/community/main.py +++ b/community/main.py @@ -63,6 +63,7 @@ def __init__(self, **args): width = self.width // 3, multiline = True ) + self.system_info = f"""Python: {platform.python_implementation()} {platform.python_version()} System: {platform.machine()} {platform.system()} {platform.release()} {platform.version()} CPU: {platform.processor()} @@ -157,7 +158,7 @@ def update_f3(self, delta_time): visible_quad_count = sum(chunk.mesh_quad_count for chunk in self.world.visible_chunks) self.f3.text = \ f""" -{round(pyglet.clock.get_fps())} FPS ({self.world.chunk_update_counter} Chunk Updates) {"inf" if not self.options.VSYNC else "vsync"}{"ao" if self.options.SMOOTH_LIGHTING else ""} +{round(1 / delta_time)} FPS ({self.world.chunk_update_counter} Chunk Updates) {"inf" if not self.options.VSYNC else "vsync"}{"ao" if self.options.SMOOTH_LIGHTING else ""} C: {visible_chunk_count} / {chunk_count} pC: {self.world.pending_chunk_update_count} pU: {len(self.world.chunk_building_queue)} aB: {chunk_count} E: {self.world.visible_entities} / {len(self.world.entities)} Client Singleplayer @{round(delta_time * 1000)} ms tick {round(1 / delta_time)} TPS @@ -176,6 +177,7 @@ def update_f3(self, delta_time): Buffer Uploading: Direct (glBufferSubData) """ + def update(self, delta_time): # Every tick if self.show_f3: @@ -224,30 +226,16 @@ def on_draw(self): # CPU - GPU Sync if not self.options.SMOOTH_FPS: - self.fences.append(gl.glFenceSync(gl.GL_SYNC_GPU_COMMANDS_COMPLETE, 0)) + #self.fences.append(gl.glFenceSync(gl.GL_SYNC_GPU_COMMANDS_COMPLETE, 0)) + pass else: gl.glFinish() def draw_f3(self): - """Draws the f3 debug screen. Current uses the fixed-function pipeline since pyglet labels uses it""" - gl.glDisable(gl.GL_DEPTH_TEST) - gl.glUseProgram(0) - gl.glBindVertexArray(0) - gl.glMatrixMode(gl.GL_MODELVIEW) - gl.glPushMatrix() - gl.glLoadIdentity() - - gl.glMatrixMode(gl.GL_PROJECTION) - gl.glPushMatrix() - gl.glLoadIdentity() - gl.glOrtho(0, self.width, 0, self.height, -1, 1) - + """Draws the f3 debug screen""" self.f3.draw() - gl.glPopMatrix() - - gl.glMatrixMode(gl.GL_MODELVIEW) - gl.glPopMatrix() + # input functions @@ -257,8 +245,8 @@ def on_resize(self, width, height): self.player.view_width = width self.player.view_height = height - self.f3.y = self.height - 10 - self.f3.width = self.width // 3 + self.f3.width = width // 3 + self.f3.y = height - 10 class Game: def __init__(self): @@ -268,7 +256,7 @@ def __init__(self): self.window = Window(config = self.config, width = 852, height = 480, caption = "Minecraft clone", resizable = True, vsync = options.VSYNC) def run(self): - pyglet.app.run() + pyglet.app.run(interval = 0) From 9cabdae48a1f2432fa769ac3100f8d9f8774f3db Mon Sep 17 00:00:00 2001 From: Jukitsu <84381972+Jukitsu@users.noreply.github.com> Date: Sat, 31 Dec 2022 00:44:32 +0100 Subject: [PATCH 31/45] Revert "Rudimentary fix in main.py for pyglet 2" This reverts commit 95a91e6e5f418a7cde7384f7e16795cea0314bfd. --- community/main.py | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/community/main.py b/community/main.py index 40e268a5..fd23e038 100644 --- a/community/main.py +++ b/community/main.py @@ -63,7 +63,6 @@ def __init__(self, **args): width = self.width // 3, multiline = True ) - self.system_info = f"""Python: {platform.python_implementation()} {platform.python_version()} System: {platform.machine()} {platform.system()} {platform.release()} {platform.version()} CPU: {platform.processor()} @@ -158,7 +157,7 @@ def update_f3(self, delta_time): visible_quad_count = sum(chunk.mesh_quad_count for chunk in self.world.visible_chunks) self.f3.text = \ f""" -{round(1 / delta_time)} FPS ({self.world.chunk_update_counter} Chunk Updates) {"inf" if not self.options.VSYNC else "vsync"}{"ao" if self.options.SMOOTH_LIGHTING else ""} +{round(pyglet.clock.get_fps())} FPS ({self.world.chunk_update_counter} Chunk Updates) {"inf" if not self.options.VSYNC else "vsync"}{"ao" if self.options.SMOOTH_LIGHTING else ""} C: {visible_chunk_count} / {chunk_count} pC: {self.world.pending_chunk_update_count} pU: {len(self.world.chunk_building_queue)} aB: {chunk_count} E: {self.world.visible_entities} / {len(self.world.entities)} Client Singleplayer @{round(delta_time * 1000)} ms tick {round(1 / delta_time)} TPS @@ -177,7 +176,6 @@ def update_f3(self, delta_time): Buffer Uploading: Direct (glBufferSubData) """ - def update(self, delta_time): # Every tick if self.show_f3: @@ -226,16 +224,30 @@ def on_draw(self): # CPU - GPU Sync if not self.options.SMOOTH_FPS: - #self.fences.append(gl.glFenceSync(gl.GL_SYNC_GPU_COMMANDS_COMPLETE, 0)) - pass + self.fences.append(gl.glFenceSync(gl.GL_SYNC_GPU_COMMANDS_COMPLETE, 0)) else: gl.glFinish() def draw_f3(self): - """Draws the f3 debug screen""" + """Draws the f3 debug screen. Current uses the fixed-function pipeline since pyglet labels uses it""" + gl.glDisable(gl.GL_DEPTH_TEST) + gl.glUseProgram(0) + gl.glBindVertexArray(0) + gl.glMatrixMode(gl.GL_MODELVIEW) + gl.glPushMatrix() + gl.glLoadIdentity() + + gl.glMatrixMode(gl.GL_PROJECTION) + gl.glPushMatrix() + gl.glLoadIdentity() + gl.glOrtho(0, self.width, 0, self.height, -1, 1) + self.f3.draw() - + gl.glPopMatrix() + + gl.glMatrixMode(gl.GL_MODELVIEW) + gl.glPopMatrix() # input functions @@ -245,8 +257,8 @@ def on_resize(self, width, height): self.player.view_width = width self.player.view_height = height - self.f3.width = width // 3 - self.f3.y = height - 10 + self.f3.y = self.height - 10 + self.f3.width = self.width // 3 class Game: def __init__(self): @@ -256,7 +268,7 @@ def __init__(self): self.window = Window(config = self.config, width = 852, height = 480, caption = "Minecraft clone", resizable = True, vsync = options.VSYNC) def run(self): - pyglet.app.run(interval = 0) + pyglet.app.run() From 5ee048604d005ca579d79ba2d23fdc2efa8ddd8b Mon Sep 17 00:00:00 2001 From: Jukitsu <84381972+Jukitsu@users.noreply.github.com> Date: Sat, 31 Dec 2022 01:27:21 +0100 Subject: [PATCH 32/45] Fix format --- community/main.py | 2 +- community/player.py | 5 +++-- community/world.py | 1 - 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/community/main.py b/community/main.py index fd23e038..bd55964a 100644 --- a/community/main.py +++ b/community/main.py @@ -154,7 +154,7 @@ def update_f3(self, delta_time): chunk_count = len(self.world.chunks) visible_chunk_count = len(self.world.visible_chunks) quad_count = sum(chunk.mesh_quad_count for chunk in self.world.chunks.values()) - visible_quad_count = sum(chunk.mesh_quad_count for chunk in self.world.visible_chunks) + visible_quad_count = sum(chunk.mesh_quad_count for chunk in self.world.visible_chunks) self.f3.text = \ f""" {round(pyglet.clock.get_fps())} FPS ({self.world.chunk_update_counter} Chunk Updates) {"inf" if not self.options.VSYNC else "vsync"}{"ao" if self.options.SMOOTH_LIGHTING else ""} diff --git a/community/player.py b/community/player.py index 63aa0938..f9fd1e58 100644 --- a/community/player.py +++ b/community/player.py @@ -101,8 +101,9 @@ def update_frustum(self): def check_in_frustum(self, collider): # Frustum check for AABB boxes - if collider.x1 is None or collider.y1 is None or collider.z1 is None \ - or collider.x2 is None or collider.y2 is None or collider.z2 is None: + if (collider.x1 is None or collider.y1 is None or collider.z1 is None or + collider.x2 is None or collider.y2 is None or collider.z2 is None): + return 0 planes = (Frustum.left, Frustum.right, Frustum.bottom, Frustum.top, Frustum.near, Frustum.far) diff --git a/community/world.py b/community/world.py index 386af22e..6eacff96 100644 --- a/community/world.py +++ b/community/world.py @@ -48,7 +48,6 @@ def __init__(self, player, texture_manager, options): self.incrementer = 0 self.time = 0 - # Compat self.get_chunk_position = get_chunk_position self.get_local_position = get_local_position From fe922e1193e29e950222dfe6a98745e92f6b46e8 Mon Sep 17 00:00:00 2001 From: obiwac Date: Fri, 13 Jan 2023 15:54:37 +0100 Subject: [PATCH 33/45] ep13: Generate mob models on the fly from bones --- episode-13/entity.py | 4 +- episode-13/entity_type.py | 136 ++++++++----- episode-13/models/pig.py | 4 +- episode-13/player.py | 1 - episode-13/save.py | 4 +- episode-13/shaders/entity/frag.glsl | 4 +- episode-13/shaders/entity/vert.glsl | 6 +- episode-13/work/convert.py | 284 +++++++++++++++------------- episode-13/world.py | 5 +- 9 files changed, 248 insertions(+), 200 deletions(-) diff --git a/episode-13/entity.py b/episode-13/entity.py index 14f45edf..bfc405b9 100644 --- a/episode-13/entity.py +++ b/episode-13/entity.py @@ -217,11 +217,9 @@ def draw(self): transform.translate(*self.position) transform.rotate_2d(*self.rotation) - _matrix = self.world.mvp_matrix * transform - # actually draw entity self.world.entity_shader.uniform_matrix(self.world.entity_shader_transform_matrix_location, transform) - self.world.entity_shader.uniform_matrix(self.world.entity_shader_matrix_location, _matrix) + self.world.entity_shader.uniform_matrix(self.world.entity_shader_matrix_location, self.world.mvp_matrix * transform) self.entity_type.draw() diff --git a/episode-13/entity_type.py b/episode-13/entity_type.py index c9e6565b..762c5fcd 100644 --- a/episode-13/entity_type.py +++ b/episode-13/entity_type.py @@ -9,6 +9,8 @@ class Entity_type: def __init__(self, world, name = "unknown", texture = "pig", model = models.pig, width = 0.6, height = 1.8): self.world = world + model = models.pig + self.name = name self.model = model @@ -39,37 +41,14 @@ def __init__(self, world, name = "unknown", texture = "pig", model = models.pig, gl.glGenerateMipmap(gl.GL_TEXTURE_2D) - # convert model to arrays we can send to the GPU - - self.vertices = sum(model.vertex_positions, []) - self.tex_coords = sum(model.tex_coords, []) - - del self.tex_coords[2::3] - - # get normal vector for each face - - self.normals = [] - - for face in model.vertex_positions: - # take the cross product between two vectors we know are on the plane the face belongs to - - u = [face[0] - face[3], face[1] - face[4], face[2] - face[5]] - v = [face[0] - face[6], face[1] - face[7], face[2] - face[8]] - - n = [ - u[1] * v[2] - u[2] * v[1], - -u[0] * v[2] + u[2] * v[0], - u[0] * v[1] - u[1] * v[0], - ] - - self.normals.extend(n * 4) - - # compute indices + # get total size of the models so we can create vertex buffers - self.indices = [] + vertex_count = 0 + tex_coord_count = 0 - for i in range(len(model.vertex_positions)): - self.indices.extend(x + i * 4 for x in (0, 1, 2, 0, 2, 3)) + for bone in model.bones: + vertex_count += len(sum(bone["vertices"], [])) // 3 + tex_coord_count += len(sum(bone["tex_coords"], [])) // 2 # create VAO/VBO/IBO @@ -83,49 +62,57 @@ def __init__(self, world, name = "unknown", texture = "pig", model = models.pig, gl.glGenBuffers(1, self.vertices_vbo) gl.glBindBuffer(gl.GL_ARRAY_BUFFER, self.vertices_vbo) - gl.glBufferData( - gl.GL_ARRAY_BUFFER, - ctypes.sizeof(gl.GLfloat * len(self.vertices)), - (gl.GLfloat * len(self.vertices)) (*self.vertices), - gl.GL_STATIC_DRAW) + gl.glBufferData(gl.GL_ARRAY_BUFFER, ctypes.sizeof(gl.GLfloat * vertex_count * 3), 0, gl.GL_STREAM_DRAW) gl.glVertexAttribPointer(0, 3, gl.GL_FLOAT, gl.GL_FALSE, 0, 0) gl.glEnableVertexAttribArray(0) # texture coordinates + # these can be filled in straight away as they won't change self.tex_coords_vbo = gl.GLuint(0) gl.glGenBuffers(1, self.tex_coords_vbo) gl.glBindBuffer(gl.GL_ARRAY_BUFFER, self.tex_coords_vbo) - gl.glBufferData( - gl.GL_ARRAY_BUFFER, - ctypes.sizeof(gl.GLfloat * len(self.tex_coords)), - (gl.GLfloat * len(self.tex_coords)) (*self.tex_coords), - gl.GL_STATIC_DRAW) + gl.glBufferData(gl.GL_ARRAY_BUFFER, ctypes.sizeof(gl.GLfloat * tex_coord_count * 2), 0, gl.GL_STREAM_DRAW) + + offset = 0 + + for bone in self.model.bones: + tex_coords = sum(bone["tex_coords"], []) - # texture coordinates are still 3D here even though we don't use texture arrays (as is the case with blocks) - # this is so that we can interchange block & entity models + type_ = gl.GLfloat * len(tex_coords) + size = ctypes.sizeof(type_) + + gl.glBufferSubData( + gl.GL_ARRAY_BUFFER, offset, + size, (type_) (*tex_coords)) + + offset += size gl.glVertexAttribPointer(1, 2, gl.GL_FLOAT, gl.GL_FALSE, 0, 0) gl.glEnableVertexAttribArray(1) + """ # normals self.normals_vbo = gl.GLuint(0) gl.glGenBuffers(1, self.normals_vbo) gl.glBindBuffer(gl.GL_ARRAY_BUFFER, self.normals_vbo) - gl.glBufferData( - gl.GL_ARRAY_BUFFER, - ctypes.sizeof(gl.GLfloat * len(self.normals)), - (gl.GLfloat * len(self.normals)) (*self.normals), - gl.GL_STATIC_DRAW) - gl.glVertexAttribPointer(2, 3, gl.GL_FLOAT, gl.GL_FALSE, 0, 0) gl.glEnableVertexAttribArray(2) + """ + + # compute indices + + self.indices = [] + + for i in range(vertex_count): + self.indices.extend(x + i * 4 for x in (0, 1, 2, 0, 2, 3)) # indices + # these can be filled in straight away as they won't change self.ibo = gl.GLuint(0) gl.glGenBuffers(1, self.ibo) @@ -137,6 +124,61 @@ def __init__(self, world, name = "unknown", texture = "pig", model = models.pig, (gl.GLuint * len(self.indices)) (*self.indices), gl.GL_STATIC_DRAW) + # initial fill + + self.fill() + + # fill in the vertex buffers with data! + + def fill(self): + gl.glBindVertexArray(self.vao) + + # upload vertex positions + + gl.glBindBuffer(gl.GL_ARRAY_BUFFER, self.vertices_vbo) + offset = 0 + + for bone in self.model.bones: + vertices = sum(bone["vertices"], []) + + type_ = gl.GLfloat * len(vertices) + size = ctypes.sizeof(type_) + + gl.glBufferSubData( + gl.GL_ARRAY_BUFFER, offset, + size, (type_) (*vertices)) + + offset += size + + """ + # compute normals + + self.normals = [] + + for face in model.vertex_positions: + # take the cross product between two vectors we know are on the plane the face belongs to + + u = [face[0] - face[3], face[1] - face[4], face[2] - face[5]] + v = [face[0] - face[6], face[1] - face[7], face[2] - face[8]] + + n = [ + u[1] * v[2] - u[2] * v[1], + -u[0] * v[2] + u[2] * v[0], + u[0] * v[1] - u[1] * v[0], + ] + + self.normals.extend(n * 4) + + # upload normals + + gl.glBindBuffer(gl.GL_ARRAY_BUFFER, self.normals_vbo) + gl.glBufferData( + gl.GL_ARRAY_BUFFER, + ctypes.sizeof(gl.GLfloat * len(self.normals)), + (gl.GLfloat * len(self.normals)) (*self.normals), + gl.GL_STATIC_DRAW) + """ + def draw(self): # bind textures diff --git a/episode-13/models/pig.py b/episode-13/models/pig.py index d454f0b1..4513dc8a 100644 --- a/episode-13/models/pig.py +++ b/episode-13/models/pig.py @@ -5,6 +5,4 @@ colliders = [] -vertex_positions = [[-0.3124999701976776, 0.3750000298023224, 0.5, -0.3124999701976776, 0.375, -0.5, 0.3124999701976776, 0.375, -0.5, 0.3124999701976776, 0.3750000298023224, 0.5], [0.3124999701976776, 0.8750000596046448, 0.5, 0.3124999701976776, 0.875, -0.5, -0.3124999701976776, 0.875, -0.5, -0.3124999701976776, 0.8750000596046448, 0.5], [-0.3124999701976776, 0.375, -0.5, -0.3124999701976776, 0.875, -0.5, 0.3124999701976776, 0.875, -0.5, 0.3124999701976776, 0.375, -0.5], [0.3124999701976776, 0.3750000298023224, 0.5, 0.3124999701976776, 0.8750000596046448, 0.5, -0.3124999701976776, 0.8750000596046448, 0.5, -0.3124999701976776, 0.3750000298023224, 0.5], [0.3124999701976776, 0.3750000298023224, 0.5, 0.3124999701976776, 0.375, -0.5, 0.3124999701976776, 0.875, -0.5, 0.3124999701976776, 0.8750000596046448, 0.5], [-0.3124999701976776, 0.8750000596046448, 0.5, -0.3124999701976776, 0.875, -0.5, -0.3124999701976776, 0.375, -0.5, -0.3124999701976776, 0.3750000298023224, 0.5], [-0.25, 0.5, -0.875, -0.25, 1.0, -0.875, 0.25, 1.0, -0.875, 0.25, 0.5, -0.875], [0.25, 0.5, -0.375, 0.25, 1.0, -0.375, -0.25, 1.0, -0.375, -0.25, 0.5, -0.375], [-0.25, 1.0, -0.875, -0.25, 1.0, -0.375, 0.25, 1.0, -0.375, 0.25, 1.0, -0.875], [0.25, 0.5, -0.875, 0.25, 0.5, -0.375, -0.25, 0.5, -0.375, -0.25, 0.5, -0.875], [0.25, 0.5, -0.875, 0.25, 1.0, -0.875, 0.25, 1.0, -0.375, 0.25, 0.5, -0.375], [-0.25, 0.5, -0.375, -0.25, 1.0, -0.375, -0.25, 1.0, -0.875, -0.25, 0.5, -0.875], [-0.125, 0.5625, -0.9375, -0.125, 0.75, -0.9375, 0.125, 0.75, -0.9375, 0.125, 0.5625, -0.9375], [0.125, 0.5625, -0.875, 0.125, 0.75, -0.875, -0.125, 0.75, -0.875, -0.125, 0.5625, -0.875], [-0.125, 0.75, -0.9375, -0.125, 0.75, -0.875, 0.125, 0.75, -0.875, 0.125, 0.75, -0.9375], [0.125, 0.5625, -0.9375, 0.125, 0.5625, -0.875, -0.125, 0.5625, -0.875, -0.125, 0.5625, -0.9375], [0.125, 0.5625, -0.9375, 0.125, 0.75, -0.9375, 0.125, 0.75, -0.875, 0.125, 0.5625, -0.875], [-0.125, 0.5625, -0.875, -0.125, 0.75, -0.875, -0.125, 0.75, -0.9375, -0.125, 0.5625, -0.9375], [-0.3125, 0.0, 0.3125, -0.3125, 0.375, 0.3125, -0.0625, 0.375, 0.3125, -0.0625, 0.0, 0.3125], [-0.0625, 0.0, 0.5625, -0.0625, 0.375, 0.5625, -0.3125, 0.375, 0.5625, -0.3125, 0.0, 0.5625], [-0.3125, 0.375, 0.3125, -0.3125, 0.375, 0.5625, -0.0625, 0.375, 0.5625, -0.0625, 0.375, 0.3125], [-0.0625, 0.0, 0.3125, -0.0625, 0.0, 0.5625, -0.3125, 0.0, 0.5625, -0.3125, 0.0, 0.3125], [-0.0625, 0.0, 0.3125, -0.0625, 0.375, 0.3125, -0.0625, 0.375, 0.5625, -0.0625, 0.0, 0.5625], [-0.3125, 0.0, 0.5625, -0.3125, 0.375, 0.5625, -0.3125, 0.375, 0.3125, -0.3125, 0.0, 0.3125], [0.0625, 0.0, 0.3125, 0.0625, 0.375, 0.3125, 0.3125, 0.375, 0.3125, 0.3125, 0.0, 0.3125], [0.3125, 0.0, 0.5625, 0.3125, 0.375, 0.5625, 0.0625, 0.375, 0.5625, 0.0625, 0.0, 0.5625], [0.0625, 0.375, 0.3125, 0.0625, 0.375, 0.5625, 0.3125, 0.375, 0.5625, 0.3125, 0.375, 0.3125], [0.3125, 0.0, 0.3125, 0.3125, 0.0, 0.5625, 0.0625, 0.0, 0.5625, 0.0625, 0.0, 0.3125], [0.3125, 0.0, 0.3125, 0.3125, 0.375, 0.3125, 0.3125, 0.375, 0.5625, 0.3125, 0.0, 0.5625], [0.0625, 0.0, 0.5625, 0.0625, 0.375, 0.5625, 0.0625, 0.375, 0.3125, 0.0625, 0.0, 0.3125], [-0.3125, 0.0, -0.4375, -0.3125, 0.375, -0.4375, -0.0625, 0.375, -0.4375, -0.0625, 0.0, -0.4375], [-0.0625, 0.0, -0.1875, -0.0625, 0.375, -0.1875, -0.3125, 0.375, -0.1875, -0.3125, 0.0, -0.1875], [-0.3125, 0.375, -0.4375, -0.3125, 0.375, -0.1875, -0.0625, 0.375, -0.1875, -0.0625, 0.375, -0.4375], [-0.0625, 0.0, -0.4375, -0.0625, 0.0, -0.1875, -0.3125, 0.0, -0.1875, -0.3125, 0.0, -0.4375], [-0.0625, 0.0, -0.4375, -0.0625, 0.375, -0.4375, -0.0625, 0.375, -0.1875, -0.0625, 0.0, -0.1875], [-0.3125, 0.0, -0.1875, -0.3125, 0.375, -0.1875, -0.3125, 0.375, -0.4375, -0.3125, 0.0, -0.4375], [0.0625, 0.0, -0.4375, 0.0625, 0.375, -0.4375, 0.3125, 0.375, -0.4375, 0.3125, 0.0, -0.4375], [0.3125, 0.0, -0.1875, 0.3125, 0.375, -0.1875, 0.0625, 0.375, -0.1875, 0.0625, 0.0, -0.1875], [0.0625, 0.375, -0.4375, 0.0625, 0.375, -0.1875, 0.3125, 0.375, -0.1875, 0.3125, 0.375, -0.4375], [0.3125, 0.0, -0.4375, 0.3125, 0.0, -0.1875, 0.0625, 0.0, -0.1875, 0.0625, 0.0, -0.4375], [0.3125, 0.0, -0.4375, 0.3125, 0.375, -0.4375, 0.3125, 0.375, -0.1875, 0.3125, 0.0, -0.1875], [0.0625, 0.0, -0.1875, 0.0625, 0.375, -0.1875, 0.0625, 0.375, -0.4375, 0.0625, 0.0, -0.4375]] -tex_coords = [[0.056338028169014086, 0.0, 0, 0.056338028169014086, 0.6666666666666667, 0, 0.1267605633802817, 0.6666666666666667, 0, 0.1267605633802817, 0.0, 0], [0.18309859154929578, 0.0, 0, 0.18309859154929578, 0.6666666666666667, 0, 0.2535211267605634, 0.6666666666666667, 0, 0.2535211267605634, 0.0, 0], [0.056338028169014086, 0.6666666666666667, 0, 0.056338028169014086, 1.0, 0, 0.1267605633802817, 1.0, 0, 0.1267605633802817, 0.6666666666666667, 0], [0.1267605633802817, 0.6666666666666667, 0, 0.1267605633802817, 1.0, 0, 0.19718309859154928, 1.0, 0, 0.19718309859154928, 0.6666666666666667, 0], [0.1267605633802817, 0.0, 0, 0.1267605633802817, 0.6666666666666667, 0, 0.18309859154929578, 0.6666666666666667, 0, 0.18309859154929578, 0.0, 0], [0.0, 0.0, 0, 0.0, 0.6666666666666667, 0, 0.056338028169014086, 0.6666666666666667, 0, 0.056338028169014086, 0.0, 0], [0.30985915492957744, 0.33333333333333337, 0, 0.30985915492957744, 0.6666666666666667, 0, 0.36619718309859156, 0.6666666666666667, 0, 0.36619718309859156, 0.33333333333333337, 0], [0.4225352112676056, 0.33333333333333337, 0, 0.4225352112676056, 0.6666666666666667, 0, 0.4788732394366197, 0.6666666666666667, 0, 0.4788732394366197, 0.33333333333333337, 0], [0.30985915492957744, 0.6666666666666667, 0, 0.30985915492957744, 1.0, 0, 0.36619718309859156, 1.0, 0, 0.36619718309859156, 0.6666666666666667, 0], [0.36619718309859156, 0.6666666666666667, 0, 0.36619718309859156, 1.0, 0, 0.4225352112676056, 1.0, 0, 0.4225352112676056, 0.6666666666666667, 0], [0.36619718309859156, 0.33333333333333337, 0, 0.36619718309859156, 0.6666666666666667, 0, 0.4225352112676056, 0.6666666666666667, 0, 0.4225352112676056, 0.33333333333333337, 0], [0.2535211267605634, 0.33333333333333337, 0, 0.2535211267605634, 0.6666666666666667, 0, 0.30985915492957744, 0.6666666666666667, 0, 0.30985915492957744, 0.33333333333333337, 0], [0.4859154929577465, 0.8333333333333334, 0, 0.4859154929577465, 0.9583333333333334, 0, 0.5140845070422535, 0.9583333333333334, 0, 0.5140845070422535, 0.8333333333333334, 0], [0.5211267605633803, 0.8333333333333334, 0, 0.5211267605633803, 0.9583333333333334, 0, 0.5492957746478874, 0.9583333333333334, 0, 0.5492957746478874, 0.8333333333333334, 0], [0.4859154929577465, 0.9583333333333334, 0, 0.4859154929577465, 1.0, 0, 0.5140845070422535, 1.0, 0, 0.5140845070422535, 0.9583333333333334, 0], [0.5140845070422535, 0.9583333333333334, 0, 0.5140845070422535, 1.0, 0, 0.5422535211267606, 1.0, 0, 0.5422535211267606, 0.9583333333333334, 0], [0.5140845070422535, 0.8333333333333334, 0, 0.5140845070422535, 0.9583333333333334, 0, 0.5211267605633803, 0.9583333333333334, 0, 0.5211267605633803, 0.8333333333333334, 0], [0.4788732394366197, 0.8333333333333334, 0, 0.4788732394366197, 0.9583333333333334, 0, 0.4859154929577465, 0.9583333333333334, 0, 0.4859154929577465, 0.8333333333333334, 0], [0.5774647887323944, 0.5833333333333333, 0, 0.5774647887323944, 0.8333333333333334, 0, 0.6056338028169014, 0.8333333333333334, 0, 0.6056338028169014, 0.5833333333333333, 0], [0.6338028169014085, 0.5833333333333333, 0, 0.6338028169014085, 0.8333333333333334, 0, 0.6619718309859155, 0.8333333333333334, 0, 0.6619718309859155, 0.5833333333333333, 0], [0.5774647887323944, 0.8333333333333334, 0, 0.5774647887323944, 1.0, 0, 0.6056338028169014, 1.0, 0, 0.6056338028169014, 0.8333333333333334, 0], [0.6056338028169014, 0.8333333333333334, 0, 0.6056338028169014, 1.0, 0, 0.6338028169014085, 1.0, 0, 0.6338028169014085, 0.8333333333333334, 0], [0.6056338028169014, 0.5833333333333333, 0, 0.6056338028169014, 0.8333333333333334, 0, 0.6338028169014085, 0.8333333333333334, 0, 0.6338028169014085, 0.5833333333333333, 0], [0.5492957746478874, 0.5833333333333333, 0, 0.5492957746478874, 0.8333333333333334, 0, 0.5774647887323944, 0.8333333333333334, 0, 0.5774647887323944, 0.5833333333333333, 0], [0.6901408450704225, 0.5833333333333333, 0, 0.6901408450704225, 0.8333333333333334, 0, 0.7183098591549296, 0.8333333333333334, 0, 0.7183098591549296, 0.5833333333333333, 0], [0.7464788732394366, 0.5833333333333333, 0, 0.7464788732394366, 0.8333333333333334, 0, 0.7746478873239436, 0.8333333333333334, 0, 0.7746478873239436, 0.5833333333333333, 0], [0.6901408450704225, 0.8333333333333334, 0, 0.6901408450704225, 1.0, 0, 0.7183098591549296, 1.0, 0, 0.7183098591549296, 0.8333333333333334, 0], [0.7183098591549296, 0.8333333333333334, 0, 0.7183098591549296, 1.0, 0, 0.7464788732394366, 1.0, 0, 0.7464788732394366, 0.8333333333333334, 0], [0.7183098591549296, 0.5833333333333333, 0, 0.7183098591549296, 0.8333333333333334, 0, 0.7464788732394366, 0.8333333333333334, 0, 0.7464788732394366, 0.5833333333333333, 0], [0.6619718309859155, 0.5833333333333333, 0, 0.6619718309859155, 0.8333333333333334, 0, 0.6901408450704225, 0.8333333333333334, 0, 0.6901408450704225, 0.5833333333333333, 0], [0.8028169014084507, 0.5833333333333333, 0, 0.8028169014084507, 0.8333333333333334, 0, 0.8309859154929577, 0.8333333333333334, 0, 0.8309859154929577, 0.5833333333333333, 0], [0.8591549295774648, 0.5833333333333333, 0, 0.8591549295774648, 0.8333333333333334, 0, 0.8873239436619719, 0.8333333333333334, 0, 0.8873239436619719, 0.5833333333333333, 0], [0.8028169014084507, 0.8333333333333334, 0, 0.8028169014084507, 1.0, 0, 0.8309859154929577, 1.0, 0, 0.8309859154929577, 0.8333333333333334, 0], [0.8309859154929577, 0.8333333333333334, 0, 0.8309859154929577, 1.0, 0, 0.8591549295774648, 1.0, 0, 0.8591549295774648, 0.8333333333333334, 0], [0.8309859154929577, 0.5833333333333333, 0, 0.8309859154929577, 0.8333333333333334, 0, 0.8591549295774648, 0.8333333333333334, 0, 0.8591549295774648, 0.5833333333333333, 0], [0.7746478873239436, 0.5833333333333333, 0, 0.7746478873239436, 0.8333333333333334, 0, 0.8028169014084507, 0.8333333333333334, 0, 0.8028169014084507, 0.5833333333333333, 0], [0.9154929577464789, 0.5833333333333333, 0, 0.9154929577464789, 0.8333333333333334, 0, 0.9436619718309859, 0.8333333333333334, 0, 0.9436619718309859, 0.5833333333333333, 0], [0.971830985915493, 0.5833333333333333, 0, 0.971830985915493, 0.8333333333333334, 0, 1.0, 0.8333333333333334, 0, 1.0, 0.5833333333333333, 0], [0.9154929577464789, 0.8333333333333334, 0, 0.9154929577464789, 1.0, 0, 0.9436619718309859, 1.0, 0, 0.9436619718309859, 0.8333333333333334, 0], [0.9436619718309859, 0.8333333333333334, 0, 0.9436619718309859, 1.0, 0, 0.971830985915493, 1.0, 0, 0.971830985915493, 0.8333333333333334, 0], [0.9436619718309859, 0.5833333333333333, 0, 0.9436619718309859, 0.8333333333333334, 0, 0.971830985915493, 0.8333333333333334, 0, 0.971830985915493, 0.5833333333333333, 0], [0.8873239436619719, 0.5833333333333333, 0, 0.8873239436619719, 0.8333333333333334, 0, 0.9154929577464789, 0.8333333333333334, 0, 0.9154929577464789, 0.5833333333333333, 0]] -shading_values = [[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]] +bones = [{'name':'body','pivot':[0, 13, 2],'vertices':[[-0.3124999701976776, 0.3750000298023224, 0.5, -0.3124999701976776, 0.375, -0.5, 0.3124999701976776, 0.375, -0.5, 0.3124999701976776, 0.3750000298023224, 0.5], [0.3124999701976776, 0.8750000596046448, 0.5, 0.3124999701976776, 0.875, -0.5, -0.3124999701976776, 0.875, -0.5, -0.3124999701976776, 0.8750000596046448, 0.5], [-0.3124999701976776, 0.375, -0.5, -0.3124999701976776, 0.875, -0.5, 0.3124999701976776, 0.875, -0.5, 0.3124999701976776, 0.375, -0.5], [0.3124999701976776, 0.3750000298023224, 0.5, 0.3124999701976776, 0.8750000596046448, 0.5, -0.3124999701976776, 0.8750000596046448, 0.5, -0.3124999701976776, 0.3750000298023224, 0.5], [0.3124999701976776, 0.3750000298023224, 0.5, 0.3124999701976776, 0.375, -0.5, 0.3124999701976776, 0.875, -0.5, 0.3124999701976776, 0.8750000596046448, 0.5], [-0.3124999701976776, 0.8750000596046448, 0.5, -0.3124999701976776, 0.875, -0.5, -0.3124999701976776, 0.375, -0.5, -0.3124999701976776, 0.3750000298023224, 0.5]],'tex_coords':[[0.056338028169014086, 0.0, 0.056338028169014086, 0.6666666666666667, 0.1267605633802817, 0.6666666666666667, 0.1267605633802817, 0.0], [0.18309859154929578, 0.0, 0.18309859154929578, 0.6666666666666667, 0.2535211267605634, 0.6666666666666667, 0.2535211267605634, 0.0], [0.056338028169014086, 0.6666666666666667, 0.056338028169014086, 1.0, 0.1267605633802817, 1.0, 0.1267605633802817, 0.6666666666666667], [0.1267605633802817, 0.6666666666666667, 0.1267605633802817, 1.0, 0.19718309859154928, 1.0, 0.19718309859154928, 0.6666666666666667], [0.1267605633802817, 0.0, 0.1267605633802817, 0.6666666666666667, 0.18309859154929578, 0.6666666666666667, 0.18309859154929578, 0.0], [0.0, 0.0, 0.0, 0.6666666666666667, 0.056338028169014086, 0.6666666666666667, 0.056338028169014086, 0.0]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'head','pivot':[0, 12, -6],'vertices':[[-0.25, 0.5, -0.875, -0.25, 1.0, -0.875, 0.25, 1.0, -0.875, 0.25, 0.5, -0.875], [0.25, 0.5, -0.375, 0.25, 1.0, -0.375, -0.25, 1.0, -0.375, -0.25, 0.5, -0.375], [-0.25, 1.0, -0.875, -0.25, 1.0, -0.375, 0.25, 1.0, -0.375, 0.25, 1.0, -0.875], [0.25, 0.5, -0.875, 0.25, 0.5, -0.375, -0.25, 0.5, -0.375, -0.25, 0.5, -0.875], [0.25, 0.5, -0.875, 0.25, 1.0, -0.875, 0.25, 1.0, -0.375, 0.25, 0.5, -0.375], [-0.25, 0.5, -0.375, -0.25, 1.0, -0.375, -0.25, 1.0, -0.875, -0.25, 0.5, -0.875], [-0.125, 0.5625, -0.9375, -0.125, 0.75, -0.9375, 0.125, 0.75, -0.9375, 0.125, 0.5625, -0.9375], [0.125, 0.5625, -0.875, 0.125, 0.75, -0.875, -0.125, 0.75, -0.875, -0.125, 0.5625, -0.875], [-0.125, 0.75, -0.9375, -0.125, 0.75, -0.875, 0.125, 0.75, -0.875, 0.125, 0.75, -0.9375], [0.125, 0.5625, -0.9375, 0.125, 0.5625, -0.875, -0.125, 0.5625, -0.875, -0.125, 0.5625, -0.9375], [0.125, 0.5625, -0.9375, 0.125, 0.75, -0.9375, 0.125, 0.75, -0.875, 0.125, 0.5625, -0.875], [-0.125, 0.5625, -0.875, -0.125, 0.75, -0.875, -0.125, 0.75, -0.9375, -0.125, 0.5625, -0.9375]],'tex_coords':[[0.30985915492957744, 0.33333333333333337, 0.30985915492957744, 0.6666666666666667, 0.36619718309859156, 0.6666666666666667, 0.36619718309859156, 0.33333333333333337], [0.4225352112676056, 0.33333333333333337, 0.4225352112676056, 0.6666666666666667, 0.4788732394366197, 0.6666666666666667, 0.4788732394366197, 0.33333333333333337], [0.30985915492957744, 0.6666666666666667, 0.30985915492957744, 1.0, 0.36619718309859156, 1.0, 0.36619718309859156, 0.6666666666666667], [0.36619718309859156, 0.6666666666666667, 0.36619718309859156, 1.0, 0.4225352112676056, 1.0, 0.4225352112676056, 0.6666666666666667], [0.36619718309859156, 0.33333333333333337, 0.36619718309859156, 0.6666666666666667, 0.4225352112676056, 0.6666666666666667, 0.4225352112676056, 0.33333333333333337], [0.2535211267605634, 0.33333333333333337, 0.2535211267605634, 0.6666666666666667, 0.30985915492957744, 0.6666666666666667, 0.30985915492957744, 0.33333333333333337], [0.4859154929577465, 0.8333333333333334, 0.4859154929577465, 0.9583333333333334, 0.5140845070422535, 0.9583333333333334, 0.5140845070422535, 0.8333333333333334], [0.5211267605633803, 0.8333333333333334, 0.5211267605633803, 0.9583333333333334, 0.5492957746478874, 0.9583333333333334, 0.5492957746478874, 0.8333333333333334], [0.4859154929577465, 0.9583333333333334, 0.4859154929577465, 1.0, 0.5140845070422535, 1.0, 0.5140845070422535, 0.9583333333333334], [0.5140845070422535, 0.9583333333333334, 0.5140845070422535, 1.0, 0.5422535211267606, 1.0, 0.5422535211267606, 0.9583333333333334], [0.5140845070422535, 0.8333333333333334, 0.5140845070422535, 0.9583333333333334, 0.5211267605633803, 0.9583333333333334, 0.5211267605633803, 0.8333333333333334], [0.4788732394366197, 0.8333333333333334, 0.4788732394366197, 0.9583333333333334, 0.4859154929577465, 0.9583333333333334, 0.4859154929577465, 0.8333333333333334]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'leg0','pivot':[-3, 6, 7],'vertices':[[-0.3125, 0.0, 0.3125, -0.3125, 0.375, 0.3125, -0.0625, 0.375, 0.3125, -0.0625, 0.0, 0.3125], [-0.0625, 0.0, 0.5625, -0.0625, 0.375, 0.5625, -0.3125, 0.375, 0.5625, -0.3125, 0.0, 0.5625], [-0.3125, 0.375, 0.3125, -0.3125, 0.375, 0.5625, -0.0625, 0.375, 0.5625, -0.0625, 0.375, 0.3125], [-0.0625, 0.0, 0.3125, -0.0625, 0.0, 0.5625, -0.3125, 0.0, 0.5625, -0.3125, 0.0, 0.3125], [-0.0625, 0.0, 0.3125, -0.0625, 0.375, 0.3125, -0.0625, 0.375, 0.5625, -0.0625, 0.0, 0.5625], [-0.3125, 0.0, 0.5625, -0.3125, 0.375, 0.5625, -0.3125, 0.375, 0.3125, -0.3125, 0.0, 0.3125]],'tex_coords':[[0.5774647887323944, 0.5833333333333333, 0.5774647887323944, 0.8333333333333334, 0.6056338028169014, 0.8333333333333334, 0.6056338028169014, 0.5833333333333333], [0.6338028169014085, 0.5833333333333333, 0.6338028169014085, 0.8333333333333334, 0.6619718309859155, 0.8333333333333334, 0.6619718309859155, 0.5833333333333333], [0.5774647887323944, 0.8333333333333334, 0.5774647887323944, 1.0, 0.6056338028169014, 1.0, 0.6056338028169014, 0.8333333333333334], [0.6056338028169014, 0.8333333333333334, 0.6056338028169014, 1.0, 0.6338028169014085, 1.0, 0.6338028169014085, 0.8333333333333334], [0.6056338028169014, 0.5833333333333333, 0.6056338028169014, 0.8333333333333334, 0.6338028169014085, 0.8333333333333334, 0.6338028169014085, 0.5833333333333333], [0.5492957746478874, 0.5833333333333333, 0.5492957746478874, 0.8333333333333334, 0.5774647887323944, 0.8333333333333334, 0.5774647887323944, 0.5833333333333333]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'leg1','pivot':[3, 6, 7],'vertices':[[0.0625, 0.0, 0.3125, 0.0625, 0.375, 0.3125, 0.3125, 0.375, 0.3125, 0.3125, 0.0, 0.3125], [0.3125, 0.0, 0.5625, 0.3125, 0.375, 0.5625, 0.0625, 0.375, 0.5625, 0.0625, 0.0, 0.5625], [0.0625, 0.375, 0.3125, 0.0625, 0.375, 0.5625, 0.3125, 0.375, 0.5625, 0.3125, 0.375, 0.3125], [0.3125, 0.0, 0.3125, 0.3125, 0.0, 0.5625, 0.0625, 0.0, 0.5625, 0.0625, 0.0, 0.3125], [0.3125, 0.0, 0.3125, 0.3125, 0.375, 0.3125, 0.3125, 0.375, 0.5625, 0.3125, 0.0, 0.5625], [0.0625, 0.0, 0.5625, 0.0625, 0.375, 0.5625, 0.0625, 0.375, 0.3125, 0.0625, 0.0, 0.3125]],'tex_coords':[[0.6901408450704225, 0.5833333333333333, 0.6901408450704225, 0.8333333333333334, 0.7183098591549296, 0.8333333333333334, 0.7183098591549296, 0.5833333333333333], [0.7464788732394366, 0.5833333333333333, 0.7464788732394366, 0.8333333333333334, 0.7746478873239436, 0.8333333333333334, 0.7746478873239436, 0.5833333333333333], [0.6901408450704225, 0.8333333333333334, 0.6901408450704225, 1.0, 0.7183098591549296, 1.0, 0.7183098591549296, 0.8333333333333334], [0.7183098591549296, 0.8333333333333334, 0.7183098591549296, 1.0, 0.7464788732394366, 1.0, 0.7464788732394366, 0.8333333333333334], [0.7183098591549296, 0.5833333333333333, 0.7183098591549296, 0.8333333333333334, 0.7464788732394366, 0.8333333333333334, 0.7464788732394366, 0.5833333333333333], [0.6619718309859155, 0.5833333333333333, 0.6619718309859155, 0.8333333333333334, 0.6901408450704225, 0.8333333333333334, 0.6901408450704225, 0.5833333333333333]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'leg2','pivot':[-3, 6, -5],'vertices':[[-0.3125, 0.0, -0.4375, -0.3125, 0.375, -0.4375, -0.0625, 0.375, -0.4375, -0.0625, 0.0, -0.4375], [-0.0625, 0.0, -0.1875, -0.0625, 0.375, -0.1875, -0.3125, 0.375, -0.1875, -0.3125, 0.0, -0.1875], [-0.3125, 0.375, -0.4375, -0.3125, 0.375, -0.1875, -0.0625, 0.375, -0.1875, -0.0625, 0.375, -0.4375], [-0.0625, 0.0, -0.4375, -0.0625, 0.0, -0.1875, -0.3125, 0.0, -0.1875, -0.3125, 0.0, -0.4375], [-0.0625, 0.0, -0.4375, -0.0625, 0.375, -0.4375, -0.0625, 0.375, -0.1875, -0.0625, 0.0, -0.1875], [-0.3125, 0.0, -0.1875, -0.3125, 0.375, -0.1875, -0.3125, 0.375, -0.4375, -0.3125, 0.0, -0.4375]],'tex_coords':[[0.8028169014084507, 0.5833333333333333, 0.8028169014084507, 0.8333333333333334, 0.8309859154929577, 0.8333333333333334, 0.8309859154929577, 0.5833333333333333], [0.8591549295774648, 0.5833333333333333, 0.8591549295774648, 0.8333333333333334, 0.8873239436619719, 0.8333333333333334, 0.8873239436619719, 0.5833333333333333], [0.8028169014084507, 0.8333333333333334, 0.8028169014084507, 1.0, 0.8309859154929577, 1.0, 0.8309859154929577, 0.8333333333333334], [0.8309859154929577, 0.8333333333333334, 0.8309859154929577, 1.0, 0.8591549295774648, 1.0, 0.8591549295774648, 0.8333333333333334], [0.8309859154929577, 0.5833333333333333, 0.8309859154929577, 0.8333333333333334, 0.8591549295774648, 0.8333333333333334, 0.8591549295774648, 0.5833333333333333], [0.7746478873239436, 0.5833333333333333, 0.7746478873239436, 0.8333333333333334, 0.8028169014084507, 0.8333333333333334, 0.8028169014084507, 0.5833333333333333]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'leg3','pivot':[3, 6, -5],'vertices':[[0.0625, 0.0, -0.4375, 0.0625, 0.375, -0.4375, 0.3125, 0.375, -0.4375, 0.3125, 0.0, -0.4375], [0.3125, 0.0, -0.1875, 0.3125, 0.375, -0.1875, 0.0625, 0.375, -0.1875, 0.0625, 0.0, -0.1875], [0.0625, 0.375, -0.4375, 0.0625, 0.375, -0.1875, 0.3125, 0.375, -0.1875, 0.3125, 0.375, -0.4375], [0.3125, 0.0, -0.4375, 0.3125, 0.0, -0.1875, 0.0625, 0.0, -0.1875, 0.0625, 0.0, -0.4375], [0.3125, 0.0, -0.4375, 0.3125, 0.375, -0.4375, 0.3125, 0.375, -0.1875, 0.3125, 0.0, -0.1875], [0.0625, 0.0, -0.1875, 0.0625, 0.375, -0.1875, 0.0625, 0.375, -0.4375, 0.0625, 0.0, -0.4375]],'tex_coords':[[0.9154929577464789, 0.5833333333333333, 0.9154929577464789, 0.8333333333333334, 0.9436619718309859, 0.8333333333333334, 0.9436619718309859, 0.5833333333333333], [0.971830985915493, 0.5833333333333333, 0.971830985915493, 0.8333333333333334, 1.0, 0.8333333333333334, 1.0, 0.5833333333333333], [0.9154929577464789, 0.8333333333333334, 0.9154929577464789, 1.0, 0.9436619718309859, 1.0, 0.9436619718309859, 0.8333333333333334], [0.9436619718309859, 0.8333333333333334, 0.9436619718309859, 1.0, 0.971830985915493, 1.0, 0.971830985915493, 0.8333333333333334], [0.9436619718309859, 0.5833333333333333, 0.9436619718309859, 0.8333333333333334, 0.971830985915493, 0.8333333333333334, 0.971830985915493, 0.5833333333333333], [0.8873239436619719, 0.5833333333333333, 0.8873239436619719, 0.8333333333333334, 0.9154929577464789, 0.8333333333333334, 0.9154929577464789, 0.5833333333333333]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}] diff --git a/episode-13/player.py b/episode-13/player.py index 7bf05d06..1a77e0da 100644 --- a/episode-13/player.py +++ b/episode-13/player.py @@ -1,6 +1,5 @@ import math import entity -import matrix WALKING_SPEED = 4.317 SPRINTING_SPEED = 7 # faster than in Minecraft, feels better diff --git a/episode-13/save.py b/episode-13/save.py index b3a3c059..5cc2793e 100644 --- a/episode-13/save.py +++ b/episode-13/save.py @@ -10,7 +10,7 @@ def __init__(self, world, path = "save"): self.path = path def chunk_position_to_path(self, chunk_position): - x, y, z = chunk_position + x, _, z = chunk_position chunk_path = '/'.join((self.path, base36.dumps(x % 64), base36.dumps(z % 64), @@ -30,7 +30,7 @@ def load_chunk(self, chunk_position): return blocks = chunk_data["Level"]["Blocks"] - entities = chunk_data["Level"]["Entities"] + entities = [] # chunk_data["Level"]["Entities"] # create chunk and fill it with the blocks from our chunk file diff --git a/episode-13/shaders/entity/frag.glsl b/episode-13/shaders/entity/frag.glsl index 1c87c427..f0160fb9 100644 --- a/episode-13/shaders/entity/frag.glsl +++ b/episode-13/shaders/entity/frag.glsl @@ -5,11 +5,11 @@ out vec4 fragment_colour; uniform sampler2D texture_sampler; in vec3 local_position; -in vec3 interpolated_tex_coords; +in vec2 interpolated_tex_coords; in float shading; void main(void) { - vec4 texture_colour = texture(texture_sampler, interpolated_tex_coords.xy); + vec4 texture_colour = texture(texture_sampler, interpolated_tex_coords); fragment_colour = texture_colour * shading; if (texture_colour.a == 0.0) { // discard if texel's alpha component is 0 (texel is transparent) diff --git a/episode-13/shaders/entity/vert.glsl b/episode-13/shaders/entity/vert.glsl index f538f972..1b706da1 100644 --- a/episode-13/shaders/entity/vert.glsl +++ b/episode-13/shaders/entity/vert.glsl @@ -1,11 +1,11 @@ #version 330 layout(location = 0) in vec3 vertex_position; -layout(location = 1) in vec3 tex_coords; +layout(location = 1) in vec2 tex_coords; layout(location = 2) in vec3 normal; out vec3 local_position; -out vec3 interpolated_tex_coords; +out vec2 interpolated_tex_coords; out float shading; uniform mat4 transform_matrix; @@ -19,7 +19,7 @@ void main(void) { vec3 adjusted_normal = (vec4(normal, 1.0) * transform_matrix).xyz; vec3 sunlight = vec3(0.0, 0.0, 1.0); - shading = 1.0 - 0.4 * abs(dot(normalize(adjusted_normal), normalize(sunlight))); + shading = 1.0; // 1.0 - 0.4 * abs(dot(normalize(adjusted_normal), normalize(sunlight))); gl_Position = matrix * vec4(vertex_position, 1.0); } diff --git a/episode-13/work/convert.py b/episode-13/work/convert.py index 712ee784..0286edee 100644 --- a/episode-13/work/convert.py +++ b/episode-13/work/convert.py @@ -5,14 +5,13 @@ name = sys.argv[1] -f = open(f"work/models/{name}.json") -data, = json.load(f).values() -f.close() +with open(f"work/models/{name}.json") as f: + data, = json.load(f).values() x_res = data["texturewidth"] y_res = data["textureheight"] -bones = data["bones"] +raw_bones = data["bones"] PIXEL_SIZE = 1 / 16 @@ -23,137 +22,152 @@ def map_tex_coords(*tex_coords): *u, = map(lambda u: u / x_res, tex_coords[0::2]) *v, = map(lambda v: 1 - v / y_res, tex_coords[1::2]) - return sum(map(list, zip(u, v, [0] * len(u))), []) - -vertices = [] -tex_coords = [] -shading_values = [] - -def process_cube(cube): - x, y, z = cube["origin"] - pivot = cube.get("pivot", (0, 0, 0)) - rotation = cube.get("rotation", (0, 0, 0)) - sx, sy, sz = cube["size"] - u, v = cube["uv"] # note that UV's start from the top-left (because... well... just because... idk) - - # snap rotation, because our dataset is a bit weird - - *rotation, = map(lambda x: round(x / 90) * 90, rotation) - - # construct transformation matrix based on pivot & rotation - - matrix = glm.translate(glm.mat4(), glm.vec3(pivot)) - matrix = glm.rotate(matrix, -math.radians(rotation[0]), glm.vec3(1, 0, 0)) - matrix = glm.rotate(matrix, -math.radians(rotation[1]), glm.vec3(0, 1, 0)) - matrix = glm.rotate(matrix, -math.radians(rotation[2]), glm.vec3(0, 0, 1)) - matrix = glm.translate(matrix, glm.vec3([-x for x in pivot])) - - def transform(*vector): - return (*(matrix * glm.vec3(vector)),) - - # front/back faces - - vertices.append(map_vertices( - *transform(x, y, z), - *transform(x, y + sy, z), - *transform(x + sx, y + sy, z), - *transform(x + sx, y, z), - )) - - tex_coords.append(map_tex_coords( - u + sz, v + sz + sy, - u + sz, v + sz, - u + sz + sx, v + sz, - u + sz + sx, v + sz + sy, - )) - - vertices.append(map_vertices( - *transform(x + sx, y, z + sz), - *transform(x + sx, y + sy, z + sz), - *transform(x, y + sy, z + sz), - *transform(x, y, z + sz), - )) - - tex_coords.append(map_tex_coords( - u + sz + sx + sz, v + sz + sy, - u + sz + sx + sz, v + sz, - u + sz + sx + sz + sx, v + sz, - u + sz + sx + sz + sx, v + sz + sy, - )) - - # top/bottom faces - - vertices.append(map_vertices( - *transform(x, y + sy, z ), - *transform(x, y + sy, z + sz), - *transform(x + sx, y + sy, z + sz), - *transform(x + sx, y + sy, z ), - )) - - tex_coords.append(map_tex_coords( - u + sz, v + sz, - u + sz, v, - u + sz + sx, v, - u + sz + sx, v + sz, - )) - - vertices.append(map_vertices( - *transform(x + sx, y, z ), - *transform(x + sx, y, z + sz), - *transform(x, y, z + sz), - *transform(x, y, z ), - )) - - tex_coords.append(map_tex_coords( - u + sz + sx, v + sz, - u + sz + sx, v, - u + sz + sx + sx, v, - u + sz + sx + sx, v + sz, - )) - - # left/right faces - - vertices.append(map_vertices( - *transform(x + sx, y, z ), - *transform(x + sx, y + sy, z ), - *transform(x + sx, y + sy, z + sz), - *transform(x + sx, y, z + sz), - )) - - tex_coords.append(map_tex_coords( - u + sz + sx, v + sz + sy, - u + sz + sx, v + sz, - u + sz + sx + sz, v + sz, - u + sz + sx + sz, v + sz + sy, - )) - - vertices.append(map_vertices( - *transform(x, y, z + sz), - *transform(x, y + sy, z + sz), - *transform(x, y + sy, z ), - *transform(x, y, z ), - )) - - tex_coords.append(map_tex_coords( - u, v + sz + sy, - u, v + sz, - u + sz, v + sz, - u + sz, v + sz + sy, - )) - - for _ in range(6): - shading_values.append([1.0, 1.0, 1.0, 1.0]) - -def process_bone(bone): - cubes = bone["cubes"] - - for cube in cubes: - process_cube(cube) + return sum(map(list, zip(u, v)), []) + +bones = [] + +class Bone: + def __init__(self, name, bone = None): + self.name = name + self.pivot = [0, 0, 0] + + self.vertices = [] + self.tex_coords = [] + self.shading_values = [] + + # automatically process raw bone data + + if bone is None: + return + + self.pivot = bone["pivot"] + cubes = bone["cubes"] + + for cube in cubes: + self.add_cube(cube) + + def __repr__(self): + return f"{{'name':'{self.name}','pivot':{self.pivot},'vertices':{self.vertices},'tex_coords':{self.tex_coords},'shading_values':{self.shading_values}}}" + + def add_cube(self, cube): + x, y, z = cube["origin"] + pivot = cube.get("pivot", (0, 0, 0)) + rotation = cube.get("rotation", (0, 0, 0)) + sx, sy, sz = cube["size"] + u, v = cube["uv"] # note that UV's start from the top-left (because... well... just because... idk) + + # snap rotation, because our dataset is a bit weird + + *rotation, = map(lambda x: round(x / 90) * 90, rotation) + + # construct transformation matrix based on pivot & rotation + + matrix = glm.translate(glm.mat4(), glm.vec3(pivot)) + matrix = glm.rotate(matrix, -math.radians(rotation[0]), glm.vec3(1, 0, 0)) + matrix = glm.rotate(matrix, -math.radians(rotation[1]), glm.vec3(0, 1, 0)) + matrix = glm.rotate(matrix, -math.radians(rotation[2]), glm.vec3(0, 0, 1)) + matrix = glm.translate(matrix, glm.vec3([-x for x in pivot])) + + def transform(*vector): + return (*(matrix * glm.vec3(vector)),) + + # front/back faces + + self.vertices.append(map_vertices( + *transform(x, y, z), + *transform(x, y + sy, z), + *transform(x + sx, y + sy, z), + *transform(x + sx, y, z), + )) + + self.tex_coords.append(map_tex_coords( + u + sz, v + sz + sy, + u + sz, v + sz, + u + sz + sx, v + sz, + u + sz + sx, v + sz + sy, + )) + + self.vertices.append(map_vertices( + *transform(x + sx, y, z + sz), + *transform(x + sx, y + sy, z + sz), + *transform(x, y + sy, z + sz), + *transform(x, y, z + sz), + )) + + self.tex_coords.append(map_tex_coords( + u + sz + sx + sz, v + sz + sy, + u + sz + sx + sz, v + sz, + u + sz + sx + sz + sx, v + sz, + u + sz + sx + sz + sx, v + sz + sy, + )) + + # top/bottom faces + + self.vertices.append(map_vertices( + *transform(x, y + sy, z ), + *transform(x, y + sy, z + sz), + *transform(x + sx, y + sy, z + sz), + *transform(x + sx, y + sy, z ), + )) + + self.tex_coords.append(map_tex_coords( + u + sz, v + sz, + u + sz, v, + u + sz + sx, v, + u + sz + sx, v + sz, + )) + + self.vertices.append(map_vertices( + *transform(x + sx, y, z ), + *transform(x + sx, y, z + sz), + *transform(x, y, z + sz), + *transform(x, y, z ), + )) + + self.tex_coords.append(map_tex_coords( + u + sz + sx, v + sz, + u + sz + sx, v, + u + sz + sx + sx, v, + u + sz + sx + sx, v + sz, + )) + + # left/right faces + + self.vertices.append(map_vertices( + *transform(x + sx, y, z ), + *transform(x + sx, y + sy, z ), + *transform(x + sx, y + sy, z + sz), + *transform(x + sx, y, z + sz), + )) + + self.tex_coords.append(map_tex_coords( + u + sz + sx, v + sz + sy, + u + sz + sx, v + sz, + u + sz + sx + sz, v + sz, + u + sz + sx + sz, v + sz + sy, + )) + + self.vertices.append(map_vertices( + *transform(x, y, z + sz), + *transform(x, y + sy, z + sz), + *transform(x, y + sy, z ), + *transform(x, y, z ), + )) + + self.tex_coords.append(map_tex_coords( + u, v + sz + sy, + u, v + sz, + u + sz, v + sz, + u + sz, v + sz + sy, + )) + + for _ in range(6): + self.shading_values.append([1.0, 1.0, 1.0, 1.0]) # process the model -for bone in bones: - process_bone(bone) +for bone in raw_bones: + bones.append(Bone(bone["name"], bone)) # output model @@ -164,10 +178,8 @@ def process_bone(bone): colliders = [] -vertex_positions = {vertices} -tex_coords = {tex_coords} -shading_values = {shading_values} +bones = {bones} """ with open(f"models/{name}.py", "w") as f: - f.write(out) \ No newline at end of file + f.write(out) diff --git a/episode-13/world.py b/episode-13/world.py index 631caa86..ceb9fa5b 100644 --- a/episode-13/world.py +++ b/episode-13/world.py @@ -25,9 +25,8 @@ def __init__(self): # parse block type data file - blocks_data_file = open("data/blocks.mcpy") - blocks_data = blocks_data_file.readlines() - blocks_data_file.close() + with open("data/blocks.mcpy") as f: + blocks_data = f.readlines() for block in blocks_data: if block[0] in ['\n', '#']: # skip if empty line or comment From 5f96035e4f8894cd6a5eb8f8e3e68880ee138800 Mon Sep 17 00:00:00 2001 From: obiwac Date: Fri, 13 Jan 2023 17:29:12 +0100 Subject: [PATCH 34/45] ep13: Animation --- episode-13/entity.py | 13 +++++++ episode-13/entity_type.py | 56 ++++++++++++++++++++++++------ episode-13/matrix.py | 12 +++++++ episode-13/models/cow.py | 4 +-- episode-13/models/creeper.py | 4 +-- episode-13/models/curry.py | 4 +-- episode-13/models/pig.py | 2 +- episode-13/models/skeleton.py | 4 +-- episode-13/models/zombie.py | 4 +-- episode-13/work/convert.py | 2 +- episode-13/work/models/zombie.json | 2 +- 11 files changed, 79 insertions(+), 28 deletions(-) diff --git a/episode-13/entity.py b/episode-13/entity.py index bfc405b9..12399336 100644 --- a/episode-13/entity.py +++ b/episode-13/entity.py @@ -22,6 +22,8 @@ def __init__(self, world, entity_type): self.world = world self.entity_type = entity_type + self.age = 0 + # physical variables self.jump_height = 1.25 @@ -177,6 +179,8 @@ def resolve_collision(self, delta_time): self.grounded = True def update(self, delta_time): + initial_pos = tuple(self.position) + # apply input acceleration, and adjust for friction/drag self.velocity = [v + a * f * delta_time for v, a, f in zip(self.velocity, self.accel, self.friction)] @@ -208,6 +212,15 @@ def update(self, delta_time): self.update_collider() + # animate the entity + + dx = self.position[0] - initial_pos[0] + dz = self.position[2] - initial_pos[2] + + speed = math.sqrt(dx ** 2 + dz ** 2) + self.age += delta_time + self.entity_type.animate(self.age, speed) + def draw(self): # compute transformation matrix diff --git a/episode-13/entity_type.py b/episode-13/entity_type.py index 762c5fcd..bcb86309 100644 --- a/episode-13/entity_type.py +++ b/episode-13/entity_type.py @@ -1,16 +1,18 @@ import ctypes +import math + import pyglet import pyglet.gl as gl +import matrix + import models.pig # default model class Entity_type: def __init__(self, world, name = "unknown", texture = "pig", model = models.pig, width = 0.6, height = 1.8): self.world = world - model = models.pig - self.name = name self.model = model @@ -124,23 +126,57 @@ def __init__(self, world, name = "unknown", texture = "pig", model = models.pig, (gl.GLuint * len(self.indices)) (*self.indices), gl.GL_STATIC_DRAW) - # initial fill - - self.fill() - - # fill in the vertex buffers with data! - - def fill(self): + def animate(self, age, speed): + print(age, speed) gl.glBindVertexArray(self.vao) - # upload vertex positions + # compute & upload vertex positions gl.glBindBuffer(gl.GL_ARRAY_BUFFER, self.vertices_vbo) offset = 0 for bone in self.model.bones: + name = bone["name"] + pivot = bone["pivot"] vertices = sum(bone["vertices"], []) + # compute animation transformation matrix + + anim = matrix.Matrix() + anim.load_identity() + + anim.translate(*pivot) + + kind = None + + if name == "head": + kind = "head" + + elif name[:3] == "leg": + kind = "odd_" * (int(name[3:]) in (1, 2)) + "leg" + + elif name == "rightLeg": + kind = "leg" + + elif name == "leftLeg": + kind = "odd_leg" + + if kind is not None: + if kind == "head": + anim.rotate_2d(math.sin(age) / 2, math.cos(age) / 2) + + if "leg" in kind: + phase = math.tau / 2 * (kind == "odd_leg") + anim.rotate_2d(0, math.sin(age * 10 + phase) * 15 * speed) + + anim.translate(*[-x for x in pivot]) + + for i in range(len(vertices))[::3]: + vector = vertices[i: i + 3] + [1] + vertices[i: i + 3] = matrix.multiply_matrix_vector(anim, vector)[:3] + + # upload vertex positions + type_ = gl.GLfloat * len(vertices) size = ctypes.sizeof(type_) diff --git a/episode-13/matrix.py b/episode-13/matrix.py index ce6ac5a9..d255f6fc 100644 --- a/episode-13/matrix.py +++ b/episode-13/matrix.py @@ -27,6 +27,18 @@ def multiply_matrices(x_matrix, y_matrix): return result_matrix +def multiply_matrix_vector(matrix, vector): + result = [0] * 4 + + for i, row in enumerate(zip(*matrix.data)): # transpose into row-major + result[i] = \ + row[0] * vector[0] + \ + row[1] * vector[1] + \ + row[2] * vector[2] + \ + row[3] * vector[3] + + return result + class Matrix: def __init__(self, base = None): if type(base) == Matrix: self.data = copy_matrix(base.data) diff --git a/episode-13/models/cow.py b/episode-13/models/cow.py index 08097faa..d88f904d 100644 --- a/episode-13/models/cow.py +++ b/episode-13/models/cow.py @@ -5,6 +5,4 @@ colliders = [] -vertex_positions = [[-0.3749999701976776, 0.7499999403953552, 0.625, -0.3749999701976776, 0.7499999403953552, -0.5, 0.3749999701976776, 0.7499999403953552, -0.5, 0.3749999701976776, 0.7499999403953552, 0.625], [0.3749999701976776, 1.375, 0.625, 0.3749999701976776, 1.3749998807907104, -0.5, -0.3749999701976776, 1.3749998807907104, -0.5, -0.3749999701976776, 1.375, 0.625], [-0.3749999701976776, 0.7499999403953552, -0.5, -0.3749999701976776, 1.3749998807907104, -0.5, 0.3749999701976776, 1.3749998807907104, -0.5, 0.3749999701976776, 0.7499999403953552, -0.5], [0.3749999701976776, 0.7499999403953552, 0.625, 0.3749999701976776, 1.375, 0.625, -0.3749999701976776, 1.375, 0.625, -0.3749999701976776, 0.7499999403953552, 0.625], [0.3749999701976776, 0.7499999403953552, 0.625, 0.3749999701976776, 0.7499999403953552, -0.5, 0.3749999701976776, 1.3749998807907104, -0.5, 0.3749999701976776, 1.375, 0.625], [-0.3749999701976776, 1.375, 0.625, -0.3749999701976776, 1.3749998807907104, -0.5, -0.3749999701976776, 0.7499999403953552, -0.5, -0.3749999701976776, 0.7499999403953552, 0.625], [-0.1249999925494194, 0.6874999403953552, 0.625, -0.1249999925494194, 0.6874999403953552, 0.25, 0.1249999925494194, 0.6874999403953552, 0.25, 0.1249999925494194, 0.6874999403953552, 0.625], [0.1249999925494194, 0.7499999403953552, 0.625, 0.1249999925494194, 0.7499999403953552, 0.25, -0.1249999925494194, 0.7499999403953552, 0.25, -0.1249999925494194, 0.7499999403953552, 0.625], [-0.1249999925494194, 0.6874999403953552, 0.25, -0.1249999925494194, 0.7499999403953552, 0.25, 0.1249999925494194, 0.7499999403953552, 0.25, 0.1249999925494194, 0.6874999403953552, 0.25], [0.1249999925494194, 0.6874999403953552, 0.625, 0.1249999925494194, 0.7499999403953552, 0.625, -0.1249999925494194, 0.7499999403953552, 0.625, -0.1249999925494194, 0.6874999403953552, 0.625], [0.1249999925494194, 0.6874999403953552, 0.625, 0.1249999925494194, 0.6874999403953552, 0.25, 0.1249999925494194, 0.7499999403953552, 0.25, 0.1249999925494194, 0.7499999403953552, 0.625], [-0.1249999925494194, 0.7499999403953552, 0.625, -0.1249999925494194, 0.7499999403953552, 0.25, -0.1249999925494194, 0.6874999403953552, 0.25, -0.1249999925494194, 0.6874999403953552, 0.625], [-0.25, 1.0, -0.875, -0.25, 1.5, -0.875, 0.25, 1.5, -0.875, 0.25, 1.0, -0.875], [0.25, 1.0, -0.5, 0.25, 1.5, -0.5, -0.25, 1.5, -0.5, -0.25, 1.0, -0.5], [-0.25, 1.5, -0.875, -0.25, 1.5, -0.5, 0.25, 1.5, -0.5, 0.25, 1.5, -0.875], [0.25, 1.0, -0.875, 0.25, 1.0, -0.5, -0.25, 1.0, -0.5, -0.25, 1.0, -0.875], [0.25, 1.0, -0.875, 0.25, 1.5, -0.875, 0.25, 1.5, -0.5, 0.25, 1.0, -0.5], [-0.25, 1.0, -0.5, -0.25, 1.5, -0.5, -0.25, 1.5, -0.875, -0.25, 1.0, -0.875], [-0.3125, 1.375, -0.75, -0.3125, 1.5625, -0.75, -0.25, 1.5625, -0.75, -0.25, 1.375, -0.75], [-0.25, 1.375, -0.6875, -0.25, 1.5625, -0.6875, -0.3125, 1.5625, -0.6875, -0.3125, 1.375, -0.6875], [-0.3125, 1.5625, -0.75, -0.3125, 1.5625, -0.6875, -0.25, 1.5625, -0.6875, -0.25, 1.5625, -0.75], [-0.25, 1.375, -0.75, -0.25, 1.375, -0.6875, -0.3125, 1.375, -0.6875, -0.3125, 1.375, -0.75], [-0.25, 1.375, -0.75, -0.25, 1.5625, -0.75, -0.25, 1.5625, -0.6875, -0.25, 1.375, -0.6875], [-0.3125, 1.375, -0.6875, -0.3125, 1.5625, -0.6875, -0.3125, 1.5625, -0.75, -0.3125, 1.375, -0.75], [0.25, 1.375, -0.75, 0.25, 1.5625, -0.75, 0.3125, 1.5625, -0.75, 0.3125, 1.375, -0.75], [0.3125, 1.375, -0.6875, 0.3125, 1.5625, -0.6875, 0.25, 1.5625, -0.6875, 0.25, 1.375, -0.6875], [0.25, 1.5625, -0.75, 0.25, 1.5625, -0.6875, 0.3125, 1.5625, -0.6875, 0.3125, 1.5625, -0.75], [0.3125, 1.375, -0.75, 0.3125, 1.375, -0.6875, 0.25, 1.375, -0.6875, 0.25, 1.375, -0.75], [0.3125, 1.375, -0.75, 0.3125, 1.5625, -0.75, 0.3125, 1.5625, -0.6875, 0.3125, 1.375, -0.6875], [0.25, 1.375, -0.6875, 0.25, 1.5625, -0.6875, 0.25, 1.5625, -0.75, 0.25, 1.375, -0.75], [-0.3125, 0.0, 0.3125, -0.3125, 0.75, 0.3125, -0.0625, 0.75, 0.3125, -0.0625, 0.0, 0.3125], [-0.0625, 0.0, 0.5625, -0.0625, 0.75, 0.5625, -0.3125, 0.75, 0.5625, -0.3125, 0.0, 0.5625], [-0.3125, 0.75, 0.3125, -0.3125, 0.75, 0.5625, -0.0625, 0.75, 0.5625, -0.0625, 0.75, 0.3125], [-0.0625, 0.0, 0.3125, -0.0625, 0.0, 0.5625, -0.3125, 0.0, 0.5625, -0.3125, 0.0, 0.3125], [-0.0625, 0.0, 0.3125, -0.0625, 0.75, 0.3125, -0.0625, 0.75, 0.5625, -0.0625, 0.0, 0.5625], [-0.3125, 0.0, 0.5625, -0.3125, 0.75, 0.5625, -0.3125, 0.75, 0.3125, -0.3125, 0.0, 0.3125], [0.0625, 0.0, 0.3125, 0.0625, 0.75, 0.3125, 0.3125, 0.75, 0.3125, 0.3125, 0.0, 0.3125], [0.3125, 0.0, 0.5625, 0.3125, 0.75, 0.5625, 0.0625, 0.75, 0.5625, 0.0625, 0.0, 0.5625], [0.0625, 0.75, 0.3125, 0.0625, 0.75, 0.5625, 0.3125, 0.75, 0.5625, 0.3125, 0.75, 0.3125], [0.3125, 0.0, 0.3125, 0.3125, 0.0, 0.5625, 0.0625, 0.0, 0.5625, 0.0625, 0.0, 0.3125], [0.3125, 0.0, 0.3125, 0.3125, 0.75, 0.3125, 0.3125, 0.75, 0.5625, 0.3125, 0.0, 0.5625], [0.0625, 0.0, 0.5625, 0.0625, 0.75, 0.5625, 0.0625, 0.75, 0.3125, 0.0625, 0.0, 0.3125], [-0.3125, 0.0, -0.4375, -0.3125, 0.75, -0.4375, -0.0625, 0.75, -0.4375, -0.0625, 0.0, -0.4375], [-0.0625, 0.0, -0.1875, -0.0625, 0.75, -0.1875, -0.3125, 0.75, -0.1875, -0.3125, 0.0, -0.1875], [-0.3125, 0.75, -0.4375, -0.3125, 0.75, -0.1875, -0.0625, 0.75, -0.1875, -0.0625, 0.75, -0.4375], [-0.0625, 0.0, -0.4375, -0.0625, 0.0, -0.1875, -0.3125, 0.0, -0.1875, -0.3125, 0.0, -0.4375], [-0.0625, 0.0, -0.4375, -0.0625, 0.75, -0.4375, -0.0625, 0.75, -0.1875, -0.0625, 0.0, -0.1875], [-0.3125, 0.0, -0.1875, -0.3125, 0.75, -0.1875, -0.3125, 0.75, -0.4375, -0.3125, 0.0, -0.4375], [0.0625, 0.0, -0.4375, 0.0625, 0.75, -0.4375, 0.3125, 0.75, -0.4375, 0.3125, 0.0, -0.4375], [0.3125, 0.0, -0.1875, 0.3125, 0.75, -0.1875, 0.0625, 0.75, -0.1875, 0.0625, 0.0, -0.1875], [0.0625, 0.75, -0.4375, 0.0625, 0.75, -0.1875, 0.3125, 0.75, -0.1875, 0.3125, 0.75, -0.4375], [0.3125, 0.0, -0.4375, 0.3125, 0.0, -0.1875, 0.0625, 0.0, -0.1875, 0.0625, 0.0, -0.4375], [0.3125, 0.0, -0.4375, 0.3125, 0.75, -0.4375, 0.3125, 0.75, -0.1875, 0.3125, 0.0, -0.1875], [0.0625, 0.0, -0.1875, 0.0625, 0.75, -0.1875, 0.0625, 0.75, -0.4375, 0.0625, 0.0, -0.4375]] -tex_coords = [[0.06493506493506493, 0.0, 0, 0.06493506493506493, 0.6428571428571428, 0, 0.14285714285714285, 0.6428571428571428, 0, 0.14285714285714285, 0.0, 0], [0.2077922077922078, 0.0, 0, 0.2077922077922078, 0.6428571428571428, 0, 0.2857142857142857, 0.6428571428571428, 0, 0.2857142857142857, 0.0, 0], [0.06493506493506493, 0.6428571428571428, 0, 0.06493506493506493, 1.0, 0, 0.14285714285714285, 1.0, 0, 0.14285714285714285, 0.6428571428571428, 0], [0.14285714285714285, 0.6428571428571428, 0, 0.14285714285714285, 1.0, 0, 0.22077922077922077, 1.0, 0, 0.22077922077922077, 0.6428571428571428, 0], [0.14285714285714285, 0.0, 0, 0.14285714285714285, 0.6428571428571428, 0, 0.2077922077922078, 0.6428571428571428, 0, 0.2077922077922078, 0.0, 0], [0.0, 0.0, 0, 0.0, 0.6428571428571428, 0, 0.06493506493506493, 0.6428571428571428, 0, 0.06493506493506493, 0.0, 0], [0.2922077922077922, 0.75, 0, 0.2922077922077922, 0.9642857142857143, 0, 0.3181818181818182, 0.9642857142857143, 0, 0.3181818181818182, 0.75, 0], [0.3246753246753247, 0.75, 0, 0.3246753246753247, 0.9642857142857143, 0, 0.35064935064935066, 0.9642857142857143, 0, 0.35064935064935066, 0.75, 0], [0.2922077922077922, 0.9642857142857143, 0, 0.2922077922077922, 1.0, 0, 0.3181818181818182, 1.0, 0, 0.3181818181818182, 0.9642857142857143, 0], [0.3181818181818182, 0.9642857142857143, 0, 0.3181818181818182, 1.0, 0, 0.34415584415584416, 1.0, 0, 0.34415584415584416, 0.9642857142857143, 0], [0.3181818181818182, 0.75, 0, 0.3181818181818182, 0.9642857142857143, 0, 0.3246753246753247, 0.9642857142857143, 0, 0.3246753246753247, 0.75, 0], [0.2857142857142857, 0.75, 0, 0.2857142857142857, 0.9642857142857143, 0, 0.2922077922077922, 0.9642857142857143, 0, 0.2922077922077922, 0.75, 0], [0.38961038961038963, 0.5, 0, 0.38961038961038963, 0.7857142857142857, 0, 0.44155844155844154, 0.7857142857142857, 0, 0.44155844155844154, 0.5, 0], [0.4805194805194805, 0.5, 0, 0.4805194805194805, 0.7857142857142857, 0, 0.5324675324675324, 0.7857142857142857, 0, 0.5324675324675324, 0.5, 0], [0.38961038961038963, 0.7857142857142857, 0, 0.38961038961038963, 1.0, 0, 0.44155844155844154, 1.0, 0, 0.44155844155844154, 0.7857142857142857, 0], [0.44155844155844154, 0.7857142857142857, 0, 0.44155844155844154, 1.0, 0, 0.4935064935064935, 1.0, 0, 0.4935064935064935, 0.7857142857142857, 0], [0.44155844155844154, 0.5, 0, 0.44155844155844154, 0.7857142857142857, 0, 0.4805194805194805, 0.7857142857142857, 0, 0.4805194805194805, 0.5, 0], [0.35064935064935066, 0.5, 0, 0.35064935064935066, 0.7857142857142857, 0, 0.38961038961038963, 0.7857142857142857, 0, 0.38961038961038963, 0.5, 0], [0.538961038961039, 0.8571428571428572, 0, 0.538961038961039, 0.9642857142857143, 0, 0.5454545454545454, 0.9642857142857143, 0, 0.5454545454545454, 0.8571428571428572, 0], [0.551948051948052, 0.8571428571428572, 0, 0.551948051948052, 0.9642857142857143, 0, 0.5584415584415584, 0.9642857142857143, 0, 0.5584415584415584, 0.8571428571428572, 0], [0.538961038961039, 0.9642857142857143, 0, 0.538961038961039, 1.0, 0, 0.5454545454545454, 1.0, 0, 0.5454545454545454, 0.9642857142857143, 0], [0.5454545454545454, 0.9642857142857143, 0, 0.5454545454545454, 1.0, 0, 0.551948051948052, 1.0, 0, 0.551948051948052, 0.9642857142857143, 0], [0.5454545454545454, 0.8571428571428572, 0, 0.5454545454545454, 0.9642857142857143, 0, 0.551948051948052, 0.9642857142857143, 0, 0.551948051948052, 0.8571428571428572, 0], [0.5324675324675324, 0.8571428571428572, 0, 0.5324675324675324, 0.9642857142857143, 0, 0.538961038961039, 0.9642857142857143, 0, 0.538961038961039, 0.8571428571428572, 0], [0.564935064935065, 0.8571428571428572, 0, 0.564935064935065, 0.9642857142857143, 0, 0.5714285714285714, 0.9642857142857143, 0, 0.5714285714285714, 0.8571428571428572, 0], [0.577922077922078, 0.8571428571428572, 0, 0.577922077922078, 0.9642857142857143, 0, 0.5844155844155844, 0.9642857142857143, 0, 0.5844155844155844, 0.8571428571428572, 0], [0.564935064935065, 0.9642857142857143, 0, 0.564935064935065, 1.0, 0, 0.5714285714285714, 1.0, 0, 0.5714285714285714, 0.9642857142857143, 0], [0.5714285714285714, 0.9642857142857143, 0, 0.5714285714285714, 1.0, 0, 0.577922077922078, 1.0, 0, 0.577922077922078, 0.9642857142857143, 0], [0.5714285714285714, 0.8571428571428572, 0, 0.5714285714285714, 0.9642857142857143, 0, 0.577922077922078, 0.9642857142857143, 0, 0.577922077922078, 0.8571428571428572, 0], [0.5584415584415584, 0.8571428571428572, 0, 0.5584415584415584, 0.9642857142857143, 0, 0.564935064935065, 0.9642857142857143, 0, 0.564935064935065, 0.8571428571428572, 0], [0.6103896103896104, 0.4285714285714286, 0, 0.6103896103896104, 0.8571428571428572, 0, 0.6363636363636364, 0.8571428571428572, 0, 0.6363636363636364, 0.4285714285714286, 0], [0.6623376623376623, 0.4285714285714286, 0, 0.6623376623376623, 0.8571428571428572, 0, 0.6883116883116883, 0.8571428571428572, 0, 0.6883116883116883, 0.4285714285714286, 0], [0.6103896103896104, 0.8571428571428572, 0, 0.6103896103896104, 1.0, 0, 0.6363636363636364, 1.0, 0, 0.6363636363636364, 0.8571428571428572, 0], [0.6363636363636364, 0.8571428571428572, 0, 0.6363636363636364, 1.0, 0, 0.6623376623376623, 1.0, 0, 0.6623376623376623, 0.8571428571428572, 0], [0.6363636363636364, 0.4285714285714286, 0, 0.6363636363636364, 0.8571428571428572, 0, 0.6623376623376623, 0.8571428571428572, 0, 0.6623376623376623, 0.4285714285714286, 0], [0.5844155844155844, 0.4285714285714286, 0, 0.5844155844155844, 0.8571428571428572, 0, 0.6103896103896104, 0.8571428571428572, 0, 0.6103896103896104, 0.4285714285714286, 0], [0.7142857142857143, 0.4285714285714286, 0, 0.7142857142857143, 0.8571428571428572, 0, 0.7402597402597403, 0.8571428571428572, 0, 0.7402597402597403, 0.4285714285714286, 0], [0.7662337662337663, 0.4285714285714286, 0, 0.7662337662337663, 0.8571428571428572, 0, 0.7922077922077922, 0.8571428571428572, 0, 0.7922077922077922, 0.4285714285714286, 0], [0.7142857142857143, 0.8571428571428572, 0, 0.7142857142857143, 1.0, 0, 0.7402597402597403, 1.0, 0, 0.7402597402597403, 0.8571428571428572, 0], [0.7402597402597403, 0.8571428571428572, 0, 0.7402597402597403, 1.0, 0, 0.7662337662337663, 1.0, 0, 0.7662337662337663, 0.8571428571428572, 0], [0.7402597402597403, 0.4285714285714286, 0, 0.7402597402597403, 0.8571428571428572, 0, 0.7662337662337663, 0.8571428571428572, 0, 0.7662337662337663, 0.4285714285714286, 0], [0.6883116883116883, 0.4285714285714286, 0, 0.6883116883116883, 0.8571428571428572, 0, 0.7142857142857143, 0.8571428571428572, 0, 0.7142857142857143, 0.4285714285714286, 0], [0.8181818181818182, 0.4285714285714286, 0, 0.8181818181818182, 0.8571428571428572, 0, 0.8441558441558441, 0.8571428571428572, 0, 0.8441558441558441, 0.4285714285714286, 0], [0.8701298701298701, 0.4285714285714286, 0, 0.8701298701298701, 0.8571428571428572, 0, 0.8961038961038961, 0.8571428571428572, 0, 0.8961038961038961, 0.4285714285714286, 0], [0.8181818181818182, 0.8571428571428572, 0, 0.8181818181818182, 1.0, 0, 0.8441558441558441, 1.0, 0, 0.8441558441558441, 0.8571428571428572, 0], [0.8441558441558441, 0.8571428571428572, 0, 0.8441558441558441, 1.0, 0, 0.8701298701298701, 1.0, 0, 0.8701298701298701, 0.8571428571428572, 0], [0.8441558441558441, 0.4285714285714286, 0, 0.8441558441558441, 0.8571428571428572, 0, 0.8701298701298701, 0.8571428571428572, 0, 0.8701298701298701, 0.4285714285714286, 0], [0.7922077922077922, 0.4285714285714286, 0, 0.7922077922077922, 0.8571428571428572, 0, 0.8181818181818182, 0.8571428571428572, 0, 0.8181818181818182, 0.4285714285714286, 0], [0.922077922077922, 0.4285714285714286, 0, 0.922077922077922, 0.8571428571428572, 0, 0.948051948051948, 0.8571428571428572, 0, 0.948051948051948, 0.4285714285714286, 0], [0.974025974025974, 0.4285714285714286, 0, 0.974025974025974, 0.8571428571428572, 0, 1.0, 0.8571428571428572, 0, 1.0, 0.4285714285714286, 0], [0.922077922077922, 0.8571428571428572, 0, 0.922077922077922, 1.0, 0, 0.948051948051948, 1.0, 0, 0.948051948051948, 0.8571428571428572, 0], [0.948051948051948, 0.8571428571428572, 0, 0.948051948051948, 1.0, 0, 0.974025974025974, 1.0, 0, 0.974025974025974, 0.8571428571428572, 0], [0.948051948051948, 0.4285714285714286, 0, 0.948051948051948, 0.8571428571428572, 0, 0.974025974025974, 0.8571428571428572, 0, 0.974025974025974, 0.4285714285714286, 0], [0.8961038961038961, 0.4285714285714286, 0, 0.8961038961038961, 0.8571428571428572, 0, 0.922077922077922, 0.8571428571428572, 0, 0.922077922077922, 0.4285714285714286, 0]] -shading_values = [[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]] +bones = [{'name':'body','pivot':[0.0, 1.1875, 0.125],'vertices':[[-0.3749999701976776, 0.7499999403953552, 0.625, -0.3749999701976776, 0.7499999403953552, -0.5, 0.3749999701976776, 0.7499999403953552, -0.5, 0.3749999701976776, 0.7499999403953552, 0.625], [0.3749999701976776, 1.375, 0.625, 0.3749999701976776, 1.3749998807907104, -0.5, -0.3749999701976776, 1.3749998807907104, -0.5, -0.3749999701976776, 1.375, 0.625], [-0.3749999701976776, 0.7499999403953552, -0.5, -0.3749999701976776, 1.3749998807907104, -0.5, 0.3749999701976776, 1.3749998807907104, -0.5, 0.3749999701976776, 0.7499999403953552, -0.5], [0.3749999701976776, 0.7499999403953552, 0.625, 0.3749999701976776, 1.375, 0.625, -0.3749999701976776, 1.375, 0.625, -0.3749999701976776, 0.7499999403953552, 0.625], [0.3749999701976776, 0.7499999403953552, 0.625, 0.3749999701976776, 0.7499999403953552, -0.5, 0.3749999701976776, 1.3749998807907104, -0.5, 0.3749999701976776, 1.375, 0.625], [-0.3749999701976776, 1.375, 0.625, -0.3749999701976776, 1.3749998807907104, -0.5, -0.3749999701976776, 0.7499999403953552, -0.5, -0.3749999701976776, 0.7499999403953552, 0.625], [-0.1249999925494194, 0.6874999403953552, 0.625, -0.1249999925494194, 0.6874999403953552, 0.25, 0.1249999925494194, 0.6874999403953552, 0.25, 0.1249999925494194, 0.6874999403953552, 0.625], [0.1249999925494194, 0.7499999403953552, 0.625, 0.1249999925494194, 0.7499999403953552, 0.25, -0.1249999925494194, 0.7499999403953552, 0.25, -0.1249999925494194, 0.7499999403953552, 0.625], [-0.1249999925494194, 0.6874999403953552, 0.25, -0.1249999925494194, 0.7499999403953552, 0.25, 0.1249999925494194, 0.7499999403953552, 0.25, 0.1249999925494194, 0.6874999403953552, 0.25], [0.1249999925494194, 0.6874999403953552, 0.625, 0.1249999925494194, 0.7499999403953552, 0.625, -0.1249999925494194, 0.7499999403953552, 0.625, -0.1249999925494194, 0.6874999403953552, 0.625], [0.1249999925494194, 0.6874999403953552, 0.625, 0.1249999925494194, 0.6874999403953552, 0.25, 0.1249999925494194, 0.7499999403953552, 0.25, 0.1249999925494194, 0.7499999403953552, 0.625], [-0.1249999925494194, 0.7499999403953552, 0.625, -0.1249999925494194, 0.7499999403953552, 0.25, -0.1249999925494194, 0.6874999403953552, 0.25, -0.1249999925494194, 0.6874999403953552, 0.625]],'tex_coords':[[0.06493506493506493, 0.0, 0.06493506493506493, 0.6428571428571428, 0.14285714285714285, 0.6428571428571428, 0.14285714285714285, 0.0], [0.2077922077922078, 0.0, 0.2077922077922078, 0.6428571428571428, 0.2857142857142857, 0.6428571428571428, 0.2857142857142857, 0.0], [0.06493506493506493, 0.6428571428571428, 0.06493506493506493, 1.0, 0.14285714285714285, 1.0, 0.14285714285714285, 0.6428571428571428], [0.14285714285714285, 0.6428571428571428, 0.14285714285714285, 1.0, 0.22077922077922077, 1.0, 0.22077922077922077, 0.6428571428571428], [0.14285714285714285, 0.0, 0.14285714285714285, 0.6428571428571428, 0.2077922077922078, 0.6428571428571428, 0.2077922077922078, 0.0], [0.0, 0.0, 0.0, 0.6428571428571428, 0.06493506493506493, 0.6428571428571428, 0.06493506493506493, 0.0], [0.2922077922077922, 0.75, 0.2922077922077922, 0.9642857142857143, 0.3181818181818182, 0.9642857142857143, 0.3181818181818182, 0.75], [0.3246753246753247, 0.75, 0.3246753246753247, 0.9642857142857143, 0.35064935064935066, 0.9642857142857143, 0.35064935064935066, 0.75], [0.2922077922077922, 0.9642857142857143, 0.2922077922077922, 1.0, 0.3181818181818182, 1.0, 0.3181818181818182, 0.9642857142857143], [0.3181818181818182, 0.9642857142857143, 0.3181818181818182, 1.0, 0.34415584415584416, 1.0, 0.34415584415584416, 0.9642857142857143], [0.3181818181818182, 0.75, 0.3181818181818182, 0.9642857142857143, 0.3246753246753247, 0.9642857142857143, 0.3246753246753247, 0.75], [0.2857142857142857, 0.75, 0.2857142857142857, 0.9642857142857143, 0.2922077922077922, 0.9642857142857143, 0.2922077922077922, 0.75]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'head','pivot':[0.0, 1.25, -0.5],'vertices':[[-0.25, 1.0, -0.875, -0.25, 1.5, -0.875, 0.25, 1.5, -0.875, 0.25, 1.0, -0.875], [0.25, 1.0, -0.5, 0.25, 1.5, -0.5, -0.25, 1.5, -0.5, -0.25, 1.0, -0.5], [-0.25, 1.5, -0.875, -0.25, 1.5, -0.5, 0.25, 1.5, -0.5, 0.25, 1.5, -0.875], [0.25, 1.0, -0.875, 0.25, 1.0, -0.5, -0.25, 1.0, -0.5, -0.25, 1.0, -0.875], [0.25, 1.0, -0.875, 0.25, 1.5, -0.875, 0.25, 1.5, -0.5, 0.25, 1.0, -0.5], [-0.25, 1.0, -0.5, -0.25, 1.5, -0.5, -0.25, 1.5, -0.875, -0.25, 1.0, -0.875], [-0.3125, 1.375, -0.75, -0.3125, 1.5625, -0.75, -0.25, 1.5625, -0.75, -0.25, 1.375, -0.75], [-0.25, 1.375, -0.6875, -0.25, 1.5625, -0.6875, -0.3125, 1.5625, -0.6875, -0.3125, 1.375, -0.6875], [-0.3125, 1.5625, -0.75, -0.3125, 1.5625, -0.6875, -0.25, 1.5625, -0.6875, -0.25, 1.5625, -0.75], [-0.25, 1.375, -0.75, -0.25, 1.375, -0.6875, -0.3125, 1.375, -0.6875, -0.3125, 1.375, -0.75], [-0.25, 1.375, -0.75, -0.25, 1.5625, -0.75, -0.25, 1.5625, -0.6875, -0.25, 1.375, -0.6875], [-0.3125, 1.375, -0.6875, -0.3125, 1.5625, -0.6875, -0.3125, 1.5625, -0.75, -0.3125, 1.375, -0.75], [0.25, 1.375, -0.75, 0.25, 1.5625, -0.75, 0.3125, 1.5625, -0.75, 0.3125, 1.375, -0.75], [0.3125, 1.375, -0.6875, 0.3125, 1.5625, -0.6875, 0.25, 1.5625, -0.6875, 0.25, 1.375, -0.6875], [0.25, 1.5625, -0.75, 0.25, 1.5625, -0.6875, 0.3125, 1.5625, -0.6875, 0.3125, 1.5625, -0.75], [0.3125, 1.375, -0.75, 0.3125, 1.375, -0.6875, 0.25, 1.375, -0.6875, 0.25, 1.375, -0.75], [0.3125, 1.375, -0.75, 0.3125, 1.5625, -0.75, 0.3125, 1.5625, -0.6875, 0.3125, 1.375, -0.6875], [0.25, 1.375, -0.6875, 0.25, 1.5625, -0.6875, 0.25, 1.5625, -0.75, 0.25, 1.375, -0.75]],'tex_coords':[[0.38961038961038963, 0.5, 0.38961038961038963, 0.7857142857142857, 0.44155844155844154, 0.7857142857142857, 0.44155844155844154, 0.5], [0.4805194805194805, 0.5, 0.4805194805194805, 0.7857142857142857, 0.5324675324675324, 0.7857142857142857, 0.5324675324675324, 0.5], [0.38961038961038963, 0.7857142857142857, 0.38961038961038963, 1.0, 0.44155844155844154, 1.0, 0.44155844155844154, 0.7857142857142857], [0.44155844155844154, 0.7857142857142857, 0.44155844155844154, 1.0, 0.4935064935064935, 1.0, 0.4935064935064935, 0.7857142857142857], [0.44155844155844154, 0.5, 0.44155844155844154, 0.7857142857142857, 0.4805194805194805, 0.7857142857142857, 0.4805194805194805, 0.5], [0.35064935064935066, 0.5, 0.35064935064935066, 0.7857142857142857, 0.38961038961038963, 0.7857142857142857, 0.38961038961038963, 0.5], [0.538961038961039, 0.8571428571428572, 0.538961038961039, 0.9642857142857143, 0.5454545454545454, 0.9642857142857143, 0.5454545454545454, 0.8571428571428572], [0.551948051948052, 0.8571428571428572, 0.551948051948052, 0.9642857142857143, 0.5584415584415584, 0.9642857142857143, 0.5584415584415584, 0.8571428571428572], [0.538961038961039, 0.9642857142857143, 0.538961038961039, 1.0, 0.5454545454545454, 1.0, 0.5454545454545454, 0.9642857142857143], [0.5454545454545454, 0.9642857142857143, 0.5454545454545454, 1.0, 0.551948051948052, 1.0, 0.551948051948052, 0.9642857142857143], [0.5454545454545454, 0.8571428571428572, 0.5454545454545454, 0.9642857142857143, 0.551948051948052, 0.9642857142857143, 0.551948051948052, 0.8571428571428572], [0.5324675324675324, 0.8571428571428572, 0.5324675324675324, 0.9642857142857143, 0.538961038961039, 0.9642857142857143, 0.538961038961039, 0.8571428571428572], [0.564935064935065, 0.8571428571428572, 0.564935064935065, 0.9642857142857143, 0.5714285714285714, 0.9642857142857143, 0.5714285714285714, 0.8571428571428572], [0.577922077922078, 0.8571428571428572, 0.577922077922078, 0.9642857142857143, 0.5844155844155844, 0.9642857142857143, 0.5844155844155844, 0.8571428571428572], [0.564935064935065, 0.9642857142857143, 0.564935064935065, 1.0, 0.5714285714285714, 1.0, 0.5714285714285714, 0.9642857142857143], [0.5714285714285714, 0.9642857142857143, 0.5714285714285714, 1.0, 0.577922077922078, 1.0, 0.577922077922078, 0.9642857142857143], [0.5714285714285714, 0.8571428571428572, 0.5714285714285714, 0.9642857142857143, 0.577922077922078, 0.9642857142857143, 0.577922077922078, 0.8571428571428572], [0.5584415584415584, 0.8571428571428572, 0.5584415584415584, 0.9642857142857143, 0.564935064935065, 0.9642857142857143, 0.564935064935065, 0.8571428571428572]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'leg0','pivot':[-0.25, 0.75, 0.4375],'vertices':[[-0.3125, 0.0, 0.3125, -0.3125, 0.75, 0.3125, -0.0625, 0.75, 0.3125, -0.0625, 0.0, 0.3125], [-0.0625, 0.0, 0.5625, -0.0625, 0.75, 0.5625, -0.3125, 0.75, 0.5625, -0.3125, 0.0, 0.5625], [-0.3125, 0.75, 0.3125, -0.3125, 0.75, 0.5625, -0.0625, 0.75, 0.5625, -0.0625, 0.75, 0.3125], [-0.0625, 0.0, 0.3125, -0.0625, 0.0, 0.5625, -0.3125, 0.0, 0.5625, -0.3125, 0.0, 0.3125], [-0.0625, 0.0, 0.3125, -0.0625, 0.75, 0.3125, -0.0625, 0.75, 0.5625, -0.0625, 0.0, 0.5625], [-0.3125, 0.0, 0.5625, -0.3125, 0.75, 0.5625, -0.3125, 0.75, 0.3125, -0.3125, 0.0, 0.3125]],'tex_coords':[[0.6103896103896104, 0.4285714285714286, 0.6103896103896104, 0.8571428571428572, 0.6363636363636364, 0.8571428571428572, 0.6363636363636364, 0.4285714285714286], [0.6623376623376623, 0.4285714285714286, 0.6623376623376623, 0.8571428571428572, 0.6883116883116883, 0.8571428571428572, 0.6883116883116883, 0.4285714285714286], [0.6103896103896104, 0.8571428571428572, 0.6103896103896104, 1.0, 0.6363636363636364, 1.0, 0.6363636363636364, 0.8571428571428572], [0.6363636363636364, 0.8571428571428572, 0.6363636363636364, 1.0, 0.6623376623376623, 1.0, 0.6623376623376623, 0.8571428571428572], [0.6363636363636364, 0.4285714285714286, 0.6363636363636364, 0.8571428571428572, 0.6623376623376623, 0.8571428571428572, 0.6623376623376623, 0.4285714285714286], [0.5844155844155844, 0.4285714285714286, 0.5844155844155844, 0.8571428571428572, 0.6103896103896104, 0.8571428571428572, 0.6103896103896104, 0.4285714285714286]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'leg1','pivot':[0.25, 0.75, 0.4375],'vertices':[[0.0625, 0.0, 0.3125, 0.0625, 0.75, 0.3125, 0.3125, 0.75, 0.3125, 0.3125, 0.0, 0.3125], [0.3125, 0.0, 0.5625, 0.3125, 0.75, 0.5625, 0.0625, 0.75, 0.5625, 0.0625, 0.0, 0.5625], [0.0625, 0.75, 0.3125, 0.0625, 0.75, 0.5625, 0.3125, 0.75, 0.5625, 0.3125, 0.75, 0.3125], [0.3125, 0.0, 0.3125, 0.3125, 0.0, 0.5625, 0.0625, 0.0, 0.5625, 0.0625, 0.0, 0.3125], [0.3125, 0.0, 0.3125, 0.3125, 0.75, 0.3125, 0.3125, 0.75, 0.5625, 0.3125, 0.0, 0.5625], [0.0625, 0.0, 0.5625, 0.0625, 0.75, 0.5625, 0.0625, 0.75, 0.3125, 0.0625, 0.0, 0.3125]],'tex_coords':[[0.7142857142857143, 0.4285714285714286, 0.7142857142857143, 0.8571428571428572, 0.7402597402597403, 0.8571428571428572, 0.7402597402597403, 0.4285714285714286], [0.7662337662337663, 0.4285714285714286, 0.7662337662337663, 0.8571428571428572, 0.7922077922077922, 0.8571428571428572, 0.7922077922077922, 0.4285714285714286], [0.7142857142857143, 0.8571428571428572, 0.7142857142857143, 1.0, 0.7402597402597403, 1.0, 0.7402597402597403, 0.8571428571428572], [0.7402597402597403, 0.8571428571428572, 0.7402597402597403, 1.0, 0.7662337662337663, 1.0, 0.7662337662337663, 0.8571428571428572], [0.7402597402597403, 0.4285714285714286, 0.7402597402597403, 0.8571428571428572, 0.7662337662337663, 0.8571428571428572, 0.7662337662337663, 0.4285714285714286], [0.6883116883116883, 0.4285714285714286, 0.6883116883116883, 0.8571428571428572, 0.7142857142857143, 0.8571428571428572, 0.7142857142857143, 0.4285714285714286]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'leg2','pivot':[-0.25, 0.75, -0.375],'vertices':[[-0.3125, 0.0, -0.4375, -0.3125, 0.75, -0.4375, -0.0625, 0.75, -0.4375, -0.0625, 0.0, -0.4375], [-0.0625, 0.0, -0.1875, -0.0625, 0.75, -0.1875, -0.3125, 0.75, -0.1875, -0.3125, 0.0, -0.1875], [-0.3125, 0.75, -0.4375, -0.3125, 0.75, -0.1875, -0.0625, 0.75, -0.1875, -0.0625, 0.75, -0.4375], [-0.0625, 0.0, -0.4375, -0.0625, 0.0, -0.1875, -0.3125, 0.0, -0.1875, -0.3125, 0.0, -0.4375], [-0.0625, 0.0, -0.4375, -0.0625, 0.75, -0.4375, -0.0625, 0.75, -0.1875, -0.0625, 0.0, -0.1875], [-0.3125, 0.0, -0.1875, -0.3125, 0.75, -0.1875, -0.3125, 0.75, -0.4375, -0.3125, 0.0, -0.4375]],'tex_coords':[[0.8181818181818182, 0.4285714285714286, 0.8181818181818182, 0.8571428571428572, 0.8441558441558441, 0.8571428571428572, 0.8441558441558441, 0.4285714285714286], [0.8701298701298701, 0.4285714285714286, 0.8701298701298701, 0.8571428571428572, 0.8961038961038961, 0.8571428571428572, 0.8961038961038961, 0.4285714285714286], [0.8181818181818182, 0.8571428571428572, 0.8181818181818182, 1.0, 0.8441558441558441, 1.0, 0.8441558441558441, 0.8571428571428572], [0.8441558441558441, 0.8571428571428572, 0.8441558441558441, 1.0, 0.8701298701298701, 1.0, 0.8701298701298701, 0.8571428571428572], [0.8441558441558441, 0.4285714285714286, 0.8441558441558441, 0.8571428571428572, 0.8701298701298701, 0.8571428571428572, 0.8701298701298701, 0.4285714285714286], [0.7922077922077922, 0.4285714285714286, 0.7922077922077922, 0.8571428571428572, 0.8181818181818182, 0.8571428571428572, 0.8181818181818182, 0.4285714285714286]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'leg3','pivot':[0.25, 0.75, -0.375],'vertices':[[0.0625, 0.0, -0.4375, 0.0625, 0.75, -0.4375, 0.3125, 0.75, -0.4375, 0.3125, 0.0, -0.4375], [0.3125, 0.0, -0.1875, 0.3125, 0.75, -0.1875, 0.0625, 0.75, -0.1875, 0.0625, 0.0, -0.1875], [0.0625, 0.75, -0.4375, 0.0625, 0.75, -0.1875, 0.3125, 0.75, -0.1875, 0.3125, 0.75, -0.4375], [0.3125, 0.0, -0.4375, 0.3125, 0.0, -0.1875, 0.0625, 0.0, -0.1875, 0.0625, 0.0, -0.4375], [0.3125, 0.0, -0.4375, 0.3125, 0.75, -0.4375, 0.3125, 0.75, -0.1875, 0.3125, 0.0, -0.1875], [0.0625, 0.0, -0.1875, 0.0625, 0.75, -0.1875, 0.0625, 0.75, -0.4375, 0.0625, 0.0, -0.4375]],'tex_coords':[[0.922077922077922, 0.4285714285714286, 0.922077922077922, 0.8571428571428572, 0.948051948051948, 0.8571428571428572, 0.948051948051948, 0.4285714285714286], [0.974025974025974, 0.4285714285714286, 0.974025974025974, 0.8571428571428572, 1.0, 0.8571428571428572, 1.0, 0.4285714285714286], [0.922077922077922, 0.8571428571428572, 0.922077922077922, 1.0, 0.948051948051948, 1.0, 0.948051948051948, 0.8571428571428572], [0.948051948051948, 0.8571428571428572, 0.948051948051948, 1.0, 0.974025974025974, 1.0, 0.974025974025974, 0.8571428571428572], [0.948051948051948, 0.4285714285714286, 0.948051948051948, 0.8571428571428572, 0.974025974025974, 0.8571428571428572, 0.974025974025974, 0.4285714285714286], [0.8961038961038961, 0.4285714285714286, 0.8961038961038961, 0.8571428571428572, 0.922077922077922, 0.8571428571428572, 0.922077922077922, 0.4285714285714286]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}] diff --git a/episode-13/models/creeper.py b/episode-13/models/creeper.py index ac48d1fd..f6860aa7 100644 --- a/episode-13/models/creeper.py +++ b/episode-13/models/creeper.py @@ -5,6 +5,4 @@ colliders = [] -vertex_positions = [[-0.25, 0.375, -0.125, -0.25, 1.125, -0.125, 0.25, 1.125, -0.125, 0.25, 0.375, -0.125], [0.25, 0.375, 0.125, 0.25, 1.125, 0.125, -0.25, 1.125, 0.125, -0.25, 0.375, 0.125], [-0.25, 1.125, -0.125, -0.25, 1.125, 0.125, 0.25, 1.125, 0.125, 0.25, 1.125, -0.125], [0.25, 0.375, -0.125, 0.25, 0.375, 0.125, -0.25, 0.375, 0.125, -0.25, 0.375, -0.125], [0.25, 0.375, -0.125, 0.25, 1.125, -0.125, 0.25, 1.125, 0.125, 0.25, 0.375, 0.125], [-0.25, 0.375, 0.125, -0.25, 1.125, 0.125, -0.25, 1.125, -0.125, -0.25, 0.375, -0.125], [-0.25, 1.125, -0.25, -0.25, 1.625, -0.25, 0.25, 1.625, -0.25, 0.25, 1.125, -0.25], [0.25, 1.125, 0.25, 0.25, 1.625, 0.25, -0.25, 1.625, 0.25, -0.25, 1.125, 0.25], [-0.25, 1.625, -0.25, -0.25, 1.625, 0.25, 0.25, 1.625, 0.25, 0.25, 1.625, -0.25], [0.25, 1.125, -0.25, 0.25, 1.125, 0.25, -0.25, 1.125, 0.25, -0.25, 1.125, -0.25], [0.25, 1.125, -0.25, 0.25, 1.625, -0.25, 0.25, 1.625, 0.25, 0.25, 1.125, 0.25], [-0.25, 1.125, 0.25, -0.25, 1.625, 0.25, -0.25, 1.625, -0.25, -0.25, 1.125, -0.25], [-0.25, 0.0, 0.125, -0.25, 0.375, 0.125, 0.0, 0.375, 0.125, 0.0, 0.0, 0.125], [0.0, 0.0, 0.375, 0.0, 0.375, 0.375, -0.25, 0.375, 0.375, -0.25, 0.0, 0.375], [-0.25, 0.375, 0.125, -0.25, 0.375, 0.375, 0.0, 0.375, 0.375, 0.0, 0.375, 0.125], [0.0, 0.0, 0.125, 0.0, 0.0, 0.375, -0.25, 0.0, 0.375, -0.25, 0.0, 0.125], [0.0, 0.0, 0.125, 0.0, 0.375, 0.125, 0.0, 0.375, 0.375, 0.0, 0.0, 0.375], [-0.25, 0.0, 0.375, -0.25, 0.375, 0.375, -0.25, 0.375, 0.125, -0.25, 0.0, 0.125], [0.0, 0.0, 0.125, 0.0, 0.375, 0.125, 0.25, 0.375, 0.125, 0.25, 0.0, 0.125], [0.25, 0.0, 0.375, 0.25, 0.375, 0.375, 0.0, 0.375, 0.375, 0.0, 0.0, 0.375], [0.0, 0.375, 0.125, 0.0, 0.375, 0.375, 0.25, 0.375, 0.375, 0.25, 0.375, 0.125], [0.25, 0.0, 0.125, 0.25, 0.0, 0.375, 0.0, 0.0, 0.375, 0.0, 0.0, 0.125], [0.25, 0.0, 0.125, 0.25, 0.375, 0.125, 0.25, 0.375, 0.375, 0.25, 0.0, 0.375], [0.0, 0.0, 0.375, 0.0, 0.375, 0.375, 0.0, 0.375, 0.125, 0.0, 0.0, 0.125], [-0.25, 0.0, -0.375, -0.25, 0.375, -0.375, 0.0, 0.375, -0.375, 0.0, 0.0, -0.375], [0.0, 0.0, -0.125, 0.0, 0.375, -0.125, -0.25, 0.375, -0.125, -0.25, 0.0, -0.125], [-0.25, 0.375, -0.375, -0.25, 0.375, -0.125, 0.0, 0.375, -0.125, 0.0, 0.375, -0.375], [0.0, 0.0, -0.375, 0.0, 0.0, -0.125, -0.25, 0.0, -0.125, -0.25, 0.0, -0.375], [0.0, 0.0, -0.375, 0.0, 0.375, -0.375, 0.0, 0.375, -0.125, 0.0, 0.0, -0.125], [-0.25, 0.0, -0.125, -0.25, 0.375, -0.125, -0.25, 0.375, -0.375, -0.25, 0.0, -0.375], [0.0, 0.0, -0.375, 0.0, 0.375, -0.375, 0.25, 0.375, -0.375, 0.25, 0.0, -0.375], [0.25, 0.0, -0.125, 0.25, 0.375, -0.125, 0.0, 0.375, -0.125, 0.0, 0.0, -0.125], [0.0, 0.375, -0.375, 0.0, 0.375, -0.125, 0.25, 0.375, -0.125, 0.25, 0.375, -0.375], [0.25, 0.0, -0.375, 0.25, 0.0, -0.125, 0.0, 0.0, -0.125, 0.0, 0.0, -0.375], [0.25, 0.0, -0.375, 0.25, 0.375, -0.375, 0.25, 0.375, -0.125, 0.25, 0.0, -0.125], [0.0, 0.0, -0.125, 0.0, 0.375, -0.125, 0.0, 0.375, -0.375, 0.0, 0.0, -0.375]] -tex_coords = [[0.03333333333333333, 0.0, 0, 0.03333333333333333, 0.75, 0, 0.1, 0.75, 0, 0.1, 0.0, 0], [0.13333333333333333, 0.0, 0, 0.13333333333333333, 0.75, 0, 0.2, 0.75, 0, 0.2, 0.0, 0], [0.03333333333333333, 0.75, 0, 0.03333333333333333, 1.0, 0, 0.1, 1.0, 0, 0.1, 0.75, 0], [0.1, 0.75, 0, 0.1, 1.0, 0, 0.16666666666666666, 1.0, 0, 0.16666666666666666, 0.75, 0], [0.1, 0.0, 0, 0.1, 0.75, 0, 0.13333333333333333, 0.75, 0, 0.13333333333333333, 0.0, 0], [0.0, 0.0, 0, 0.0, 0.75, 0, 0.03333333333333333, 0.75, 0, 0.03333333333333333, 0.0, 0], [0.26666666666666666, 0.0, 0, 0.26666666666666666, 0.5, 0, 0.3333333333333333, 0.5, 0, 0.3333333333333333, 0.0, 0], [0.4, 0.0, 0, 0.4, 0.5, 0, 0.4666666666666667, 0.5, 0, 0.4666666666666667, 0.0, 0], [0.26666666666666666, 0.5, 0, 0.26666666666666666, 1.0, 0, 0.3333333333333333, 1.0, 0, 0.3333333333333333, 0.5, 0], [0.3333333333333333, 0.5, 0, 0.3333333333333333, 1.0, 0, 0.4, 1.0, 0, 0.4, 0.5, 0], [0.3333333333333333, 0.0, 0, 0.3333333333333333, 0.5, 0, 0.4, 0.5, 0, 0.4, 0.0, 0], [0.2, 0.0, 0, 0.2, 0.5, 0, 0.26666666666666666, 0.5, 0, 0.26666666666666666, 0.0, 0], [0.5, 0.375, 0, 0.5, 0.75, 0, 0.5333333333333333, 0.75, 0, 0.5333333333333333, 0.375, 0], [0.5666666666666667, 0.375, 0, 0.5666666666666667, 0.75, 0, 0.6, 0.75, 0, 0.6, 0.375, 0], [0.5, 0.75, 0, 0.5, 1.0, 0, 0.5333333333333333, 1.0, 0, 0.5333333333333333, 0.75, 0], [0.5333333333333333, 0.75, 0, 0.5333333333333333, 1.0, 0, 0.5666666666666667, 1.0, 0, 0.5666666666666667, 0.75, 0], [0.5333333333333333, 0.375, 0, 0.5333333333333333, 0.75, 0, 0.5666666666666667, 0.75, 0, 0.5666666666666667, 0.375, 0], [0.4666666666666667, 0.375, 0, 0.4666666666666667, 0.75, 0, 0.5, 0.75, 0, 0.5, 0.375, 0], [0.6333333333333333, 0.375, 0, 0.6333333333333333, 0.75, 0, 0.6666666666666666, 0.75, 0, 0.6666666666666666, 0.375, 0], [0.7, 0.375, 0, 0.7, 0.75, 0, 0.7333333333333333, 0.75, 0, 0.7333333333333333, 0.375, 0], [0.6333333333333333, 0.75, 0, 0.6333333333333333, 1.0, 0, 0.6666666666666666, 1.0, 0, 0.6666666666666666, 0.75, 0], [0.6666666666666666, 0.75, 0, 0.6666666666666666, 1.0, 0, 0.7, 1.0, 0, 0.7, 0.75, 0], [0.6666666666666666, 0.375, 0, 0.6666666666666666, 0.75, 0, 0.7, 0.75, 0, 0.7, 0.375, 0], [0.6, 0.375, 0, 0.6, 0.75, 0, 0.6333333333333333, 0.75, 0, 0.6333333333333333, 0.375, 0], [0.7666666666666667, 0.375, 0, 0.7666666666666667, 0.75, 0, 0.8, 0.75, 0, 0.8, 0.375, 0], [0.8333333333333334, 0.375, 0, 0.8333333333333334, 0.75, 0, 0.8666666666666667, 0.75, 0, 0.8666666666666667, 0.375, 0], [0.7666666666666667, 0.75, 0, 0.7666666666666667, 1.0, 0, 0.8, 1.0, 0, 0.8, 0.75, 0], [0.8, 0.75, 0, 0.8, 1.0, 0, 0.8333333333333334, 1.0, 0, 0.8333333333333334, 0.75, 0], [0.8, 0.375, 0, 0.8, 0.75, 0, 0.8333333333333334, 0.75, 0, 0.8333333333333334, 0.375, 0], [0.7333333333333333, 0.375, 0, 0.7333333333333333, 0.75, 0, 0.7666666666666667, 0.75, 0, 0.7666666666666667, 0.375, 0], [0.9, 0.375, 0, 0.9, 0.75, 0, 0.9333333333333333, 0.75, 0, 0.9333333333333333, 0.375, 0], [0.9666666666666667, 0.375, 0, 0.9666666666666667, 0.75, 0, 1.0, 0.75, 0, 1.0, 0.375, 0], [0.9, 0.75, 0, 0.9, 1.0, 0, 0.9333333333333333, 1.0, 0, 0.9333333333333333, 0.75, 0], [0.9333333333333333, 0.75, 0, 0.9333333333333333, 1.0, 0, 0.9666666666666667, 1.0, 0, 0.9666666666666667, 0.75, 0], [0.9333333333333333, 0.375, 0, 0.9333333333333333, 0.75, 0, 0.9666666666666667, 0.75, 0, 0.9666666666666667, 0.375, 0], [0.8666666666666667, 0.375, 0, 0.8666666666666667, 0.75, 0, 0.9, 0.75, 0, 0.9, 0.375, 0]] -shading_values = [[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]] +bones = [{'name':'body','pivot':[0.0, 0.0, 0.0],'vertices':[[-0.25, 0.375, -0.125, -0.25, 1.125, -0.125, 0.25, 1.125, -0.125, 0.25, 0.375, -0.125], [0.25, 0.375, 0.125, 0.25, 1.125, 0.125, -0.25, 1.125, 0.125, -0.25, 0.375, 0.125], [-0.25, 1.125, -0.125, -0.25, 1.125, 0.125, 0.25, 1.125, 0.125, 0.25, 1.125, -0.125], [0.25, 0.375, -0.125, 0.25, 0.375, 0.125, -0.25, 0.375, 0.125, -0.25, 0.375, -0.125], [0.25, 0.375, -0.125, 0.25, 1.125, -0.125, 0.25, 1.125, 0.125, 0.25, 0.375, 0.125], [-0.25, 0.375, 0.125, -0.25, 1.125, 0.125, -0.25, 1.125, -0.125, -0.25, 0.375, -0.125]],'tex_coords':[[0.03333333333333333, 0.0, 0.03333333333333333, 0.75, 0.1, 0.75, 0.1, 0.0], [0.13333333333333333, 0.0, 0.13333333333333333, 0.75, 0.2, 0.75, 0.2, 0.0], [0.03333333333333333, 0.75, 0.03333333333333333, 1.0, 0.1, 1.0, 0.1, 0.75], [0.1, 0.75, 0.1, 1.0, 0.16666666666666666, 1.0, 0.16666666666666666, 0.75], [0.1, 0.0, 0.1, 0.75, 0.13333333333333333, 0.75, 0.13333333333333333, 0.0], [0.0, 0.0, 0.0, 0.75, 0.03333333333333333, 0.75, 0.03333333333333333, 0.0]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'head','pivot':[0.0, 1.125, 0.0],'vertices':[[-0.25, 1.125, -0.25, -0.25, 1.625, -0.25, 0.25, 1.625, -0.25, 0.25, 1.125, -0.25], [0.25, 1.125, 0.25, 0.25, 1.625, 0.25, -0.25, 1.625, 0.25, -0.25, 1.125, 0.25], [-0.25, 1.625, -0.25, -0.25, 1.625, 0.25, 0.25, 1.625, 0.25, 0.25, 1.625, -0.25], [0.25, 1.125, -0.25, 0.25, 1.125, 0.25, -0.25, 1.125, 0.25, -0.25, 1.125, -0.25], [0.25, 1.125, -0.25, 0.25, 1.625, -0.25, 0.25, 1.625, 0.25, 0.25, 1.125, 0.25], [-0.25, 1.125, 0.25, -0.25, 1.625, 0.25, -0.25, 1.625, -0.25, -0.25, 1.125, -0.25]],'tex_coords':[[0.26666666666666666, 0.0, 0.26666666666666666, 0.5, 0.3333333333333333, 0.5, 0.3333333333333333, 0.0], [0.4, 0.0, 0.4, 0.5, 0.4666666666666667, 0.5, 0.4666666666666667, 0.0], [0.26666666666666666, 0.5, 0.26666666666666666, 1.0, 0.3333333333333333, 1.0, 0.3333333333333333, 0.5], [0.3333333333333333, 0.5, 0.3333333333333333, 1.0, 0.4, 1.0, 0.4, 0.5], [0.3333333333333333, 0.0, 0.3333333333333333, 0.5, 0.4, 0.5, 0.4, 0.0], [0.2, 0.0, 0.2, 0.5, 0.26666666666666666, 0.5, 0.26666666666666666, 0.0]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'leg0','pivot':[-0.125, 0.375, 0.25],'vertices':[[-0.25, 0.0, 0.125, -0.25, 0.375, 0.125, 0.0, 0.375, 0.125, 0.0, 0.0, 0.125], [0.0, 0.0, 0.375, 0.0, 0.375, 0.375, -0.25, 0.375, 0.375, -0.25, 0.0, 0.375], [-0.25, 0.375, 0.125, -0.25, 0.375, 0.375, 0.0, 0.375, 0.375, 0.0, 0.375, 0.125], [0.0, 0.0, 0.125, 0.0, 0.0, 0.375, -0.25, 0.0, 0.375, -0.25, 0.0, 0.125], [0.0, 0.0, 0.125, 0.0, 0.375, 0.125, 0.0, 0.375, 0.375, 0.0, 0.0, 0.375], [-0.25, 0.0, 0.375, -0.25, 0.375, 0.375, -0.25, 0.375, 0.125, -0.25, 0.0, 0.125]],'tex_coords':[[0.5, 0.375, 0.5, 0.75, 0.5333333333333333, 0.75, 0.5333333333333333, 0.375], [0.5666666666666667, 0.375, 0.5666666666666667, 0.75, 0.6, 0.75, 0.6, 0.375], [0.5, 0.75, 0.5, 1.0, 0.5333333333333333, 1.0, 0.5333333333333333, 0.75], [0.5333333333333333, 0.75, 0.5333333333333333, 1.0, 0.5666666666666667, 1.0, 0.5666666666666667, 0.75], [0.5333333333333333, 0.375, 0.5333333333333333, 0.75, 0.5666666666666667, 0.75, 0.5666666666666667, 0.375], [0.4666666666666667, 0.375, 0.4666666666666667, 0.75, 0.5, 0.75, 0.5, 0.375]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'leg1','pivot':[0.125, 0.375, 0.25],'vertices':[[0.0, 0.0, 0.125, 0.0, 0.375, 0.125, 0.25, 0.375, 0.125, 0.25, 0.0, 0.125], [0.25, 0.0, 0.375, 0.25, 0.375, 0.375, 0.0, 0.375, 0.375, 0.0, 0.0, 0.375], [0.0, 0.375, 0.125, 0.0, 0.375, 0.375, 0.25, 0.375, 0.375, 0.25, 0.375, 0.125], [0.25, 0.0, 0.125, 0.25, 0.0, 0.375, 0.0, 0.0, 0.375, 0.0, 0.0, 0.125], [0.25, 0.0, 0.125, 0.25, 0.375, 0.125, 0.25, 0.375, 0.375, 0.25, 0.0, 0.375], [0.0, 0.0, 0.375, 0.0, 0.375, 0.375, 0.0, 0.375, 0.125, 0.0, 0.0, 0.125]],'tex_coords':[[0.6333333333333333, 0.375, 0.6333333333333333, 0.75, 0.6666666666666666, 0.75, 0.6666666666666666, 0.375], [0.7, 0.375, 0.7, 0.75, 0.7333333333333333, 0.75, 0.7333333333333333, 0.375], [0.6333333333333333, 0.75, 0.6333333333333333, 1.0, 0.6666666666666666, 1.0, 0.6666666666666666, 0.75], [0.6666666666666666, 0.75, 0.6666666666666666, 1.0, 0.7, 1.0, 0.7, 0.75], [0.6666666666666666, 0.375, 0.6666666666666666, 0.75, 0.7, 0.75, 0.7, 0.375], [0.6, 0.375, 0.6, 0.75, 0.6333333333333333, 0.75, 0.6333333333333333, 0.375]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'leg2','pivot':[-0.125, 0.375, -0.25],'vertices':[[-0.25, 0.0, -0.375, -0.25, 0.375, -0.375, 0.0, 0.375, -0.375, 0.0, 0.0, -0.375], [0.0, 0.0, -0.125, 0.0, 0.375, -0.125, -0.25, 0.375, -0.125, -0.25, 0.0, -0.125], [-0.25, 0.375, -0.375, -0.25, 0.375, -0.125, 0.0, 0.375, -0.125, 0.0, 0.375, -0.375], [0.0, 0.0, -0.375, 0.0, 0.0, -0.125, -0.25, 0.0, -0.125, -0.25, 0.0, -0.375], [0.0, 0.0, -0.375, 0.0, 0.375, -0.375, 0.0, 0.375, -0.125, 0.0, 0.0, -0.125], [-0.25, 0.0, -0.125, -0.25, 0.375, -0.125, -0.25, 0.375, -0.375, -0.25, 0.0, -0.375]],'tex_coords':[[0.7666666666666667, 0.375, 0.7666666666666667, 0.75, 0.8, 0.75, 0.8, 0.375], [0.8333333333333334, 0.375, 0.8333333333333334, 0.75, 0.8666666666666667, 0.75, 0.8666666666666667, 0.375], [0.7666666666666667, 0.75, 0.7666666666666667, 1.0, 0.8, 1.0, 0.8, 0.75], [0.8, 0.75, 0.8, 1.0, 0.8333333333333334, 1.0, 0.8333333333333334, 0.75], [0.8, 0.375, 0.8, 0.75, 0.8333333333333334, 0.75, 0.8333333333333334, 0.375], [0.7333333333333333, 0.375, 0.7333333333333333, 0.75, 0.7666666666666667, 0.75, 0.7666666666666667, 0.375]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'leg3','pivot':[0.125, 0.375, -0.25],'vertices':[[0.0, 0.0, -0.375, 0.0, 0.375, -0.375, 0.25, 0.375, -0.375, 0.25, 0.0, -0.375], [0.25, 0.0, -0.125, 0.25, 0.375, -0.125, 0.0, 0.375, -0.125, 0.0, 0.0, -0.125], [0.0, 0.375, -0.375, 0.0, 0.375, -0.125, 0.25, 0.375, -0.125, 0.25, 0.375, -0.375], [0.25, 0.0, -0.375, 0.25, 0.0, -0.125, 0.0, 0.0, -0.125, 0.0, 0.0, -0.375], [0.25, 0.0, -0.375, 0.25, 0.375, -0.375, 0.25, 0.375, -0.125, 0.25, 0.0, -0.125], [0.0, 0.0, -0.125, 0.0, 0.375, -0.125, 0.0, 0.375, -0.375, 0.0, 0.0, -0.375]],'tex_coords':[[0.9, 0.375, 0.9, 0.75, 0.9333333333333333, 0.75, 0.9333333333333333, 0.375], [0.9666666666666667, 0.375, 0.9666666666666667, 0.75, 1.0, 0.75, 1.0, 0.375], [0.9, 0.75, 0.9, 1.0, 0.9333333333333333, 1.0, 0.9333333333333333, 0.75], [0.9333333333333333, 0.75, 0.9333333333333333, 1.0, 0.9666666666666667, 1.0, 0.9666666666666667, 0.75], [0.9333333333333333, 0.375, 0.9333333333333333, 0.75, 0.9666666666666667, 0.75, 0.9666666666666667, 0.375], [0.8666666666666667, 0.375, 0.8666666666666667, 0.75, 0.9, 0.75, 0.9, 0.375]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}] diff --git a/episode-13/models/curry.py b/episode-13/models/curry.py index 9593b028..dabce985 100644 --- a/episode-13/models/curry.py +++ b/episode-13/models/curry.py @@ -5,6 +5,4 @@ colliders = [] -vertex_positions = [[-0.25, 0.75, -0.125, -0.25, 1.5, -0.125, 0.25, 1.5, -0.125, 0.25, 0.75, -0.125], [0.25, 0.75, 0.125, 0.25, 1.5, 0.125, -0.25, 1.5, 0.125, -0.25, 0.75, 0.125], [-0.25, 1.5, -0.125, -0.25, 1.5, 0.125, 0.25, 1.5, 0.125, 0.25, 1.5, -0.125], [0.25, 0.75, -0.125, 0.25, 0.75, 0.125, -0.25, 0.75, 0.125, -0.25, 0.75, -0.125], [0.25, 0.75, -0.125, 0.25, 1.5, -0.125, 0.25, 1.5, 0.125, 0.25, 0.75, 0.125], [-0.25, 0.75, 0.125, -0.25, 1.5, 0.125, -0.25, 1.5, -0.125, -0.25, 0.75, -0.125], [-0.2536456286907196, 1.497308611869812, -0.23161627352237701, -0.2536456286907196, 1.997308611869812, -0.23161627352237701, 0.2463543713092804, 1.997308611869812, -0.23161627352237701, 0.2463543713092804, 1.497308611869812, -0.23161627352237701], [0.2463543713092804, 1.497308611869812, 0.2683837413787842, 0.2463543713092804, 1.997308611869812, 0.2683837413787842, -0.2536456286907196, 1.997308611869812, 0.2683837413787842, -0.2536456286907196, 1.497308611869812, 0.2683837413787842], [-0.2536456286907196, 1.997308611869812, -0.23161627352237701, -0.2536456286907196, 1.997308611869812, 0.2683837413787842, 0.2463543713092804, 1.997308611869812, 0.2683837413787842, 0.2463543713092804, 1.997308611869812, -0.23161627352237701], [0.2463543713092804, 1.497308611869812, -0.23161627352237701, 0.2463543713092804, 1.497308611869812, 0.2683837413787842, -0.2536456286907196, 1.497308611869812, 0.2683837413787842, -0.2536456286907196, 1.497308611869812, -0.23161627352237701], [0.2463543713092804, 1.497308611869812, -0.23161627352237701, 0.2463543713092804, 1.997308611869812, -0.23161627352237701, 0.2463543713092804, 1.997308611869812, 0.2683837413787842, 0.2463543713092804, 1.497308611869812, 0.2683837413787842], [-0.2536456286907196, 1.497308611869812, 0.2683837413787842, -0.2536456286907196, 1.997308611869812, 0.2683837413787842, -0.2536456286907196, 1.997308611869812, -0.23161627352237701, -0.2536456286907196, 1.497308611869812, -0.23161627352237701], [0.2316092699766159, 0.8962944149971008, -0.21831698715686798, 0.2316092699766159, 1.396294355392456, -0.21831698715686798, 0.7316092848777771, 1.396294355392456, -0.21831698715686798, 0.7316092848777771, 0.8962944149971008, -0.21831698715686798], [0.7316092848777771, 0.8962944149971008, 0.2816829979419708, 0.7316092848777771, 1.396294355392456, 0.2816829979419708, 0.2316092699766159, 1.396294355392456, 0.2816829979419708, 0.2316092699766159, 0.8962944149971008, 0.2816829979419708], [0.2316092699766159, 1.396294355392456, -0.21831698715686798, 0.2316092699766159, 1.396294355392456, 0.2816829979419708, 0.7316092848777771, 1.396294355392456, 0.2816829979419708, 0.7316092848777771, 1.396294355392456, -0.21831698715686798], [0.7316092848777771, 0.8962944149971008, -0.21831698715686798, 0.7316092848777771, 0.8962944149971008, 0.2816829979419708, 0.2316092699766159, 0.8962944149971008, 0.2816829979419708, 0.2316092699766159, 0.8962944149971008, -0.21831698715686798], [0.7316092848777771, 0.8962944149971008, -0.21831698715686798, 0.7316092848777771, 1.396294355392456, -0.21831698715686798, 0.7316092848777771, 1.396294355392456, 0.2816829979419708, 0.7316092848777771, 0.8962944149971008, 0.2816829979419708], [0.2316092699766159, 0.8962944149971008, 0.2816829979419708, 0.2316092699766159, 1.396294355392456, 0.2816829979419708, 0.2316092699766159, 1.396294355392456, -0.21831698715686798, 0.2316092699766159, 0.8962944149971008, -0.21831698715686798], [-0.25, 1.5, -0.25, -0.25, 2.0, -0.25, 0.25, 2.0, -0.25, 0.25, 1.5, -0.25], [0.25, 1.5, 0.25, 0.25, 2.0, 0.25, -0.25, 2.0, 0.25, -0.25, 1.5, 0.25], [-0.25, 2.0, -0.25, -0.25, 2.0, 0.25, 0.25, 2.0, 0.25, 0.25, 2.0, -0.25], [0.25, 1.5, -0.25, 0.25, 1.5, 0.25, -0.25, 1.5, 0.25, -0.25, 1.5, -0.25], [0.25, 1.5, -0.25, 0.25, 2.0, -0.25, 0.25, 2.0, 0.25, 0.25, 1.5, 0.25], [-0.25, 1.5, 0.25, -0.25, 2.0, 0.25, -0.25, 2.0, -0.25, -0.25, 1.5, -0.25], [-0.5, 0.75, -0.125, -0.5, 1.5, -0.125, -0.25, 1.5, -0.125, -0.25, 0.75, -0.125], [-0.25, 0.75, 0.125, -0.25, 1.5, 0.125, -0.5, 1.5, 0.125, -0.5, 0.75, 0.125], [-0.5, 1.5, -0.125, -0.5, 1.5, 0.125, -0.25, 1.5, 0.125, -0.25, 1.5, -0.125], [-0.25, 0.75, -0.125, -0.25, 0.75, 0.125, -0.5, 0.75, 0.125, -0.5, 0.75, -0.125], [-0.25, 0.75, -0.125, -0.25, 1.5, -0.125, -0.25, 1.5, 0.125, -0.25, 0.75, 0.125], [-0.5, 0.75, 0.125, -0.5, 1.5, 0.125, -0.5, 1.5, -0.125, -0.5, 0.75, -0.125], [0.7019792795181274, 0.748781681060791, -0.02643335424363613, 0.7019792795181274, 1.498781681060791, -0.02643335424363613, 0.9519792795181274, 1.498781681060791, -0.02643335424363613, 0.9519792795181274, 0.748781681060791, -0.02643335424363613], [0.9519792795181274, 0.748781681060791, 0.22356665134429932, 0.9519792795181274, 1.498781681060791, 0.22356665134429932, 0.7019792795181274, 1.498781681060791, 0.22356665134429932, 0.7019792795181274, 0.748781681060791, 0.22356665134429932], [0.7019792795181274, 1.498781681060791, -0.02643335424363613, 0.7019792795181274, 1.498781681060791, 0.22356665134429932, 0.9519792795181274, 1.498781681060791, 0.22356665134429932, 0.9519792795181274, 1.498781681060791, -0.02643335424363613], [0.9519792795181274, 0.748781681060791, -0.02643335424363613, 0.9519792795181274, 0.748781681060791, 0.22356665134429932, 0.7019792795181274, 0.748781681060791, 0.22356665134429932, 0.7019792795181274, 0.748781681060791, -0.02643335424363613], [0.9519792795181274, 0.748781681060791, -0.02643335424363613, 0.9519792795181274, 1.498781681060791, -0.02643335424363613, 0.9519792795181274, 1.498781681060791, 0.22356665134429932, 0.9519792795181274, 0.748781681060791, 0.22356665134429932], [0.7019792795181274, 0.748781681060791, 0.22356665134429932, 0.7019792795181274, 1.498781681060791, 0.22356665134429932, 0.7019792795181274, 1.498781681060791, -0.02643335424363613, 0.7019792795181274, 0.748781681060791, -0.02643335424363613], [0.09342791140079498, 1.3167552947998047, -0.06984145194292068, 0.09342791140079498, 1.5042552947998047, -0.06984145194292068, 0.7184278964996338, 1.5042552947998047, -0.06984145194292068, 0.7184278964996338, 1.3167552947998047, -0.06984145194292068], [0.7184278964996338, 1.3167552947998047, 0.18015854060649872, 0.7184278964996338, 1.5042552947998047, 0.18015854060649872, 0.09342791140079498, 1.5042552947998047, 0.18015854060649872, 0.09342791140079498, 1.3167552947998047, 0.18015854060649872], [0.09342791140079498, 1.5042552947998047, -0.06984145194292068, 0.09342791140079498, 1.5042552947998047, 0.18015854060649872, 0.7184278964996338, 1.5042552947998047, 0.18015854060649872, 0.7184278964996338, 1.5042552947998047, -0.06984145194292068], [0.7184278964996338, 1.3167552947998047, -0.06984145194292068, 0.7184278964996338, 1.3167552947998047, 0.18015854060649872, 0.09342791140079498, 1.3167552947998047, 0.18015854060649872, 0.09342791140079498, 1.3167552947998047, -0.06984145194292068], [0.7184278964996338, 1.3167552947998047, -0.06984145194292068, 0.7184278964996338, 1.5042552947998047, -0.06984145194292068, 0.7184278964996338, 1.5042552947998047, 0.18015854060649872, 0.7184278964996338, 1.3167552947998047, 0.18015854060649872], [0.09342791140079498, 1.3167552947998047, 0.18015854060649872, 0.09342791140079498, 1.5042552947998047, 0.18015854060649872, 0.09342791140079498, 1.5042552947998047, -0.06984145194292068, 0.09342791140079498, 1.3167552947998047, -0.06984145194292068], [-0.24375000596046448, 0.0, -0.125, -0.24375000596046448, 0.75, -0.125, 0.0062500000931322575, 0.75, -0.125, 0.0062500000931322575, 0.0, -0.125], [0.0062500000931322575, 0.0, 0.125, 0.0062500000931322575, 0.75, 0.125, -0.24375000596046448, 0.75, 0.125, -0.24375000596046448, 0.0, 0.125], [-0.24375000596046448, 0.75, -0.125, -0.24375000596046448, 0.75, 0.125, 0.0062500000931322575, 0.75, 0.125, 0.0062500000931322575, 0.75, -0.125], [0.0062500000931322575, 0.0, -0.125, 0.0062500000931322575, 0.0, 0.125, -0.24375000596046448, 0.0, 0.125, -0.24375000596046448, 0.0, -0.125], [0.0062500000931322575, 0.0, -0.125, 0.0062500000931322575, 0.75, -0.125, 0.0062500000931322575, 0.75, 0.125, 0.0062500000931322575, 0.0, 0.125], [-0.24375000596046448, 0.0, 0.125, -0.24375000596046448, 0.75, 0.125, -0.24375000596046448, 0.75, -0.125, -0.24375000596046448, 0.0, -0.125], [-0.0062500000931322575, 0.0, -0.125, -0.0062500000931322575, 0.75, -0.125, 0.24375000596046448, 0.75, -0.125, 0.24375000596046448, 0.0, -0.125], [0.24375000596046448, 0.0, 0.125, 0.24375000596046448, 0.75, 0.125, -0.0062500000931322575, 0.75, 0.125, -0.0062500000931322575, 0.0, 0.125], [-0.0062500000931322575, 0.75, -0.125, -0.0062500000931322575, 0.75, 0.125, 0.24375000596046448, 0.75, 0.125, 0.24375000596046448, 0.75, -0.125], [0.24375000596046448, 0.0, -0.125, 0.24375000596046448, 0.0, 0.125, -0.0062500000931322575, 0.0, 0.125, -0.0062500000931322575, 0.0, -0.125], [0.24375000596046448, 0.0, -0.125, 0.24375000596046448, 0.75, -0.125, 0.24375000596046448, 0.75, 0.125, 0.24375000596046448, 0.0, 0.125], [-0.0062500000931322575, 0.0, 0.125, -0.0062500000931322575, 0.75, 0.125, -0.0062500000931322575, 0.75, -0.125, -0.0062500000931322575, 0.0, -0.125]] -tex_coords = [[0.018867924528301886, 0.0, 0, 0.018867924528301886, 0.75, 0, 0.05660377358490566, 0.75, 0, 0.05660377358490566, 0.0, 0], [0.07547169811320754, 0.0, 0, 0.07547169811320754, 0.75, 0, 0.11320754716981132, 0.75, 0, 0.11320754716981132, 0.0, 0], [0.018867924528301886, 0.75, 0, 0.018867924528301886, 1.0, 0, 0.05660377358490566, 1.0, 0, 0.05660377358490566, 0.75, 0], [0.05660377358490566, 0.75, 0, 0.05660377358490566, 1.0, 0, 0.09433962264150944, 1.0, 0, 0.09433962264150944, 0.75, 0], [0.05660377358490566, 0.0, 0, 0.05660377358490566, 0.75, 0, 0.07547169811320754, 0.75, 0, 0.07547169811320754, 0.0, 0], [0.0, 0.0, 0, 0.0, 0.75, 0, 0.018867924528301886, 0.75, 0, 0.018867924528301886, 0.0, 0], [0.1509433962264151, 0.0, 0, 0.1509433962264151, 0.5, 0, 0.18867924528301888, 0.5, 0, 0.18867924528301888, 0.0, 0], [0.22641509433962265, 0.0, 0, 0.22641509433962265, 0.5, 0, 0.2641509433962264, 0.5, 0, 0.2641509433962264, 0.0, 0], [0.1509433962264151, 0.5, 0, 0.1509433962264151, 1.0, 0, 0.18867924528301888, 1.0, 0, 0.18867924528301888, 0.5, 0], [0.18867924528301888, 0.5, 0, 0.18867924528301888, 1.0, 0, 0.22641509433962265, 1.0, 0, 0.22641509433962265, 0.5, 0], [0.18867924528301888, 0.0, 0, 0.18867924528301888, 0.5, 0, 0.22641509433962265, 0.5, 0, 0.22641509433962265, 0.0, 0], [0.11320754716981132, 0.0, 0, 0.11320754716981132, 0.5, 0, 0.1509433962264151, 0.5, 0, 0.1509433962264151, 0.0, 0], [0.3018867924528302, 0.0, 0, 0.3018867924528302, 0.5, 0, 0.33962264150943394, 0.5, 0, 0.33962264150943394, 0.0, 0], [0.37735849056603776, 0.0, 0, 0.37735849056603776, 0.5, 0, 0.41509433962264153, 0.5, 0, 0.41509433962264153, 0.0, 0], [0.3018867924528302, 0.5, 0, 0.3018867924528302, 1.0, 0, 0.33962264150943394, 1.0, 0, 0.33962264150943394, 0.5, 0], [0.33962264150943394, 0.5, 0, 0.33962264150943394, 1.0, 0, 0.37735849056603776, 1.0, 0, 0.37735849056603776, 0.5, 0], [0.33962264150943394, 0.0, 0, 0.33962264150943394, 0.5, 0, 0.37735849056603776, 0.5, 0, 0.37735849056603776, 0.0, 0], [0.2641509433962264, 0.0, 0, 0.2641509433962264, 0.5, 0, 0.3018867924528302, 0.5, 0, 0.3018867924528302, 0.0, 0], [0.4528301886792453, 0.0, 0, 0.4528301886792453, 0.5, 0, 0.49056603773584906, 0.5, 0, 0.49056603773584906, 0.0, 0], [0.5283018867924528, 0.0, 0, 0.5283018867924528, 0.5, 0, 0.5660377358490566, 0.5, 0, 0.5660377358490566, 0.0, 0], [0.4528301886792453, 0.5, 0, 0.4528301886792453, 1.0, 0, 0.49056603773584906, 1.0, 0, 0.49056603773584906, 0.5, 0], [0.49056603773584906, 0.5, 0, 0.49056603773584906, 1.0, 0, 0.5283018867924528, 1.0, 0, 0.5283018867924528, 0.5, 0], [0.49056603773584906, 0.0, 0, 0.49056603773584906, 0.5, 0, 0.5283018867924528, 0.5, 0, 0.5283018867924528, 0.0, 0], [0.41509433962264153, 0.0, 0, 0.41509433962264153, 0.5, 0, 0.4528301886792453, 0.5, 0, 0.4528301886792453, 0.0, 0], [0.5849056603773585, 0.0, 0, 0.5849056603773585, 0.75, 0, 0.6037735849056604, 0.75, 0, 0.6037735849056604, 0.0, 0], [0.6226415094339622, 0.0, 0, 0.6226415094339622, 0.75, 0, 0.6415094339622641, 0.75, 0, 0.6415094339622641, 0.0, 0], [0.5849056603773585, 0.75, 0, 0.5849056603773585, 1.0, 0, 0.6037735849056604, 1.0, 0, 0.6037735849056604, 0.75, 0], [0.6037735849056604, 0.75, 0, 0.6037735849056604, 1.0, 0, 0.6226415094339622, 1.0, 0, 0.6226415094339622, 0.75, 0], [0.6037735849056604, 0.0, 0, 0.6037735849056604, 0.75, 0, 0.6226415094339622, 0.75, 0, 0.6226415094339622, 0.0, 0], [0.5660377358490566, 0.0, 0, 0.5660377358490566, 0.75, 0, 0.5849056603773585, 0.75, 0, 0.5849056603773585, 0.0, 0], [0.660377358490566, 0.0, 0, 0.660377358490566, 0.75, 0, 0.6792452830188679, 0.75, 0, 0.6792452830188679, 0.0, 0], [0.6981132075471698, 0.0, 0, 0.6981132075471698, 0.75, 0, 0.7169811320754716, 0.75, 0, 0.7169811320754716, 0.0, 0], [0.660377358490566, 0.75, 0, 0.660377358490566, 1.0, 0, 0.6792452830188679, 1.0, 0, 0.6792452830188679, 0.75, 0], [0.6792452830188679, 0.75, 0, 0.6792452830188679, 1.0, 0, 0.6981132075471698, 1.0, 0, 0.6981132075471698, 0.75, 0], [0.6792452830188679, 0.0, 0, 0.6792452830188679, 0.75, 0, 0.6981132075471698, 0.75, 0, 0.6981132075471698, 0.0, 0], [0.6415094339622641, 0.0, 0, 0.6415094339622641, 0.75, 0, 0.660377358490566, 0.75, 0, 0.660377358490566, 0.0, 0], [0.7358490566037735, 0.5625, 0, 0.7358490566037735, 0.75, 0, 0.7830188679245284, 0.75, 0, 0.7830188679245284, 0.5625, 0], [0.8018867924528302, 0.5625, 0, 0.8018867924528302, 0.75, 0, 0.8490566037735849, 0.75, 0, 0.8490566037735849, 0.5625, 0], [0.7358490566037735, 0.75, 0, 0.7358490566037735, 1.0, 0, 0.7830188679245284, 1.0, 0, 0.7830188679245284, 0.75, 0], [0.7830188679245284, 0.75, 0, 0.7830188679245284, 1.0, 0, 0.8301886792452831, 1.0, 0, 0.8301886792452831, 0.75, 0], [0.7830188679245284, 0.5625, 0, 0.7830188679245284, 0.75, 0, 0.8018867924528302, 0.75, 0, 0.8018867924528302, 0.5625, 0], [0.7169811320754716, 0.5625, 0, 0.7169811320754716, 0.75, 0, 0.7358490566037735, 0.75, 0, 0.7358490566037735, 0.5625, 0], [0.8679245283018868, 0.0, 0, 0.8679245283018868, 0.75, 0, 0.8867924528301887, 0.75, 0, 0.8867924528301887, 0.0, 0], [0.9056603773584906, 0.0, 0, 0.9056603773584906, 0.75, 0, 0.9245283018867925, 0.75, 0, 0.9245283018867925, 0.0, 0], [0.8679245283018868, 0.75, 0, 0.8679245283018868, 1.0, 0, 0.8867924528301887, 1.0, 0, 0.8867924528301887, 0.75, 0], [0.8867924528301887, 0.75, 0, 0.8867924528301887, 1.0, 0, 0.9056603773584906, 1.0, 0, 0.9056603773584906, 0.75, 0], [0.8867924528301887, 0.0, 0, 0.8867924528301887, 0.75, 0, 0.9056603773584906, 0.75, 0, 0.9056603773584906, 0.0, 0], [0.8490566037735849, 0.0, 0, 0.8490566037735849, 0.75, 0, 0.8679245283018868, 0.75, 0, 0.8679245283018868, 0.0, 0], [0.9433962264150944, 0.0, 0, 0.9433962264150944, 0.75, 0, 0.9622641509433962, 0.75, 0, 0.9622641509433962, 0.0, 0], [0.9811320754716981, 0.0, 0, 0.9811320754716981, 0.75, 0, 1.0, 0.75, 0, 1.0, 0.0, 0], [0.9433962264150944, 0.75, 0, 0.9433962264150944, 1.0, 0, 0.9622641509433962, 1.0, 0, 0.9622641509433962, 0.75, 0], [0.9622641509433962, 0.75, 0, 0.9622641509433962, 1.0, 0, 0.9811320754716981, 1.0, 0, 0.9811320754716981, 0.75, 0], [0.9622641509433962, 0.0, 0, 0.9622641509433962, 0.75, 0, 0.9811320754716981, 0.75, 0, 0.9811320754716981, 0.0, 0], [0.9245283018867925, 0.0, 0, 0.9245283018867925, 0.75, 0, 0.9433962264150944, 0.75, 0, 0.9433962264150944, 0.0, 0]] -shading_values = [[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]] +bones = [{'name':'body','pivot':[0.0, 1.5, 0.0],'vertices':[[-0.25, 0.75, -0.125, -0.25, 1.5, -0.125, 0.25, 1.5, -0.125, 0.25, 0.75, -0.125], [0.25, 0.75, 0.125, 0.25, 1.5, 0.125, -0.25, 1.5, 0.125, -0.25, 0.75, 0.125], [-0.25, 1.5, -0.125, -0.25, 1.5, 0.125, 0.25, 1.5, 0.125, 0.25, 1.5, -0.125], [0.25, 0.75, -0.125, 0.25, 0.75, 0.125, -0.25, 0.75, 0.125, -0.25, 0.75, -0.125], [0.25, 0.75, -0.125, 0.25, 1.5, -0.125, 0.25, 1.5, 0.125, 0.25, 0.75, 0.125], [-0.25, 0.75, 0.125, -0.25, 1.5, 0.125, -0.25, 1.5, -0.125, -0.25, 0.75, -0.125]],'tex_coords':[[0.018867924528301886, 0.0, 0.018867924528301886, 0.75, 0.05660377358490566, 0.75, 0.05660377358490566, 0.0], [0.07547169811320754, 0.0, 0.07547169811320754, 0.75, 0.11320754716981132, 0.75, 0.11320754716981132, 0.0], [0.018867924528301886, 0.75, 0.018867924528301886, 1.0, 0.05660377358490566, 1.0, 0.05660377358490566, 0.75], [0.05660377358490566, 0.75, 0.05660377358490566, 1.0, 0.09433962264150944, 1.0, 0.09433962264150944, 0.75], [0.05660377358490566, 0.0, 0.05660377358490566, 0.75, 0.07547169811320754, 0.75, 0.07547169811320754, 0.0], [0.0, 0.0, 0.0, 0.75, 0.018867924528301886, 0.75, 0.018867924528301886, 0.0]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'head','pivot':[0.0, 1.5, 0.0],'vertices':[[-0.2536456286907196, 1.497308611869812, -0.23161627352237701, -0.2536456286907196, 1.997308611869812, -0.23161627352237701, 0.2463543713092804, 1.997308611869812, -0.23161627352237701, 0.2463543713092804, 1.497308611869812, -0.23161627352237701], [0.2463543713092804, 1.497308611869812, 0.2683837413787842, 0.2463543713092804, 1.997308611869812, 0.2683837413787842, -0.2536456286907196, 1.997308611869812, 0.2683837413787842, -0.2536456286907196, 1.497308611869812, 0.2683837413787842], [-0.2536456286907196, 1.997308611869812, -0.23161627352237701, -0.2536456286907196, 1.997308611869812, 0.2683837413787842, 0.2463543713092804, 1.997308611869812, 0.2683837413787842, 0.2463543713092804, 1.997308611869812, -0.23161627352237701], [0.2463543713092804, 1.497308611869812, -0.23161627352237701, 0.2463543713092804, 1.497308611869812, 0.2683837413787842, -0.2536456286907196, 1.497308611869812, 0.2683837413787842, -0.2536456286907196, 1.497308611869812, -0.23161627352237701], [0.2463543713092804, 1.497308611869812, -0.23161627352237701, 0.2463543713092804, 1.997308611869812, -0.23161627352237701, 0.2463543713092804, 1.997308611869812, 0.2683837413787842, 0.2463543713092804, 1.497308611869812, 0.2683837413787842], [-0.2536456286907196, 1.497308611869812, 0.2683837413787842, -0.2536456286907196, 1.997308611869812, 0.2683837413787842, -0.2536456286907196, 1.997308611869812, -0.23161627352237701, -0.2536456286907196, 1.497308611869812, -0.23161627352237701], [0.2316092699766159, 0.8962944149971008, -0.21831698715686798, 0.2316092699766159, 1.396294355392456, -0.21831698715686798, 0.7316092848777771, 1.396294355392456, -0.21831698715686798, 0.7316092848777771, 0.8962944149971008, -0.21831698715686798], [0.7316092848777771, 0.8962944149971008, 0.2816829979419708, 0.7316092848777771, 1.396294355392456, 0.2816829979419708, 0.2316092699766159, 1.396294355392456, 0.2816829979419708, 0.2316092699766159, 0.8962944149971008, 0.2816829979419708], [0.2316092699766159, 1.396294355392456, -0.21831698715686798, 0.2316092699766159, 1.396294355392456, 0.2816829979419708, 0.7316092848777771, 1.396294355392456, 0.2816829979419708, 0.7316092848777771, 1.396294355392456, -0.21831698715686798], [0.7316092848777771, 0.8962944149971008, -0.21831698715686798, 0.7316092848777771, 0.8962944149971008, 0.2816829979419708, 0.2316092699766159, 0.8962944149971008, 0.2816829979419708, 0.2316092699766159, 0.8962944149971008, -0.21831698715686798], [0.7316092848777771, 0.8962944149971008, -0.21831698715686798, 0.7316092848777771, 1.396294355392456, -0.21831698715686798, 0.7316092848777771, 1.396294355392456, 0.2816829979419708, 0.7316092848777771, 0.8962944149971008, 0.2816829979419708], [0.2316092699766159, 0.8962944149971008, 0.2816829979419708, 0.2316092699766159, 1.396294355392456, 0.2816829979419708, 0.2316092699766159, 1.396294355392456, -0.21831698715686798, 0.2316092699766159, 0.8962944149971008, -0.21831698715686798]],'tex_coords':[[0.1509433962264151, 0.0, 0.1509433962264151, 0.5, 0.18867924528301888, 0.5, 0.18867924528301888, 0.0], [0.22641509433962265, 0.0, 0.22641509433962265, 0.5, 0.2641509433962264, 0.5, 0.2641509433962264, 0.0], [0.1509433962264151, 0.5, 0.1509433962264151, 1.0, 0.18867924528301888, 1.0, 0.18867924528301888, 0.5], [0.18867924528301888, 0.5, 0.18867924528301888, 1.0, 0.22641509433962265, 1.0, 0.22641509433962265, 0.5], [0.18867924528301888, 0.0, 0.18867924528301888, 0.5, 0.22641509433962265, 0.5, 0.22641509433962265, 0.0], [0.11320754716981132, 0.0, 0.11320754716981132, 0.5, 0.1509433962264151, 0.5, 0.1509433962264151, 0.0], [0.3018867924528302, 0.0, 0.3018867924528302, 0.5, 0.33962264150943394, 0.5, 0.33962264150943394, 0.0], [0.37735849056603776, 0.0, 0.37735849056603776, 0.5, 0.41509433962264153, 0.5, 0.41509433962264153, 0.0], [0.3018867924528302, 0.5, 0.3018867924528302, 1.0, 0.33962264150943394, 1.0, 0.33962264150943394, 0.5], [0.33962264150943394, 0.5, 0.33962264150943394, 1.0, 0.37735849056603776, 1.0, 0.37735849056603776, 0.5], [0.33962264150943394, 0.0, 0.33962264150943394, 0.5, 0.37735849056603776, 0.5, 0.37735849056603776, 0.0], [0.2641509433962264, 0.0, 0.2641509433962264, 0.5, 0.3018867924528302, 0.5, 0.3018867924528302, 0.0]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'hat','pivot':[0.0, 1.5, 0.0],'vertices':[[-0.25, 1.5, -0.25, -0.25, 2.0, -0.25, 0.25, 2.0, -0.25, 0.25, 1.5, -0.25], [0.25, 1.5, 0.25, 0.25, 2.0, 0.25, -0.25, 2.0, 0.25, -0.25, 1.5, 0.25], [-0.25, 2.0, -0.25, -0.25, 2.0, 0.25, 0.25, 2.0, 0.25, 0.25, 2.0, -0.25], [0.25, 1.5, -0.25, 0.25, 1.5, 0.25, -0.25, 1.5, 0.25, -0.25, 1.5, -0.25], [0.25, 1.5, -0.25, 0.25, 2.0, -0.25, 0.25, 2.0, 0.25, 0.25, 1.5, 0.25], [-0.25, 1.5, 0.25, -0.25, 2.0, 0.25, -0.25, 2.0, -0.25, -0.25, 1.5, -0.25]],'tex_coords':[[0.4528301886792453, 0.0, 0.4528301886792453, 0.5, 0.49056603773584906, 0.5, 0.49056603773584906, 0.0], [0.5283018867924528, 0.0, 0.5283018867924528, 0.5, 0.5660377358490566, 0.5, 0.5660377358490566, 0.0], [0.4528301886792453, 0.5, 0.4528301886792453, 1.0, 0.49056603773584906, 1.0, 0.49056603773584906, 0.5], [0.49056603773584906, 0.5, 0.49056603773584906, 1.0, 0.5283018867924528, 1.0, 0.5283018867924528, 0.5], [0.49056603773584906, 0.0, 0.49056603773584906, 0.5, 0.5283018867924528, 0.5, 0.5283018867924528, 0.0], [0.41509433962264153, 0.0, 0.41509433962264153, 0.5, 0.4528301886792453, 0.5, 0.4528301886792453, 0.0]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'rightArm','pivot':[-0.3125, 1.375, 0.0],'vertices':[[-0.5, 0.75, -0.125, -0.5, 1.5, -0.125, -0.25, 1.5, -0.125, -0.25, 0.75, -0.125], [-0.25, 0.75, 0.125, -0.25, 1.5, 0.125, -0.5, 1.5, 0.125, -0.5, 0.75, 0.125], [-0.5, 1.5, -0.125, -0.5, 1.5, 0.125, -0.25, 1.5, 0.125, -0.25, 1.5, -0.125], [-0.25, 0.75, -0.125, -0.25, 0.75, 0.125, -0.5, 0.75, 0.125, -0.5, 0.75, -0.125], [-0.25, 0.75, -0.125, -0.25, 1.5, -0.125, -0.25, 1.5, 0.125, -0.25, 0.75, 0.125], [-0.5, 0.75, 0.125, -0.5, 1.5, 0.125, -0.5, 1.5, -0.125, -0.5, 0.75, -0.125]],'tex_coords':[[0.5849056603773585, 0.0, 0.5849056603773585, 0.75, 0.6037735849056604, 0.75, 0.6037735849056604, 0.0], [0.6226415094339622, 0.0, 0.6226415094339622, 0.75, 0.6415094339622641, 0.75, 0.6415094339622641, 0.0], [0.5849056603773585, 0.75, 0.5849056603773585, 1.0, 0.6037735849056604, 1.0, 0.6037735849056604, 0.75], [0.6037735849056604, 0.75, 0.6037735849056604, 1.0, 0.6226415094339622, 1.0, 0.6226415094339622, 0.75], [0.6037735849056604, 0.0, 0.6037735849056604, 0.75, 0.6226415094339622, 0.75, 0.6226415094339622, 0.0], [0.5660377358490566, 0.0, 0.5660377358490566, 0.75, 0.5849056603773585, 0.75, 0.5849056603773585, 0.0]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'leftArm','pivot':[0.3125, 1.375, 0.0],'vertices':[[0.7019792795181274, 0.748781681060791, -0.02643335424363613, 0.7019792795181274, 1.498781681060791, -0.02643335424363613, 0.9519792795181274, 1.498781681060791, -0.02643335424363613, 0.9519792795181274, 0.748781681060791, -0.02643335424363613], [0.9519792795181274, 0.748781681060791, 0.22356665134429932, 0.9519792795181274, 1.498781681060791, 0.22356665134429932, 0.7019792795181274, 1.498781681060791, 0.22356665134429932, 0.7019792795181274, 0.748781681060791, 0.22356665134429932], [0.7019792795181274, 1.498781681060791, -0.02643335424363613, 0.7019792795181274, 1.498781681060791, 0.22356665134429932, 0.9519792795181274, 1.498781681060791, 0.22356665134429932, 0.9519792795181274, 1.498781681060791, -0.02643335424363613], [0.9519792795181274, 0.748781681060791, -0.02643335424363613, 0.9519792795181274, 0.748781681060791, 0.22356665134429932, 0.7019792795181274, 0.748781681060791, 0.22356665134429932, 0.7019792795181274, 0.748781681060791, -0.02643335424363613], [0.9519792795181274, 0.748781681060791, -0.02643335424363613, 0.9519792795181274, 1.498781681060791, -0.02643335424363613, 0.9519792795181274, 1.498781681060791, 0.22356665134429932, 0.9519792795181274, 0.748781681060791, 0.22356665134429932], [0.7019792795181274, 0.748781681060791, 0.22356665134429932, 0.7019792795181274, 1.498781681060791, 0.22356665134429932, 0.7019792795181274, 1.498781681060791, -0.02643335424363613, 0.7019792795181274, 0.748781681060791, -0.02643335424363613], [0.09342791140079498, 1.3167552947998047, -0.06984145194292068, 0.09342791140079498, 1.5042552947998047, -0.06984145194292068, 0.7184278964996338, 1.5042552947998047, -0.06984145194292068, 0.7184278964996338, 1.3167552947998047, -0.06984145194292068], [0.7184278964996338, 1.3167552947998047, 0.18015854060649872, 0.7184278964996338, 1.5042552947998047, 0.18015854060649872, 0.09342791140079498, 1.5042552947998047, 0.18015854060649872, 0.09342791140079498, 1.3167552947998047, 0.18015854060649872], [0.09342791140079498, 1.5042552947998047, -0.06984145194292068, 0.09342791140079498, 1.5042552947998047, 0.18015854060649872, 0.7184278964996338, 1.5042552947998047, 0.18015854060649872, 0.7184278964996338, 1.5042552947998047, -0.06984145194292068], [0.7184278964996338, 1.3167552947998047, -0.06984145194292068, 0.7184278964996338, 1.3167552947998047, 0.18015854060649872, 0.09342791140079498, 1.3167552947998047, 0.18015854060649872, 0.09342791140079498, 1.3167552947998047, -0.06984145194292068], [0.7184278964996338, 1.3167552947998047, -0.06984145194292068, 0.7184278964996338, 1.5042552947998047, -0.06984145194292068, 0.7184278964996338, 1.5042552947998047, 0.18015854060649872, 0.7184278964996338, 1.3167552947998047, 0.18015854060649872], [0.09342791140079498, 1.3167552947998047, 0.18015854060649872, 0.09342791140079498, 1.5042552947998047, 0.18015854060649872, 0.09342791140079498, 1.5042552947998047, -0.06984145194292068, 0.09342791140079498, 1.3167552947998047, -0.06984145194292068]],'tex_coords':[[0.660377358490566, 0.0, 0.660377358490566, 0.75, 0.6792452830188679, 0.75, 0.6792452830188679, 0.0], [0.6981132075471698, 0.0, 0.6981132075471698, 0.75, 0.7169811320754716, 0.75, 0.7169811320754716, 0.0], [0.660377358490566, 0.75, 0.660377358490566, 1.0, 0.6792452830188679, 1.0, 0.6792452830188679, 0.75], [0.6792452830188679, 0.75, 0.6792452830188679, 1.0, 0.6981132075471698, 1.0, 0.6981132075471698, 0.75], [0.6792452830188679, 0.0, 0.6792452830188679, 0.75, 0.6981132075471698, 0.75, 0.6981132075471698, 0.0], [0.6415094339622641, 0.0, 0.6415094339622641, 0.75, 0.660377358490566, 0.75, 0.660377358490566, 0.0], [0.7358490566037735, 0.5625, 0.7358490566037735, 0.75, 0.7830188679245284, 0.75, 0.7830188679245284, 0.5625], [0.8018867924528302, 0.5625, 0.8018867924528302, 0.75, 0.8490566037735849, 0.75, 0.8490566037735849, 0.5625], [0.7358490566037735, 0.75, 0.7358490566037735, 1.0, 0.7830188679245284, 1.0, 0.7830188679245284, 0.75], [0.7830188679245284, 0.75, 0.7830188679245284, 1.0, 0.8301886792452831, 1.0, 0.8301886792452831, 0.75], [0.7830188679245284, 0.5625, 0.7830188679245284, 0.75, 0.8018867924528302, 0.75, 0.8018867924528302, 0.5625], [0.7169811320754716, 0.5625, 0.7169811320754716, 0.75, 0.7358490566037735, 0.75, 0.7358490566037735, 0.5625]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'rightLeg','pivot':[-0.11875, 0.75, 0.0],'vertices':[[-0.24375000596046448, 0.0, -0.125, -0.24375000596046448, 0.75, -0.125, 0.0062500000931322575, 0.75, -0.125, 0.0062500000931322575, 0.0, -0.125], [0.0062500000931322575, 0.0, 0.125, 0.0062500000931322575, 0.75, 0.125, -0.24375000596046448, 0.75, 0.125, -0.24375000596046448, 0.0, 0.125], [-0.24375000596046448, 0.75, -0.125, -0.24375000596046448, 0.75, 0.125, 0.0062500000931322575, 0.75, 0.125, 0.0062500000931322575, 0.75, -0.125], [0.0062500000931322575, 0.0, -0.125, 0.0062500000931322575, 0.0, 0.125, -0.24375000596046448, 0.0, 0.125, -0.24375000596046448, 0.0, -0.125], [0.0062500000931322575, 0.0, -0.125, 0.0062500000931322575, 0.75, -0.125, 0.0062500000931322575, 0.75, 0.125, 0.0062500000931322575, 0.0, 0.125], [-0.24375000596046448, 0.0, 0.125, -0.24375000596046448, 0.75, 0.125, -0.24375000596046448, 0.75, -0.125, -0.24375000596046448, 0.0, -0.125]],'tex_coords':[[0.8679245283018868, 0.0, 0.8679245283018868, 0.75, 0.8867924528301887, 0.75, 0.8867924528301887, 0.0], [0.9056603773584906, 0.0, 0.9056603773584906, 0.75, 0.9245283018867925, 0.75, 0.9245283018867925, 0.0], [0.8679245283018868, 0.75, 0.8679245283018868, 1.0, 0.8867924528301887, 1.0, 0.8867924528301887, 0.75], [0.8867924528301887, 0.75, 0.8867924528301887, 1.0, 0.9056603773584906, 1.0, 0.9056603773584906, 0.75], [0.8867924528301887, 0.0, 0.8867924528301887, 0.75, 0.9056603773584906, 0.75, 0.9056603773584906, 0.0], [0.8490566037735849, 0.0, 0.8490566037735849, 0.75, 0.8679245283018868, 0.75, 0.8679245283018868, 0.0]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'leftLeg','pivot':[0.11875, 0.75, 0.0],'vertices':[[-0.0062500000931322575, 0.0, -0.125, -0.0062500000931322575, 0.75, -0.125, 0.24375000596046448, 0.75, -0.125, 0.24375000596046448, 0.0, -0.125], [0.24375000596046448, 0.0, 0.125, 0.24375000596046448, 0.75, 0.125, -0.0062500000931322575, 0.75, 0.125, -0.0062500000931322575, 0.0, 0.125], [-0.0062500000931322575, 0.75, -0.125, -0.0062500000931322575, 0.75, 0.125, 0.24375000596046448, 0.75, 0.125, 0.24375000596046448, 0.75, -0.125], [0.24375000596046448, 0.0, -0.125, 0.24375000596046448, 0.0, 0.125, -0.0062500000931322575, 0.0, 0.125, -0.0062500000931322575, 0.0, -0.125], [0.24375000596046448, 0.0, -0.125, 0.24375000596046448, 0.75, -0.125, 0.24375000596046448, 0.75, 0.125, 0.24375000596046448, 0.0, 0.125], [-0.0062500000931322575, 0.0, 0.125, -0.0062500000931322575, 0.75, 0.125, -0.0062500000931322575, 0.75, -0.125, -0.0062500000931322575, 0.0, -0.125]],'tex_coords':[[0.9433962264150944, 0.0, 0.9433962264150944, 0.75, 0.9622641509433962, 0.75, 0.9622641509433962, 0.0], [0.9811320754716981, 0.0, 0.9811320754716981, 0.75, 1.0, 0.75, 1.0, 0.0], [0.9433962264150944, 0.75, 0.9433962264150944, 1.0, 0.9622641509433962, 1.0, 0.9622641509433962, 0.75], [0.9622641509433962, 0.75, 0.9622641509433962, 1.0, 0.9811320754716981, 1.0, 0.9811320754716981, 0.75], [0.9622641509433962, 0.0, 0.9622641509433962, 0.75, 0.9811320754716981, 0.75, 0.9811320754716981, 0.0], [0.9245283018867925, 0.0, 0.9245283018867925, 0.75, 0.9433962264150944, 0.75, 0.9433962264150944, 0.0]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}] diff --git a/episode-13/models/pig.py b/episode-13/models/pig.py index 4513dc8a..eddfc53d 100644 --- a/episode-13/models/pig.py +++ b/episode-13/models/pig.py @@ -5,4 +5,4 @@ colliders = [] -bones = [{'name':'body','pivot':[0, 13, 2],'vertices':[[-0.3124999701976776, 0.3750000298023224, 0.5, -0.3124999701976776, 0.375, -0.5, 0.3124999701976776, 0.375, -0.5, 0.3124999701976776, 0.3750000298023224, 0.5], [0.3124999701976776, 0.8750000596046448, 0.5, 0.3124999701976776, 0.875, -0.5, -0.3124999701976776, 0.875, -0.5, -0.3124999701976776, 0.8750000596046448, 0.5], [-0.3124999701976776, 0.375, -0.5, -0.3124999701976776, 0.875, -0.5, 0.3124999701976776, 0.875, -0.5, 0.3124999701976776, 0.375, -0.5], [0.3124999701976776, 0.3750000298023224, 0.5, 0.3124999701976776, 0.8750000596046448, 0.5, -0.3124999701976776, 0.8750000596046448, 0.5, -0.3124999701976776, 0.3750000298023224, 0.5], [0.3124999701976776, 0.3750000298023224, 0.5, 0.3124999701976776, 0.375, -0.5, 0.3124999701976776, 0.875, -0.5, 0.3124999701976776, 0.8750000596046448, 0.5], [-0.3124999701976776, 0.8750000596046448, 0.5, -0.3124999701976776, 0.875, -0.5, -0.3124999701976776, 0.375, -0.5, -0.3124999701976776, 0.3750000298023224, 0.5]],'tex_coords':[[0.056338028169014086, 0.0, 0.056338028169014086, 0.6666666666666667, 0.1267605633802817, 0.6666666666666667, 0.1267605633802817, 0.0], [0.18309859154929578, 0.0, 0.18309859154929578, 0.6666666666666667, 0.2535211267605634, 0.6666666666666667, 0.2535211267605634, 0.0], [0.056338028169014086, 0.6666666666666667, 0.056338028169014086, 1.0, 0.1267605633802817, 1.0, 0.1267605633802817, 0.6666666666666667], [0.1267605633802817, 0.6666666666666667, 0.1267605633802817, 1.0, 0.19718309859154928, 1.0, 0.19718309859154928, 0.6666666666666667], [0.1267605633802817, 0.0, 0.1267605633802817, 0.6666666666666667, 0.18309859154929578, 0.6666666666666667, 0.18309859154929578, 0.0], [0.0, 0.0, 0.0, 0.6666666666666667, 0.056338028169014086, 0.6666666666666667, 0.056338028169014086, 0.0]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'head','pivot':[0, 12, -6],'vertices':[[-0.25, 0.5, -0.875, -0.25, 1.0, -0.875, 0.25, 1.0, -0.875, 0.25, 0.5, -0.875], [0.25, 0.5, -0.375, 0.25, 1.0, -0.375, -0.25, 1.0, -0.375, -0.25, 0.5, -0.375], [-0.25, 1.0, -0.875, -0.25, 1.0, -0.375, 0.25, 1.0, -0.375, 0.25, 1.0, -0.875], [0.25, 0.5, -0.875, 0.25, 0.5, -0.375, -0.25, 0.5, -0.375, -0.25, 0.5, -0.875], [0.25, 0.5, -0.875, 0.25, 1.0, -0.875, 0.25, 1.0, -0.375, 0.25, 0.5, -0.375], [-0.25, 0.5, -0.375, -0.25, 1.0, -0.375, -0.25, 1.0, -0.875, -0.25, 0.5, -0.875], [-0.125, 0.5625, -0.9375, -0.125, 0.75, -0.9375, 0.125, 0.75, -0.9375, 0.125, 0.5625, -0.9375], [0.125, 0.5625, -0.875, 0.125, 0.75, -0.875, -0.125, 0.75, -0.875, -0.125, 0.5625, -0.875], [-0.125, 0.75, -0.9375, -0.125, 0.75, -0.875, 0.125, 0.75, -0.875, 0.125, 0.75, -0.9375], [0.125, 0.5625, -0.9375, 0.125, 0.5625, -0.875, -0.125, 0.5625, -0.875, -0.125, 0.5625, -0.9375], [0.125, 0.5625, -0.9375, 0.125, 0.75, -0.9375, 0.125, 0.75, -0.875, 0.125, 0.5625, -0.875], [-0.125, 0.5625, -0.875, -0.125, 0.75, -0.875, -0.125, 0.75, -0.9375, -0.125, 0.5625, -0.9375]],'tex_coords':[[0.30985915492957744, 0.33333333333333337, 0.30985915492957744, 0.6666666666666667, 0.36619718309859156, 0.6666666666666667, 0.36619718309859156, 0.33333333333333337], [0.4225352112676056, 0.33333333333333337, 0.4225352112676056, 0.6666666666666667, 0.4788732394366197, 0.6666666666666667, 0.4788732394366197, 0.33333333333333337], [0.30985915492957744, 0.6666666666666667, 0.30985915492957744, 1.0, 0.36619718309859156, 1.0, 0.36619718309859156, 0.6666666666666667], [0.36619718309859156, 0.6666666666666667, 0.36619718309859156, 1.0, 0.4225352112676056, 1.0, 0.4225352112676056, 0.6666666666666667], [0.36619718309859156, 0.33333333333333337, 0.36619718309859156, 0.6666666666666667, 0.4225352112676056, 0.6666666666666667, 0.4225352112676056, 0.33333333333333337], [0.2535211267605634, 0.33333333333333337, 0.2535211267605634, 0.6666666666666667, 0.30985915492957744, 0.6666666666666667, 0.30985915492957744, 0.33333333333333337], [0.4859154929577465, 0.8333333333333334, 0.4859154929577465, 0.9583333333333334, 0.5140845070422535, 0.9583333333333334, 0.5140845070422535, 0.8333333333333334], [0.5211267605633803, 0.8333333333333334, 0.5211267605633803, 0.9583333333333334, 0.5492957746478874, 0.9583333333333334, 0.5492957746478874, 0.8333333333333334], [0.4859154929577465, 0.9583333333333334, 0.4859154929577465, 1.0, 0.5140845070422535, 1.0, 0.5140845070422535, 0.9583333333333334], [0.5140845070422535, 0.9583333333333334, 0.5140845070422535, 1.0, 0.5422535211267606, 1.0, 0.5422535211267606, 0.9583333333333334], [0.5140845070422535, 0.8333333333333334, 0.5140845070422535, 0.9583333333333334, 0.5211267605633803, 0.9583333333333334, 0.5211267605633803, 0.8333333333333334], [0.4788732394366197, 0.8333333333333334, 0.4788732394366197, 0.9583333333333334, 0.4859154929577465, 0.9583333333333334, 0.4859154929577465, 0.8333333333333334]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'leg0','pivot':[-3, 6, 7],'vertices':[[-0.3125, 0.0, 0.3125, -0.3125, 0.375, 0.3125, -0.0625, 0.375, 0.3125, -0.0625, 0.0, 0.3125], [-0.0625, 0.0, 0.5625, -0.0625, 0.375, 0.5625, -0.3125, 0.375, 0.5625, -0.3125, 0.0, 0.5625], [-0.3125, 0.375, 0.3125, -0.3125, 0.375, 0.5625, -0.0625, 0.375, 0.5625, -0.0625, 0.375, 0.3125], [-0.0625, 0.0, 0.3125, -0.0625, 0.0, 0.5625, -0.3125, 0.0, 0.5625, -0.3125, 0.0, 0.3125], [-0.0625, 0.0, 0.3125, -0.0625, 0.375, 0.3125, -0.0625, 0.375, 0.5625, -0.0625, 0.0, 0.5625], [-0.3125, 0.0, 0.5625, -0.3125, 0.375, 0.5625, -0.3125, 0.375, 0.3125, -0.3125, 0.0, 0.3125]],'tex_coords':[[0.5774647887323944, 0.5833333333333333, 0.5774647887323944, 0.8333333333333334, 0.6056338028169014, 0.8333333333333334, 0.6056338028169014, 0.5833333333333333], [0.6338028169014085, 0.5833333333333333, 0.6338028169014085, 0.8333333333333334, 0.6619718309859155, 0.8333333333333334, 0.6619718309859155, 0.5833333333333333], [0.5774647887323944, 0.8333333333333334, 0.5774647887323944, 1.0, 0.6056338028169014, 1.0, 0.6056338028169014, 0.8333333333333334], [0.6056338028169014, 0.8333333333333334, 0.6056338028169014, 1.0, 0.6338028169014085, 1.0, 0.6338028169014085, 0.8333333333333334], [0.6056338028169014, 0.5833333333333333, 0.6056338028169014, 0.8333333333333334, 0.6338028169014085, 0.8333333333333334, 0.6338028169014085, 0.5833333333333333], [0.5492957746478874, 0.5833333333333333, 0.5492957746478874, 0.8333333333333334, 0.5774647887323944, 0.8333333333333334, 0.5774647887323944, 0.5833333333333333]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'leg1','pivot':[3, 6, 7],'vertices':[[0.0625, 0.0, 0.3125, 0.0625, 0.375, 0.3125, 0.3125, 0.375, 0.3125, 0.3125, 0.0, 0.3125], [0.3125, 0.0, 0.5625, 0.3125, 0.375, 0.5625, 0.0625, 0.375, 0.5625, 0.0625, 0.0, 0.5625], [0.0625, 0.375, 0.3125, 0.0625, 0.375, 0.5625, 0.3125, 0.375, 0.5625, 0.3125, 0.375, 0.3125], [0.3125, 0.0, 0.3125, 0.3125, 0.0, 0.5625, 0.0625, 0.0, 0.5625, 0.0625, 0.0, 0.3125], [0.3125, 0.0, 0.3125, 0.3125, 0.375, 0.3125, 0.3125, 0.375, 0.5625, 0.3125, 0.0, 0.5625], [0.0625, 0.0, 0.5625, 0.0625, 0.375, 0.5625, 0.0625, 0.375, 0.3125, 0.0625, 0.0, 0.3125]],'tex_coords':[[0.6901408450704225, 0.5833333333333333, 0.6901408450704225, 0.8333333333333334, 0.7183098591549296, 0.8333333333333334, 0.7183098591549296, 0.5833333333333333], [0.7464788732394366, 0.5833333333333333, 0.7464788732394366, 0.8333333333333334, 0.7746478873239436, 0.8333333333333334, 0.7746478873239436, 0.5833333333333333], [0.6901408450704225, 0.8333333333333334, 0.6901408450704225, 1.0, 0.7183098591549296, 1.0, 0.7183098591549296, 0.8333333333333334], [0.7183098591549296, 0.8333333333333334, 0.7183098591549296, 1.0, 0.7464788732394366, 1.0, 0.7464788732394366, 0.8333333333333334], [0.7183098591549296, 0.5833333333333333, 0.7183098591549296, 0.8333333333333334, 0.7464788732394366, 0.8333333333333334, 0.7464788732394366, 0.5833333333333333], [0.6619718309859155, 0.5833333333333333, 0.6619718309859155, 0.8333333333333334, 0.6901408450704225, 0.8333333333333334, 0.6901408450704225, 0.5833333333333333]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'leg2','pivot':[-3, 6, -5],'vertices':[[-0.3125, 0.0, -0.4375, -0.3125, 0.375, -0.4375, -0.0625, 0.375, -0.4375, -0.0625, 0.0, -0.4375], [-0.0625, 0.0, -0.1875, -0.0625, 0.375, -0.1875, -0.3125, 0.375, -0.1875, -0.3125, 0.0, -0.1875], [-0.3125, 0.375, -0.4375, -0.3125, 0.375, -0.1875, -0.0625, 0.375, -0.1875, -0.0625, 0.375, -0.4375], [-0.0625, 0.0, -0.4375, -0.0625, 0.0, -0.1875, -0.3125, 0.0, -0.1875, -0.3125, 0.0, -0.4375], [-0.0625, 0.0, -0.4375, -0.0625, 0.375, -0.4375, -0.0625, 0.375, -0.1875, -0.0625, 0.0, -0.1875], [-0.3125, 0.0, -0.1875, -0.3125, 0.375, -0.1875, -0.3125, 0.375, -0.4375, -0.3125, 0.0, -0.4375]],'tex_coords':[[0.8028169014084507, 0.5833333333333333, 0.8028169014084507, 0.8333333333333334, 0.8309859154929577, 0.8333333333333334, 0.8309859154929577, 0.5833333333333333], [0.8591549295774648, 0.5833333333333333, 0.8591549295774648, 0.8333333333333334, 0.8873239436619719, 0.8333333333333334, 0.8873239436619719, 0.5833333333333333], [0.8028169014084507, 0.8333333333333334, 0.8028169014084507, 1.0, 0.8309859154929577, 1.0, 0.8309859154929577, 0.8333333333333334], [0.8309859154929577, 0.8333333333333334, 0.8309859154929577, 1.0, 0.8591549295774648, 1.0, 0.8591549295774648, 0.8333333333333334], [0.8309859154929577, 0.5833333333333333, 0.8309859154929577, 0.8333333333333334, 0.8591549295774648, 0.8333333333333334, 0.8591549295774648, 0.5833333333333333], [0.7746478873239436, 0.5833333333333333, 0.7746478873239436, 0.8333333333333334, 0.8028169014084507, 0.8333333333333334, 0.8028169014084507, 0.5833333333333333]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'leg3','pivot':[3, 6, -5],'vertices':[[0.0625, 0.0, -0.4375, 0.0625, 0.375, -0.4375, 0.3125, 0.375, -0.4375, 0.3125, 0.0, -0.4375], [0.3125, 0.0, -0.1875, 0.3125, 0.375, -0.1875, 0.0625, 0.375, -0.1875, 0.0625, 0.0, -0.1875], [0.0625, 0.375, -0.4375, 0.0625, 0.375, -0.1875, 0.3125, 0.375, -0.1875, 0.3125, 0.375, -0.4375], [0.3125, 0.0, -0.4375, 0.3125, 0.0, -0.1875, 0.0625, 0.0, -0.1875, 0.0625, 0.0, -0.4375], [0.3125, 0.0, -0.4375, 0.3125, 0.375, -0.4375, 0.3125, 0.375, -0.1875, 0.3125, 0.0, -0.1875], [0.0625, 0.0, -0.1875, 0.0625, 0.375, -0.1875, 0.0625, 0.375, -0.4375, 0.0625, 0.0, -0.4375]],'tex_coords':[[0.9154929577464789, 0.5833333333333333, 0.9154929577464789, 0.8333333333333334, 0.9436619718309859, 0.8333333333333334, 0.9436619718309859, 0.5833333333333333], [0.971830985915493, 0.5833333333333333, 0.971830985915493, 0.8333333333333334, 1.0, 0.8333333333333334, 1.0, 0.5833333333333333], [0.9154929577464789, 0.8333333333333334, 0.9154929577464789, 1.0, 0.9436619718309859, 1.0, 0.9436619718309859, 0.8333333333333334], [0.9436619718309859, 0.8333333333333334, 0.9436619718309859, 1.0, 0.971830985915493, 1.0, 0.971830985915493, 0.8333333333333334], [0.9436619718309859, 0.5833333333333333, 0.9436619718309859, 0.8333333333333334, 0.971830985915493, 0.8333333333333334, 0.971830985915493, 0.5833333333333333], [0.8873239436619719, 0.5833333333333333, 0.8873239436619719, 0.8333333333333334, 0.9154929577464789, 0.8333333333333334, 0.9154929577464789, 0.5833333333333333]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}] +bones = [{'name':'body','pivot':[0.0, 0.8125, 0.125],'vertices':[[-0.3124999701976776, 0.3750000298023224, 0.5, -0.3124999701976776, 0.375, -0.5, 0.3124999701976776, 0.375, -0.5, 0.3124999701976776, 0.3750000298023224, 0.5], [0.3124999701976776, 0.8750000596046448, 0.5, 0.3124999701976776, 0.875, -0.5, -0.3124999701976776, 0.875, -0.5, -0.3124999701976776, 0.8750000596046448, 0.5], [-0.3124999701976776, 0.375, -0.5, -0.3124999701976776, 0.875, -0.5, 0.3124999701976776, 0.875, -0.5, 0.3124999701976776, 0.375, -0.5], [0.3124999701976776, 0.3750000298023224, 0.5, 0.3124999701976776, 0.8750000596046448, 0.5, -0.3124999701976776, 0.8750000596046448, 0.5, -0.3124999701976776, 0.3750000298023224, 0.5], [0.3124999701976776, 0.3750000298023224, 0.5, 0.3124999701976776, 0.375, -0.5, 0.3124999701976776, 0.875, -0.5, 0.3124999701976776, 0.8750000596046448, 0.5], [-0.3124999701976776, 0.8750000596046448, 0.5, -0.3124999701976776, 0.875, -0.5, -0.3124999701976776, 0.375, -0.5, -0.3124999701976776, 0.3750000298023224, 0.5]],'tex_coords':[[0.056338028169014086, 0.0, 0.056338028169014086, 0.6666666666666667, 0.1267605633802817, 0.6666666666666667, 0.1267605633802817, 0.0], [0.18309859154929578, 0.0, 0.18309859154929578, 0.6666666666666667, 0.2535211267605634, 0.6666666666666667, 0.2535211267605634, 0.0], [0.056338028169014086, 0.6666666666666667, 0.056338028169014086, 1.0, 0.1267605633802817, 1.0, 0.1267605633802817, 0.6666666666666667], [0.1267605633802817, 0.6666666666666667, 0.1267605633802817, 1.0, 0.19718309859154928, 1.0, 0.19718309859154928, 0.6666666666666667], [0.1267605633802817, 0.0, 0.1267605633802817, 0.6666666666666667, 0.18309859154929578, 0.6666666666666667, 0.18309859154929578, 0.0], [0.0, 0.0, 0.0, 0.6666666666666667, 0.056338028169014086, 0.6666666666666667, 0.056338028169014086, 0.0]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'head','pivot':[0.0, 0.75, -0.375],'vertices':[[-0.25, 0.5, -0.875, -0.25, 1.0, -0.875, 0.25, 1.0, -0.875, 0.25, 0.5, -0.875], [0.25, 0.5, -0.375, 0.25, 1.0, -0.375, -0.25, 1.0, -0.375, -0.25, 0.5, -0.375], [-0.25, 1.0, -0.875, -0.25, 1.0, -0.375, 0.25, 1.0, -0.375, 0.25, 1.0, -0.875], [0.25, 0.5, -0.875, 0.25, 0.5, -0.375, -0.25, 0.5, -0.375, -0.25, 0.5, -0.875], [0.25, 0.5, -0.875, 0.25, 1.0, -0.875, 0.25, 1.0, -0.375, 0.25, 0.5, -0.375], [-0.25, 0.5, -0.375, -0.25, 1.0, -0.375, -0.25, 1.0, -0.875, -0.25, 0.5, -0.875], [-0.125, 0.5625, -0.9375, -0.125, 0.75, -0.9375, 0.125, 0.75, -0.9375, 0.125, 0.5625, -0.9375], [0.125, 0.5625, -0.875, 0.125, 0.75, -0.875, -0.125, 0.75, -0.875, -0.125, 0.5625, -0.875], [-0.125, 0.75, -0.9375, -0.125, 0.75, -0.875, 0.125, 0.75, -0.875, 0.125, 0.75, -0.9375], [0.125, 0.5625, -0.9375, 0.125, 0.5625, -0.875, -0.125, 0.5625, -0.875, -0.125, 0.5625, -0.9375], [0.125, 0.5625, -0.9375, 0.125, 0.75, -0.9375, 0.125, 0.75, -0.875, 0.125, 0.5625, -0.875], [-0.125, 0.5625, -0.875, -0.125, 0.75, -0.875, -0.125, 0.75, -0.9375, -0.125, 0.5625, -0.9375]],'tex_coords':[[0.30985915492957744, 0.33333333333333337, 0.30985915492957744, 0.6666666666666667, 0.36619718309859156, 0.6666666666666667, 0.36619718309859156, 0.33333333333333337], [0.4225352112676056, 0.33333333333333337, 0.4225352112676056, 0.6666666666666667, 0.4788732394366197, 0.6666666666666667, 0.4788732394366197, 0.33333333333333337], [0.30985915492957744, 0.6666666666666667, 0.30985915492957744, 1.0, 0.36619718309859156, 1.0, 0.36619718309859156, 0.6666666666666667], [0.36619718309859156, 0.6666666666666667, 0.36619718309859156, 1.0, 0.4225352112676056, 1.0, 0.4225352112676056, 0.6666666666666667], [0.36619718309859156, 0.33333333333333337, 0.36619718309859156, 0.6666666666666667, 0.4225352112676056, 0.6666666666666667, 0.4225352112676056, 0.33333333333333337], [0.2535211267605634, 0.33333333333333337, 0.2535211267605634, 0.6666666666666667, 0.30985915492957744, 0.6666666666666667, 0.30985915492957744, 0.33333333333333337], [0.4859154929577465, 0.8333333333333334, 0.4859154929577465, 0.9583333333333334, 0.5140845070422535, 0.9583333333333334, 0.5140845070422535, 0.8333333333333334], [0.5211267605633803, 0.8333333333333334, 0.5211267605633803, 0.9583333333333334, 0.5492957746478874, 0.9583333333333334, 0.5492957746478874, 0.8333333333333334], [0.4859154929577465, 0.9583333333333334, 0.4859154929577465, 1.0, 0.5140845070422535, 1.0, 0.5140845070422535, 0.9583333333333334], [0.5140845070422535, 0.9583333333333334, 0.5140845070422535, 1.0, 0.5422535211267606, 1.0, 0.5422535211267606, 0.9583333333333334], [0.5140845070422535, 0.8333333333333334, 0.5140845070422535, 0.9583333333333334, 0.5211267605633803, 0.9583333333333334, 0.5211267605633803, 0.8333333333333334], [0.4788732394366197, 0.8333333333333334, 0.4788732394366197, 0.9583333333333334, 0.4859154929577465, 0.9583333333333334, 0.4859154929577465, 0.8333333333333334]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'leg0','pivot':[-0.1875, 0.375, 0.4375],'vertices':[[-0.3125, 0.0, 0.3125, -0.3125, 0.375, 0.3125, -0.0625, 0.375, 0.3125, -0.0625, 0.0, 0.3125], [-0.0625, 0.0, 0.5625, -0.0625, 0.375, 0.5625, -0.3125, 0.375, 0.5625, -0.3125, 0.0, 0.5625], [-0.3125, 0.375, 0.3125, -0.3125, 0.375, 0.5625, -0.0625, 0.375, 0.5625, -0.0625, 0.375, 0.3125], [-0.0625, 0.0, 0.3125, -0.0625, 0.0, 0.5625, -0.3125, 0.0, 0.5625, -0.3125, 0.0, 0.3125], [-0.0625, 0.0, 0.3125, -0.0625, 0.375, 0.3125, -0.0625, 0.375, 0.5625, -0.0625, 0.0, 0.5625], [-0.3125, 0.0, 0.5625, -0.3125, 0.375, 0.5625, -0.3125, 0.375, 0.3125, -0.3125, 0.0, 0.3125]],'tex_coords':[[0.5774647887323944, 0.5833333333333333, 0.5774647887323944, 0.8333333333333334, 0.6056338028169014, 0.8333333333333334, 0.6056338028169014, 0.5833333333333333], [0.6338028169014085, 0.5833333333333333, 0.6338028169014085, 0.8333333333333334, 0.6619718309859155, 0.8333333333333334, 0.6619718309859155, 0.5833333333333333], [0.5774647887323944, 0.8333333333333334, 0.5774647887323944, 1.0, 0.6056338028169014, 1.0, 0.6056338028169014, 0.8333333333333334], [0.6056338028169014, 0.8333333333333334, 0.6056338028169014, 1.0, 0.6338028169014085, 1.0, 0.6338028169014085, 0.8333333333333334], [0.6056338028169014, 0.5833333333333333, 0.6056338028169014, 0.8333333333333334, 0.6338028169014085, 0.8333333333333334, 0.6338028169014085, 0.5833333333333333], [0.5492957746478874, 0.5833333333333333, 0.5492957746478874, 0.8333333333333334, 0.5774647887323944, 0.8333333333333334, 0.5774647887323944, 0.5833333333333333]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'leg1','pivot':[0.1875, 0.375, 0.4375],'vertices':[[0.0625, 0.0, 0.3125, 0.0625, 0.375, 0.3125, 0.3125, 0.375, 0.3125, 0.3125, 0.0, 0.3125], [0.3125, 0.0, 0.5625, 0.3125, 0.375, 0.5625, 0.0625, 0.375, 0.5625, 0.0625, 0.0, 0.5625], [0.0625, 0.375, 0.3125, 0.0625, 0.375, 0.5625, 0.3125, 0.375, 0.5625, 0.3125, 0.375, 0.3125], [0.3125, 0.0, 0.3125, 0.3125, 0.0, 0.5625, 0.0625, 0.0, 0.5625, 0.0625, 0.0, 0.3125], [0.3125, 0.0, 0.3125, 0.3125, 0.375, 0.3125, 0.3125, 0.375, 0.5625, 0.3125, 0.0, 0.5625], [0.0625, 0.0, 0.5625, 0.0625, 0.375, 0.5625, 0.0625, 0.375, 0.3125, 0.0625, 0.0, 0.3125]],'tex_coords':[[0.6901408450704225, 0.5833333333333333, 0.6901408450704225, 0.8333333333333334, 0.7183098591549296, 0.8333333333333334, 0.7183098591549296, 0.5833333333333333], [0.7464788732394366, 0.5833333333333333, 0.7464788732394366, 0.8333333333333334, 0.7746478873239436, 0.8333333333333334, 0.7746478873239436, 0.5833333333333333], [0.6901408450704225, 0.8333333333333334, 0.6901408450704225, 1.0, 0.7183098591549296, 1.0, 0.7183098591549296, 0.8333333333333334], [0.7183098591549296, 0.8333333333333334, 0.7183098591549296, 1.0, 0.7464788732394366, 1.0, 0.7464788732394366, 0.8333333333333334], [0.7183098591549296, 0.5833333333333333, 0.7183098591549296, 0.8333333333333334, 0.7464788732394366, 0.8333333333333334, 0.7464788732394366, 0.5833333333333333], [0.6619718309859155, 0.5833333333333333, 0.6619718309859155, 0.8333333333333334, 0.6901408450704225, 0.8333333333333334, 0.6901408450704225, 0.5833333333333333]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'leg2','pivot':[-0.1875, 0.375, -0.3125],'vertices':[[-0.3125, 0.0, -0.4375, -0.3125, 0.375, -0.4375, -0.0625, 0.375, -0.4375, -0.0625, 0.0, -0.4375], [-0.0625, 0.0, -0.1875, -0.0625, 0.375, -0.1875, -0.3125, 0.375, -0.1875, -0.3125, 0.0, -0.1875], [-0.3125, 0.375, -0.4375, -0.3125, 0.375, -0.1875, -0.0625, 0.375, -0.1875, -0.0625, 0.375, -0.4375], [-0.0625, 0.0, -0.4375, -0.0625, 0.0, -0.1875, -0.3125, 0.0, -0.1875, -0.3125, 0.0, -0.4375], [-0.0625, 0.0, -0.4375, -0.0625, 0.375, -0.4375, -0.0625, 0.375, -0.1875, -0.0625, 0.0, -0.1875], [-0.3125, 0.0, -0.1875, -0.3125, 0.375, -0.1875, -0.3125, 0.375, -0.4375, -0.3125, 0.0, -0.4375]],'tex_coords':[[0.8028169014084507, 0.5833333333333333, 0.8028169014084507, 0.8333333333333334, 0.8309859154929577, 0.8333333333333334, 0.8309859154929577, 0.5833333333333333], [0.8591549295774648, 0.5833333333333333, 0.8591549295774648, 0.8333333333333334, 0.8873239436619719, 0.8333333333333334, 0.8873239436619719, 0.5833333333333333], [0.8028169014084507, 0.8333333333333334, 0.8028169014084507, 1.0, 0.8309859154929577, 1.0, 0.8309859154929577, 0.8333333333333334], [0.8309859154929577, 0.8333333333333334, 0.8309859154929577, 1.0, 0.8591549295774648, 1.0, 0.8591549295774648, 0.8333333333333334], [0.8309859154929577, 0.5833333333333333, 0.8309859154929577, 0.8333333333333334, 0.8591549295774648, 0.8333333333333334, 0.8591549295774648, 0.5833333333333333], [0.7746478873239436, 0.5833333333333333, 0.7746478873239436, 0.8333333333333334, 0.8028169014084507, 0.8333333333333334, 0.8028169014084507, 0.5833333333333333]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'leg3','pivot':[0.1875, 0.375, -0.3125],'vertices':[[0.0625, 0.0, -0.4375, 0.0625, 0.375, -0.4375, 0.3125, 0.375, -0.4375, 0.3125, 0.0, -0.4375], [0.3125, 0.0, -0.1875, 0.3125, 0.375, -0.1875, 0.0625, 0.375, -0.1875, 0.0625, 0.0, -0.1875], [0.0625, 0.375, -0.4375, 0.0625, 0.375, -0.1875, 0.3125, 0.375, -0.1875, 0.3125, 0.375, -0.4375], [0.3125, 0.0, -0.4375, 0.3125, 0.0, -0.1875, 0.0625, 0.0, -0.1875, 0.0625, 0.0, -0.4375], [0.3125, 0.0, -0.4375, 0.3125, 0.375, -0.4375, 0.3125, 0.375, -0.1875, 0.3125, 0.0, -0.1875], [0.0625, 0.0, -0.1875, 0.0625, 0.375, -0.1875, 0.0625, 0.375, -0.4375, 0.0625, 0.0, -0.4375]],'tex_coords':[[0.9154929577464789, 0.5833333333333333, 0.9154929577464789, 0.8333333333333334, 0.9436619718309859, 0.8333333333333334, 0.9436619718309859, 0.5833333333333333], [0.971830985915493, 0.5833333333333333, 0.971830985915493, 0.8333333333333334, 1.0, 0.8333333333333334, 1.0, 0.5833333333333333], [0.9154929577464789, 0.8333333333333334, 0.9154929577464789, 1.0, 0.9436619718309859, 1.0, 0.9436619718309859, 0.8333333333333334], [0.9436619718309859, 0.8333333333333334, 0.9436619718309859, 1.0, 0.971830985915493, 1.0, 0.971830985915493, 0.8333333333333334], [0.9436619718309859, 0.5833333333333333, 0.9436619718309859, 0.8333333333333334, 0.971830985915493, 0.8333333333333334, 0.971830985915493, 0.5833333333333333], [0.8873239436619719, 0.5833333333333333, 0.8873239436619719, 0.8333333333333334, 0.9154929577464789, 0.8333333333333334, 0.9154929577464789, 0.5833333333333333]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}] diff --git a/episode-13/models/skeleton.py b/episode-13/models/skeleton.py index e528a48e..003cd6c2 100644 --- a/episode-13/models/skeleton.py +++ b/episode-13/models/skeleton.py @@ -5,6 +5,4 @@ colliders = [] -vertex_positions = [[-0.25, 0.75, -0.125, -0.25, 1.5, -0.125, 0.25, 1.5, -0.125, 0.25, 0.75, -0.125], [0.25, 0.75, 0.125, 0.25, 1.5, 0.125, -0.25, 1.5, 0.125, -0.25, 0.75, 0.125], [-0.25, 1.5, -0.125, -0.25, 1.5, 0.125, 0.25, 1.5, 0.125, 0.25, 1.5, -0.125], [0.25, 0.75, -0.125, 0.25, 0.75, 0.125, -0.25, 0.75, 0.125, -0.25, 0.75, -0.125], [0.25, 0.75, -0.125, 0.25, 1.5, -0.125, 0.25, 1.5, 0.125, 0.25, 0.75, 0.125], [-0.25, 0.75, 0.125, -0.25, 1.5, 0.125, -0.25, 1.5, -0.125, -0.25, 0.75, -0.125], [-0.25, 1.5, -0.25, -0.25, 2.0, -0.25, 0.25, 2.0, -0.25, 0.25, 1.5, -0.25], [0.25, 1.5, 0.25, 0.25, 2.0, 0.25, -0.25, 2.0, 0.25, -0.25, 1.5, 0.25], [-0.25, 2.0, -0.25, -0.25, 2.0, 0.25, 0.25, 2.0, 0.25, 0.25, 2.0, -0.25], [0.25, 1.5, -0.25, 0.25, 1.5, 0.25, -0.25, 1.5, 0.25, -0.25, 1.5, -0.25], [0.25, 1.5, -0.25, 0.25, 2.0, -0.25, 0.25, 2.0, 0.25, 0.25, 1.5, 0.25], [-0.25, 1.5, 0.25, -0.25, 2.0, 0.25, -0.25, 2.0, -0.25, -0.25, 1.5, -0.25], [-0.25, 1.5, -0.25, -0.25, 2.0, -0.25, 0.25, 2.0, -0.25, 0.25, 1.5, -0.25], [0.25, 1.5, 0.25, 0.25, 2.0, 0.25, -0.25, 2.0, 0.25, -0.25, 1.5, 0.25], [-0.25, 2.0, -0.25, -0.25, 2.0, 0.25, 0.25, 2.0, 0.25, 0.25, 2.0, -0.25], [0.25, 1.5, -0.25, 0.25, 1.5, 0.25, -0.25, 1.5, 0.25, -0.25, 1.5, -0.25], [0.25, 1.5, -0.25, 0.25, 2.0, -0.25, 0.25, 2.0, 0.25, 0.25, 1.5, 0.25], [-0.25, 1.5, 0.25, -0.25, 2.0, 0.25, -0.25, 2.0, -0.25, -0.25, 1.5, -0.25], [-0.375, 0.75, -0.0625, -0.375, 1.5, -0.0625, -0.25, 1.5, -0.0625, -0.25, 0.75, -0.0625], [-0.25, 0.75, 0.0625, -0.25, 1.5, 0.0625, -0.375, 1.5, 0.0625, -0.375, 0.75, 0.0625], [-0.375, 1.5, -0.0625, -0.375, 1.5, 0.0625, -0.25, 1.5, 0.0625, -0.25, 1.5, -0.0625], [-0.25, 0.75, -0.0625, -0.25, 0.75, 0.0625, -0.375, 0.75, 0.0625, -0.375, 0.75, -0.0625], [-0.25, 0.75, -0.0625, -0.25, 1.5, -0.0625, -0.25, 1.5, 0.0625, -0.25, 0.75, 0.0625], [-0.375, 0.75, 0.0625, -0.375, 1.5, 0.0625, -0.375, 1.5, -0.0625, -0.375, 0.75, -0.0625], [0.25, 0.75, -0.0625, 0.25, 1.5, -0.0625, 0.375, 1.5, -0.0625, 0.375, 0.75, -0.0625], [0.375, 0.75, 0.0625, 0.375, 1.5, 0.0625, 0.25, 1.5, 0.0625, 0.25, 0.75, 0.0625], [0.25, 1.5, -0.0625, 0.25, 1.5, 0.0625, 0.375, 1.5, 0.0625, 0.375, 1.5, -0.0625], [0.375, 0.75, -0.0625, 0.375, 0.75, 0.0625, 0.25, 0.75, 0.0625, 0.25, 0.75, -0.0625], [0.375, 0.75, -0.0625, 0.375, 1.5, -0.0625, 0.375, 1.5, 0.0625, 0.375, 0.75, 0.0625], [0.25, 0.75, 0.0625, 0.25, 1.5, 0.0625, 0.25, 1.5, -0.0625, 0.25, 0.75, -0.0625], [-0.1875, 0.0, -0.0625, -0.1875, 0.75, -0.0625, -0.0625, 0.75, -0.0625, -0.0625, 0.0, -0.0625], [-0.0625, 0.0, 0.0625, -0.0625, 0.75, 0.0625, -0.1875, 0.75, 0.0625, -0.1875, 0.0, 0.0625], [-0.1875, 0.75, -0.0625, -0.1875, 0.75, 0.0625, -0.0625, 0.75, 0.0625, -0.0625, 0.75, -0.0625], [-0.0625, 0.0, -0.0625, -0.0625, 0.0, 0.0625, -0.1875, 0.0, 0.0625, -0.1875, 0.0, -0.0625], [-0.0625, 0.0, -0.0625, -0.0625, 0.75, -0.0625, -0.0625, 0.75, 0.0625, -0.0625, 0.0, 0.0625], [-0.1875, 0.0, 0.0625, -0.1875, 0.75, 0.0625, -0.1875, 0.75, -0.0625, -0.1875, 0.0, -0.0625], [0.0625, 0.0, -0.0625, 0.0625, 0.75, -0.0625, 0.1875, 0.75, -0.0625, 0.1875, 0.0, -0.0625], [0.1875, 0.0, 0.0625, 0.1875, 0.75, 0.0625, 0.0625, 0.75, 0.0625, 0.0625, 0.0, 0.0625], [0.0625, 0.75, -0.0625, 0.0625, 0.75, 0.0625, 0.1875, 0.75, 0.0625, 0.1875, 0.75, -0.0625], [0.1875, 0.0, -0.0625, 0.1875, 0.0, 0.0625, 0.0625, 0.0, 0.0625, 0.0625, 0.0, -0.0625], [0.1875, 0.0, -0.0625, 0.1875, 0.75, -0.0625, 0.1875, 0.75, 0.0625, 0.1875, 0.0, 0.0625], [0.0625, 0.0, 0.0625, 0.0625, 0.75, 0.0625, 0.0625, 0.75, -0.0625, 0.0625, 0.0, -0.0625]] -tex_coords = [[0.03333333333333333, 0.0, 0, 0.03333333333333333, 0.75, 0, 0.1, 0.75, 0, 0.1, 0.0, 0], [0.13333333333333333, 0.0, 0, 0.13333333333333333, 0.75, 0, 0.2, 0.75, 0, 0.2, 0.0, 0], [0.03333333333333333, 0.75, 0, 0.03333333333333333, 1.0, 0, 0.1, 1.0, 0, 0.1, 0.75, 0], [0.1, 0.75, 0, 0.1, 1.0, 0, 0.16666666666666666, 1.0, 0, 0.16666666666666666, 0.75, 0], [0.1, 0.0, 0, 0.1, 0.75, 0, 0.13333333333333333, 0.75, 0, 0.13333333333333333, 0.0, 0], [0.0, 0.0, 0, 0.0, 0.75, 0, 0.03333333333333333, 0.75, 0, 0.03333333333333333, 0.0, 0], [0.26666666666666666, 0.0, 0, 0.26666666666666666, 0.5, 0, 0.3333333333333333, 0.5, 0, 0.3333333333333333, 0.0, 0], [0.4, 0.0, 0, 0.4, 0.5, 0, 0.4666666666666667, 0.5, 0, 0.4666666666666667, 0.0, 0], [0.26666666666666666, 0.5, 0, 0.26666666666666666, 1.0, 0, 0.3333333333333333, 1.0, 0, 0.3333333333333333, 0.5, 0], [0.3333333333333333, 0.5, 0, 0.3333333333333333, 1.0, 0, 0.4, 1.0, 0, 0.4, 0.5, 0], [0.3333333333333333, 0.0, 0, 0.3333333333333333, 0.5, 0, 0.4, 0.5, 0, 0.4, 0.0, 0], [0.2, 0.0, 0, 0.2, 0.5, 0, 0.26666666666666666, 0.5, 0, 0.26666666666666666, 0.0, 0], [0.5333333333333333, 0.0, 0, 0.5333333333333333, 0.5, 0, 0.6, 0.5, 0, 0.6, 0.0, 0], [0.6666666666666666, 0.0, 0, 0.6666666666666666, 0.5, 0, 0.7333333333333333, 0.5, 0, 0.7333333333333333, 0.0, 0], [0.5333333333333333, 0.5, 0, 0.5333333333333333, 1.0, 0, 0.6, 1.0, 0, 0.6, 0.5, 0], [0.6, 0.5, 0, 0.6, 1.0, 0, 0.6666666666666666, 1.0, 0, 0.6666666666666666, 0.5, 0], [0.6, 0.0, 0, 0.6, 0.5, 0, 0.6666666666666666, 0.5, 0, 0.6666666666666666, 0.0, 0], [0.4666666666666667, 0.0, 0, 0.4666666666666667, 0.5, 0, 0.5333333333333333, 0.5, 0, 0.5333333333333333, 0.0, 0], [0.75, 0.125, 0, 0.75, 0.875, 0, 0.7666666666666667, 0.875, 0, 0.7666666666666667, 0.125, 0], [0.7833333333333333, 0.125, 0, 0.7833333333333333, 0.875, 0, 0.8, 0.875, 0, 0.8, 0.125, 0], [0.75, 0.875, 0, 0.75, 1.0, 0, 0.7666666666666667, 1.0, 0, 0.7666666666666667, 0.875, 0], [0.7666666666666667, 0.875, 0, 0.7666666666666667, 1.0, 0, 0.7833333333333333, 1.0, 0, 0.7833333333333333, 0.875, 0], [0.7666666666666667, 0.125, 0, 0.7666666666666667, 0.875, 0, 0.7833333333333333, 0.875, 0, 0.7833333333333333, 0.125, 0], [0.7333333333333333, 0.125, 0, 0.7333333333333333, 0.875, 0, 0.75, 0.875, 0, 0.75, 0.125, 0], [0.8166666666666667, 0.125, 0, 0.8166666666666667, 0.875, 0, 0.8333333333333334, 0.875, 0, 0.8333333333333334, 0.125, 0], [0.85, 0.125, 0, 0.85, 0.875, 0, 0.8666666666666667, 0.875, 0, 0.8666666666666667, 0.125, 0], [0.8166666666666667, 0.875, 0, 0.8166666666666667, 1.0, 0, 0.8333333333333334, 1.0, 0, 0.8333333333333334, 0.875, 0], [0.8333333333333334, 0.875, 0, 0.8333333333333334, 1.0, 0, 0.85, 1.0, 0, 0.85, 0.875, 0], [0.8333333333333334, 0.125, 0, 0.8333333333333334, 0.875, 0, 0.85, 0.875, 0, 0.85, 0.125, 0], [0.8, 0.125, 0, 0.8, 0.875, 0, 0.8166666666666667, 0.875, 0, 0.8166666666666667, 0.125, 0], [0.8833333333333333, 0.125, 0, 0.8833333333333333, 0.875, 0, 0.9, 0.875, 0, 0.9, 0.125, 0], [0.9166666666666666, 0.125, 0, 0.9166666666666666, 0.875, 0, 0.9333333333333333, 0.875, 0, 0.9333333333333333, 0.125, 0], [0.8833333333333333, 0.875, 0, 0.8833333333333333, 1.0, 0, 0.9, 1.0, 0, 0.9, 0.875, 0], [0.9, 0.875, 0, 0.9, 1.0, 0, 0.9166666666666666, 1.0, 0, 0.9166666666666666, 0.875, 0], [0.9, 0.125, 0, 0.9, 0.875, 0, 0.9166666666666666, 0.875, 0, 0.9166666666666666, 0.125, 0], [0.8666666666666667, 0.125, 0, 0.8666666666666667, 0.875, 0, 0.8833333333333333, 0.875, 0, 0.8833333333333333, 0.125, 0], [0.95, 0.125, 0, 0.95, 0.875, 0, 0.9666666666666667, 0.875, 0, 0.9666666666666667, 0.125, 0], [0.9833333333333333, 0.125, 0, 0.9833333333333333, 0.875, 0, 1.0, 0.875, 0, 1.0, 0.125, 0], [0.95, 0.875, 0, 0.95, 1.0, 0, 0.9666666666666667, 1.0, 0, 0.9666666666666667, 0.875, 0], [0.9666666666666667, 0.875, 0, 0.9666666666666667, 1.0, 0, 0.9833333333333333, 1.0, 0, 0.9833333333333333, 0.875, 0], [0.9666666666666667, 0.125, 0, 0.9666666666666667, 0.875, 0, 0.9833333333333333, 0.875, 0, 0.9833333333333333, 0.125, 0], [0.9333333333333333, 0.125, 0, 0.9333333333333333, 0.875, 0, 0.95, 0.875, 0, 0.95, 0.125, 0]] -shading_values = [[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]] +bones = [{'name':'body','pivot':[0.0, 1.5, 0.0],'vertices':[[-0.25, 0.75, -0.125, -0.25, 1.5, -0.125, 0.25, 1.5, -0.125, 0.25, 0.75, -0.125], [0.25, 0.75, 0.125, 0.25, 1.5, 0.125, -0.25, 1.5, 0.125, -0.25, 0.75, 0.125], [-0.25, 1.5, -0.125, -0.25, 1.5, 0.125, 0.25, 1.5, 0.125, 0.25, 1.5, -0.125], [0.25, 0.75, -0.125, 0.25, 0.75, 0.125, -0.25, 0.75, 0.125, -0.25, 0.75, -0.125], [0.25, 0.75, -0.125, 0.25, 1.5, -0.125, 0.25, 1.5, 0.125, 0.25, 0.75, 0.125], [-0.25, 0.75, 0.125, -0.25, 1.5, 0.125, -0.25, 1.5, -0.125, -0.25, 0.75, -0.125]],'tex_coords':[[0.03333333333333333, 0.0, 0.03333333333333333, 0.75, 0.1, 0.75, 0.1, 0.0], [0.13333333333333333, 0.0, 0.13333333333333333, 0.75, 0.2, 0.75, 0.2, 0.0], [0.03333333333333333, 0.75, 0.03333333333333333, 1.0, 0.1, 1.0, 0.1, 0.75], [0.1, 0.75, 0.1, 1.0, 0.16666666666666666, 1.0, 0.16666666666666666, 0.75], [0.1, 0.0, 0.1, 0.75, 0.13333333333333333, 0.75, 0.13333333333333333, 0.0], [0.0, 0.0, 0.0, 0.75, 0.03333333333333333, 0.75, 0.03333333333333333, 0.0]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'head','pivot':[0.0, 1.5, 0.0],'vertices':[[-0.25, 1.5, -0.25, -0.25, 2.0, -0.25, 0.25, 2.0, -0.25, 0.25, 1.5, -0.25], [0.25, 1.5, 0.25, 0.25, 2.0, 0.25, -0.25, 2.0, 0.25, -0.25, 1.5, 0.25], [-0.25, 2.0, -0.25, -0.25, 2.0, 0.25, 0.25, 2.0, 0.25, 0.25, 2.0, -0.25], [0.25, 1.5, -0.25, 0.25, 1.5, 0.25, -0.25, 1.5, 0.25, -0.25, 1.5, -0.25], [0.25, 1.5, -0.25, 0.25, 2.0, -0.25, 0.25, 2.0, 0.25, 0.25, 1.5, 0.25], [-0.25, 1.5, 0.25, -0.25, 2.0, 0.25, -0.25, 2.0, -0.25, -0.25, 1.5, -0.25]],'tex_coords':[[0.26666666666666666, 0.0, 0.26666666666666666, 0.5, 0.3333333333333333, 0.5, 0.3333333333333333, 0.0], [0.4, 0.0, 0.4, 0.5, 0.4666666666666667, 0.5, 0.4666666666666667, 0.0], [0.26666666666666666, 0.5, 0.26666666666666666, 1.0, 0.3333333333333333, 1.0, 0.3333333333333333, 0.5], [0.3333333333333333, 0.5, 0.3333333333333333, 1.0, 0.4, 1.0, 0.4, 0.5], [0.3333333333333333, 0.0, 0.3333333333333333, 0.5, 0.4, 0.5, 0.4, 0.0], [0.2, 0.0, 0.2, 0.5, 0.26666666666666666, 0.5, 0.26666666666666666, 0.0]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'hat','pivot':[0.0, 1.5, 0.0],'vertices':[[-0.25, 1.5, -0.25, -0.25, 2.0, -0.25, 0.25, 2.0, -0.25, 0.25, 1.5, -0.25], [0.25, 1.5, 0.25, 0.25, 2.0, 0.25, -0.25, 2.0, 0.25, -0.25, 1.5, 0.25], [-0.25, 2.0, -0.25, -0.25, 2.0, 0.25, 0.25, 2.0, 0.25, 0.25, 2.0, -0.25], [0.25, 1.5, -0.25, 0.25, 1.5, 0.25, -0.25, 1.5, 0.25, -0.25, 1.5, -0.25], [0.25, 1.5, -0.25, 0.25, 2.0, -0.25, 0.25, 2.0, 0.25, 0.25, 1.5, 0.25], [-0.25, 1.5, 0.25, -0.25, 2.0, 0.25, -0.25, 2.0, -0.25, -0.25, 1.5, -0.25]],'tex_coords':[[0.5333333333333333, 0.0, 0.5333333333333333, 0.5, 0.6, 0.5, 0.6, 0.0], [0.6666666666666666, 0.0, 0.6666666666666666, 0.5, 0.7333333333333333, 0.5, 0.7333333333333333, 0.0], [0.5333333333333333, 0.5, 0.5333333333333333, 1.0, 0.6, 1.0, 0.6, 0.5], [0.6, 0.5, 0.6, 1.0, 0.6666666666666666, 1.0, 0.6666666666666666, 0.5], [0.6, 0.0, 0.6, 0.5, 0.6666666666666666, 0.5, 0.6666666666666666, 0.0], [0.4666666666666667, 0.0, 0.4666666666666667, 0.5, 0.5333333333333333, 0.5, 0.5333333333333333, 0.0]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'rightArm','pivot':[-0.3125, 1.375, 0.0],'vertices':[[-0.375, 0.75, -0.0625, -0.375, 1.5, -0.0625, -0.25, 1.5, -0.0625, -0.25, 0.75, -0.0625], [-0.25, 0.75, 0.0625, -0.25, 1.5, 0.0625, -0.375, 1.5, 0.0625, -0.375, 0.75, 0.0625], [-0.375, 1.5, -0.0625, -0.375, 1.5, 0.0625, -0.25, 1.5, 0.0625, -0.25, 1.5, -0.0625], [-0.25, 0.75, -0.0625, -0.25, 0.75, 0.0625, -0.375, 0.75, 0.0625, -0.375, 0.75, -0.0625], [-0.25, 0.75, -0.0625, -0.25, 1.5, -0.0625, -0.25, 1.5, 0.0625, -0.25, 0.75, 0.0625], [-0.375, 0.75, 0.0625, -0.375, 1.5, 0.0625, -0.375, 1.5, -0.0625, -0.375, 0.75, -0.0625]],'tex_coords':[[0.75, 0.125, 0.75, 0.875, 0.7666666666666667, 0.875, 0.7666666666666667, 0.125], [0.7833333333333333, 0.125, 0.7833333333333333, 0.875, 0.8, 0.875, 0.8, 0.125], [0.75, 0.875, 0.75, 1.0, 0.7666666666666667, 1.0, 0.7666666666666667, 0.875], [0.7666666666666667, 0.875, 0.7666666666666667, 1.0, 0.7833333333333333, 1.0, 0.7833333333333333, 0.875], [0.7666666666666667, 0.125, 0.7666666666666667, 0.875, 0.7833333333333333, 0.875, 0.7833333333333333, 0.125], [0.7333333333333333, 0.125, 0.7333333333333333, 0.875, 0.75, 0.875, 0.75, 0.125]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'leftArm','pivot':[0.3125, 1.375, 0.0],'vertices':[[0.25, 0.75, -0.0625, 0.25, 1.5, -0.0625, 0.375, 1.5, -0.0625, 0.375, 0.75, -0.0625], [0.375, 0.75, 0.0625, 0.375, 1.5, 0.0625, 0.25, 1.5, 0.0625, 0.25, 0.75, 0.0625], [0.25, 1.5, -0.0625, 0.25, 1.5, 0.0625, 0.375, 1.5, 0.0625, 0.375, 1.5, -0.0625], [0.375, 0.75, -0.0625, 0.375, 0.75, 0.0625, 0.25, 0.75, 0.0625, 0.25, 0.75, -0.0625], [0.375, 0.75, -0.0625, 0.375, 1.5, -0.0625, 0.375, 1.5, 0.0625, 0.375, 0.75, 0.0625], [0.25, 0.75, 0.0625, 0.25, 1.5, 0.0625, 0.25, 1.5, -0.0625, 0.25, 0.75, -0.0625]],'tex_coords':[[0.8166666666666667, 0.125, 0.8166666666666667, 0.875, 0.8333333333333334, 0.875, 0.8333333333333334, 0.125], [0.85, 0.125, 0.85, 0.875, 0.8666666666666667, 0.875, 0.8666666666666667, 0.125], [0.8166666666666667, 0.875, 0.8166666666666667, 1.0, 0.8333333333333334, 1.0, 0.8333333333333334, 0.875], [0.8333333333333334, 0.875, 0.8333333333333334, 1.0, 0.85, 1.0, 0.85, 0.875], [0.8333333333333334, 0.125, 0.8333333333333334, 0.875, 0.85, 0.875, 0.85, 0.125], [0.8, 0.125, 0.8, 0.875, 0.8166666666666667, 0.875, 0.8166666666666667, 0.125]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'rightLeg','pivot':[-0.125, 0.75, 0.0],'vertices':[[-0.1875, 0.0, -0.0625, -0.1875, 0.75, -0.0625, -0.0625, 0.75, -0.0625, -0.0625, 0.0, -0.0625], [-0.0625, 0.0, 0.0625, -0.0625, 0.75, 0.0625, -0.1875, 0.75, 0.0625, -0.1875, 0.0, 0.0625], [-0.1875, 0.75, -0.0625, -0.1875, 0.75, 0.0625, -0.0625, 0.75, 0.0625, -0.0625, 0.75, -0.0625], [-0.0625, 0.0, -0.0625, -0.0625, 0.0, 0.0625, -0.1875, 0.0, 0.0625, -0.1875, 0.0, -0.0625], [-0.0625, 0.0, -0.0625, -0.0625, 0.75, -0.0625, -0.0625, 0.75, 0.0625, -0.0625, 0.0, 0.0625], [-0.1875, 0.0, 0.0625, -0.1875, 0.75, 0.0625, -0.1875, 0.75, -0.0625, -0.1875, 0.0, -0.0625]],'tex_coords':[[0.8833333333333333, 0.125, 0.8833333333333333, 0.875, 0.9, 0.875, 0.9, 0.125], [0.9166666666666666, 0.125, 0.9166666666666666, 0.875, 0.9333333333333333, 0.875, 0.9333333333333333, 0.125], [0.8833333333333333, 0.875, 0.8833333333333333, 1.0, 0.9, 1.0, 0.9, 0.875], [0.9, 0.875, 0.9, 1.0, 0.9166666666666666, 1.0, 0.9166666666666666, 0.875], [0.9, 0.125, 0.9, 0.875, 0.9166666666666666, 0.875, 0.9166666666666666, 0.125], [0.8666666666666667, 0.125, 0.8666666666666667, 0.875, 0.8833333333333333, 0.875, 0.8833333333333333, 0.125]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'leftLeg','pivot':[0.125, 0.75, 0.0],'vertices':[[0.0625, 0.0, -0.0625, 0.0625, 0.75, -0.0625, 0.1875, 0.75, -0.0625, 0.1875, 0.0, -0.0625], [0.1875, 0.0, 0.0625, 0.1875, 0.75, 0.0625, 0.0625, 0.75, 0.0625, 0.0625, 0.0, 0.0625], [0.0625, 0.75, -0.0625, 0.0625, 0.75, 0.0625, 0.1875, 0.75, 0.0625, 0.1875, 0.75, -0.0625], [0.1875, 0.0, -0.0625, 0.1875, 0.0, 0.0625, 0.0625, 0.0, 0.0625, 0.0625, 0.0, -0.0625], [0.1875, 0.0, -0.0625, 0.1875, 0.75, -0.0625, 0.1875, 0.75, 0.0625, 0.1875, 0.0, 0.0625], [0.0625, 0.0, 0.0625, 0.0625, 0.75, 0.0625, 0.0625, 0.75, -0.0625, 0.0625, 0.0, -0.0625]],'tex_coords':[[0.95, 0.125, 0.95, 0.875, 0.9666666666666667, 0.875, 0.9666666666666667, 0.125], [0.9833333333333333, 0.125, 0.9833333333333333, 0.875, 1.0, 0.875, 1.0, 0.125], [0.95, 0.875, 0.95, 1.0, 0.9666666666666667, 1.0, 0.9666666666666667, 0.875], [0.9666666666666667, 0.875, 0.9666666666666667, 1.0, 0.9833333333333333, 1.0, 0.9833333333333333, 0.875], [0.9666666666666667, 0.125, 0.9666666666666667, 0.875, 0.9833333333333333, 0.875, 0.9833333333333333, 0.125], [0.9333333333333333, 0.125, 0.9333333333333333, 0.875, 0.95, 0.875, 0.95, 0.125]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}] diff --git a/episode-13/models/zombie.py b/episode-13/models/zombie.py index 3bdc469d..d1650af9 100644 --- a/episode-13/models/zombie.py +++ b/episode-13/models/zombie.py @@ -5,6 +5,4 @@ colliders = [] -vertex_positions = [[-0.25, 0.75, -0.125, -0.25, 1.5, -0.125, 0.25, 1.5, -0.125, 0.25, 0.75, -0.125], [0.25, 0.75, 0.125, 0.25, 1.5, 0.125, -0.25, 1.5, 0.125, -0.25, 0.75, 0.125], [-0.25, 1.5, -0.125, -0.25, 1.5, 0.125, 0.25, 1.5, 0.125, 0.25, 1.5, -0.125], [0.25, 0.75, -0.125, 0.25, 0.75, 0.125, -0.25, 0.75, 0.125, -0.25, 0.75, -0.125], [0.25, 0.75, -0.125, 0.25, 1.5, -0.125, 0.25, 1.5, 0.125, 0.25, 0.75, 0.125], [-0.25, 0.75, 0.125, -0.25, 1.5, 0.125, -0.25, 1.5, -0.125, -0.25, 0.75, -0.125], [-0.25, 1.5, -0.25, -0.25, 2.0, -0.25, 0.25, 2.0, -0.25, 0.25, 1.5, -0.25], [0.25, 1.5, 0.25, 0.25, 2.0, 0.25, -0.25, 2.0, 0.25, -0.25, 1.5, 0.25], [-0.25, 2.0, -0.25, -0.25, 2.0, 0.25, 0.25, 2.0, 0.25, 0.25, 2.0, -0.25], [0.25, 1.5, -0.25, 0.25, 1.5, 0.25, -0.25, 1.5, 0.25, -0.25, 1.5, -0.25], [0.25, 1.5, -0.25, 0.25, 2.0, -0.25, 0.25, 2.0, 0.25, 0.25, 1.5, 0.25], [-0.25, 1.5, 0.25, -0.25, 2.0, 0.25, -0.25, 2.0, -0.25, -0.25, 1.5, -0.25], [-0.25, 1.5, -0.25, -0.25, 2.0, -0.25, 0.25, 2.0, -0.25, 0.25, 1.5, -0.25], [0.25, 1.5, 0.25, 0.25, 2.0, 0.25, -0.25, 2.0, 0.25, -0.25, 1.5, 0.25], [-0.25, 2.0, -0.25, -0.25, 2.0, 0.25, 0.25, 2.0, 0.25, 0.25, 2.0, -0.25], [0.25, 1.5, -0.25, 0.25, 1.5, 0.25, -0.25, 1.5, 0.25, -0.25, 1.5, -0.25], [0.25, 1.5, -0.25, 0.25, 2.0, -0.25, 0.25, 2.0, 0.25, 0.25, 1.5, 0.25], [-0.25, 1.5, 0.25, -0.25, 2.0, 0.25, -0.25, 2.0, -0.25, -0.25, 1.5, -0.25], [-0.5, 0.75, -0.125, -0.5, 1.5, -0.125, -0.25, 1.5, -0.125, -0.25, 0.75, -0.125], [-0.25, 0.75, 0.125, -0.25, 1.5, 0.125, -0.5, 1.5, 0.125, -0.5, 0.75, 0.125], [-0.5, 1.5, -0.125, -0.5, 1.5, 0.125, -0.25, 1.5, 0.125, -0.25, 1.5, -0.125], [-0.25, 0.75, -0.125, -0.25, 0.75, 0.125, -0.5, 0.75, 0.125, -0.5, 0.75, -0.125], [-0.25, 0.75, -0.125, -0.25, 1.5, -0.125, -0.25, 1.5, 0.125, -0.25, 0.75, 0.125], [-0.5, 0.75, 0.125, -0.5, 1.5, 0.125, -0.5, 1.5, -0.125, -0.5, 0.75, -0.125], [0.25, 0.75, -0.125, 0.25, 1.5, -0.125, 0.5, 1.5, -0.125, 0.5, 0.75, -0.125], [0.5, 0.75, 0.125, 0.5, 1.5, 0.125, 0.25, 1.5, 0.125, 0.25, 0.75, 0.125], [0.25, 1.5, -0.125, 0.25, 1.5, 0.125, 0.5, 1.5, 0.125, 0.5, 1.5, -0.125], [0.5, 0.75, -0.125, 0.5, 0.75, 0.125, 0.25, 0.75, 0.125, 0.25, 0.75, -0.125], [0.5, 0.75, -0.125, 0.5, 1.5, -0.125, 0.5, 1.5, 0.125, 0.5, 0.75, 0.125], [0.25, 0.75, 0.125, 0.25, 1.5, 0.125, 0.25, 1.5, -0.125, 0.25, 0.75, -0.125], [-0.24375000596046448, 0.0, -0.125, -0.24375000596046448, 0.75, -0.125, 0.0062500000931322575, 0.75, -0.125, 0.0062500000931322575, 0.0, -0.125], [0.0062500000931322575, 0.0, 0.125, 0.0062500000931322575, 0.75, 0.125, -0.24375000596046448, 0.75, 0.125, -0.24375000596046448, 0.0, 0.125], [-0.24375000596046448, 0.75, -0.125, -0.24375000596046448, 0.75, 0.125, 0.0062500000931322575, 0.75, 0.125, 0.0062500000931322575, 0.75, -0.125], [0.0062500000931322575, 0.0, -0.125, 0.0062500000931322575, 0.0, 0.125, -0.24375000596046448, 0.0, 0.125, -0.24375000596046448, 0.0, -0.125], [0.0062500000931322575, 0.0, -0.125, 0.0062500000931322575, 0.75, -0.125, 0.0062500000931322575, 0.75, 0.125, 0.0062500000931322575, 0.0, 0.125], [-0.24375000596046448, 0.0, 0.125, -0.24375000596046448, 0.75, 0.125, -0.24375000596046448, 0.75, -0.125, -0.24375000596046448, 0.0, -0.125], [-0.0062500000931322575, 0.0, -0.125, -0.0062500000931322575, 0.75, -0.125, 0.24375000596046448, 0.75, -0.125, 0.24375000596046448, 0.0, -0.125], [0.24375000596046448, 0.0, 0.125, 0.24375000596046448, 0.75, 0.125, -0.0062500000931322575, 0.75, 0.125, -0.0062500000931322575, 0.0, 0.125], [-0.0062500000931322575, 0.75, -0.125, -0.0062500000931322575, 0.75, 0.125, 0.24375000596046448, 0.75, 0.125, 0.24375000596046448, 0.75, -0.125], [0.24375000596046448, 0.0, -0.125, 0.24375000596046448, 0.0, 0.125, -0.0062500000931322575, 0.0, 0.125, -0.0062500000931322575, 0.0, -0.125], [0.24375000596046448, 0.0, -0.125, 0.24375000596046448, 0.75, -0.125, 0.24375000596046448, 0.75, 0.125, 0.24375000596046448, 0.0, 0.125], [-0.0062500000931322575, 0.0, 0.125, -0.0062500000931322575, 0.75, 0.125, -0.0062500000931322575, 0.75, -0.125, -0.0062500000931322575, 0.0, -0.125]] -tex_coords = [[0.02631578947368421, 0.0, 0, 0.02631578947368421, 0.75, 0, 0.07894736842105263, 0.75, 0, 0.07894736842105263, 0.0, 0], [0.10526315789473684, 0.0, 0, 0.10526315789473684, 0.75, 0, 0.15789473684210525, 0.75, 0, 0.15789473684210525, 0.0, 0], [0.02631578947368421, 0.75, 0, 0.02631578947368421, 1.0, 0, 0.07894736842105263, 1.0, 0, 0.07894736842105263, 0.75, 0], [0.07894736842105263, 0.75, 0, 0.07894736842105263, 1.0, 0, 0.13157894736842105, 1.0, 0, 0.13157894736842105, 0.75, 0], [0.07894736842105263, 0.0, 0, 0.07894736842105263, 0.75, 0, 0.10526315789473684, 0.75, 0, 0.10526315789473684, 0.0, 0], [0.0, 0.0, 0, 0.0, 0.75, 0, 0.02631578947368421, 0.75, 0, 0.02631578947368421, 0.0, 0], [0.21052631578947367, 0.0, 0, 0.21052631578947367, 0.5, 0, 0.2631578947368421, 0.5, 0, 0.2631578947368421, 0.0, 0], [0.3157894736842105, 0.0, 0, 0.3157894736842105, 0.5, 0, 0.3684210526315789, 0.5, 0, 0.3684210526315789, 0.0, 0], [0.21052631578947367, 0.5, 0, 0.21052631578947367, 1.0, 0, 0.2631578947368421, 1.0, 0, 0.2631578947368421, 0.5, 0], [0.2631578947368421, 0.5, 0, 0.2631578947368421, 1.0, 0, 0.3157894736842105, 1.0, 0, 0.3157894736842105, 0.5, 0], [0.2631578947368421, 0.0, 0, 0.2631578947368421, 0.5, 0, 0.3157894736842105, 0.5, 0, 0.3157894736842105, 0.0, 0], [0.15789473684210525, 0.0, 0, 0.15789473684210525, 0.5, 0, 0.21052631578947367, 0.5, 0, 0.21052631578947367, 0.0, 0], [0.42105263157894735, 0.0, 0, 0.42105263157894735, 0.5, 0, 0.47368421052631576, 0.5, 0, 0.47368421052631576, 0.0, 0], [0.5263157894736842, 0.0, 0, 0.5263157894736842, 0.5, 0, 0.5789473684210527, 0.5, 0, 0.5789473684210527, 0.0, 0], [0.42105263157894735, 0.5, 0, 0.42105263157894735, 1.0, 0, 0.47368421052631576, 1.0, 0, 0.47368421052631576, 0.5, 0], [0.47368421052631576, 0.5, 0, 0.47368421052631576, 1.0, 0, 0.5263157894736842, 1.0, 0, 0.5263157894736842, 0.5, 0], [0.47368421052631576, 0.0, 0, 0.47368421052631576, 0.5, 0, 0.5263157894736842, 0.5, 0, 0.5263157894736842, 0.0, 0], [0.3684210526315789, 0.0, 0, 0.3684210526315789, 0.5, 0, 0.42105263157894735, 0.5, 0, 0.42105263157894735, 0.0, 0], [0.6052631578947368, 0.0, 0, 0.6052631578947368, 0.75, 0, 0.631578947368421, 0.75, 0, 0.631578947368421, 0.0, 0], [0.6578947368421053, 0.0, 0, 0.6578947368421053, 0.75, 0, 0.6842105263157895, 0.75, 0, 0.6842105263157895, 0.0, 0], [0.6052631578947368, 0.75, 0, 0.6052631578947368, 1.0, 0, 0.631578947368421, 1.0, 0, 0.631578947368421, 0.75, 0], [0.631578947368421, 0.75, 0, 0.631578947368421, 1.0, 0, 0.6578947368421053, 1.0, 0, 0.6578947368421053, 0.75, 0], [0.631578947368421, 0.0, 0, 0.631578947368421, 0.75, 0, 0.6578947368421053, 0.75, 0, 0.6578947368421053, 0.0, 0], [0.5789473684210527, 0.0, 0, 0.5789473684210527, 0.75, 0, 0.6052631578947368, 0.75, 0, 0.6052631578947368, 0.0, 0], [0.7105263157894737, 0.0, 0, 0.7105263157894737, 0.75, 0, 0.7368421052631579, 0.75, 0, 0.7368421052631579, 0.0, 0], [0.7631578947368421, 0.0, 0, 0.7631578947368421, 0.75, 0, 0.7894736842105263, 0.75, 0, 0.7894736842105263, 0.0, 0], [0.7105263157894737, 0.75, 0, 0.7105263157894737, 1.0, 0, 0.7368421052631579, 1.0, 0, 0.7368421052631579, 0.75, 0], [0.7368421052631579, 0.75, 0, 0.7368421052631579, 1.0, 0, 0.7631578947368421, 1.0, 0, 0.7631578947368421, 0.75, 0], [0.7368421052631579, 0.0, 0, 0.7368421052631579, 0.75, 0, 0.7631578947368421, 0.75, 0, 0.7631578947368421, 0.0, 0], [0.6842105263157895, 0.0, 0, 0.6842105263157895, 0.75, 0, 0.7105263157894737, 0.75, 0, 0.7105263157894737, 0.0, 0], [0.8157894736842105, 0.0, 0, 0.8157894736842105, 0.75, 0, 0.8421052631578947, 0.75, 0, 0.8421052631578947, 0.0, 0], [0.868421052631579, 0.0, 0, 0.868421052631579, 0.75, 0, 0.8947368421052632, 0.75, 0, 0.8947368421052632, 0.0, 0], [0.8157894736842105, 0.75, 0, 0.8157894736842105, 1.0, 0, 0.8421052631578947, 1.0, 0, 0.8421052631578947, 0.75, 0], [0.8421052631578947, 0.75, 0, 0.8421052631578947, 1.0, 0, 0.868421052631579, 1.0, 0, 0.868421052631579, 0.75, 0], [0.8421052631578947, 0.0, 0, 0.8421052631578947, 0.75, 0, 0.868421052631579, 0.75, 0, 0.868421052631579, 0.0, 0], [0.7894736842105263, 0.0, 0, 0.7894736842105263, 0.75, 0, 0.8157894736842105, 0.75, 0, 0.8157894736842105, 0.0, 0], [0.9210526315789473, 0.0, 0, 0.9210526315789473, 0.75, 0, 0.9473684210526315, 0.75, 0, 0.9473684210526315, 0.0, 0], [0.9736842105263158, 0.0, 0, 0.9736842105263158, 0.75, 0, 1.0, 0.75, 0, 1.0, 0.0, 0], [0.9210526315789473, 0.75, 0, 0.9210526315789473, 1.0, 0, 0.9473684210526315, 1.0, 0, 0.9473684210526315, 0.75, 0], [0.9473684210526315, 0.75, 0, 0.9473684210526315, 1.0, 0, 0.9736842105263158, 1.0, 0, 0.9736842105263158, 0.75, 0], [0.9473684210526315, 0.0, 0, 0.9473684210526315, 0.75, 0, 0.9736842105263158, 0.75, 0, 0.9736842105263158, 0.0, 0], [0.8947368421052632, 0.0, 0, 0.8947368421052632, 0.75, 0, 0.9210526315789473, 0.75, 0, 0.9210526315789473, 0.0, 0]] -shading_values = [[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]] +bones = [{'name':'body','pivot':[0.0, 1.5, 0.0],'vertices':[[-0.25, 0.75, -0.125, -0.25, 1.5, -0.125, 0.25, 1.5, -0.125, 0.25, 0.75, -0.125], [0.25, 0.75, 0.125, 0.25, 1.5, 0.125, -0.25, 1.5, 0.125, -0.25, 0.75, 0.125], [-0.25, 1.5, -0.125, -0.25, 1.5, 0.125, 0.25, 1.5, 0.125, 0.25, 1.5, -0.125], [0.25, 0.75, -0.125, 0.25, 0.75, 0.125, -0.25, 0.75, 0.125, -0.25, 0.75, -0.125], [0.25, 0.75, -0.125, 0.25, 1.5, -0.125, 0.25, 1.5, 0.125, 0.25, 0.75, 0.125], [-0.25, 0.75, 0.125, -0.25, 1.5, 0.125, -0.25, 1.5, -0.125, -0.25, 0.75, -0.125]],'tex_coords':[[0.02631578947368421, 0.0, 0.02631578947368421, 0.75, 0.07894736842105263, 0.75, 0.07894736842105263, 0.0], [0.10526315789473684, 0.0, 0.10526315789473684, 0.75, 0.15789473684210525, 0.75, 0.15789473684210525, 0.0], [0.02631578947368421, 0.75, 0.02631578947368421, 1.0, 0.07894736842105263, 1.0, 0.07894736842105263, 0.75], [0.07894736842105263, 0.75, 0.07894736842105263, 1.0, 0.13157894736842105, 1.0, 0.13157894736842105, 0.75], [0.07894736842105263, 0.0, 0.07894736842105263, 0.75, 0.10526315789473684, 0.75, 0.10526315789473684, 0.0], [0.0, 0.0, 0.0, 0.75, 0.02631578947368421, 0.75, 0.02631578947368421, 0.0]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'head','pivot':[0.0, 1.5, 0.0],'vertices':[[-0.25, 1.5, -0.25, -0.25, 2.0, -0.25, 0.25, 2.0, -0.25, 0.25, 1.5, -0.25], [0.25, 1.5, 0.25, 0.25, 2.0, 0.25, -0.25, 2.0, 0.25, -0.25, 1.5, 0.25], [-0.25, 2.0, -0.25, -0.25, 2.0, 0.25, 0.25, 2.0, 0.25, 0.25, 2.0, -0.25], [0.25, 1.5, -0.25, 0.25, 1.5, 0.25, -0.25, 1.5, 0.25, -0.25, 1.5, -0.25], [0.25, 1.5, -0.25, 0.25, 2.0, -0.25, 0.25, 2.0, 0.25, 0.25, 1.5, 0.25], [-0.25, 1.5, 0.25, -0.25, 2.0, 0.25, -0.25, 2.0, -0.25, -0.25, 1.5, -0.25]],'tex_coords':[[0.21052631578947367, 0.0, 0.21052631578947367, 0.5, 0.2631578947368421, 0.5, 0.2631578947368421, 0.0], [0.3157894736842105, 0.0, 0.3157894736842105, 0.5, 0.3684210526315789, 0.5, 0.3684210526315789, 0.0], [0.21052631578947367, 0.5, 0.21052631578947367, 1.0, 0.2631578947368421, 1.0, 0.2631578947368421, 0.5], [0.2631578947368421, 0.5, 0.2631578947368421, 1.0, 0.3157894736842105, 1.0, 0.3157894736842105, 0.5], [0.2631578947368421, 0.0, 0.2631578947368421, 0.5, 0.3157894736842105, 0.5, 0.3157894736842105, 0.0], [0.15789473684210525, 0.0, 0.15789473684210525, 0.5, 0.21052631578947367, 0.5, 0.21052631578947367, 0.0]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'hat','pivot':[0.0, 1.5, 0.0],'vertices':[[-0.25, 1.5, -0.25, -0.25, 2.0, -0.25, 0.25, 2.0, -0.25, 0.25, 1.5, -0.25], [0.25, 1.5, 0.25, 0.25, 2.0, 0.25, -0.25, 2.0, 0.25, -0.25, 1.5, 0.25], [-0.25, 2.0, -0.25, -0.25, 2.0, 0.25, 0.25, 2.0, 0.25, 0.25, 2.0, -0.25], [0.25, 1.5, -0.25, 0.25, 1.5, 0.25, -0.25, 1.5, 0.25, -0.25, 1.5, -0.25], [0.25, 1.5, -0.25, 0.25, 2.0, -0.25, 0.25, 2.0, 0.25, 0.25, 1.5, 0.25], [-0.25, 1.5, 0.25, -0.25, 2.0, 0.25, -0.25, 2.0, -0.25, -0.25, 1.5, -0.25]],'tex_coords':[[0.42105263157894735, 0.0, 0.42105263157894735, 0.5, 0.47368421052631576, 0.5, 0.47368421052631576, 0.0], [0.5263157894736842, 0.0, 0.5263157894736842, 0.5, 0.5789473684210527, 0.5, 0.5789473684210527, 0.0], [0.42105263157894735, 0.5, 0.42105263157894735, 1.0, 0.47368421052631576, 1.0, 0.47368421052631576, 0.5], [0.47368421052631576, 0.5, 0.47368421052631576, 1.0, 0.5263157894736842, 1.0, 0.5263157894736842, 0.5], [0.47368421052631576, 0.0, 0.47368421052631576, 0.5, 0.5263157894736842, 0.5, 0.5263157894736842, 0.0], [0.3684210526315789, 0.0, 0.3684210526315789, 0.5, 0.42105263157894735, 0.5, 0.42105263157894735, 0.0]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'rightArm','pivot':[-0.3125, 1.375, 0.0],'vertices':[[-0.5, 0.75, -0.125, -0.5, 1.5, -0.125, -0.25, 1.5, -0.125, -0.25, 0.75, -0.125], [-0.25, 0.75, 0.125, -0.25, 1.5, 0.125, -0.5, 1.5, 0.125, -0.5, 0.75, 0.125], [-0.5, 1.5, -0.125, -0.5, 1.5, 0.125, -0.25, 1.5, 0.125, -0.25, 1.5, -0.125], [-0.25, 0.75, -0.125, -0.25, 0.75, 0.125, -0.5, 0.75, 0.125, -0.5, 0.75, -0.125], [-0.25, 0.75, -0.125, -0.25, 1.5, -0.125, -0.25, 1.5, 0.125, -0.25, 0.75, 0.125], [-0.5, 0.75, 0.125, -0.5, 1.5, 0.125, -0.5, 1.5, -0.125, -0.5, 0.75, -0.125]],'tex_coords':[[0.6052631578947368, 0.0, 0.6052631578947368, 0.75, 0.631578947368421, 0.75, 0.631578947368421, 0.0], [0.6578947368421053, 0.0, 0.6578947368421053, 0.75, 0.6842105263157895, 0.75, 0.6842105263157895, 0.0], [0.6052631578947368, 0.75, 0.6052631578947368, 1.0, 0.631578947368421, 1.0, 0.631578947368421, 0.75], [0.631578947368421, 0.75, 0.631578947368421, 1.0, 0.6578947368421053, 1.0, 0.6578947368421053, 0.75], [0.631578947368421, 0.0, 0.631578947368421, 0.75, 0.6578947368421053, 0.75, 0.6578947368421053, 0.0], [0.5789473684210527, 0.0, 0.5789473684210527, 0.75, 0.6052631578947368, 0.75, 0.6052631578947368, 0.0]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'leftArm','pivot':[0.3125, 1.375, 0.0],'vertices':[[0.25, 0.75, -0.125, 0.25, 1.5, -0.125, 0.5, 1.5, -0.125, 0.5, 0.75, -0.125], [0.5, 0.75, 0.125, 0.5, 1.5, 0.125, 0.25, 1.5, 0.125, 0.25, 0.75, 0.125], [0.25, 1.5, -0.125, 0.25, 1.5, 0.125, 0.5, 1.5, 0.125, 0.5, 1.5, -0.125], [0.5, 0.75, -0.125, 0.5, 0.75, 0.125, 0.25, 0.75, 0.125, 0.25, 0.75, -0.125], [0.5, 0.75, -0.125, 0.5, 1.5, -0.125, 0.5, 1.5, 0.125, 0.5, 0.75, 0.125], [0.25, 0.75, 0.125, 0.25, 1.5, 0.125, 0.25, 1.5, -0.125, 0.25, 0.75, -0.125]],'tex_coords':[[0.7105263157894737, 0.0, 0.7105263157894737, 0.75, 0.7368421052631579, 0.75, 0.7368421052631579, 0.0], [0.7631578947368421, 0.0, 0.7631578947368421, 0.75, 0.7894736842105263, 0.75, 0.7894736842105263, 0.0], [0.7105263157894737, 0.75, 0.7105263157894737, 1.0, 0.7368421052631579, 1.0, 0.7368421052631579, 0.75], [0.7368421052631579, 0.75, 0.7368421052631579, 1.0, 0.7631578947368421, 1.0, 0.7631578947368421, 0.75], [0.7368421052631579, 0.0, 0.7368421052631579, 0.75, 0.7631578947368421, 0.75, 0.7631578947368421, 0.0], [0.6842105263157895, 0.0, 0.6842105263157895, 0.75, 0.7105263157894737, 0.75, 0.7105263157894737, 0.0]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'rightLeg','pivot':[-0.11875, 0.75, 0.0],'vertices':[[-0.24375000596046448, 0.0, -0.125, -0.24375000596046448, 0.75, -0.125, 0.0062500000931322575, 0.75, -0.125, 0.0062500000931322575, 0.0, -0.125], [0.0062500000931322575, 0.0, 0.125, 0.0062500000931322575, 0.75, 0.125, -0.24375000596046448, 0.75, 0.125, -0.24375000596046448, 0.0, 0.125], [-0.24375000596046448, 0.75, -0.125, -0.24375000596046448, 0.75, 0.125, 0.0062500000931322575, 0.75, 0.125, 0.0062500000931322575, 0.75, -0.125], [0.0062500000931322575, 0.0, -0.125, 0.0062500000931322575, 0.0, 0.125, -0.24375000596046448, 0.0, 0.125, -0.24375000596046448, 0.0, -0.125], [0.0062500000931322575, 0.0, -0.125, 0.0062500000931322575, 0.75, -0.125, 0.0062500000931322575, 0.75, 0.125, 0.0062500000931322575, 0.0, 0.125], [-0.24375000596046448, 0.0, 0.125, -0.24375000596046448, 0.75, 0.125, -0.24375000596046448, 0.75, -0.125, -0.24375000596046448, 0.0, -0.125]],'tex_coords':[[0.8157894736842105, 0.0, 0.8157894736842105, 0.75, 0.8421052631578947, 0.75, 0.8421052631578947, 0.0], [0.868421052631579, 0.0, 0.868421052631579, 0.75, 0.8947368421052632, 0.75, 0.8947368421052632, 0.0], [0.8157894736842105, 0.75, 0.8157894736842105, 1.0, 0.8421052631578947, 1.0, 0.8421052631578947, 0.75], [0.8421052631578947, 0.75, 0.8421052631578947, 1.0, 0.868421052631579, 1.0, 0.868421052631579, 0.75], [0.8421052631578947, 0.0, 0.8421052631578947, 0.75, 0.868421052631579, 0.75, 0.868421052631579, 0.0], [0.7894736842105263, 0.0, 0.7894736842105263, 0.75, 0.8157894736842105, 0.75, 0.8157894736842105, 0.0]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'leftLeg','pivot':[0.11875, 0.75, 0.0],'vertices':[[-0.0062500000931322575, 0.0, -0.125, -0.0062500000931322575, 0.75, -0.125, 0.24375000596046448, 0.75, -0.125, 0.24375000596046448, 0.0, -0.125], [0.24375000596046448, 0.0, 0.125, 0.24375000596046448, 0.75, 0.125, -0.0062500000931322575, 0.75, 0.125, -0.0062500000931322575, 0.0, 0.125], [-0.0062500000931322575, 0.75, -0.125, -0.0062500000931322575, 0.75, 0.125, 0.24375000596046448, 0.75, 0.125, 0.24375000596046448, 0.75, -0.125], [0.24375000596046448, 0.0, -0.125, 0.24375000596046448, 0.0, 0.125, -0.0062500000931322575, 0.0, 0.125, -0.0062500000931322575, 0.0, -0.125], [0.24375000596046448, 0.0, -0.125, 0.24375000596046448, 0.75, -0.125, 0.24375000596046448, 0.75, 0.125, 0.24375000596046448, 0.0, 0.125], [-0.0062500000931322575, 0.0, 0.125, -0.0062500000931322575, 0.75, 0.125, -0.0062500000931322575, 0.75, -0.125, -0.0062500000931322575, 0.0, -0.125]],'tex_coords':[[0.9210526315789473, 0.0, 0.9210526315789473, 0.75, 0.9473684210526315, 0.75, 0.9473684210526315, 0.0], [0.9736842105263158, 0.0, 0.9736842105263158, 0.75, 1.0, 0.75, 1.0, 0.0], [0.9210526315789473, 0.75, 0.9210526315789473, 1.0, 0.9473684210526315, 1.0, 0.9473684210526315, 0.75], [0.9473684210526315, 0.75, 0.9473684210526315, 1.0, 0.9736842105263158, 1.0, 0.9736842105263158, 0.75], [0.9473684210526315, 0.0, 0.9473684210526315, 0.75, 0.9736842105263158, 0.75, 0.9736842105263158, 0.0], [0.8947368421052632, 0.0, 0.8947368421052632, 0.75, 0.9210526315789473, 0.75, 0.9210526315789473, 0.0]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}] diff --git a/episode-13/work/convert.py b/episode-13/work/convert.py index 0286edee..648297ac 100644 --- a/episode-13/work/convert.py +++ b/episode-13/work/convert.py @@ -40,7 +40,7 @@ def __init__(self, name, bone = None): if bone is None: return - self.pivot = bone["pivot"] + self.pivot = [x * PIXEL_SIZE for x in bone["pivot"]] cubes = bone["cubes"] for cube in cubes: diff --git a/episode-13/work/models/zombie.json b/episode-13/work/models/zombie.json index e1bfd44a..c772ea2d 100644 --- a/episode-13/work/models/zombie.json +++ b/episode-13/work/models/zombie.json @@ -296,4 +296,4 @@ } ] } -} \ No newline at end of file +} From dffa832367120848721375bb2c290504eee2a0cb Mon Sep 17 00:00:00 2001 From: obiwac Date: Fri, 13 Jan 2023 17:43:58 +0100 Subject: [PATCH 35/45] ep13: Arm animation --- episode-13/entity_type.py | 16 ++++++++++++++-- episode-13/mob.py | 2 +- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/episode-13/entity_type.py b/episode-13/entity_type.py index bcb86309..6ccbbcc0 100644 --- a/episode-13/entity_type.py +++ b/episode-13/entity_type.py @@ -127,7 +127,6 @@ def __init__(self, world, name = "unknown", texture = "pig", model = models.pig, gl.GL_STATIC_DRAW) def animate(self, age, speed): - print(age, speed) gl.glBindVertexArray(self.vao) # compute & upload vertex positions @@ -161,14 +160,27 @@ def animate(self, age, speed): elif name == "leftLeg": kind = "odd_leg" + elif name == "rightArm": + kind = "arm" + + elif name == "leftArm": + kind = "odd_arm" + if kind is not None: + odd = "odd" in kind + if kind == "head": anim.rotate_2d(math.sin(age) / 2, math.cos(age) / 2) if "leg" in kind: - phase = math.tau / 2 * (kind == "odd_leg") + phase = math.tau / 2 * odd anim.rotate_2d(0, math.sin(age * 10 + phase) * 15 * speed) + if "arm" in kind: + theta = (-age if odd else age) * 2 + phase = math.tau / 2 * odd + anim.rotate_2d(math.sin(theta + phase) / 8, math.cos(theta + phase) / 8 - math.tau / 4) + anim.translate(*[-x for x in pivot]) for i in range(len(vertices))[::3]: diff --git a/episode-13/mob.py b/episode-13/mob.py index 47253cfb..51a9c97b 100644 --- a/episode-13/mob.py +++ b/episode-13/mob.py @@ -13,7 +13,7 @@ def __init__(self, world, entity_type): self.reset() def select_target(self): - self.target = [x + random.randint(-10, 10) for x in self.position] + self.target = [x + random.randint(-5, 5) for x in self.position] def update(self, delta_time): if not random.randint(0, int(3 / delta_time)): # change target every 3 seconds on average From 6bb44a65067013d5af0f74d5c5d76b036b2ea266 Mon Sep 17 00:00:00 2001 From: obiwac Date: Sat, 14 Jan 2023 00:41:33 +0100 Subject: [PATCH 36/45] ep13: Add mob lighting back --- episode-13/entity_type.py | 82 ++++++++++++----------------- episode-13/matrix.py | 7 +++ episode-13/shaders/entity/vert.glsl | 6 +-- 3 files changed, 43 insertions(+), 52 deletions(-) diff --git a/episode-13/entity_type.py b/episode-13/entity_type.py index 6ccbbcc0..a4de89ff 100644 --- a/episode-13/entity_type.py +++ b/episode-13/entity_type.py @@ -58,17 +58,25 @@ def __init__(self, world, name = "unknown", texture = "pig", model = models.pig, gl.glGenVertexArrays(1, self.vao) gl.glBindVertexArray(self.vao) - # vertex positions + # vertex positions & normals + # we'll combine these two (6 floats per vertex, first 3 for position, next 3 for normal) self.vertices_vbo = gl.GLuint(0) gl.glGenBuffers(1, self.vertices_vbo) gl.glBindBuffer(gl.GL_ARRAY_BUFFER, self.vertices_vbo) - gl.glBufferData(gl.GL_ARRAY_BUFFER, ctypes.sizeof(gl.GLfloat * vertex_count * 3), 0, gl.GL_STREAM_DRAW) + gl.glBufferData(gl.GL_ARRAY_BUFFER, + ctypes.sizeof(gl.GLfloat * vertex_count * 6), + 0, gl.GL_STREAM_DRAW) - gl.glVertexAttribPointer(0, 3, gl.GL_FLOAT, gl.GL_FALSE, 0, 0) + size = ctypes.sizeof(gl.GLfloat * 3) + + gl.glVertexAttribPointer(0, 3, gl.GL_FLOAT, gl.GL_FALSE, size * 2, size * 0) gl.glEnableVertexAttribArray(0) + gl.glVertexAttribPointer(1, 3, gl.GL_FLOAT, gl.GL_FALSE, size * 2, size * 1) + gl.glEnableVertexAttribArray(1) + # texture coordinates # these can be filled in straight away as they won't change @@ -76,7 +84,7 @@ def __init__(self, world, name = "unknown", texture = "pig", model = models.pig, gl.glGenBuffers(1, self.tex_coords_vbo) gl.glBindBuffer(gl.GL_ARRAY_BUFFER, self.tex_coords_vbo) - gl.glBufferData(gl.GL_ARRAY_BUFFER, ctypes.sizeof(gl.GLfloat * tex_coord_count * 2), 0, gl.GL_STREAM_DRAW) + gl.glBufferData(gl.GL_ARRAY_BUFFER, ctypes.sizeof(gl.GLfloat * tex_coord_count * 2), 0, gl.GL_STATIC_DRAW) offset = 0 @@ -92,19 +100,8 @@ def __init__(self, world, name = "unknown", texture = "pig", model = models.pig, offset += size - gl.glVertexAttribPointer(1, 2, gl.GL_FLOAT, gl.GL_FALSE, 0, 0) - gl.glEnableVertexAttribArray(1) - - """ - # normals - - self.normals_vbo = gl.GLuint(0) - gl.glGenBuffers(1, self.normals_vbo) - - gl.glBindBuffer(gl.GL_ARRAY_BUFFER, self.normals_vbo) - gl.glVertexAttribPointer(2, 3, gl.GL_FLOAT, gl.GL_FALSE, 0, 0) + gl.glVertexAttribPointer(2, 2, gl.GL_FLOAT, gl.GL_FALSE, 0, 0) gl.glEnableVertexAttribArray(2) - """ # compute indices @@ -138,6 +135,7 @@ def animate(self, age, speed): name = bone["name"] pivot = bone["pivot"] vertices = sum(bone["vertices"], []) + buffer = vertices * 2 # we want our buffer to hold both vertex positions & normals # compute animation transformation matrix @@ -183,49 +181,35 @@ def animate(self, age, speed): anim.translate(*[-x for x in pivot]) - for i in range(len(vertices))[::3]: + for i in range(0, len(vertices), 3): vector = vertices[i: i + 3] + [1] - vertices[i: i + 3] = matrix.multiply_matrix_vector(anim, vector)[:3] - - # upload vertex positions - - type_ = gl.GLfloat * len(vertices) - size = ctypes.sizeof(type_) + buffer[i * 2: i * 2 + 3] = matrix.multiply_matrix_vector(anim, vector)[:3] - gl.glBufferSubData( - gl.GL_ARRAY_BUFFER, offset, - size, (type_) (*vertices)) + # compute normals - offset += size + for i in range(0, len(buffer), 24): + # take the cross product between two vectors we know are on the plane the face belongs to - """ - # compute normals + n = matrix.cross_product( + [buffer[i + 0] - buffer[i + 6], buffer[i + 1] - buffer[i + 7], buffer[i + 2] - buffer[i + 8]], + [buffer[i + 0] - buffer[i + 12], buffer[i + 1] - buffer[i + 13], buffer[i + 2] - buffer[i + 14]] + ) - self.normals = [] + # each vertex of a face will have the same normal, so we can simply copy it 4 times - for face in model.vertex_positions: - # take the cross product between two vectors we know are on the plane the face belongs to + for j in range(4): + buffer[i + j * 6 + 3: i + j * 6 + 6] = n - u = [face[0] - face[3], face[1] - face[4], face[2] - face[5]] - v = [face[0] - face[6], face[1] - face[7], face[2] - face[8]] + # upload vertex buffer section - n = [ - u[1] * v[2] - u[2] * v[1], - -u[0] * v[2] + u[2] * v[0], - u[0] * v[1] - u[1] * v[0], - ] - - self.normals.extend(n * 4) + type_ = gl.GLfloat * len(buffer) + size = ctypes.sizeof(type_) - # upload normals + gl.glBufferSubData( + gl.GL_ARRAY_BUFFER, offset, + size, (type_) (*buffer)) - gl.glBindBuffer(gl.GL_ARRAY_BUFFER, self.normals_vbo) - gl.glBufferData( - gl.GL_ARRAY_BUFFER, - ctypes.sizeof(gl.GLfloat * len(self.normals)), - (gl.GLfloat * len(self.normals)) (*self.normals), - gl.GL_STATIC_DRAW) - """ + offset += size def draw(self): # bind textures diff --git a/episode-13/matrix.py b/episode-13/matrix.py index d255f6fc..9557478b 100644 --- a/episode-13/matrix.py +++ b/episode-13/matrix.py @@ -39,6 +39,13 @@ def multiply_matrix_vector(matrix, vector): return result +def cross_product(u, v): + return [ + u[1] * v[2] - u[2] * v[1], + -u[0] * v[2] + u[2] * v[0], + u[0] * v[1] - u[1] * v[0], + ] + class Matrix: def __init__(self, base = None): if type(base) == Matrix: self.data = copy_matrix(base.data) diff --git a/episode-13/shaders/entity/vert.glsl b/episode-13/shaders/entity/vert.glsl index 1b706da1..f113167f 100644 --- a/episode-13/shaders/entity/vert.glsl +++ b/episode-13/shaders/entity/vert.glsl @@ -1,8 +1,8 @@ #version 330 layout(location = 0) in vec3 vertex_position; -layout(location = 1) in vec2 tex_coords; -layout(location = 2) in vec3 normal; +layout(location = 1) in vec3 normal; +layout(location = 2) in vec2 tex_coords; out vec3 local_position; out vec2 interpolated_tex_coords; @@ -19,7 +19,7 @@ void main(void) { vec3 adjusted_normal = (vec4(normal, 1.0) * transform_matrix).xyz; vec3 sunlight = vec3(0.0, 0.0, 1.0); - shading = 1.0; // 1.0 - 0.4 * abs(dot(normalize(adjusted_normal), normalize(sunlight))); + shading = 1.0 - 0.4 * abs(dot(normalize(adjusted_normal), normalize(sunlight))); gl_Position = matrix * vec4(vertex_position, 1.0); } From 2f6a80f76f67eb1b7727fc12ffdab65f90836f88 Mon Sep 17 00:00:00 2001 From: obiwac Date: Sat, 14 Jan 2023 00:54:11 +0100 Subject: [PATCH 37/45] ep13: Fix mob lighting looking off --- episode-13/shaders/entity/vert.glsl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/episode-13/shaders/entity/vert.glsl b/episode-13/shaders/entity/vert.glsl index f113167f..0da884d6 100644 --- a/episode-13/shaders/entity/vert.glsl +++ b/episode-13/shaders/entity/vert.glsl @@ -17,9 +17,9 @@ void main(void) { interpolated_tex_coords = tex_coords; vec3 adjusted_normal = (vec4(normal, 1.0) * transform_matrix).xyz; - vec3 sunlight = vec3(0.0, 0.0, 1.0); + vec3 sunlight = vec3(0.0, 2.0, 1.0); - shading = 1.0 - 0.4 * abs(dot(normalize(adjusted_normal), normalize(sunlight))); + shading = 0.6 + 0.4 * abs(dot(normalize(adjusted_normal), normalize(sunlight))); gl_Position = matrix * vec4(vertex_position, 1.0); } From 54ff451424fe8d427f484683f1435ddd5563b225 Mon Sep 17 00:00:00 2001 From: obiwac Date: Sat, 14 Jan 2023 18:10:12 +0100 Subject: [PATCH 38/45] ep13: Make mobs constantly look at the player --- episode-13/entity.py | 2 +- episode-13/entity_type.py | 16 +++++++-- episode-13/main.py | 72 ++++++++++++++++++--------------------- episode-13/world.py | 13 +++++-- 4 files changed, 57 insertions(+), 46 deletions(-) diff --git a/episode-13/entity.py b/episode-13/entity.py index 12399336..9a509e89 100644 --- a/episode-13/entity.py +++ b/episode-13/entity.py @@ -219,7 +219,7 @@ def update(self, delta_time): speed = math.sqrt(dx ** 2 + dz ** 2) self.age += delta_time - self.entity_type.animate(self.age, speed) + self.entity_type.animate(self.age, speed, self.position, self.rotation) def draw(self): # compute transformation matrix diff --git a/episode-13/entity_type.py b/episode-13/entity_type.py index a4de89ff..c0a49311 100644 --- a/episode-13/entity_type.py +++ b/episode-13/entity_type.py @@ -123,7 +123,7 @@ def __init__(self, world, name = "unknown", texture = "pig", model = models.pig, (gl.GLuint * len(self.indices)) (*self.indices), gl.GL_STATIC_DRAW) - def animate(self, age, speed): + def animate(self, age, speed, position, rotation): gl.glBindVertexArray(self.vao) # compute & upload vertex positions @@ -168,11 +168,21 @@ def animate(self, age, speed): odd = "odd" in kind if kind == "head": - anim.rotate_2d(math.sin(age) / 2, math.cos(age) / 2) + x, y, z = self.world.player.position + + dx = x - position[0] + dy = y - position[1] + dz = z - position[2] + + theta = -rotation[0] - math.atan2(dz, dx) - math.tau / 4 + iota = -math.atan2(dy, math.sqrt(dx ** 2 + dz ** 2)) + + anim.rotate_2d(theta, 0) + anim.rotate_2d(0, iota) if "leg" in kind: phase = math.tau / 2 * odd - anim.rotate_2d(0, math.sin(age * 10 + phase) * 15 * speed) + anim.rotate_2d(0, math.sin(age * 7 + phase) * 10 * speed) if "arm" in kind: theta = (-age if odd else age) * 2 diff --git a/episode-13/main.py b/episode-13/main.py index 8675a82a..5c6a28af 100644 --- a/episode-13/main.py +++ b/episode-13/main.py @@ -21,17 +21,13 @@ def __init__(self, **args): # create world - self.world = world.World() + self.world = world.World(self.width, self.height) # pyglet stuff pyglet.clock.schedule_interval(self.update, 1.0 / 60) self.mouse_captured = False - # player stuff - - self.player = player.Player(self.world, self.width, self.height) - # misc stuff self.frame = 0 @@ -42,19 +38,17 @@ def update(self, delta_time): # print(f"FPS: {1.0 / delta_time}") if not self.mouse_captured: - self.player.input = [0, 0, 0] + self.world.player.input = [0, 0, 0] - self.player.update(delta_time) + self.world.player.update(delta_time) # update other entities - entities = sorted(self.world.entities, key = lambda e: math.sqrt(sum(map(lambda x: (x[0] - x[1]) ** 2, zip(e.position, self.player.position))))) - - for entity in entities[:5]: + for entity in self.world.entities: entity.update(delta_time) def on_draw(self): - self.player.update_matrices() + self.world.player.update_matrices() # draw stuff @@ -63,7 +57,7 @@ def on_draw(self): gl.glClearColor(0.0, 0.0, 0.0, 0.0) self.clear() - self.world.draw(self.player) + self.world.draw() gl.glFinish() @@ -73,8 +67,8 @@ def on_resize(self, width, height): print(f"Resize {width} * {height}") gl.glViewport(0, 0, width, height) - self.player.view_width = width - self.player.view_height = height + self.world.player.view_width = width + self.world.player.view_height = height def on_mouse_press(self, x, y, button, modifiers): if not self.mouse_captured: @@ -86,14 +80,14 @@ def on_mouse_press(self, x, y, button, modifiers): # handle breaking/placing blocks def hit_callback(current_block, next_block): - if button == pyglet.window.mouse.RIGHT: self.world.try_set_block(current_block, self.holding, self.player.collider) + if button == pyglet.window.mouse.RIGHT: self.world.try_set_block(current_block, self.holding, self.world.player.collider) elif button == pyglet.window.mouse.LEFT: self.world.set_block(next_block, 0) elif button == pyglet.window.mouse.MIDDLE: self.holding = self.world.get_block_number(next_block) - x, y, z = self.player.position - y += self.player.eyelevel + x, y, z = self.world.player.position + y += self.world.player.eyelevel - hit_ray = hit.Hit_ray(self.world, self.player.rotation, (x, y, z)) + hit_ray = hit.Hit_ray(self.world, self.world.player.rotation, (x, y, z)) while hit_ray.distance < hit.HIT_RANGE: if hit_ray.step(hit_callback): @@ -103,10 +97,10 @@ def on_mouse_motion(self, x, y, delta_x, delta_y): if self.mouse_captured: sensitivity = 0.004 - self.player.rotation[0] += delta_x * sensitivity - self.player.rotation[1] += delta_y * sensitivity + self.world.player.rotation[0] += delta_x * sensitivity + self.world.player.rotation[1] += delta_y * sensitivity - self.player.rotation[1] = max(-math.tau / 4, min(math.tau / 4, self.player.rotation[1])) + self.world.player.rotation[1] = max(-math.tau / 4, min(math.tau / 4, self.world.player.rotation[1])) def on_mouse_drag(self, x, y, delta_x, delta_y, buttons, modifiers): self.on_mouse_motion(x, y, delta_x, delta_y) @@ -115,29 +109,29 @@ def on_key_press(self, key, modifiers): if not self.mouse_captured: return - if key == pyglet.window.key.D: self.player.input[0] += 1 - elif key == pyglet.window.key.A: self.player.input[0] -= 1 - elif key == pyglet.window.key.W: self.player.input[2] += 1 - elif key == pyglet.window.key.S: self.player.input[2] -= 1 + if key == pyglet.window.key.D: self.world.player.input[0] += 1 + elif key == pyglet.window.key.A: self.world.player.input[0] -= 1 + elif key == pyglet.window.key.W: self.world.player.input[2] += 1 + elif key == pyglet.window.key.S: self.world.player.input[2] -= 1 - elif key == pyglet.window.key.SPACE : self.player.input[1] += 1 - elif key == pyglet.window.key.LSHIFT: self.player.input[1] -= 1 - elif key == pyglet.window.key.LCTRL : self.player.target_speed = player.SPRINTING_SPEED + elif key == pyglet.window.key.SPACE : self.world.player.input[1] += 1 + elif key == pyglet.window.key.LSHIFT: self.world.player.input[1] -= 1 + elif key == pyglet.window.key.LCTRL : self.world.player.target_speed = player.SPRINTING_SPEED elif key == pyglet.window.key.F: - self.player.flying = not self.player.flying + self.world.player.flying = not self.world.player.flying elif key == pyglet.window.key.G: self.holding = random.randint(1, len(self.world.block_types) - 1) elif key == pyglet.window.key.N: - self.player.ghost = not self.player.ghost + self.world.player.ghost = not self.world.player.ghost elif key == pyglet.window.key.O: self.world.save.save() elif key == pyglet.window.key.R: - self.player.reset() + self.world.player.reset() elif key == pyglet.window.key.B: for entity in self.world.entities: @@ -147,7 +141,7 @@ def on_key_press(self, key, modifiers): _mob = mob.Mob(self.world, random.choice([*self.world.entity_types.values()])) self.world.entities.append(_mob) - _mob.teleport(self.player.position) + _mob.teleport(self.world.player.position) elif key == pyglet.window.key.ESCAPE: self.mouse_captured = False @@ -157,14 +151,14 @@ def on_key_release(self, key, modifiers): if not self.mouse_captured: return - if key == pyglet.window.key.D: self.player.input[0] -= 1 - elif key == pyglet.window.key.A: self.player.input[0] += 1 - elif key == pyglet.window.key.W: self.player.input[2] -= 1 - elif key == pyglet.window.key.S: self.player.input[2] += 1 + if key == pyglet.window.key.D: self.world.player.input[0] -= 1 + elif key == pyglet.window.key.A: self.world.player.input[0] += 1 + elif key == pyglet.window.key.W: self.world.player.input[2] -= 1 + elif key == pyglet.window.key.S: self.world.player.input[2] += 1 - elif key == pyglet.window.key.SPACE : self.player.input[1] -= 1 - elif key == pyglet.window.key.LSHIFT: self.player.input[1] += 1 - elif key == pyglet.window.key.LCTRL : self.player.target_speed = player.WALKING_SPEED + elif key == pyglet.window.key.SPACE : self.world.player.input[1] -= 1 + elif key == pyglet.window.key.LSHIFT: self.world.player.input[1] += 1 + elif key == pyglet.window.key.LCTRL : self.world.player.target_speed = player.WALKING_SPEED class Game: def __init__(self): diff --git a/episode-13/world.py b/episode-13/world.py index ceb9fa5b..be8e1ff2 100644 --- a/episode-13/world.py +++ b/episode-13/world.py @@ -8,6 +8,7 @@ import block_type import texture_manager +import player import entity_type import pyglet.gl as gl @@ -17,7 +18,7 @@ import models class World: - def __init__(self): + def __init__(self, width, height): self.texture_manager = texture_manager.Texture_manager(16, 16, 256) self.block_types = [None] @@ -147,6 +148,10 @@ def __init__(self): self.chunks[chunk_position].update_subchunk_meshes() self.chunks[chunk_position].update_mesh() + # create player + + self.player = player.Player(self, width, height) + def get_chunk_position(self, position): x, y, z = position @@ -236,7 +241,7 @@ def try_set_block(self, pos, num, collider): self.set_block(pos, num) - def draw(self, player): + def draw(self): # setup block shader self.block_shader.use() @@ -260,8 +265,10 @@ def draw(self, player): self.entity_shader.use() gl.glDisable(gl.GL_CULL_FACE) + self.player.draw() + for entity in self.entities: - dist = math.sqrt(sum(map(lambda x: (x[0] - x[1]) ** 2, zip(entity.position, player.position)))) + dist = math.sqrt(sum(map(lambda x: (x[0] - x[1]) ** 2, zip(entity.position, self.player.position)))) if dist > 32: continue From adc85ac4c41b14f5d32b68142ac0ddd4bdf8822d Mon Sep 17 00:00:00 2001 From: obiwac Date: Sat, 14 Jan 2023 18:24:39 +0100 Subject: [PATCH 39/45] ep13: Fix incorrect normal transformations --- episode-13/data/entities.mcpy | 2 +- episode-13/entity.py | 20 +++++++++++++------- episode-13/shaders/entity/vert.glsl | 4 ++-- episode-13/world.py | 4 +--- 4 files changed, 17 insertions(+), 13 deletions(-) diff --git a/episode-13/data/entities.mcpy b/episode-13/data/entities.mcpy index 2d82e97f..1f9176db 100644 --- a/episode-13/data/entities.mcpy +++ b/episode-13/data/entities.mcpy @@ -4,4 +4,4 @@ Zombie: name "Zombie", width 0.6, height 1.95, model models.zombie, texture zo Skeleton: name "Skeleton", width 0.6, height 1.99, model models.skeleton, texture skeleton Creeper: name "Creeper", width 0.6, height 1.7, model models.creeper, texture creeper Cow: name "Cow", width 0.9, height 1.3, model models.cow, texture cow -Curry: name "Curry", width 0.9, height 1.8, model models.curry, texture curry \ No newline at end of file +Curry: name "Curry", width 0.9, height 1.8, model models.curry, texture curry diff --git a/episode-13/entity.py b/episode-13/entity.py index 9a509e89..aa344305 100644 --- a/episode-13/entity.py +++ b/episode-13/entity.py @@ -222,17 +222,23 @@ def update(self, delta_time): self.entity_type.animate(self.age, speed, self.position, self.rotation) def draw(self): - # compute transformation matrix + # compute MVP matrix - transform = matrix.Matrix() - transform.load_identity() + mvp = matrix.copy_matrix(self.world.mvp_matrix) - transform.translate(*self.position) - transform.rotate_2d(*self.rotation) + mvp.translate(*self.position) + mvp.rotate_2d(self.rotation[0], 0) + + # compute inverse transformation matrix + + inverse = matrix.Matrix() + inverse.load_identity() + + inverse.rotate_2d(-self.rotation[0], 0) # actually draw entity - self.world.entity_shader.uniform_matrix(self.world.entity_shader_transform_matrix_location, transform) - self.world.entity_shader.uniform_matrix(self.world.entity_shader_matrix_location, self.world.mvp_matrix * transform) + self.world.entity_shader.uniform_matrix(self.world.entity_shader_inverse_transform_matrix_location, inverse) + self.world.entity_shader.uniform_matrix(self.world.entity_shader_matrix_location, mvp) self.entity_type.draw() diff --git a/episode-13/shaders/entity/vert.glsl b/episode-13/shaders/entity/vert.glsl index 0da884d6..a4153950 100644 --- a/episode-13/shaders/entity/vert.glsl +++ b/episode-13/shaders/entity/vert.glsl @@ -8,7 +8,7 @@ out vec3 local_position; out vec2 interpolated_tex_coords; out float shading; -uniform mat4 transform_matrix; +uniform mat4 inverse_transform_matrix; uniform mat4 matrix; void main(void) { @@ -16,7 +16,7 @@ void main(void) { interpolated_tex_coords = tex_coords; - vec3 adjusted_normal = (vec4(normal, 1.0) * transform_matrix).xyz; + vec3 adjusted_normal = (vec4(normal, 1.0) * inverse_transform_matrix).xyz; vec3 sunlight = vec3(0.0, 2.0, 1.0); shading = 0.6 + 0.4 * abs(dot(normalize(adjusted_normal), normalize(sunlight))); diff --git a/episode-13/world.py b/episode-13/world.py index be8e1ff2..7f8a0b3b 100644 --- a/episode-13/world.py +++ b/episode-13/world.py @@ -132,7 +132,7 @@ def __init__(self, width, height): self.entity_shader = shader.Shader("shaders/entity/vert.glsl", "shaders/entity/frag.glsl") self.entity_shader_sampler_location = self.entity_shader.find_uniform(b"texture_sampler") - self.entity_shader_transform_matrix_location = self.entity_shader.find_uniform(b"transform_matrix") + self.entity_shader_inverse_transform_matrix_location = self.entity_shader.find_uniform(b"inverse_transform_matrix") self.entity_shader_matrix_location = self.entity_shader.find_uniform(b"matrix") # load the world @@ -265,8 +265,6 @@ def draw(self): self.entity_shader.use() gl.glDisable(gl.GL_CULL_FACE) - self.player.draw() - for entity in self.entities: dist = math.sqrt(sum(map(lambda x: (x[0] - x[1]) ** 2, zip(entity.position, self.player.position)))) From 444f4869ff050d5d44404079ec23dddb9e80a93f Mon Sep 17 00:00:00 2001 From: obiwac Date: Sat, 14 Jan 2023 18:25:09 +0100 Subject: [PATCH 40/45] ep13: Shade the bottom faces of entities darker --- episode-13/shaders/entity/vert.glsl | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/episode-13/shaders/entity/vert.glsl b/episode-13/shaders/entity/vert.glsl index a4153950..d2e187cd 100644 --- a/episode-13/shaders/entity/vert.glsl +++ b/episode-13/shaders/entity/vert.glsl @@ -16,10 +16,11 @@ void main(void) { interpolated_tex_coords = tex_coords; - vec3 adjusted_normal = (vec4(normal, 1.0) * inverse_transform_matrix).xyz; + vec3 transformed_normal = (vec4(normal, 1.0) * inverse_transform_matrix).xyz; vec3 sunlight = vec3(0.0, 2.0, 1.0); - shading = 0.6 + 0.4 * abs(dot(normalize(adjusted_normal), normalize(sunlight))); + vec3 xz_absolute_normal = vec3(abs(transformed_normal.x), transformed_normal.y, abs(transformed_normal.z)); + shading = 0.6 + 0.4 * dot(normalize(xz_absolute_normal), normalize(sunlight)); gl_Position = matrix * vec4(vertex_position, 1.0); } From cac676b0f12ed156c01f4eca1a3e7d8af5a2814c Mon Sep 17 00:00:00 2001 From: obiwac Date: Sat, 14 Jan 2023 19:50:51 +0100 Subject: [PATCH 41/45] ep13: Adjust entity lighting parameters --- episode-13/shaders/entity/vert.glsl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/episode-13/shaders/entity/vert.glsl b/episode-13/shaders/entity/vert.glsl index d2e187cd..424fa4ba 100644 --- a/episode-13/shaders/entity/vert.glsl +++ b/episode-13/shaders/entity/vert.glsl @@ -20,7 +20,9 @@ void main(void) { vec3 sunlight = vec3(0.0, 2.0, 1.0); vec3 xz_absolute_normal = vec3(abs(transformed_normal.x), transformed_normal.y, abs(transformed_normal.z)); - shading = 0.6 + 0.4 * dot(normalize(xz_absolute_normal), normalize(sunlight)); + float facing = dot(normalize(xz_absolute_normal), normalize(sunlight)); + + shading = max(0.4, (1. + facing) / 2); gl_Position = matrix * vec4(vertex_position, 1.0); } From 901fb3817c736db4e0f2263f72648af2ceb54a4b Mon Sep 17 00:00:00 2001 From: obiwac Date: Sat, 14 Jan 2023 23:53:13 +0100 Subject: [PATCH 42/45] ep13: Make animation not depend on framerate --- episode-13/entity.py | 2 +- episode-13/entity_type.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/episode-13/entity.py b/episode-13/entity.py index aa344305..d8b0e186 100644 --- a/episode-13/entity.py +++ b/episode-13/entity.py @@ -219,7 +219,7 @@ def update(self, delta_time): speed = math.sqrt(dx ** 2 + dz ** 2) self.age += delta_time - self.entity_type.animate(self.age, speed, self.position, self.rotation) + self.entity_type.animate(self.age, speed / delta_time, self.position, self.rotation) def draw(self): # compute MVP matrix diff --git a/episode-13/entity_type.py b/episode-13/entity_type.py index c0a49311..a226b7ee 100644 --- a/episode-13/entity_type.py +++ b/episode-13/entity_type.py @@ -182,7 +182,7 @@ def animate(self, age, speed, position, rotation): if "leg" in kind: phase = math.tau / 2 * odd - anim.rotate_2d(0, math.sin(age * 7 + phase) * 10 * speed) + anim.rotate_2d(0, math.sin(age * 7 + phase) / 5 * speed) if "arm" in kind: theta = (-age if odd else age) * 2 From bfb1b100e666a79bdaa9e791efd37f7909f2492a Mon Sep 17 00:00:00 2001 From: obiwac Date: Sun, 15 Jan 2023 00:49:15 +0100 Subject: [PATCH 43/45] community: Merge new changes to mobs --- community/controller.py | 3 +- community/entity.py | 45 +++++-- community/entity_type.py | 190 ++++++++++++++++++++--------- community/main.py | 4 +- community/models/cow.py | 4 +- community/models/creeper.py | 4 +- community/models/curry.py | 4 +- community/models/pig.py | 4 +- community/models/skeleton.py | 4 +- community/models/zombie.py | 4 +- community/save.py | 6 +- community/shaders/entity/vert.glsl | 15 ++- community/world.py | 4 +- 13 files changed, 191 insertions(+), 100 deletions(-) diff --git a/community/controller.py b/community/controller.py index 408bb119..ea47aacc 100644 --- a/community/controller.py +++ b/community/controller.py @@ -58,7 +58,8 @@ def misc(self, mode): self.game.holding = random.randint(1, len(self.game.world.block_types) - 1) elif mode == self.MiscMode.SPAWN: - _mob = mob.Mob(self.game.world, random.choice([*self.game.world.entity_types.values()])) + # _mob = mob.Mob(self.game.world, random.choice([*self.game.world.entity_types.values()])) + _mob = mob.Mob(self.game.world, random.choice([self.game.world.entity_types["Zombie"], self.game.world.entity_types["Creeper"], self.game.world.entity_types["Skeleton"]])) self.game.world.entities.append(_mob) _mob.teleport(self.game.player.position) diff --git a/community/entity.py b/community/entity.py index 163441e0..0854fdff 100644 --- a/community/entity.py +++ b/community/entity.py @@ -4,6 +4,7 @@ import glm import collider + import chunk FLYING_ACCEL = (0, 0, 0) @@ -22,6 +23,8 @@ def __init__(self, world, entity_type): self.world = world self.entity_type = entity_type + self.age = 0 + # physical variables self.jump_height = 1.25 @@ -216,22 +219,38 @@ def update(self, delta_time): self.update_collider() + # animate the entity + + dx = self.position[0] - self.old_position[0] + dz = self.position[2] - self.old_position[2] + + speed = math.sqrt(dx ** 2 + dz ** 2) + self.age += delta_time + self.entity_type.animate(self.age, speed / delta_time, self.position, self.rotation) + def draw(self): - # compute transformation matrix - - transform = glm.mat4(1) - - transform = glm.translate(transform, glm.vec3(*self.position)) - transform = glm.rotate(transform, self.rotation[1], glm.vec3(1, 0, 0)) - transform = glm.rotate(transform, self.rotation[0], glm.vec3(0, 1, 0)) - skylight = self.world.get_skylight(tuple(round(t) for t in self.position)) - light = self.world.get_light(tuple(round(t) for t in self.position)) - + # compute MVP matrix + + mvp = glm.mat4(self.world.mvp_matrix) + + mvp = glm.translate(mvp, glm.vec3(*self.position)) + mvp = glm.rotate(mvp, self.rotation[0], glm.vec3(0, 1, 0)) + + # compute inverse transformation matrix + + inverse = glm.rotate(glm.mat4(1), -self.rotation[0], glm.vec3(0, 1, 0)) + + # lighting stuff + + skylight = self.world.get_skylight(tuple(map(round, self.position))) + light = self.world.get_light(tuple(map(round, self.position))) + # actually draw entity - self.world.entity_shader.uniform_matrix(self.world.entity_shader_transform_matrix_location, transform) - self.world.entity_shader.uniform_matrix(self.world.entity_shader_matrix_location, self.world.mvp_matrix * transform) - self.world.entity_shader.uniform_float(self.world.entity_shader_lighting_location, + self.world.entity_shader.uniform_matrix(self.world.entity_shader_inverse_transform_matrix_location, inverse) + self.world.entity_shader.uniform_matrix(self.world.entity_shader_matrix_location, mvp) + + self.world.entity_shader.uniform_float(self.world.entity_shader_lighting_location, max(0.8 ** (15 - skylight * self.world.daylight / 1800), 0.8 ** (15 - light)) ) diff --git a/community/entity_type.py b/community/entity_type.py index c9e6565b..581f5ad6 100644 --- a/community/entity_type.py +++ b/community/entity_type.py @@ -1,4 +1,7 @@ import ctypes +import math + +import glm import pyglet import pyglet.gl as gl @@ -39,37 +42,14 @@ def __init__(self, world, name = "unknown", texture = "pig", model = models.pig, gl.glGenerateMipmap(gl.GL_TEXTURE_2D) - # convert model to arrays we can send to the GPU - - self.vertices = sum(model.vertex_positions, []) - self.tex_coords = sum(model.tex_coords, []) - - del self.tex_coords[2::3] - - # get normal vector for each face - - self.normals = [] - - for face in model.vertex_positions: - # take the cross product between two vectors we know are on the plane the face belongs to - - u = [face[0] - face[3], face[1] - face[4], face[2] - face[5]] - v = [face[0] - face[6], face[1] - face[7], face[2] - face[8]] - - n = [ - u[1] * v[2] - u[2] * v[1], - -u[0] * v[2] + u[2] * v[0], - u[0] * v[1] - u[1] * v[0], - ] + # get total size of the models so we can create vertex buffers - self.normals.extend(n * 4) + vertex_count = 0 + tex_coord_count = 0 - # compute indices - - self.indices = [] - - for i in range(len(model.vertex_positions)): - self.indices.extend(x + i * 4 for x in (0, 1, 2, 0, 2, 3)) + for bone in model.bones: + vertex_count += len(sum(bone["vertices"], [])) // 3 + tex_coord_count += len(sum(bone["tex_coords"], [])) // 2 # create VAO/VBO/IBO @@ -77,55 +57,60 @@ def __init__(self, world, name = "unknown", texture = "pig", model = models.pig, gl.glGenVertexArrays(1, self.vao) gl.glBindVertexArray(self.vao) - # vertex positions + # vertex positions & normals + # we'll combine these two (6 floats per vertex, first 3 for position, next 3 for normal) self.vertices_vbo = gl.GLuint(0) gl.glGenBuffers(1, self.vertices_vbo) gl.glBindBuffer(gl.GL_ARRAY_BUFFER, self.vertices_vbo) - gl.glBufferData( - gl.GL_ARRAY_BUFFER, - ctypes.sizeof(gl.GLfloat * len(self.vertices)), - (gl.GLfloat * len(self.vertices)) (*self.vertices), - gl.GL_STATIC_DRAW) + gl.glBufferData(gl.GL_ARRAY_BUFFER, + ctypes.sizeof(gl.GLfloat * vertex_count * 6), + 0, gl.GL_STREAM_DRAW) + + size = ctypes.sizeof(gl.GLfloat * 3) - gl.glVertexAttribPointer(0, 3, gl.GL_FLOAT, gl.GL_FALSE, 0, 0) + gl.glVertexAttribPointer(0, 3, gl.GL_FLOAT, gl.GL_FALSE, size * 2, size * 0) gl.glEnableVertexAttribArray(0) + gl.glVertexAttribPointer(1, 3, gl.GL_FLOAT, gl.GL_FALSE, size * 2, size * 1) + gl.glEnableVertexAttribArray(1) + # texture coordinates + # these can be filled in straight away as they won't change self.tex_coords_vbo = gl.GLuint(0) gl.glGenBuffers(1, self.tex_coords_vbo) gl.glBindBuffer(gl.GL_ARRAY_BUFFER, self.tex_coords_vbo) - gl.glBufferData( - gl.GL_ARRAY_BUFFER, - ctypes.sizeof(gl.GLfloat * len(self.tex_coords)), - (gl.GLfloat * len(self.tex_coords)) (*self.tex_coords), - gl.GL_STATIC_DRAW) + gl.glBufferData(gl.GL_ARRAY_BUFFER, ctypes.sizeof(gl.GLfloat * tex_coord_count * 2), 0, gl.GL_STATIC_DRAW) - # texture coordinates are still 3D here even though we don't use texture arrays (as is the case with blocks) - # this is so that we can interchange block & entity models + offset = 0 - gl.glVertexAttribPointer(1, 2, gl.GL_FLOAT, gl.GL_FALSE, 0, 0) - gl.glEnableVertexAttribArray(1) + for bone in self.model.bones: + tex_coords = sum(bone["tex_coords"], []) - # normals + type_ = gl.GLfloat * len(tex_coords) + size = ctypes.sizeof(type_) - self.normals_vbo = gl.GLuint(0) - gl.glGenBuffers(1, self.normals_vbo) + gl.glBufferSubData( + gl.GL_ARRAY_BUFFER, offset, + size, (type_) (*tex_coords)) - gl.glBindBuffer(gl.GL_ARRAY_BUFFER, self.normals_vbo) - gl.glBufferData( - gl.GL_ARRAY_BUFFER, - ctypes.sizeof(gl.GLfloat * len(self.normals)), - (gl.GLfloat * len(self.normals)) (*self.normals), - gl.GL_STATIC_DRAW) + offset += size - gl.glVertexAttribPointer(2, 3, gl.GL_FLOAT, gl.GL_FALSE, 0, 0) + gl.glVertexAttribPointer(2, 2, gl.GL_FLOAT, gl.GL_FALSE, 0, 0) gl.glEnableVertexAttribArray(2) + # compute indices + + self.indices = [] + + for i in range(vertex_count): + self.indices.extend(x + i * 4 for x in (0, 1, 2, 0, 2, 3)) + # indices + # these can be filled in straight away as they won't change self.ibo = gl.GLuint(0) gl.glGenBuffers(1, self.ibo) @@ -137,6 +122,101 @@ def __init__(self, world, name = "unknown", texture = "pig", model = models.pig, (gl.GLuint * len(self.indices)) (*self.indices), gl.GL_STATIC_DRAW) + def animate(self, age, speed, position, rotation): + gl.glBindVertexArray(self.vao) + + # compute & upload vertex positions + + gl.glBindBuffer(gl.GL_ARRAY_BUFFER, self.vertices_vbo) + offset = 0 + + for bone in self.model.bones: + name = bone["name"] + pivot = bone["pivot"] + vertices = sum(bone["vertices"], []) + buffer = vertices * 2 # we want our buffer to hold both vertex positions & normals + + # compute animation transformation matrix + + anim = glm.translate(glm.mat4(1), glm.vec3(*pivot)) + kind = None + + if name == "head": + kind = "head" + + elif name[:3] == "leg": + kind = "odd_" * (int(name[3:]) in (1, 2)) + "leg" + + elif name == "rightLeg": + kind = "leg" + + elif name == "leftLeg": + kind = "odd_leg" + + elif name == "rightArm": + kind = "arm" + + elif name == "leftArm": + kind = "odd_arm" + + if kind is not None: + odd = "odd" in kind + + if kind == "head": + x, y, z = self.world.player.position + + dx = x - position[0] + dy = y - position[1] + dz = z - position[2] + + theta = -rotation[0] - math.atan2(dz, dx) - math.tau / 4 + iota = math.atan2(dy, math.sqrt(dx ** 2 + dz ** 2)) + + anim = glm.rotate(anim, theta, glm.vec3(0, 1, 0)) + anim = glm.rotate(anim, iota, glm.vec3(1, 0, 0)) + + if "leg" in kind: + phase = math.tau / 2 * odd + anim = glm.rotate(anim, -math.sin(age * 7 + phase) / 5 * speed, glm.vec3(1, 0, 0)) + + if "arm" in kind: + theta = (-age if odd else age) * 2 + phase = math.tau / 2 * odd + + anim = glm.rotate(anim, math.sin(theta + phase) / 8, glm.vec3(0, 1, 0)) + anim = glm.rotate(anim, -math.cos(theta + phase) / 8 + math.tau / 4, glm.vec3(1, 0, 0)) + + anim = glm.translate(anim, -glm.vec3(*pivot)) + + for i in range(0, len(vertices), 3): + vector = glm.vec4(*vertices[i: i + 3], 1) + buffer[i * 2: i * 2 + 3] = tuple(anim * vector)[:3] + + # compute normals + + for i in range(0, len(buffer), 24): + # take the cross product between two vectors we know are on the plane the face belongs to + + u = glm.vec3(buffer[i + 0] - buffer[i + 6], buffer[i + 1] - buffer[i + 7], buffer[i + 2] - buffer[i + 8]) + v = glm.vec3(buffer[i + 0] - buffer[i + 12], buffer[i + 1] - buffer[i + 13], buffer[i + 2] - buffer[i + 14]) + n = glm.cross(u, v) + + # each vertex of a face will have the same normal, so we can simply copy it 4 times + + for j in range(4): + buffer[i + j * 6 + 3: i + j * 6 + 6] = n + + # upload vertex buffer section + + type_ = gl.GLfloat * len(buffer) + size = ctypes.sizeof(type_) + + gl.glBufferSubData( + gl.GL_ARRAY_BUFFER, offset, + size, (type_) (*buffer)) + + offset += size + def draw(self): # bind textures diff --git a/community/main.py b/community/main.py index bd55964a..6a8148cd 100644 --- a/community/main.py +++ b/community/main.py @@ -200,9 +200,7 @@ def update(self, delta_time): # update other entities - entities = sorted(self.world.entities, key = lambda e: math.sqrt(sum(map(lambda x: (x[0] - x[1]) ** 2, zip(e.position, self.player.position))))) - - for entity in entities[:5]: + for entity in self.world.entities: entity.update(delta_time) def on_draw(self): diff --git a/community/models/cow.py b/community/models/cow.py index 08097faa..d88f904d 100644 --- a/community/models/cow.py +++ b/community/models/cow.py @@ -5,6 +5,4 @@ colliders = [] -vertex_positions = [[-0.3749999701976776, 0.7499999403953552, 0.625, -0.3749999701976776, 0.7499999403953552, -0.5, 0.3749999701976776, 0.7499999403953552, -0.5, 0.3749999701976776, 0.7499999403953552, 0.625], [0.3749999701976776, 1.375, 0.625, 0.3749999701976776, 1.3749998807907104, -0.5, -0.3749999701976776, 1.3749998807907104, -0.5, -0.3749999701976776, 1.375, 0.625], [-0.3749999701976776, 0.7499999403953552, -0.5, -0.3749999701976776, 1.3749998807907104, -0.5, 0.3749999701976776, 1.3749998807907104, -0.5, 0.3749999701976776, 0.7499999403953552, -0.5], [0.3749999701976776, 0.7499999403953552, 0.625, 0.3749999701976776, 1.375, 0.625, -0.3749999701976776, 1.375, 0.625, -0.3749999701976776, 0.7499999403953552, 0.625], [0.3749999701976776, 0.7499999403953552, 0.625, 0.3749999701976776, 0.7499999403953552, -0.5, 0.3749999701976776, 1.3749998807907104, -0.5, 0.3749999701976776, 1.375, 0.625], [-0.3749999701976776, 1.375, 0.625, -0.3749999701976776, 1.3749998807907104, -0.5, -0.3749999701976776, 0.7499999403953552, -0.5, -0.3749999701976776, 0.7499999403953552, 0.625], [-0.1249999925494194, 0.6874999403953552, 0.625, -0.1249999925494194, 0.6874999403953552, 0.25, 0.1249999925494194, 0.6874999403953552, 0.25, 0.1249999925494194, 0.6874999403953552, 0.625], [0.1249999925494194, 0.7499999403953552, 0.625, 0.1249999925494194, 0.7499999403953552, 0.25, -0.1249999925494194, 0.7499999403953552, 0.25, -0.1249999925494194, 0.7499999403953552, 0.625], [-0.1249999925494194, 0.6874999403953552, 0.25, -0.1249999925494194, 0.7499999403953552, 0.25, 0.1249999925494194, 0.7499999403953552, 0.25, 0.1249999925494194, 0.6874999403953552, 0.25], [0.1249999925494194, 0.6874999403953552, 0.625, 0.1249999925494194, 0.7499999403953552, 0.625, -0.1249999925494194, 0.7499999403953552, 0.625, -0.1249999925494194, 0.6874999403953552, 0.625], [0.1249999925494194, 0.6874999403953552, 0.625, 0.1249999925494194, 0.6874999403953552, 0.25, 0.1249999925494194, 0.7499999403953552, 0.25, 0.1249999925494194, 0.7499999403953552, 0.625], [-0.1249999925494194, 0.7499999403953552, 0.625, -0.1249999925494194, 0.7499999403953552, 0.25, -0.1249999925494194, 0.6874999403953552, 0.25, -0.1249999925494194, 0.6874999403953552, 0.625], [-0.25, 1.0, -0.875, -0.25, 1.5, -0.875, 0.25, 1.5, -0.875, 0.25, 1.0, -0.875], [0.25, 1.0, -0.5, 0.25, 1.5, -0.5, -0.25, 1.5, -0.5, -0.25, 1.0, -0.5], [-0.25, 1.5, -0.875, -0.25, 1.5, -0.5, 0.25, 1.5, -0.5, 0.25, 1.5, -0.875], [0.25, 1.0, -0.875, 0.25, 1.0, -0.5, -0.25, 1.0, -0.5, -0.25, 1.0, -0.875], [0.25, 1.0, -0.875, 0.25, 1.5, -0.875, 0.25, 1.5, -0.5, 0.25, 1.0, -0.5], [-0.25, 1.0, -0.5, -0.25, 1.5, -0.5, -0.25, 1.5, -0.875, -0.25, 1.0, -0.875], [-0.3125, 1.375, -0.75, -0.3125, 1.5625, -0.75, -0.25, 1.5625, -0.75, -0.25, 1.375, -0.75], [-0.25, 1.375, -0.6875, -0.25, 1.5625, -0.6875, -0.3125, 1.5625, -0.6875, -0.3125, 1.375, -0.6875], [-0.3125, 1.5625, -0.75, -0.3125, 1.5625, -0.6875, -0.25, 1.5625, -0.6875, -0.25, 1.5625, -0.75], [-0.25, 1.375, -0.75, -0.25, 1.375, -0.6875, -0.3125, 1.375, -0.6875, -0.3125, 1.375, -0.75], [-0.25, 1.375, -0.75, -0.25, 1.5625, -0.75, -0.25, 1.5625, -0.6875, -0.25, 1.375, -0.6875], [-0.3125, 1.375, -0.6875, -0.3125, 1.5625, -0.6875, -0.3125, 1.5625, -0.75, -0.3125, 1.375, -0.75], [0.25, 1.375, -0.75, 0.25, 1.5625, -0.75, 0.3125, 1.5625, -0.75, 0.3125, 1.375, -0.75], [0.3125, 1.375, -0.6875, 0.3125, 1.5625, -0.6875, 0.25, 1.5625, -0.6875, 0.25, 1.375, -0.6875], [0.25, 1.5625, -0.75, 0.25, 1.5625, -0.6875, 0.3125, 1.5625, -0.6875, 0.3125, 1.5625, -0.75], [0.3125, 1.375, -0.75, 0.3125, 1.375, -0.6875, 0.25, 1.375, -0.6875, 0.25, 1.375, -0.75], [0.3125, 1.375, -0.75, 0.3125, 1.5625, -0.75, 0.3125, 1.5625, -0.6875, 0.3125, 1.375, -0.6875], [0.25, 1.375, -0.6875, 0.25, 1.5625, -0.6875, 0.25, 1.5625, -0.75, 0.25, 1.375, -0.75], [-0.3125, 0.0, 0.3125, -0.3125, 0.75, 0.3125, -0.0625, 0.75, 0.3125, -0.0625, 0.0, 0.3125], [-0.0625, 0.0, 0.5625, -0.0625, 0.75, 0.5625, -0.3125, 0.75, 0.5625, -0.3125, 0.0, 0.5625], [-0.3125, 0.75, 0.3125, -0.3125, 0.75, 0.5625, -0.0625, 0.75, 0.5625, -0.0625, 0.75, 0.3125], [-0.0625, 0.0, 0.3125, -0.0625, 0.0, 0.5625, -0.3125, 0.0, 0.5625, -0.3125, 0.0, 0.3125], [-0.0625, 0.0, 0.3125, -0.0625, 0.75, 0.3125, -0.0625, 0.75, 0.5625, -0.0625, 0.0, 0.5625], [-0.3125, 0.0, 0.5625, -0.3125, 0.75, 0.5625, -0.3125, 0.75, 0.3125, -0.3125, 0.0, 0.3125], [0.0625, 0.0, 0.3125, 0.0625, 0.75, 0.3125, 0.3125, 0.75, 0.3125, 0.3125, 0.0, 0.3125], [0.3125, 0.0, 0.5625, 0.3125, 0.75, 0.5625, 0.0625, 0.75, 0.5625, 0.0625, 0.0, 0.5625], [0.0625, 0.75, 0.3125, 0.0625, 0.75, 0.5625, 0.3125, 0.75, 0.5625, 0.3125, 0.75, 0.3125], [0.3125, 0.0, 0.3125, 0.3125, 0.0, 0.5625, 0.0625, 0.0, 0.5625, 0.0625, 0.0, 0.3125], [0.3125, 0.0, 0.3125, 0.3125, 0.75, 0.3125, 0.3125, 0.75, 0.5625, 0.3125, 0.0, 0.5625], [0.0625, 0.0, 0.5625, 0.0625, 0.75, 0.5625, 0.0625, 0.75, 0.3125, 0.0625, 0.0, 0.3125], [-0.3125, 0.0, -0.4375, -0.3125, 0.75, -0.4375, -0.0625, 0.75, -0.4375, -0.0625, 0.0, -0.4375], [-0.0625, 0.0, -0.1875, -0.0625, 0.75, -0.1875, -0.3125, 0.75, -0.1875, -0.3125, 0.0, -0.1875], [-0.3125, 0.75, -0.4375, -0.3125, 0.75, -0.1875, -0.0625, 0.75, -0.1875, -0.0625, 0.75, -0.4375], [-0.0625, 0.0, -0.4375, -0.0625, 0.0, -0.1875, -0.3125, 0.0, -0.1875, -0.3125, 0.0, -0.4375], [-0.0625, 0.0, -0.4375, -0.0625, 0.75, -0.4375, -0.0625, 0.75, -0.1875, -0.0625, 0.0, -0.1875], [-0.3125, 0.0, -0.1875, -0.3125, 0.75, -0.1875, -0.3125, 0.75, -0.4375, -0.3125, 0.0, -0.4375], [0.0625, 0.0, -0.4375, 0.0625, 0.75, -0.4375, 0.3125, 0.75, -0.4375, 0.3125, 0.0, -0.4375], [0.3125, 0.0, -0.1875, 0.3125, 0.75, -0.1875, 0.0625, 0.75, -0.1875, 0.0625, 0.0, -0.1875], [0.0625, 0.75, -0.4375, 0.0625, 0.75, -0.1875, 0.3125, 0.75, -0.1875, 0.3125, 0.75, -0.4375], [0.3125, 0.0, -0.4375, 0.3125, 0.0, -0.1875, 0.0625, 0.0, -0.1875, 0.0625, 0.0, -0.4375], [0.3125, 0.0, -0.4375, 0.3125, 0.75, -0.4375, 0.3125, 0.75, -0.1875, 0.3125, 0.0, -0.1875], [0.0625, 0.0, -0.1875, 0.0625, 0.75, -0.1875, 0.0625, 0.75, -0.4375, 0.0625, 0.0, -0.4375]] -tex_coords = [[0.06493506493506493, 0.0, 0, 0.06493506493506493, 0.6428571428571428, 0, 0.14285714285714285, 0.6428571428571428, 0, 0.14285714285714285, 0.0, 0], [0.2077922077922078, 0.0, 0, 0.2077922077922078, 0.6428571428571428, 0, 0.2857142857142857, 0.6428571428571428, 0, 0.2857142857142857, 0.0, 0], [0.06493506493506493, 0.6428571428571428, 0, 0.06493506493506493, 1.0, 0, 0.14285714285714285, 1.0, 0, 0.14285714285714285, 0.6428571428571428, 0], [0.14285714285714285, 0.6428571428571428, 0, 0.14285714285714285, 1.0, 0, 0.22077922077922077, 1.0, 0, 0.22077922077922077, 0.6428571428571428, 0], [0.14285714285714285, 0.0, 0, 0.14285714285714285, 0.6428571428571428, 0, 0.2077922077922078, 0.6428571428571428, 0, 0.2077922077922078, 0.0, 0], [0.0, 0.0, 0, 0.0, 0.6428571428571428, 0, 0.06493506493506493, 0.6428571428571428, 0, 0.06493506493506493, 0.0, 0], [0.2922077922077922, 0.75, 0, 0.2922077922077922, 0.9642857142857143, 0, 0.3181818181818182, 0.9642857142857143, 0, 0.3181818181818182, 0.75, 0], [0.3246753246753247, 0.75, 0, 0.3246753246753247, 0.9642857142857143, 0, 0.35064935064935066, 0.9642857142857143, 0, 0.35064935064935066, 0.75, 0], [0.2922077922077922, 0.9642857142857143, 0, 0.2922077922077922, 1.0, 0, 0.3181818181818182, 1.0, 0, 0.3181818181818182, 0.9642857142857143, 0], [0.3181818181818182, 0.9642857142857143, 0, 0.3181818181818182, 1.0, 0, 0.34415584415584416, 1.0, 0, 0.34415584415584416, 0.9642857142857143, 0], [0.3181818181818182, 0.75, 0, 0.3181818181818182, 0.9642857142857143, 0, 0.3246753246753247, 0.9642857142857143, 0, 0.3246753246753247, 0.75, 0], [0.2857142857142857, 0.75, 0, 0.2857142857142857, 0.9642857142857143, 0, 0.2922077922077922, 0.9642857142857143, 0, 0.2922077922077922, 0.75, 0], [0.38961038961038963, 0.5, 0, 0.38961038961038963, 0.7857142857142857, 0, 0.44155844155844154, 0.7857142857142857, 0, 0.44155844155844154, 0.5, 0], [0.4805194805194805, 0.5, 0, 0.4805194805194805, 0.7857142857142857, 0, 0.5324675324675324, 0.7857142857142857, 0, 0.5324675324675324, 0.5, 0], [0.38961038961038963, 0.7857142857142857, 0, 0.38961038961038963, 1.0, 0, 0.44155844155844154, 1.0, 0, 0.44155844155844154, 0.7857142857142857, 0], [0.44155844155844154, 0.7857142857142857, 0, 0.44155844155844154, 1.0, 0, 0.4935064935064935, 1.0, 0, 0.4935064935064935, 0.7857142857142857, 0], [0.44155844155844154, 0.5, 0, 0.44155844155844154, 0.7857142857142857, 0, 0.4805194805194805, 0.7857142857142857, 0, 0.4805194805194805, 0.5, 0], [0.35064935064935066, 0.5, 0, 0.35064935064935066, 0.7857142857142857, 0, 0.38961038961038963, 0.7857142857142857, 0, 0.38961038961038963, 0.5, 0], [0.538961038961039, 0.8571428571428572, 0, 0.538961038961039, 0.9642857142857143, 0, 0.5454545454545454, 0.9642857142857143, 0, 0.5454545454545454, 0.8571428571428572, 0], [0.551948051948052, 0.8571428571428572, 0, 0.551948051948052, 0.9642857142857143, 0, 0.5584415584415584, 0.9642857142857143, 0, 0.5584415584415584, 0.8571428571428572, 0], [0.538961038961039, 0.9642857142857143, 0, 0.538961038961039, 1.0, 0, 0.5454545454545454, 1.0, 0, 0.5454545454545454, 0.9642857142857143, 0], [0.5454545454545454, 0.9642857142857143, 0, 0.5454545454545454, 1.0, 0, 0.551948051948052, 1.0, 0, 0.551948051948052, 0.9642857142857143, 0], [0.5454545454545454, 0.8571428571428572, 0, 0.5454545454545454, 0.9642857142857143, 0, 0.551948051948052, 0.9642857142857143, 0, 0.551948051948052, 0.8571428571428572, 0], [0.5324675324675324, 0.8571428571428572, 0, 0.5324675324675324, 0.9642857142857143, 0, 0.538961038961039, 0.9642857142857143, 0, 0.538961038961039, 0.8571428571428572, 0], [0.564935064935065, 0.8571428571428572, 0, 0.564935064935065, 0.9642857142857143, 0, 0.5714285714285714, 0.9642857142857143, 0, 0.5714285714285714, 0.8571428571428572, 0], [0.577922077922078, 0.8571428571428572, 0, 0.577922077922078, 0.9642857142857143, 0, 0.5844155844155844, 0.9642857142857143, 0, 0.5844155844155844, 0.8571428571428572, 0], [0.564935064935065, 0.9642857142857143, 0, 0.564935064935065, 1.0, 0, 0.5714285714285714, 1.0, 0, 0.5714285714285714, 0.9642857142857143, 0], [0.5714285714285714, 0.9642857142857143, 0, 0.5714285714285714, 1.0, 0, 0.577922077922078, 1.0, 0, 0.577922077922078, 0.9642857142857143, 0], [0.5714285714285714, 0.8571428571428572, 0, 0.5714285714285714, 0.9642857142857143, 0, 0.577922077922078, 0.9642857142857143, 0, 0.577922077922078, 0.8571428571428572, 0], [0.5584415584415584, 0.8571428571428572, 0, 0.5584415584415584, 0.9642857142857143, 0, 0.564935064935065, 0.9642857142857143, 0, 0.564935064935065, 0.8571428571428572, 0], [0.6103896103896104, 0.4285714285714286, 0, 0.6103896103896104, 0.8571428571428572, 0, 0.6363636363636364, 0.8571428571428572, 0, 0.6363636363636364, 0.4285714285714286, 0], [0.6623376623376623, 0.4285714285714286, 0, 0.6623376623376623, 0.8571428571428572, 0, 0.6883116883116883, 0.8571428571428572, 0, 0.6883116883116883, 0.4285714285714286, 0], [0.6103896103896104, 0.8571428571428572, 0, 0.6103896103896104, 1.0, 0, 0.6363636363636364, 1.0, 0, 0.6363636363636364, 0.8571428571428572, 0], [0.6363636363636364, 0.8571428571428572, 0, 0.6363636363636364, 1.0, 0, 0.6623376623376623, 1.0, 0, 0.6623376623376623, 0.8571428571428572, 0], [0.6363636363636364, 0.4285714285714286, 0, 0.6363636363636364, 0.8571428571428572, 0, 0.6623376623376623, 0.8571428571428572, 0, 0.6623376623376623, 0.4285714285714286, 0], [0.5844155844155844, 0.4285714285714286, 0, 0.5844155844155844, 0.8571428571428572, 0, 0.6103896103896104, 0.8571428571428572, 0, 0.6103896103896104, 0.4285714285714286, 0], [0.7142857142857143, 0.4285714285714286, 0, 0.7142857142857143, 0.8571428571428572, 0, 0.7402597402597403, 0.8571428571428572, 0, 0.7402597402597403, 0.4285714285714286, 0], [0.7662337662337663, 0.4285714285714286, 0, 0.7662337662337663, 0.8571428571428572, 0, 0.7922077922077922, 0.8571428571428572, 0, 0.7922077922077922, 0.4285714285714286, 0], [0.7142857142857143, 0.8571428571428572, 0, 0.7142857142857143, 1.0, 0, 0.7402597402597403, 1.0, 0, 0.7402597402597403, 0.8571428571428572, 0], [0.7402597402597403, 0.8571428571428572, 0, 0.7402597402597403, 1.0, 0, 0.7662337662337663, 1.0, 0, 0.7662337662337663, 0.8571428571428572, 0], [0.7402597402597403, 0.4285714285714286, 0, 0.7402597402597403, 0.8571428571428572, 0, 0.7662337662337663, 0.8571428571428572, 0, 0.7662337662337663, 0.4285714285714286, 0], [0.6883116883116883, 0.4285714285714286, 0, 0.6883116883116883, 0.8571428571428572, 0, 0.7142857142857143, 0.8571428571428572, 0, 0.7142857142857143, 0.4285714285714286, 0], [0.8181818181818182, 0.4285714285714286, 0, 0.8181818181818182, 0.8571428571428572, 0, 0.8441558441558441, 0.8571428571428572, 0, 0.8441558441558441, 0.4285714285714286, 0], [0.8701298701298701, 0.4285714285714286, 0, 0.8701298701298701, 0.8571428571428572, 0, 0.8961038961038961, 0.8571428571428572, 0, 0.8961038961038961, 0.4285714285714286, 0], [0.8181818181818182, 0.8571428571428572, 0, 0.8181818181818182, 1.0, 0, 0.8441558441558441, 1.0, 0, 0.8441558441558441, 0.8571428571428572, 0], [0.8441558441558441, 0.8571428571428572, 0, 0.8441558441558441, 1.0, 0, 0.8701298701298701, 1.0, 0, 0.8701298701298701, 0.8571428571428572, 0], [0.8441558441558441, 0.4285714285714286, 0, 0.8441558441558441, 0.8571428571428572, 0, 0.8701298701298701, 0.8571428571428572, 0, 0.8701298701298701, 0.4285714285714286, 0], [0.7922077922077922, 0.4285714285714286, 0, 0.7922077922077922, 0.8571428571428572, 0, 0.8181818181818182, 0.8571428571428572, 0, 0.8181818181818182, 0.4285714285714286, 0], [0.922077922077922, 0.4285714285714286, 0, 0.922077922077922, 0.8571428571428572, 0, 0.948051948051948, 0.8571428571428572, 0, 0.948051948051948, 0.4285714285714286, 0], [0.974025974025974, 0.4285714285714286, 0, 0.974025974025974, 0.8571428571428572, 0, 1.0, 0.8571428571428572, 0, 1.0, 0.4285714285714286, 0], [0.922077922077922, 0.8571428571428572, 0, 0.922077922077922, 1.0, 0, 0.948051948051948, 1.0, 0, 0.948051948051948, 0.8571428571428572, 0], [0.948051948051948, 0.8571428571428572, 0, 0.948051948051948, 1.0, 0, 0.974025974025974, 1.0, 0, 0.974025974025974, 0.8571428571428572, 0], [0.948051948051948, 0.4285714285714286, 0, 0.948051948051948, 0.8571428571428572, 0, 0.974025974025974, 0.8571428571428572, 0, 0.974025974025974, 0.4285714285714286, 0], [0.8961038961038961, 0.4285714285714286, 0, 0.8961038961038961, 0.8571428571428572, 0, 0.922077922077922, 0.8571428571428572, 0, 0.922077922077922, 0.4285714285714286, 0]] -shading_values = [[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]] +bones = [{'name':'body','pivot':[0.0, 1.1875, 0.125],'vertices':[[-0.3749999701976776, 0.7499999403953552, 0.625, -0.3749999701976776, 0.7499999403953552, -0.5, 0.3749999701976776, 0.7499999403953552, -0.5, 0.3749999701976776, 0.7499999403953552, 0.625], [0.3749999701976776, 1.375, 0.625, 0.3749999701976776, 1.3749998807907104, -0.5, -0.3749999701976776, 1.3749998807907104, -0.5, -0.3749999701976776, 1.375, 0.625], [-0.3749999701976776, 0.7499999403953552, -0.5, -0.3749999701976776, 1.3749998807907104, -0.5, 0.3749999701976776, 1.3749998807907104, -0.5, 0.3749999701976776, 0.7499999403953552, -0.5], [0.3749999701976776, 0.7499999403953552, 0.625, 0.3749999701976776, 1.375, 0.625, -0.3749999701976776, 1.375, 0.625, -0.3749999701976776, 0.7499999403953552, 0.625], [0.3749999701976776, 0.7499999403953552, 0.625, 0.3749999701976776, 0.7499999403953552, -0.5, 0.3749999701976776, 1.3749998807907104, -0.5, 0.3749999701976776, 1.375, 0.625], [-0.3749999701976776, 1.375, 0.625, -0.3749999701976776, 1.3749998807907104, -0.5, -0.3749999701976776, 0.7499999403953552, -0.5, -0.3749999701976776, 0.7499999403953552, 0.625], [-0.1249999925494194, 0.6874999403953552, 0.625, -0.1249999925494194, 0.6874999403953552, 0.25, 0.1249999925494194, 0.6874999403953552, 0.25, 0.1249999925494194, 0.6874999403953552, 0.625], [0.1249999925494194, 0.7499999403953552, 0.625, 0.1249999925494194, 0.7499999403953552, 0.25, -0.1249999925494194, 0.7499999403953552, 0.25, -0.1249999925494194, 0.7499999403953552, 0.625], [-0.1249999925494194, 0.6874999403953552, 0.25, -0.1249999925494194, 0.7499999403953552, 0.25, 0.1249999925494194, 0.7499999403953552, 0.25, 0.1249999925494194, 0.6874999403953552, 0.25], [0.1249999925494194, 0.6874999403953552, 0.625, 0.1249999925494194, 0.7499999403953552, 0.625, -0.1249999925494194, 0.7499999403953552, 0.625, -0.1249999925494194, 0.6874999403953552, 0.625], [0.1249999925494194, 0.6874999403953552, 0.625, 0.1249999925494194, 0.6874999403953552, 0.25, 0.1249999925494194, 0.7499999403953552, 0.25, 0.1249999925494194, 0.7499999403953552, 0.625], [-0.1249999925494194, 0.7499999403953552, 0.625, -0.1249999925494194, 0.7499999403953552, 0.25, -0.1249999925494194, 0.6874999403953552, 0.25, -0.1249999925494194, 0.6874999403953552, 0.625]],'tex_coords':[[0.06493506493506493, 0.0, 0.06493506493506493, 0.6428571428571428, 0.14285714285714285, 0.6428571428571428, 0.14285714285714285, 0.0], [0.2077922077922078, 0.0, 0.2077922077922078, 0.6428571428571428, 0.2857142857142857, 0.6428571428571428, 0.2857142857142857, 0.0], [0.06493506493506493, 0.6428571428571428, 0.06493506493506493, 1.0, 0.14285714285714285, 1.0, 0.14285714285714285, 0.6428571428571428], [0.14285714285714285, 0.6428571428571428, 0.14285714285714285, 1.0, 0.22077922077922077, 1.0, 0.22077922077922077, 0.6428571428571428], [0.14285714285714285, 0.0, 0.14285714285714285, 0.6428571428571428, 0.2077922077922078, 0.6428571428571428, 0.2077922077922078, 0.0], [0.0, 0.0, 0.0, 0.6428571428571428, 0.06493506493506493, 0.6428571428571428, 0.06493506493506493, 0.0], [0.2922077922077922, 0.75, 0.2922077922077922, 0.9642857142857143, 0.3181818181818182, 0.9642857142857143, 0.3181818181818182, 0.75], [0.3246753246753247, 0.75, 0.3246753246753247, 0.9642857142857143, 0.35064935064935066, 0.9642857142857143, 0.35064935064935066, 0.75], [0.2922077922077922, 0.9642857142857143, 0.2922077922077922, 1.0, 0.3181818181818182, 1.0, 0.3181818181818182, 0.9642857142857143], [0.3181818181818182, 0.9642857142857143, 0.3181818181818182, 1.0, 0.34415584415584416, 1.0, 0.34415584415584416, 0.9642857142857143], [0.3181818181818182, 0.75, 0.3181818181818182, 0.9642857142857143, 0.3246753246753247, 0.9642857142857143, 0.3246753246753247, 0.75], [0.2857142857142857, 0.75, 0.2857142857142857, 0.9642857142857143, 0.2922077922077922, 0.9642857142857143, 0.2922077922077922, 0.75]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'head','pivot':[0.0, 1.25, -0.5],'vertices':[[-0.25, 1.0, -0.875, -0.25, 1.5, -0.875, 0.25, 1.5, -0.875, 0.25, 1.0, -0.875], [0.25, 1.0, -0.5, 0.25, 1.5, -0.5, -0.25, 1.5, -0.5, -0.25, 1.0, -0.5], [-0.25, 1.5, -0.875, -0.25, 1.5, -0.5, 0.25, 1.5, -0.5, 0.25, 1.5, -0.875], [0.25, 1.0, -0.875, 0.25, 1.0, -0.5, -0.25, 1.0, -0.5, -0.25, 1.0, -0.875], [0.25, 1.0, -0.875, 0.25, 1.5, -0.875, 0.25, 1.5, -0.5, 0.25, 1.0, -0.5], [-0.25, 1.0, -0.5, -0.25, 1.5, -0.5, -0.25, 1.5, -0.875, -0.25, 1.0, -0.875], [-0.3125, 1.375, -0.75, -0.3125, 1.5625, -0.75, -0.25, 1.5625, -0.75, -0.25, 1.375, -0.75], [-0.25, 1.375, -0.6875, -0.25, 1.5625, -0.6875, -0.3125, 1.5625, -0.6875, -0.3125, 1.375, -0.6875], [-0.3125, 1.5625, -0.75, -0.3125, 1.5625, -0.6875, -0.25, 1.5625, -0.6875, -0.25, 1.5625, -0.75], [-0.25, 1.375, -0.75, -0.25, 1.375, -0.6875, -0.3125, 1.375, -0.6875, -0.3125, 1.375, -0.75], [-0.25, 1.375, -0.75, -0.25, 1.5625, -0.75, -0.25, 1.5625, -0.6875, -0.25, 1.375, -0.6875], [-0.3125, 1.375, -0.6875, -0.3125, 1.5625, -0.6875, -0.3125, 1.5625, -0.75, -0.3125, 1.375, -0.75], [0.25, 1.375, -0.75, 0.25, 1.5625, -0.75, 0.3125, 1.5625, -0.75, 0.3125, 1.375, -0.75], [0.3125, 1.375, -0.6875, 0.3125, 1.5625, -0.6875, 0.25, 1.5625, -0.6875, 0.25, 1.375, -0.6875], [0.25, 1.5625, -0.75, 0.25, 1.5625, -0.6875, 0.3125, 1.5625, -0.6875, 0.3125, 1.5625, -0.75], [0.3125, 1.375, -0.75, 0.3125, 1.375, -0.6875, 0.25, 1.375, -0.6875, 0.25, 1.375, -0.75], [0.3125, 1.375, -0.75, 0.3125, 1.5625, -0.75, 0.3125, 1.5625, -0.6875, 0.3125, 1.375, -0.6875], [0.25, 1.375, -0.6875, 0.25, 1.5625, -0.6875, 0.25, 1.5625, -0.75, 0.25, 1.375, -0.75]],'tex_coords':[[0.38961038961038963, 0.5, 0.38961038961038963, 0.7857142857142857, 0.44155844155844154, 0.7857142857142857, 0.44155844155844154, 0.5], [0.4805194805194805, 0.5, 0.4805194805194805, 0.7857142857142857, 0.5324675324675324, 0.7857142857142857, 0.5324675324675324, 0.5], [0.38961038961038963, 0.7857142857142857, 0.38961038961038963, 1.0, 0.44155844155844154, 1.0, 0.44155844155844154, 0.7857142857142857], [0.44155844155844154, 0.7857142857142857, 0.44155844155844154, 1.0, 0.4935064935064935, 1.0, 0.4935064935064935, 0.7857142857142857], [0.44155844155844154, 0.5, 0.44155844155844154, 0.7857142857142857, 0.4805194805194805, 0.7857142857142857, 0.4805194805194805, 0.5], [0.35064935064935066, 0.5, 0.35064935064935066, 0.7857142857142857, 0.38961038961038963, 0.7857142857142857, 0.38961038961038963, 0.5], [0.538961038961039, 0.8571428571428572, 0.538961038961039, 0.9642857142857143, 0.5454545454545454, 0.9642857142857143, 0.5454545454545454, 0.8571428571428572], [0.551948051948052, 0.8571428571428572, 0.551948051948052, 0.9642857142857143, 0.5584415584415584, 0.9642857142857143, 0.5584415584415584, 0.8571428571428572], [0.538961038961039, 0.9642857142857143, 0.538961038961039, 1.0, 0.5454545454545454, 1.0, 0.5454545454545454, 0.9642857142857143], [0.5454545454545454, 0.9642857142857143, 0.5454545454545454, 1.0, 0.551948051948052, 1.0, 0.551948051948052, 0.9642857142857143], [0.5454545454545454, 0.8571428571428572, 0.5454545454545454, 0.9642857142857143, 0.551948051948052, 0.9642857142857143, 0.551948051948052, 0.8571428571428572], [0.5324675324675324, 0.8571428571428572, 0.5324675324675324, 0.9642857142857143, 0.538961038961039, 0.9642857142857143, 0.538961038961039, 0.8571428571428572], [0.564935064935065, 0.8571428571428572, 0.564935064935065, 0.9642857142857143, 0.5714285714285714, 0.9642857142857143, 0.5714285714285714, 0.8571428571428572], [0.577922077922078, 0.8571428571428572, 0.577922077922078, 0.9642857142857143, 0.5844155844155844, 0.9642857142857143, 0.5844155844155844, 0.8571428571428572], [0.564935064935065, 0.9642857142857143, 0.564935064935065, 1.0, 0.5714285714285714, 1.0, 0.5714285714285714, 0.9642857142857143], [0.5714285714285714, 0.9642857142857143, 0.5714285714285714, 1.0, 0.577922077922078, 1.0, 0.577922077922078, 0.9642857142857143], [0.5714285714285714, 0.8571428571428572, 0.5714285714285714, 0.9642857142857143, 0.577922077922078, 0.9642857142857143, 0.577922077922078, 0.8571428571428572], [0.5584415584415584, 0.8571428571428572, 0.5584415584415584, 0.9642857142857143, 0.564935064935065, 0.9642857142857143, 0.564935064935065, 0.8571428571428572]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'leg0','pivot':[-0.25, 0.75, 0.4375],'vertices':[[-0.3125, 0.0, 0.3125, -0.3125, 0.75, 0.3125, -0.0625, 0.75, 0.3125, -0.0625, 0.0, 0.3125], [-0.0625, 0.0, 0.5625, -0.0625, 0.75, 0.5625, -0.3125, 0.75, 0.5625, -0.3125, 0.0, 0.5625], [-0.3125, 0.75, 0.3125, -0.3125, 0.75, 0.5625, -0.0625, 0.75, 0.5625, -0.0625, 0.75, 0.3125], [-0.0625, 0.0, 0.3125, -0.0625, 0.0, 0.5625, -0.3125, 0.0, 0.5625, -0.3125, 0.0, 0.3125], [-0.0625, 0.0, 0.3125, -0.0625, 0.75, 0.3125, -0.0625, 0.75, 0.5625, -0.0625, 0.0, 0.5625], [-0.3125, 0.0, 0.5625, -0.3125, 0.75, 0.5625, -0.3125, 0.75, 0.3125, -0.3125, 0.0, 0.3125]],'tex_coords':[[0.6103896103896104, 0.4285714285714286, 0.6103896103896104, 0.8571428571428572, 0.6363636363636364, 0.8571428571428572, 0.6363636363636364, 0.4285714285714286], [0.6623376623376623, 0.4285714285714286, 0.6623376623376623, 0.8571428571428572, 0.6883116883116883, 0.8571428571428572, 0.6883116883116883, 0.4285714285714286], [0.6103896103896104, 0.8571428571428572, 0.6103896103896104, 1.0, 0.6363636363636364, 1.0, 0.6363636363636364, 0.8571428571428572], [0.6363636363636364, 0.8571428571428572, 0.6363636363636364, 1.0, 0.6623376623376623, 1.0, 0.6623376623376623, 0.8571428571428572], [0.6363636363636364, 0.4285714285714286, 0.6363636363636364, 0.8571428571428572, 0.6623376623376623, 0.8571428571428572, 0.6623376623376623, 0.4285714285714286], [0.5844155844155844, 0.4285714285714286, 0.5844155844155844, 0.8571428571428572, 0.6103896103896104, 0.8571428571428572, 0.6103896103896104, 0.4285714285714286]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'leg1','pivot':[0.25, 0.75, 0.4375],'vertices':[[0.0625, 0.0, 0.3125, 0.0625, 0.75, 0.3125, 0.3125, 0.75, 0.3125, 0.3125, 0.0, 0.3125], [0.3125, 0.0, 0.5625, 0.3125, 0.75, 0.5625, 0.0625, 0.75, 0.5625, 0.0625, 0.0, 0.5625], [0.0625, 0.75, 0.3125, 0.0625, 0.75, 0.5625, 0.3125, 0.75, 0.5625, 0.3125, 0.75, 0.3125], [0.3125, 0.0, 0.3125, 0.3125, 0.0, 0.5625, 0.0625, 0.0, 0.5625, 0.0625, 0.0, 0.3125], [0.3125, 0.0, 0.3125, 0.3125, 0.75, 0.3125, 0.3125, 0.75, 0.5625, 0.3125, 0.0, 0.5625], [0.0625, 0.0, 0.5625, 0.0625, 0.75, 0.5625, 0.0625, 0.75, 0.3125, 0.0625, 0.0, 0.3125]],'tex_coords':[[0.7142857142857143, 0.4285714285714286, 0.7142857142857143, 0.8571428571428572, 0.7402597402597403, 0.8571428571428572, 0.7402597402597403, 0.4285714285714286], [0.7662337662337663, 0.4285714285714286, 0.7662337662337663, 0.8571428571428572, 0.7922077922077922, 0.8571428571428572, 0.7922077922077922, 0.4285714285714286], [0.7142857142857143, 0.8571428571428572, 0.7142857142857143, 1.0, 0.7402597402597403, 1.0, 0.7402597402597403, 0.8571428571428572], [0.7402597402597403, 0.8571428571428572, 0.7402597402597403, 1.0, 0.7662337662337663, 1.0, 0.7662337662337663, 0.8571428571428572], [0.7402597402597403, 0.4285714285714286, 0.7402597402597403, 0.8571428571428572, 0.7662337662337663, 0.8571428571428572, 0.7662337662337663, 0.4285714285714286], [0.6883116883116883, 0.4285714285714286, 0.6883116883116883, 0.8571428571428572, 0.7142857142857143, 0.8571428571428572, 0.7142857142857143, 0.4285714285714286]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'leg2','pivot':[-0.25, 0.75, -0.375],'vertices':[[-0.3125, 0.0, -0.4375, -0.3125, 0.75, -0.4375, -0.0625, 0.75, -0.4375, -0.0625, 0.0, -0.4375], [-0.0625, 0.0, -0.1875, -0.0625, 0.75, -0.1875, -0.3125, 0.75, -0.1875, -0.3125, 0.0, -0.1875], [-0.3125, 0.75, -0.4375, -0.3125, 0.75, -0.1875, -0.0625, 0.75, -0.1875, -0.0625, 0.75, -0.4375], [-0.0625, 0.0, -0.4375, -0.0625, 0.0, -0.1875, -0.3125, 0.0, -0.1875, -0.3125, 0.0, -0.4375], [-0.0625, 0.0, -0.4375, -0.0625, 0.75, -0.4375, -0.0625, 0.75, -0.1875, -0.0625, 0.0, -0.1875], [-0.3125, 0.0, -0.1875, -0.3125, 0.75, -0.1875, -0.3125, 0.75, -0.4375, -0.3125, 0.0, -0.4375]],'tex_coords':[[0.8181818181818182, 0.4285714285714286, 0.8181818181818182, 0.8571428571428572, 0.8441558441558441, 0.8571428571428572, 0.8441558441558441, 0.4285714285714286], [0.8701298701298701, 0.4285714285714286, 0.8701298701298701, 0.8571428571428572, 0.8961038961038961, 0.8571428571428572, 0.8961038961038961, 0.4285714285714286], [0.8181818181818182, 0.8571428571428572, 0.8181818181818182, 1.0, 0.8441558441558441, 1.0, 0.8441558441558441, 0.8571428571428572], [0.8441558441558441, 0.8571428571428572, 0.8441558441558441, 1.0, 0.8701298701298701, 1.0, 0.8701298701298701, 0.8571428571428572], [0.8441558441558441, 0.4285714285714286, 0.8441558441558441, 0.8571428571428572, 0.8701298701298701, 0.8571428571428572, 0.8701298701298701, 0.4285714285714286], [0.7922077922077922, 0.4285714285714286, 0.7922077922077922, 0.8571428571428572, 0.8181818181818182, 0.8571428571428572, 0.8181818181818182, 0.4285714285714286]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'leg3','pivot':[0.25, 0.75, -0.375],'vertices':[[0.0625, 0.0, -0.4375, 0.0625, 0.75, -0.4375, 0.3125, 0.75, -0.4375, 0.3125, 0.0, -0.4375], [0.3125, 0.0, -0.1875, 0.3125, 0.75, -0.1875, 0.0625, 0.75, -0.1875, 0.0625, 0.0, -0.1875], [0.0625, 0.75, -0.4375, 0.0625, 0.75, -0.1875, 0.3125, 0.75, -0.1875, 0.3125, 0.75, -0.4375], [0.3125, 0.0, -0.4375, 0.3125, 0.0, -0.1875, 0.0625, 0.0, -0.1875, 0.0625, 0.0, -0.4375], [0.3125, 0.0, -0.4375, 0.3125, 0.75, -0.4375, 0.3125, 0.75, -0.1875, 0.3125, 0.0, -0.1875], [0.0625, 0.0, -0.1875, 0.0625, 0.75, -0.1875, 0.0625, 0.75, -0.4375, 0.0625, 0.0, -0.4375]],'tex_coords':[[0.922077922077922, 0.4285714285714286, 0.922077922077922, 0.8571428571428572, 0.948051948051948, 0.8571428571428572, 0.948051948051948, 0.4285714285714286], [0.974025974025974, 0.4285714285714286, 0.974025974025974, 0.8571428571428572, 1.0, 0.8571428571428572, 1.0, 0.4285714285714286], [0.922077922077922, 0.8571428571428572, 0.922077922077922, 1.0, 0.948051948051948, 1.0, 0.948051948051948, 0.8571428571428572], [0.948051948051948, 0.8571428571428572, 0.948051948051948, 1.0, 0.974025974025974, 1.0, 0.974025974025974, 0.8571428571428572], [0.948051948051948, 0.4285714285714286, 0.948051948051948, 0.8571428571428572, 0.974025974025974, 0.8571428571428572, 0.974025974025974, 0.4285714285714286], [0.8961038961038961, 0.4285714285714286, 0.8961038961038961, 0.8571428571428572, 0.922077922077922, 0.8571428571428572, 0.922077922077922, 0.4285714285714286]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}] diff --git a/community/models/creeper.py b/community/models/creeper.py index ac48d1fd..f6860aa7 100644 --- a/community/models/creeper.py +++ b/community/models/creeper.py @@ -5,6 +5,4 @@ colliders = [] -vertex_positions = [[-0.25, 0.375, -0.125, -0.25, 1.125, -0.125, 0.25, 1.125, -0.125, 0.25, 0.375, -0.125], [0.25, 0.375, 0.125, 0.25, 1.125, 0.125, -0.25, 1.125, 0.125, -0.25, 0.375, 0.125], [-0.25, 1.125, -0.125, -0.25, 1.125, 0.125, 0.25, 1.125, 0.125, 0.25, 1.125, -0.125], [0.25, 0.375, -0.125, 0.25, 0.375, 0.125, -0.25, 0.375, 0.125, -0.25, 0.375, -0.125], [0.25, 0.375, -0.125, 0.25, 1.125, -0.125, 0.25, 1.125, 0.125, 0.25, 0.375, 0.125], [-0.25, 0.375, 0.125, -0.25, 1.125, 0.125, -0.25, 1.125, -0.125, -0.25, 0.375, -0.125], [-0.25, 1.125, -0.25, -0.25, 1.625, -0.25, 0.25, 1.625, -0.25, 0.25, 1.125, -0.25], [0.25, 1.125, 0.25, 0.25, 1.625, 0.25, -0.25, 1.625, 0.25, -0.25, 1.125, 0.25], [-0.25, 1.625, -0.25, -0.25, 1.625, 0.25, 0.25, 1.625, 0.25, 0.25, 1.625, -0.25], [0.25, 1.125, -0.25, 0.25, 1.125, 0.25, -0.25, 1.125, 0.25, -0.25, 1.125, -0.25], [0.25, 1.125, -0.25, 0.25, 1.625, -0.25, 0.25, 1.625, 0.25, 0.25, 1.125, 0.25], [-0.25, 1.125, 0.25, -0.25, 1.625, 0.25, -0.25, 1.625, -0.25, -0.25, 1.125, -0.25], [-0.25, 0.0, 0.125, -0.25, 0.375, 0.125, 0.0, 0.375, 0.125, 0.0, 0.0, 0.125], [0.0, 0.0, 0.375, 0.0, 0.375, 0.375, -0.25, 0.375, 0.375, -0.25, 0.0, 0.375], [-0.25, 0.375, 0.125, -0.25, 0.375, 0.375, 0.0, 0.375, 0.375, 0.0, 0.375, 0.125], [0.0, 0.0, 0.125, 0.0, 0.0, 0.375, -0.25, 0.0, 0.375, -0.25, 0.0, 0.125], [0.0, 0.0, 0.125, 0.0, 0.375, 0.125, 0.0, 0.375, 0.375, 0.0, 0.0, 0.375], [-0.25, 0.0, 0.375, -0.25, 0.375, 0.375, -0.25, 0.375, 0.125, -0.25, 0.0, 0.125], [0.0, 0.0, 0.125, 0.0, 0.375, 0.125, 0.25, 0.375, 0.125, 0.25, 0.0, 0.125], [0.25, 0.0, 0.375, 0.25, 0.375, 0.375, 0.0, 0.375, 0.375, 0.0, 0.0, 0.375], [0.0, 0.375, 0.125, 0.0, 0.375, 0.375, 0.25, 0.375, 0.375, 0.25, 0.375, 0.125], [0.25, 0.0, 0.125, 0.25, 0.0, 0.375, 0.0, 0.0, 0.375, 0.0, 0.0, 0.125], [0.25, 0.0, 0.125, 0.25, 0.375, 0.125, 0.25, 0.375, 0.375, 0.25, 0.0, 0.375], [0.0, 0.0, 0.375, 0.0, 0.375, 0.375, 0.0, 0.375, 0.125, 0.0, 0.0, 0.125], [-0.25, 0.0, -0.375, -0.25, 0.375, -0.375, 0.0, 0.375, -0.375, 0.0, 0.0, -0.375], [0.0, 0.0, -0.125, 0.0, 0.375, -0.125, -0.25, 0.375, -0.125, -0.25, 0.0, -0.125], [-0.25, 0.375, -0.375, -0.25, 0.375, -0.125, 0.0, 0.375, -0.125, 0.0, 0.375, -0.375], [0.0, 0.0, -0.375, 0.0, 0.0, -0.125, -0.25, 0.0, -0.125, -0.25, 0.0, -0.375], [0.0, 0.0, -0.375, 0.0, 0.375, -0.375, 0.0, 0.375, -0.125, 0.0, 0.0, -0.125], [-0.25, 0.0, -0.125, -0.25, 0.375, -0.125, -0.25, 0.375, -0.375, -0.25, 0.0, -0.375], [0.0, 0.0, -0.375, 0.0, 0.375, -0.375, 0.25, 0.375, -0.375, 0.25, 0.0, -0.375], [0.25, 0.0, -0.125, 0.25, 0.375, -0.125, 0.0, 0.375, -0.125, 0.0, 0.0, -0.125], [0.0, 0.375, -0.375, 0.0, 0.375, -0.125, 0.25, 0.375, -0.125, 0.25, 0.375, -0.375], [0.25, 0.0, -0.375, 0.25, 0.0, -0.125, 0.0, 0.0, -0.125, 0.0, 0.0, -0.375], [0.25, 0.0, -0.375, 0.25, 0.375, -0.375, 0.25, 0.375, -0.125, 0.25, 0.0, -0.125], [0.0, 0.0, -0.125, 0.0, 0.375, -0.125, 0.0, 0.375, -0.375, 0.0, 0.0, -0.375]] -tex_coords = [[0.03333333333333333, 0.0, 0, 0.03333333333333333, 0.75, 0, 0.1, 0.75, 0, 0.1, 0.0, 0], [0.13333333333333333, 0.0, 0, 0.13333333333333333, 0.75, 0, 0.2, 0.75, 0, 0.2, 0.0, 0], [0.03333333333333333, 0.75, 0, 0.03333333333333333, 1.0, 0, 0.1, 1.0, 0, 0.1, 0.75, 0], [0.1, 0.75, 0, 0.1, 1.0, 0, 0.16666666666666666, 1.0, 0, 0.16666666666666666, 0.75, 0], [0.1, 0.0, 0, 0.1, 0.75, 0, 0.13333333333333333, 0.75, 0, 0.13333333333333333, 0.0, 0], [0.0, 0.0, 0, 0.0, 0.75, 0, 0.03333333333333333, 0.75, 0, 0.03333333333333333, 0.0, 0], [0.26666666666666666, 0.0, 0, 0.26666666666666666, 0.5, 0, 0.3333333333333333, 0.5, 0, 0.3333333333333333, 0.0, 0], [0.4, 0.0, 0, 0.4, 0.5, 0, 0.4666666666666667, 0.5, 0, 0.4666666666666667, 0.0, 0], [0.26666666666666666, 0.5, 0, 0.26666666666666666, 1.0, 0, 0.3333333333333333, 1.0, 0, 0.3333333333333333, 0.5, 0], [0.3333333333333333, 0.5, 0, 0.3333333333333333, 1.0, 0, 0.4, 1.0, 0, 0.4, 0.5, 0], [0.3333333333333333, 0.0, 0, 0.3333333333333333, 0.5, 0, 0.4, 0.5, 0, 0.4, 0.0, 0], [0.2, 0.0, 0, 0.2, 0.5, 0, 0.26666666666666666, 0.5, 0, 0.26666666666666666, 0.0, 0], [0.5, 0.375, 0, 0.5, 0.75, 0, 0.5333333333333333, 0.75, 0, 0.5333333333333333, 0.375, 0], [0.5666666666666667, 0.375, 0, 0.5666666666666667, 0.75, 0, 0.6, 0.75, 0, 0.6, 0.375, 0], [0.5, 0.75, 0, 0.5, 1.0, 0, 0.5333333333333333, 1.0, 0, 0.5333333333333333, 0.75, 0], [0.5333333333333333, 0.75, 0, 0.5333333333333333, 1.0, 0, 0.5666666666666667, 1.0, 0, 0.5666666666666667, 0.75, 0], [0.5333333333333333, 0.375, 0, 0.5333333333333333, 0.75, 0, 0.5666666666666667, 0.75, 0, 0.5666666666666667, 0.375, 0], [0.4666666666666667, 0.375, 0, 0.4666666666666667, 0.75, 0, 0.5, 0.75, 0, 0.5, 0.375, 0], [0.6333333333333333, 0.375, 0, 0.6333333333333333, 0.75, 0, 0.6666666666666666, 0.75, 0, 0.6666666666666666, 0.375, 0], [0.7, 0.375, 0, 0.7, 0.75, 0, 0.7333333333333333, 0.75, 0, 0.7333333333333333, 0.375, 0], [0.6333333333333333, 0.75, 0, 0.6333333333333333, 1.0, 0, 0.6666666666666666, 1.0, 0, 0.6666666666666666, 0.75, 0], [0.6666666666666666, 0.75, 0, 0.6666666666666666, 1.0, 0, 0.7, 1.0, 0, 0.7, 0.75, 0], [0.6666666666666666, 0.375, 0, 0.6666666666666666, 0.75, 0, 0.7, 0.75, 0, 0.7, 0.375, 0], [0.6, 0.375, 0, 0.6, 0.75, 0, 0.6333333333333333, 0.75, 0, 0.6333333333333333, 0.375, 0], [0.7666666666666667, 0.375, 0, 0.7666666666666667, 0.75, 0, 0.8, 0.75, 0, 0.8, 0.375, 0], [0.8333333333333334, 0.375, 0, 0.8333333333333334, 0.75, 0, 0.8666666666666667, 0.75, 0, 0.8666666666666667, 0.375, 0], [0.7666666666666667, 0.75, 0, 0.7666666666666667, 1.0, 0, 0.8, 1.0, 0, 0.8, 0.75, 0], [0.8, 0.75, 0, 0.8, 1.0, 0, 0.8333333333333334, 1.0, 0, 0.8333333333333334, 0.75, 0], [0.8, 0.375, 0, 0.8, 0.75, 0, 0.8333333333333334, 0.75, 0, 0.8333333333333334, 0.375, 0], [0.7333333333333333, 0.375, 0, 0.7333333333333333, 0.75, 0, 0.7666666666666667, 0.75, 0, 0.7666666666666667, 0.375, 0], [0.9, 0.375, 0, 0.9, 0.75, 0, 0.9333333333333333, 0.75, 0, 0.9333333333333333, 0.375, 0], [0.9666666666666667, 0.375, 0, 0.9666666666666667, 0.75, 0, 1.0, 0.75, 0, 1.0, 0.375, 0], [0.9, 0.75, 0, 0.9, 1.0, 0, 0.9333333333333333, 1.0, 0, 0.9333333333333333, 0.75, 0], [0.9333333333333333, 0.75, 0, 0.9333333333333333, 1.0, 0, 0.9666666666666667, 1.0, 0, 0.9666666666666667, 0.75, 0], [0.9333333333333333, 0.375, 0, 0.9333333333333333, 0.75, 0, 0.9666666666666667, 0.75, 0, 0.9666666666666667, 0.375, 0], [0.8666666666666667, 0.375, 0, 0.8666666666666667, 0.75, 0, 0.9, 0.75, 0, 0.9, 0.375, 0]] -shading_values = [[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]] +bones = [{'name':'body','pivot':[0.0, 0.0, 0.0],'vertices':[[-0.25, 0.375, -0.125, -0.25, 1.125, -0.125, 0.25, 1.125, -0.125, 0.25, 0.375, -0.125], [0.25, 0.375, 0.125, 0.25, 1.125, 0.125, -0.25, 1.125, 0.125, -0.25, 0.375, 0.125], [-0.25, 1.125, -0.125, -0.25, 1.125, 0.125, 0.25, 1.125, 0.125, 0.25, 1.125, -0.125], [0.25, 0.375, -0.125, 0.25, 0.375, 0.125, -0.25, 0.375, 0.125, -0.25, 0.375, -0.125], [0.25, 0.375, -0.125, 0.25, 1.125, -0.125, 0.25, 1.125, 0.125, 0.25, 0.375, 0.125], [-0.25, 0.375, 0.125, -0.25, 1.125, 0.125, -0.25, 1.125, -0.125, -0.25, 0.375, -0.125]],'tex_coords':[[0.03333333333333333, 0.0, 0.03333333333333333, 0.75, 0.1, 0.75, 0.1, 0.0], [0.13333333333333333, 0.0, 0.13333333333333333, 0.75, 0.2, 0.75, 0.2, 0.0], [0.03333333333333333, 0.75, 0.03333333333333333, 1.0, 0.1, 1.0, 0.1, 0.75], [0.1, 0.75, 0.1, 1.0, 0.16666666666666666, 1.0, 0.16666666666666666, 0.75], [0.1, 0.0, 0.1, 0.75, 0.13333333333333333, 0.75, 0.13333333333333333, 0.0], [0.0, 0.0, 0.0, 0.75, 0.03333333333333333, 0.75, 0.03333333333333333, 0.0]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'head','pivot':[0.0, 1.125, 0.0],'vertices':[[-0.25, 1.125, -0.25, -0.25, 1.625, -0.25, 0.25, 1.625, -0.25, 0.25, 1.125, -0.25], [0.25, 1.125, 0.25, 0.25, 1.625, 0.25, -0.25, 1.625, 0.25, -0.25, 1.125, 0.25], [-0.25, 1.625, -0.25, -0.25, 1.625, 0.25, 0.25, 1.625, 0.25, 0.25, 1.625, -0.25], [0.25, 1.125, -0.25, 0.25, 1.125, 0.25, -0.25, 1.125, 0.25, -0.25, 1.125, -0.25], [0.25, 1.125, -0.25, 0.25, 1.625, -0.25, 0.25, 1.625, 0.25, 0.25, 1.125, 0.25], [-0.25, 1.125, 0.25, -0.25, 1.625, 0.25, -0.25, 1.625, -0.25, -0.25, 1.125, -0.25]],'tex_coords':[[0.26666666666666666, 0.0, 0.26666666666666666, 0.5, 0.3333333333333333, 0.5, 0.3333333333333333, 0.0], [0.4, 0.0, 0.4, 0.5, 0.4666666666666667, 0.5, 0.4666666666666667, 0.0], [0.26666666666666666, 0.5, 0.26666666666666666, 1.0, 0.3333333333333333, 1.0, 0.3333333333333333, 0.5], [0.3333333333333333, 0.5, 0.3333333333333333, 1.0, 0.4, 1.0, 0.4, 0.5], [0.3333333333333333, 0.0, 0.3333333333333333, 0.5, 0.4, 0.5, 0.4, 0.0], [0.2, 0.0, 0.2, 0.5, 0.26666666666666666, 0.5, 0.26666666666666666, 0.0]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'leg0','pivot':[-0.125, 0.375, 0.25],'vertices':[[-0.25, 0.0, 0.125, -0.25, 0.375, 0.125, 0.0, 0.375, 0.125, 0.0, 0.0, 0.125], [0.0, 0.0, 0.375, 0.0, 0.375, 0.375, -0.25, 0.375, 0.375, -0.25, 0.0, 0.375], [-0.25, 0.375, 0.125, -0.25, 0.375, 0.375, 0.0, 0.375, 0.375, 0.0, 0.375, 0.125], [0.0, 0.0, 0.125, 0.0, 0.0, 0.375, -0.25, 0.0, 0.375, -0.25, 0.0, 0.125], [0.0, 0.0, 0.125, 0.0, 0.375, 0.125, 0.0, 0.375, 0.375, 0.0, 0.0, 0.375], [-0.25, 0.0, 0.375, -0.25, 0.375, 0.375, -0.25, 0.375, 0.125, -0.25, 0.0, 0.125]],'tex_coords':[[0.5, 0.375, 0.5, 0.75, 0.5333333333333333, 0.75, 0.5333333333333333, 0.375], [0.5666666666666667, 0.375, 0.5666666666666667, 0.75, 0.6, 0.75, 0.6, 0.375], [0.5, 0.75, 0.5, 1.0, 0.5333333333333333, 1.0, 0.5333333333333333, 0.75], [0.5333333333333333, 0.75, 0.5333333333333333, 1.0, 0.5666666666666667, 1.0, 0.5666666666666667, 0.75], [0.5333333333333333, 0.375, 0.5333333333333333, 0.75, 0.5666666666666667, 0.75, 0.5666666666666667, 0.375], [0.4666666666666667, 0.375, 0.4666666666666667, 0.75, 0.5, 0.75, 0.5, 0.375]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'leg1','pivot':[0.125, 0.375, 0.25],'vertices':[[0.0, 0.0, 0.125, 0.0, 0.375, 0.125, 0.25, 0.375, 0.125, 0.25, 0.0, 0.125], [0.25, 0.0, 0.375, 0.25, 0.375, 0.375, 0.0, 0.375, 0.375, 0.0, 0.0, 0.375], [0.0, 0.375, 0.125, 0.0, 0.375, 0.375, 0.25, 0.375, 0.375, 0.25, 0.375, 0.125], [0.25, 0.0, 0.125, 0.25, 0.0, 0.375, 0.0, 0.0, 0.375, 0.0, 0.0, 0.125], [0.25, 0.0, 0.125, 0.25, 0.375, 0.125, 0.25, 0.375, 0.375, 0.25, 0.0, 0.375], [0.0, 0.0, 0.375, 0.0, 0.375, 0.375, 0.0, 0.375, 0.125, 0.0, 0.0, 0.125]],'tex_coords':[[0.6333333333333333, 0.375, 0.6333333333333333, 0.75, 0.6666666666666666, 0.75, 0.6666666666666666, 0.375], [0.7, 0.375, 0.7, 0.75, 0.7333333333333333, 0.75, 0.7333333333333333, 0.375], [0.6333333333333333, 0.75, 0.6333333333333333, 1.0, 0.6666666666666666, 1.0, 0.6666666666666666, 0.75], [0.6666666666666666, 0.75, 0.6666666666666666, 1.0, 0.7, 1.0, 0.7, 0.75], [0.6666666666666666, 0.375, 0.6666666666666666, 0.75, 0.7, 0.75, 0.7, 0.375], [0.6, 0.375, 0.6, 0.75, 0.6333333333333333, 0.75, 0.6333333333333333, 0.375]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'leg2','pivot':[-0.125, 0.375, -0.25],'vertices':[[-0.25, 0.0, -0.375, -0.25, 0.375, -0.375, 0.0, 0.375, -0.375, 0.0, 0.0, -0.375], [0.0, 0.0, -0.125, 0.0, 0.375, -0.125, -0.25, 0.375, -0.125, -0.25, 0.0, -0.125], [-0.25, 0.375, -0.375, -0.25, 0.375, -0.125, 0.0, 0.375, -0.125, 0.0, 0.375, -0.375], [0.0, 0.0, -0.375, 0.0, 0.0, -0.125, -0.25, 0.0, -0.125, -0.25, 0.0, -0.375], [0.0, 0.0, -0.375, 0.0, 0.375, -0.375, 0.0, 0.375, -0.125, 0.0, 0.0, -0.125], [-0.25, 0.0, -0.125, -0.25, 0.375, -0.125, -0.25, 0.375, -0.375, -0.25, 0.0, -0.375]],'tex_coords':[[0.7666666666666667, 0.375, 0.7666666666666667, 0.75, 0.8, 0.75, 0.8, 0.375], [0.8333333333333334, 0.375, 0.8333333333333334, 0.75, 0.8666666666666667, 0.75, 0.8666666666666667, 0.375], [0.7666666666666667, 0.75, 0.7666666666666667, 1.0, 0.8, 1.0, 0.8, 0.75], [0.8, 0.75, 0.8, 1.0, 0.8333333333333334, 1.0, 0.8333333333333334, 0.75], [0.8, 0.375, 0.8, 0.75, 0.8333333333333334, 0.75, 0.8333333333333334, 0.375], [0.7333333333333333, 0.375, 0.7333333333333333, 0.75, 0.7666666666666667, 0.75, 0.7666666666666667, 0.375]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'leg3','pivot':[0.125, 0.375, -0.25],'vertices':[[0.0, 0.0, -0.375, 0.0, 0.375, -0.375, 0.25, 0.375, -0.375, 0.25, 0.0, -0.375], [0.25, 0.0, -0.125, 0.25, 0.375, -0.125, 0.0, 0.375, -0.125, 0.0, 0.0, -0.125], [0.0, 0.375, -0.375, 0.0, 0.375, -0.125, 0.25, 0.375, -0.125, 0.25, 0.375, -0.375], [0.25, 0.0, -0.375, 0.25, 0.0, -0.125, 0.0, 0.0, -0.125, 0.0, 0.0, -0.375], [0.25, 0.0, -0.375, 0.25, 0.375, -0.375, 0.25, 0.375, -0.125, 0.25, 0.0, -0.125], [0.0, 0.0, -0.125, 0.0, 0.375, -0.125, 0.0, 0.375, -0.375, 0.0, 0.0, -0.375]],'tex_coords':[[0.9, 0.375, 0.9, 0.75, 0.9333333333333333, 0.75, 0.9333333333333333, 0.375], [0.9666666666666667, 0.375, 0.9666666666666667, 0.75, 1.0, 0.75, 1.0, 0.375], [0.9, 0.75, 0.9, 1.0, 0.9333333333333333, 1.0, 0.9333333333333333, 0.75], [0.9333333333333333, 0.75, 0.9333333333333333, 1.0, 0.9666666666666667, 1.0, 0.9666666666666667, 0.75], [0.9333333333333333, 0.375, 0.9333333333333333, 0.75, 0.9666666666666667, 0.75, 0.9666666666666667, 0.375], [0.8666666666666667, 0.375, 0.8666666666666667, 0.75, 0.9, 0.75, 0.9, 0.375]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}] diff --git a/community/models/curry.py b/community/models/curry.py index 9593b028..dabce985 100644 --- a/community/models/curry.py +++ b/community/models/curry.py @@ -5,6 +5,4 @@ colliders = [] -vertex_positions = [[-0.25, 0.75, -0.125, -0.25, 1.5, -0.125, 0.25, 1.5, -0.125, 0.25, 0.75, -0.125], [0.25, 0.75, 0.125, 0.25, 1.5, 0.125, -0.25, 1.5, 0.125, -0.25, 0.75, 0.125], [-0.25, 1.5, -0.125, -0.25, 1.5, 0.125, 0.25, 1.5, 0.125, 0.25, 1.5, -0.125], [0.25, 0.75, -0.125, 0.25, 0.75, 0.125, -0.25, 0.75, 0.125, -0.25, 0.75, -0.125], [0.25, 0.75, -0.125, 0.25, 1.5, -0.125, 0.25, 1.5, 0.125, 0.25, 0.75, 0.125], [-0.25, 0.75, 0.125, -0.25, 1.5, 0.125, -0.25, 1.5, -0.125, -0.25, 0.75, -0.125], [-0.2536456286907196, 1.497308611869812, -0.23161627352237701, -0.2536456286907196, 1.997308611869812, -0.23161627352237701, 0.2463543713092804, 1.997308611869812, -0.23161627352237701, 0.2463543713092804, 1.497308611869812, -0.23161627352237701], [0.2463543713092804, 1.497308611869812, 0.2683837413787842, 0.2463543713092804, 1.997308611869812, 0.2683837413787842, -0.2536456286907196, 1.997308611869812, 0.2683837413787842, -0.2536456286907196, 1.497308611869812, 0.2683837413787842], [-0.2536456286907196, 1.997308611869812, -0.23161627352237701, -0.2536456286907196, 1.997308611869812, 0.2683837413787842, 0.2463543713092804, 1.997308611869812, 0.2683837413787842, 0.2463543713092804, 1.997308611869812, -0.23161627352237701], [0.2463543713092804, 1.497308611869812, -0.23161627352237701, 0.2463543713092804, 1.497308611869812, 0.2683837413787842, -0.2536456286907196, 1.497308611869812, 0.2683837413787842, -0.2536456286907196, 1.497308611869812, -0.23161627352237701], [0.2463543713092804, 1.497308611869812, -0.23161627352237701, 0.2463543713092804, 1.997308611869812, -0.23161627352237701, 0.2463543713092804, 1.997308611869812, 0.2683837413787842, 0.2463543713092804, 1.497308611869812, 0.2683837413787842], [-0.2536456286907196, 1.497308611869812, 0.2683837413787842, -0.2536456286907196, 1.997308611869812, 0.2683837413787842, -0.2536456286907196, 1.997308611869812, -0.23161627352237701, -0.2536456286907196, 1.497308611869812, -0.23161627352237701], [0.2316092699766159, 0.8962944149971008, -0.21831698715686798, 0.2316092699766159, 1.396294355392456, -0.21831698715686798, 0.7316092848777771, 1.396294355392456, -0.21831698715686798, 0.7316092848777771, 0.8962944149971008, -0.21831698715686798], [0.7316092848777771, 0.8962944149971008, 0.2816829979419708, 0.7316092848777771, 1.396294355392456, 0.2816829979419708, 0.2316092699766159, 1.396294355392456, 0.2816829979419708, 0.2316092699766159, 0.8962944149971008, 0.2816829979419708], [0.2316092699766159, 1.396294355392456, -0.21831698715686798, 0.2316092699766159, 1.396294355392456, 0.2816829979419708, 0.7316092848777771, 1.396294355392456, 0.2816829979419708, 0.7316092848777771, 1.396294355392456, -0.21831698715686798], [0.7316092848777771, 0.8962944149971008, -0.21831698715686798, 0.7316092848777771, 0.8962944149971008, 0.2816829979419708, 0.2316092699766159, 0.8962944149971008, 0.2816829979419708, 0.2316092699766159, 0.8962944149971008, -0.21831698715686798], [0.7316092848777771, 0.8962944149971008, -0.21831698715686798, 0.7316092848777771, 1.396294355392456, -0.21831698715686798, 0.7316092848777771, 1.396294355392456, 0.2816829979419708, 0.7316092848777771, 0.8962944149971008, 0.2816829979419708], [0.2316092699766159, 0.8962944149971008, 0.2816829979419708, 0.2316092699766159, 1.396294355392456, 0.2816829979419708, 0.2316092699766159, 1.396294355392456, -0.21831698715686798, 0.2316092699766159, 0.8962944149971008, -0.21831698715686798], [-0.25, 1.5, -0.25, -0.25, 2.0, -0.25, 0.25, 2.0, -0.25, 0.25, 1.5, -0.25], [0.25, 1.5, 0.25, 0.25, 2.0, 0.25, -0.25, 2.0, 0.25, -0.25, 1.5, 0.25], [-0.25, 2.0, -0.25, -0.25, 2.0, 0.25, 0.25, 2.0, 0.25, 0.25, 2.0, -0.25], [0.25, 1.5, -0.25, 0.25, 1.5, 0.25, -0.25, 1.5, 0.25, -0.25, 1.5, -0.25], [0.25, 1.5, -0.25, 0.25, 2.0, -0.25, 0.25, 2.0, 0.25, 0.25, 1.5, 0.25], [-0.25, 1.5, 0.25, -0.25, 2.0, 0.25, -0.25, 2.0, -0.25, -0.25, 1.5, -0.25], [-0.5, 0.75, -0.125, -0.5, 1.5, -0.125, -0.25, 1.5, -0.125, -0.25, 0.75, -0.125], [-0.25, 0.75, 0.125, -0.25, 1.5, 0.125, -0.5, 1.5, 0.125, -0.5, 0.75, 0.125], [-0.5, 1.5, -0.125, -0.5, 1.5, 0.125, -0.25, 1.5, 0.125, -0.25, 1.5, -0.125], [-0.25, 0.75, -0.125, -0.25, 0.75, 0.125, -0.5, 0.75, 0.125, -0.5, 0.75, -0.125], [-0.25, 0.75, -0.125, -0.25, 1.5, -0.125, -0.25, 1.5, 0.125, -0.25, 0.75, 0.125], [-0.5, 0.75, 0.125, -0.5, 1.5, 0.125, -0.5, 1.5, -0.125, -0.5, 0.75, -0.125], [0.7019792795181274, 0.748781681060791, -0.02643335424363613, 0.7019792795181274, 1.498781681060791, -0.02643335424363613, 0.9519792795181274, 1.498781681060791, -0.02643335424363613, 0.9519792795181274, 0.748781681060791, -0.02643335424363613], [0.9519792795181274, 0.748781681060791, 0.22356665134429932, 0.9519792795181274, 1.498781681060791, 0.22356665134429932, 0.7019792795181274, 1.498781681060791, 0.22356665134429932, 0.7019792795181274, 0.748781681060791, 0.22356665134429932], [0.7019792795181274, 1.498781681060791, -0.02643335424363613, 0.7019792795181274, 1.498781681060791, 0.22356665134429932, 0.9519792795181274, 1.498781681060791, 0.22356665134429932, 0.9519792795181274, 1.498781681060791, -0.02643335424363613], [0.9519792795181274, 0.748781681060791, -0.02643335424363613, 0.9519792795181274, 0.748781681060791, 0.22356665134429932, 0.7019792795181274, 0.748781681060791, 0.22356665134429932, 0.7019792795181274, 0.748781681060791, -0.02643335424363613], [0.9519792795181274, 0.748781681060791, -0.02643335424363613, 0.9519792795181274, 1.498781681060791, -0.02643335424363613, 0.9519792795181274, 1.498781681060791, 0.22356665134429932, 0.9519792795181274, 0.748781681060791, 0.22356665134429932], [0.7019792795181274, 0.748781681060791, 0.22356665134429932, 0.7019792795181274, 1.498781681060791, 0.22356665134429932, 0.7019792795181274, 1.498781681060791, -0.02643335424363613, 0.7019792795181274, 0.748781681060791, -0.02643335424363613], [0.09342791140079498, 1.3167552947998047, -0.06984145194292068, 0.09342791140079498, 1.5042552947998047, -0.06984145194292068, 0.7184278964996338, 1.5042552947998047, -0.06984145194292068, 0.7184278964996338, 1.3167552947998047, -0.06984145194292068], [0.7184278964996338, 1.3167552947998047, 0.18015854060649872, 0.7184278964996338, 1.5042552947998047, 0.18015854060649872, 0.09342791140079498, 1.5042552947998047, 0.18015854060649872, 0.09342791140079498, 1.3167552947998047, 0.18015854060649872], [0.09342791140079498, 1.5042552947998047, -0.06984145194292068, 0.09342791140079498, 1.5042552947998047, 0.18015854060649872, 0.7184278964996338, 1.5042552947998047, 0.18015854060649872, 0.7184278964996338, 1.5042552947998047, -0.06984145194292068], [0.7184278964996338, 1.3167552947998047, -0.06984145194292068, 0.7184278964996338, 1.3167552947998047, 0.18015854060649872, 0.09342791140079498, 1.3167552947998047, 0.18015854060649872, 0.09342791140079498, 1.3167552947998047, -0.06984145194292068], [0.7184278964996338, 1.3167552947998047, -0.06984145194292068, 0.7184278964996338, 1.5042552947998047, -0.06984145194292068, 0.7184278964996338, 1.5042552947998047, 0.18015854060649872, 0.7184278964996338, 1.3167552947998047, 0.18015854060649872], [0.09342791140079498, 1.3167552947998047, 0.18015854060649872, 0.09342791140079498, 1.5042552947998047, 0.18015854060649872, 0.09342791140079498, 1.5042552947998047, -0.06984145194292068, 0.09342791140079498, 1.3167552947998047, -0.06984145194292068], [-0.24375000596046448, 0.0, -0.125, -0.24375000596046448, 0.75, -0.125, 0.0062500000931322575, 0.75, -0.125, 0.0062500000931322575, 0.0, -0.125], [0.0062500000931322575, 0.0, 0.125, 0.0062500000931322575, 0.75, 0.125, -0.24375000596046448, 0.75, 0.125, -0.24375000596046448, 0.0, 0.125], [-0.24375000596046448, 0.75, -0.125, -0.24375000596046448, 0.75, 0.125, 0.0062500000931322575, 0.75, 0.125, 0.0062500000931322575, 0.75, -0.125], [0.0062500000931322575, 0.0, -0.125, 0.0062500000931322575, 0.0, 0.125, -0.24375000596046448, 0.0, 0.125, -0.24375000596046448, 0.0, -0.125], [0.0062500000931322575, 0.0, -0.125, 0.0062500000931322575, 0.75, -0.125, 0.0062500000931322575, 0.75, 0.125, 0.0062500000931322575, 0.0, 0.125], [-0.24375000596046448, 0.0, 0.125, -0.24375000596046448, 0.75, 0.125, -0.24375000596046448, 0.75, -0.125, -0.24375000596046448, 0.0, -0.125], [-0.0062500000931322575, 0.0, -0.125, -0.0062500000931322575, 0.75, -0.125, 0.24375000596046448, 0.75, -0.125, 0.24375000596046448, 0.0, -0.125], [0.24375000596046448, 0.0, 0.125, 0.24375000596046448, 0.75, 0.125, -0.0062500000931322575, 0.75, 0.125, -0.0062500000931322575, 0.0, 0.125], [-0.0062500000931322575, 0.75, -0.125, -0.0062500000931322575, 0.75, 0.125, 0.24375000596046448, 0.75, 0.125, 0.24375000596046448, 0.75, -0.125], [0.24375000596046448, 0.0, -0.125, 0.24375000596046448, 0.0, 0.125, -0.0062500000931322575, 0.0, 0.125, -0.0062500000931322575, 0.0, -0.125], [0.24375000596046448, 0.0, -0.125, 0.24375000596046448, 0.75, -0.125, 0.24375000596046448, 0.75, 0.125, 0.24375000596046448, 0.0, 0.125], [-0.0062500000931322575, 0.0, 0.125, -0.0062500000931322575, 0.75, 0.125, -0.0062500000931322575, 0.75, -0.125, -0.0062500000931322575, 0.0, -0.125]] -tex_coords = [[0.018867924528301886, 0.0, 0, 0.018867924528301886, 0.75, 0, 0.05660377358490566, 0.75, 0, 0.05660377358490566, 0.0, 0], [0.07547169811320754, 0.0, 0, 0.07547169811320754, 0.75, 0, 0.11320754716981132, 0.75, 0, 0.11320754716981132, 0.0, 0], [0.018867924528301886, 0.75, 0, 0.018867924528301886, 1.0, 0, 0.05660377358490566, 1.0, 0, 0.05660377358490566, 0.75, 0], [0.05660377358490566, 0.75, 0, 0.05660377358490566, 1.0, 0, 0.09433962264150944, 1.0, 0, 0.09433962264150944, 0.75, 0], [0.05660377358490566, 0.0, 0, 0.05660377358490566, 0.75, 0, 0.07547169811320754, 0.75, 0, 0.07547169811320754, 0.0, 0], [0.0, 0.0, 0, 0.0, 0.75, 0, 0.018867924528301886, 0.75, 0, 0.018867924528301886, 0.0, 0], [0.1509433962264151, 0.0, 0, 0.1509433962264151, 0.5, 0, 0.18867924528301888, 0.5, 0, 0.18867924528301888, 0.0, 0], [0.22641509433962265, 0.0, 0, 0.22641509433962265, 0.5, 0, 0.2641509433962264, 0.5, 0, 0.2641509433962264, 0.0, 0], [0.1509433962264151, 0.5, 0, 0.1509433962264151, 1.0, 0, 0.18867924528301888, 1.0, 0, 0.18867924528301888, 0.5, 0], [0.18867924528301888, 0.5, 0, 0.18867924528301888, 1.0, 0, 0.22641509433962265, 1.0, 0, 0.22641509433962265, 0.5, 0], [0.18867924528301888, 0.0, 0, 0.18867924528301888, 0.5, 0, 0.22641509433962265, 0.5, 0, 0.22641509433962265, 0.0, 0], [0.11320754716981132, 0.0, 0, 0.11320754716981132, 0.5, 0, 0.1509433962264151, 0.5, 0, 0.1509433962264151, 0.0, 0], [0.3018867924528302, 0.0, 0, 0.3018867924528302, 0.5, 0, 0.33962264150943394, 0.5, 0, 0.33962264150943394, 0.0, 0], [0.37735849056603776, 0.0, 0, 0.37735849056603776, 0.5, 0, 0.41509433962264153, 0.5, 0, 0.41509433962264153, 0.0, 0], [0.3018867924528302, 0.5, 0, 0.3018867924528302, 1.0, 0, 0.33962264150943394, 1.0, 0, 0.33962264150943394, 0.5, 0], [0.33962264150943394, 0.5, 0, 0.33962264150943394, 1.0, 0, 0.37735849056603776, 1.0, 0, 0.37735849056603776, 0.5, 0], [0.33962264150943394, 0.0, 0, 0.33962264150943394, 0.5, 0, 0.37735849056603776, 0.5, 0, 0.37735849056603776, 0.0, 0], [0.2641509433962264, 0.0, 0, 0.2641509433962264, 0.5, 0, 0.3018867924528302, 0.5, 0, 0.3018867924528302, 0.0, 0], [0.4528301886792453, 0.0, 0, 0.4528301886792453, 0.5, 0, 0.49056603773584906, 0.5, 0, 0.49056603773584906, 0.0, 0], [0.5283018867924528, 0.0, 0, 0.5283018867924528, 0.5, 0, 0.5660377358490566, 0.5, 0, 0.5660377358490566, 0.0, 0], [0.4528301886792453, 0.5, 0, 0.4528301886792453, 1.0, 0, 0.49056603773584906, 1.0, 0, 0.49056603773584906, 0.5, 0], [0.49056603773584906, 0.5, 0, 0.49056603773584906, 1.0, 0, 0.5283018867924528, 1.0, 0, 0.5283018867924528, 0.5, 0], [0.49056603773584906, 0.0, 0, 0.49056603773584906, 0.5, 0, 0.5283018867924528, 0.5, 0, 0.5283018867924528, 0.0, 0], [0.41509433962264153, 0.0, 0, 0.41509433962264153, 0.5, 0, 0.4528301886792453, 0.5, 0, 0.4528301886792453, 0.0, 0], [0.5849056603773585, 0.0, 0, 0.5849056603773585, 0.75, 0, 0.6037735849056604, 0.75, 0, 0.6037735849056604, 0.0, 0], [0.6226415094339622, 0.0, 0, 0.6226415094339622, 0.75, 0, 0.6415094339622641, 0.75, 0, 0.6415094339622641, 0.0, 0], [0.5849056603773585, 0.75, 0, 0.5849056603773585, 1.0, 0, 0.6037735849056604, 1.0, 0, 0.6037735849056604, 0.75, 0], [0.6037735849056604, 0.75, 0, 0.6037735849056604, 1.0, 0, 0.6226415094339622, 1.0, 0, 0.6226415094339622, 0.75, 0], [0.6037735849056604, 0.0, 0, 0.6037735849056604, 0.75, 0, 0.6226415094339622, 0.75, 0, 0.6226415094339622, 0.0, 0], [0.5660377358490566, 0.0, 0, 0.5660377358490566, 0.75, 0, 0.5849056603773585, 0.75, 0, 0.5849056603773585, 0.0, 0], [0.660377358490566, 0.0, 0, 0.660377358490566, 0.75, 0, 0.6792452830188679, 0.75, 0, 0.6792452830188679, 0.0, 0], [0.6981132075471698, 0.0, 0, 0.6981132075471698, 0.75, 0, 0.7169811320754716, 0.75, 0, 0.7169811320754716, 0.0, 0], [0.660377358490566, 0.75, 0, 0.660377358490566, 1.0, 0, 0.6792452830188679, 1.0, 0, 0.6792452830188679, 0.75, 0], [0.6792452830188679, 0.75, 0, 0.6792452830188679, 1.0, 0, 0.6981132075471698, 1.0, 0, 0.6981132075471698, 0.75, 0], [0.6792452830188679, 0.0, 0, 0.6792452830188679, 0.75, 0, 0.6981132075471698, 0.75, 0, 0.6981132075471698, 0.0, 0], [0.6415094339622641, 0.0, 0, 0.6415094339622641, 0.75, 0, 0.660377358490566, 0.75, 0, 0.660377358490566, 0.0, 0], [0.7358490566037735, 0.5625, 0, 0.7358490566037735, 0.75, 0, 0.7830188679245284, 0.75, 0, 0.7830188679245284, 0.5625, 0], [0.8018867924528302, 0.5625, 0, 0.8018867924528302, 0.75, 0, 0.8490566037735849, 0.75, 0, 0.8490566037735849, 0.5625, 0], [0.7358490566037735, 0.75, 0, 0.7358490566037735, 1.0, 0, 0.7830188679245284, 1.0, 0, 0.7830188679245284, 0.75, 0], [0.7830188679245284, 0.75, 0, 0.7830188679245284, 1.0, 0, 0.8301886792452831, 1.0, 0, 0.8301886792452831, 0.75, 0], [0.7830188679245284, 0.5625, 0, 0.7830188679245284, 0.75, 0, 0.8018867924528302, 0.75, 0, 0.8018867924528302, 0.5625, 0], [0.7169811320754716, 0.5625, 0, 0.7169811320754716, 0.75, 0, 0.7358490566037735, 0.75, 0, 0.7358490566037735, 0.5625, 0], [0.8679245283018868, 0.0, 0, 0.8679245283018868, 0.75, 0, 0.8867924528301887, 0.75, 0, 0.8867924528301887, 0.0, 0], [0.9056603773584906, 0.0, 0, 0.9056603773584906, 0.75, 0, 0.9245283018867925, 0.75, 0, 0.9245283018867925, 0.0, 0], [0.8679245283018868, 0.75, 0, 0.8679245283018868, 1.0, 0, 0.8867924528301887, 1.0, 0, 0.8867924528301887, 0.75, 0], [0.8867924528301887, 0.75, 0, 0.8867924528301887, 1.0, 0, 0.9056603773584906, 1.0, 0, 0.9056603773584906, 0.75, 0], [0.8867924528301887, 0.0, 0, 0.8867924528301887, 0.75, 0, 0.9056603773584906, 0.75, 0, 0.9056603773584906, 0.0, 0], [0.8490566037735849, 0.0, 0, 0.8490566037735849, 0.75, 0, 0.8679245283018868, 0.75, 0, 0.8679245283018868, 0.0, 0], [0.9433962264150944, 0.0, 0, 0.9433962264150944, 0.75, 0, 0.9622641509433962, 0.75, 0, 0.9622641509433962, 0.0, 0], [0.9811320754716981, 0.0, 0, 0.9811320754716981, 0.75, 0, 1.0, 0.75, 0, 1.0, 0.0, 0], [0.9433962264150944, 0.75, 0, 0.9433962264150944, 1.0, 0, 0.9622641509433962, 1.0, 0, 0.9622641509433962, 0.75, 0], [0.9622641509433962, 0.75, 0, 0.9622641509433962, 1.0, 0, 0.9811320754716981, 1.0, 0, 0.9811320754716981, 0.75, 0], [0.9622641509433962, 0.0, 0, 0.9622641509433962, 0.75, 0, 0.9811320754716981, 0.75, 0, 0.9811320754716981, 0.0, 0], [0.9245283018867925, 0.0, 0, 0.9245283018867925, 0.75, 0, 0.9433962264150944, 0.75, 0, 0.9433962264150944, 0.0, 0]] -shading_values = [[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]] +bones = [{'name':'body','pivot':[0.0, 1.5, 0.0],'vertices':[[-0.25, 0.75, -0.125, -0.25, 1.5, -0.125, 0.25, 1.5, -0.125, 0.25, 0.75, -0.125], [0.25, 0.75, 0.125, 0.25, 1.5, 0.125, -0.25, 1.5, 0.125, -0.25, 0.75, 0.125], [-0.25, 1.5, -0.125, -0.25, 1.5, 0.125, 0.25, 1.5, 0.125, 0.25, 1.5, -0.125], [0.25, 0.75, -0.125, 0.25, 0.75, 0.125, -0.25, 0.75, 0.125, -0.25, 0.75, -0.125], [0.25, 0.75, -0.125, 0.25, 1.5, -0.125, 0.25, 1.5, 0.125, 0.25, 0.75, 0.125], [-0.25, 0.75, 0.125, -0.25, 1.5, 0.125, -0.25, 1.5, -0.125, -0.25, 0.75, -0.125]],'tex_coords':[[0.018867924528301886, 0.0, 0.018867924528301886, 0.75, 0.05660377358490566, 0.75, 0.05660377358490566, 0.0], [0.07547169811320754, 0.0, 0.07547169811320754, 0.75, 0.11320754716981132, 0.75, 0.11320754716981132, 0.0], [0.018867924528301886, 0.75, 0.018867924528301886, 1.0, 0.05660377358490566, 1.0, 0.05660377358490566, 0.75], [0.05660377358490566, 0.75, 0.05660377358490566, 1.0, 0.09433962264150944, 1.0, 0.09433962264150944, 0.75], [0.05660377358490566, 0.0, 0.05660377358490566, 0.75, 0.07547169811320754, 0.75, 0.07547169811320754, 0.0], [0.0, 0.0, 0.0, 0.75, 0.018867924528301886, 0.75, 0.018867924528301886, 0.0]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'head','pivot':[0.0, 1.5, 0.0],'vertices':[[-0.2536456286907196, 1.497308611869812, -0.23161627352237701, -0.2536456286907196, 1.997308611869812, -0.23161627352237701, 0.2463543713092804, 1.997308611869812, -0.23161627352237701, 0.2463543713092804, 1.497308611869812, -0.23161627352237701], [0.2463543713092804, 1.497308611869812, 0.2683837413787842, 0.2463543713092804, 1.997308611869812, 0.2683837413787842, -0.2536456286907196, 1.997308611869812, 0.2683837413787842, -0.2536456286907196, 1.497308611869812, 0.2683837413787842], [-0.2536456286907196, 1.997308611869812, -0.23161627352237701, -0.2536456286907196, 1.997308611869812, 0.2683837413787842, 0.2463543713092804, 1.997308611869812, 0.2683837413787842, 0.2463543713092804, 1.997308611869812, -0.23161627352237701], [0.2463543713092804, 1.497308611869812, -0.23161627352237701, 0.2463543713092804, 1.497308611869812, 0.2683837413787842, -0.2536456286907196, 1.497308611869812, 0.2683837413787842, -0.2536456286907196, 1.497308611869812, -0.23161627352237701], [0.2463543713092804, 1.497308611869812, -0.23161627352237701, 0.2463543713092804, 1.997308611869812, -0.23161627352237701, 0.2463543713092804, 1.997308611869812, 0.2683837413787842, 0.2463543713092804, 1.497308611869812, 0.2683837413787842], [-0.2536456286907196, 1.497308611869812, 0.2683837413787842, -0.2536456286907196, 1.997308611869812, 0.2683837413787842, -0.2536456286907196, 1.997308611869812, -0.23161627352237701, -0.2536456286907196, 1.497308611869812, -0.23161627352237701], [0.2316092699766159, 0.8962944149971008, -0.21831698715686798, 0.2316092699766159, 1.396294355392456, -0.21831698715686798, 0.7316092848777771, 1.396294355392456, -0.21831698715686798, 0.7316092848777771, 0.8962944149971008, -0.21831698715686798], [0.7316092848777771, 0.8962944149971008, 0.2816829979419708, 0.7316092848777771, 1.396294355392456, 0.2816829979419708, 0.2316092699766159, 1.396294355392456, 0.2816829979419708, 0.2316092699766159, 0.8962944149971008, 0.2816829979419708], [0.2316092699766159, 1.396294355392456, -0.21831698715686798, 0.2316092699766159, 1.396294355392456, 0.2816829979419708, 0.7316092848777771, 1.396294355392456, 0.2816829979419708, 0.7316092848777771, 1.396294355392456, -0.21831698715686798], [0.7316092848777771, 0.8962944149971008, -0.21831698715686798, 0.7316092848777771, 0.8962944149971008, 0.2816829979419708, 0.2316092699766159, 0.8962944149971008, 0.2816829979419708, 0.2316092699766159, 0.8962944149971008, -0.21831698715686798], [0.7316092848777771, 0.8962944149971008, -0.21831698715686798, 0.7316092848777771, 1.396294355392456, -0.21831698715686798, 0.7316092848777771, 1.396294355392456, 0.2816829979419708, 0.7316092848777771, 0.8962944149971008, 0.2816829979419708], [0.2316092699766159, 0.8962944149971008, 0.2816829979419708, 0.2316092699766159, 1.396294355392456, 0.2816829979419708, 0.2316092699766159, 1.396294355392456, -0.21831698715686798, 0.2316092699766159, 0.8962944149971008, -0.21831698715686798]],'tex_coords':[[0.1509433962264151, 0.0, 0.1509433962264151, 0.5, 0.18867924528301888, 0.5, 0.18867924528301888, 0.0], [0.22641509433962265, 0.0, 0.22641509433962265, 0.5, 0.2641509433962264, 0.5, 0.2641509433962264, 0.0], [0.1509433962264151, 0.5, 0.1509433962264151, 1.0, 0.18867924528301888, 1.0, 0.18867924528301888, 0.5], [0.18867924528301888, 0.5, 0.18867924528301888, 1.0, 0.22641509433962265, 1.0, 0.22641509433962265, 0.5], [0.18867924528301888, 0.0, 0.18867924528301888, 0.5, 0.22641509433962265, 0.5, 0.22641509433962265, 0.0], [0.11320754716981132, 0.0, 0.11320754716981132, 0.5, 0.1509433962264151, 0.5, 0.1509433962264151, 0.0], [0.3018867924528302, 0.0, 0.3018867924528302, 0.5, 0.33962264150943394, 0.5, 0.33962264150943394, 0.0], [0.37735849056603776, 0.0, 0.37735849056603776, 0.5, 0.41509433962264153, 0.5, 0.41509433962264153, 0.0], [0.3018867924528302, 0.5, 0.3018867924528302, 1.0, 0.33962264150943394, 1.0, 0.33962264150943394, 0.5], [0.33962264150943394, 0.5, 0.33962264150943394, 1.0, 0.37735849056603776, 1.0, 0.37735849056603776, 0.5], [0.33962264150943394, 0.0, 0.33962264150943394, 0.5, 0.37735849056603776, 0.5, 0.37735849056603776, 0.0], [0.2641509433962264, 0.0, 0.2641509433962264, 0.5, 0.3018867924528302, 0.5, 0.3018867924528302, 0.0]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'hat','pivot':[0.0, 1.5, 0.0],'vertices':[[-0.25, 1.5, -0.25, -0.25, 2.0, -0.25, 0.25, 2.0, -0.25, 0.25, 1.5, -0.25], [0.25, 1.5, 0.25, 0.25, 2.0, 0.25, -0.25, 2.0, 0.25, -0.25, 1.5, 0.25], [-0.25, 2.0, -0.25, -0.25, 2.0, 0.25, 0.25, 2.0, 0.25, 0.25, 2.0, -0.25], [0.25, 1.5, -0.25, 0.25, 1.5, 0.25, -0.25, 1.5, 0.25, -0.25, 1.5, -0.25], [0.25, 1.5, -0.25, 0.25, 2.0, -0.25, 0.25, 2.0, 0.25, 0.25, 1.5, 0.25], [-0.25, 1.5, 0.25, -0.25, 2.0, 0.25, -0.25, 2.0, -0.25, -0.25, 1.5, -0.25]],'tex_coords':[[0.4528301886792453, 0.0, 0.4528301886792453, 0.5, 0.49056603773584906, 0.5, 0.49056603773584906, 0.0], [0.5283018867924528, 0.0, 0.5283018867924528, 0.5, 0.5660377358490566, 0.5, 0.5660377358490566, 0.0], [0.4528301886792453, 0.5, 0.4528301886792453, 1.0, 0.49056603773584906, 1.0, 0.49056603773584906, 0.5], [0.49056603773584906, 0.5, 0.49056603773584906, 1.0, 0.5283018867924528, 1.0, 0.5283018867924528, 0.5], [0.49056603773584906, 0.0, 0.49056603773584906, 0.5, 0.5283018867924528, 0.5, 0.5283018867924528, 0.0], [0.41509433962264153, 0.0, 0.41509433962264153, 0.5, 0.4528301886792453, 0.5, 0.4528301886792453, 0.0]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'rightArm','pivot':[-0.3125, 1.375, 0.0],'vertices':[[-0.5, 0.75, -0.125, -0.5, 1.5, -0.125, -0.25, 1.5, -0.125, -0.25, 0.75, -0.125], [-0.25, 0.75, 0.125, -0.25, 1.5, 0.125, -0.5, 1.5, 0.125, -0.5, 0.75, 0.125], [-0.5, 1.5, -0.125, -0.5, 1.5, 0.125, -0.25, 1.5, 0.125, -0.25, 1.5, -0.125], [-0.25, 0.75, -0.125, -0.25, 0.75, 0.125, -0.5, 0.75, 0.125, -0.5, 0.75, -0.125], [-0.25, 0.75, -0.125, -0.25, 1.5, -0.125, -0.25, 1.5, 0.125, -0.25, 0.75, 0.125], [-0.5, 0.75, 0.125, -0.5, 1.5, 0.125, -0.5, 1.5, -0.125, -0.5, 0.75, -0.125]],'tex_coords':[[0.5849056603773585, 0.0, 0.5849056603773585, 0.75, 0.6037735849056604, 0.75, 0.6037735849056604, 0.0], [0.6226415094339622, 0.0, 0.6226415094339622, 0.75, 0.6415094339622641, 0.75, 0.6415094339622641, 0.0], [0.5849056603773585, 0.75, 0.5849056603773585, 1.0, 0.6037735849056604, 1.0, 0.6037735849056604, 0.75], [0.6037735849056604, 0.75, 0.6037735849056604, 1.0, 0.6226415094339622, 1.0, 0.6226415094339622, 0.75], [0.6037735849056604, 0.0, 0.6037735849056604, 0.75, 0.6226415094339622, 0.75, 0.6226415094339622, 0.0], [0.5660377358490566, 0.0, 0.5660377358490566, 0.75, 0.5849056603773585, 0.75, 0.5849056603773585, 0.0]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'leftArm','pivot':[0.3125, 1.375, 0.0],'vertices':[[0.7019792795181274, 0.748781681060791, -0.02643335424363613, 0.7019792795181274, 1.498781681060791, -0.02643335424363613, 0.9519792795181274, 1.498781681060791, -0.02643335424363613, 0.9519792795181274, 0.748781681060791, -0.02643335424363613], [0.9519792795181274, 0.748781681060791, 0.22356665134429932, 0.9519792795181274, 1.498781681060791, 0.22356665134429932, 0.7019792795181274, 1.498781681060791, 0.22356665134429932, 0.7019792795181274, 0.748781681060791, 0.22356665134429932], [0.7019792795181274, 1.498781681060791, -0.02643335424363613, 0.7019792795181274, 1.498781681060791, 0.22356665134429932, 0.9519792795181274, 1.498781681060791, 0.22356665134429932, 0.9519792795181274, 1.498781681060791, -0.02643335424363613], [0.9519792795181274, 0.748781681060791, -0.02643335424363613, 0.9519792795181274, 0.748781681060791, 0.22356665134429932, 0.7019792795181274, 0.748781681060791, 0.22356665134429932, 0.7019792795181274, 0.748781681060791, -0.02643335424363613], [0.9519792795181274, 0.748781681060791, -0.02643335424363613, 0.9519792795181274, 1.498781681060791, -0.02643335424363613, 0.9519792795181274, 1.498781681060791, 0.22356665134429932, 0.9519792795181274, 0.748781681060791, 0.22356665134429932], [0.7019792795181274, 0.748781681060791, 0.22356665134429932, 0.7019792795181274, 1.498781681060791, 0.22356665134429932, 0.7019792795181274, 1.498781681060791, -0.02643335424363613, 0.7019792795181274, 0.748781681060791, -0.02643335424363613], [0.09342791140079498, 1.3167552947998047, -0.06984145194292068, 0.09342791140079498, 1.5042552947998047, -0.06984145194292068, 0.7184278964996338, 1.5042552947998047, -0.06984145194292068, 0.7184278964996338, 1.3167552947998047, -0.06984145194292068], [0.7184278964996338, 1.3167552947998047, 0.18015854060649872, 0.7184278964996338, 1.5042552947998047, 0.18015854060649872, 0.09342791140079498, 1.5042552947998047, 0.18015854060649872, 0.09342791140079498, 1.3167552947998047, 0.18015854060649872], [0.09342791140079498, 1.5042552947998047, -0.06984145194292068, 0.09342791140079498, 1.5042552947998047, 0.18015854060649872, 0.7184278964996338, 1.5042552947998047, 0.18015854060649872, 0.7184278964996338, 1.5042552947998047, -0.06984145194292068], [0.7184278964996338, 1.3167552947998047, -0.06984145194292068, 0.7184278964996338, 1.3167552947998047, 0.18015854060649872, 0.09342791140079498, 1.3167552947998047, 0.18015854060649872, 0.09342791140079498, 1.3167552947998047, -0.06984145194292068], [0.7184278964996338, 1.3167552947998047, -0.06984145194292068, 0.7184278964996338, 1.5042552947998047, -0.06984145194292068, 0.7184278964996338, 1.5042552947998047, 0.18015854060649872, 0.7184278964996338, 1.3167552947998047, 0.18015854060649872], [0.09342791140079498, 1.3167552947998047, 0.18015854060649872, 0.09342791140079498, 1.5042552947998047, 0.18015854060649872, 0.09342791140079498, 1.5042552947998047, -0.06984145194292068, 0.09342791140079498, 1.3167552947998047, -0.06984145194292068]],'tex_coords':[[0.660377358490566, 0.0, 0.660377358490566, 0.75, 0.6792452830188679, 0.75, 0.6792452830188679, 0.0], [0.6981132075471698, 0.0, 0.6981132075471698, 0.75, 0.7169811320754716, 0.75, 0.7169811320754716, 0.0], [0.660377358490566, 0.75, 0.660377358490566, 1.0, 0.6792452830188679, 1.0, 0.6792452830188679, 0.75], [0.6792452830188679, 0.75, 0.6792452830188679, 1.0, 0.6981132075471698, 1.0, 0.6981132075471698, 0.75], [0.6792452830188679, 0.0, 0.6792452830188679, 0.75, 0.6981132075471698, 0.75, 0.6981132075471698, 0.0], [0.6415094339622641, 0.0, 0.6415094339622641, 0.75, 0.660377358490566, 0.75, 0.660377358490566, 0.0], [0.7358490566037735, 0.5625, 0.7358490566037735, 0.75, 0.7830188679245284, 0.75, 0.7830188679245284, 0.5625], [0.8018867924528302, 0.5625, 0.8018867924528302, 0.75, 0.8490566037735849, 0.75, 0.8490566037735849, 0.5625], [0.7358490566037735, 0.75, 0.7358490566037735, 1.0, 0.7830188679245284, 1.0, 0.7830188679245284, 0.75], [0.7830188679245284, 0.75, 0.7830188679245284, 1.0, 0.8301886792452831, 1.0, 0.8301886792452831, 0.75], [0.7830188679245284, 0.5625, 0.7830188679245284, 0.75, 0.8018867924528302, 0.75, 0.8018867924528302, 0.5625], [0.7169811320754716, 0.5625, 0.7169811320754716, 0.75, 0.7358490566037735, 0.75, 0.7358490566037735, 0.5625]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'rightLeg','pivot':[-0.11875, 0.75, 0.0],'vertices':[[-0.24375000596046448, 0.0, -0.125, -0.24375000596046448, 0.75, -0.125, 0.0062500000931322575, 0.75, -0.125, 0.0062500000931322575, 0.0, -0.125], [0.0062500000931322575, 0.0, 0.125, 0.0062500000931322575, 0.75, 0.125, -0.24375000596046448, 0.75, 0.125, -0.24375000596046448, 0.0, 0.125], [-0.24375000596046448, 0.75, -0.125, -0.24375000596046448, 0.75, 0.125, 0.0062500000931322575, 0.75, 0.125, 0.0062500000931322575, 0.75, -0.125], [0.0062500000931322575, 0.0, -0.125, 0.0062500000931322575, 0.0, 0.125, -0.24375000596046448, 0.0, 0.125, -0.24375000596046448, 0.0, -0.125], [0.0062500000931322575, 0.0, -0.125, 0.0062500000931322575, 0.75, -0.125, 0.0062500000931322575, 0.75, 0.125, 0.0062500000931322575, 0.0, 0.125], [-0.24375000596046448, 0.0, 0.125, -0.24375000596046448, 0.75, 0.125, -0.24375000596046448, 0.75, -0.125, -0.24375000596046448, 0.0, -0.125]],'tex_coords':[[0.8679245283018868, 0.0, 0.8679245283018868, 0.75, 0.8867924528301887, 0.75, 0.8867924528301887, 0.0], [0.9056603773584906, 0.0, 0.9056603773584906, 0.75, 0.9245283018867925, 0.75, 0.9245283018867925, 0.0], [0.8679245283018868, 0.75, 0.8679245283018868, 1.0, 0.8867924528301887, 1.0, 0.8867924528301887, 0.75], [0.8867924528301887, 0.75, 0.8867924528301887, 1.0, 0.9056603773584906, 1.0, 0.9056603773584906, 0.75], [0.8867924528301887, 0.0, 0.8867924528301887, 0.75, 0.9056603773584906, 0.75, 0.9056603773584906, 0.0], [0.8490566037735849, 0.0, 0.8490566037735849, 0.75, 0.8679245283018868, 0.75, 0.8679245283018868, 0.0]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'leftLeg','pivot':[0.11875, 0.75, 0.0],'vertices':[[-0.0062500000931322575, 0.0, -0.125, -0.0062500000931322575, 0.75, -0.125, 0.24375000596046448, 0.75, -0.125, 0.24375000596046448, 0.0, -0.125], [0.24375000596046448, 0.0, 0.125, 0.24375000596046448, 0.75, 0.125, -0.0062500000931322575, 0.75, 0.125, -0.0062500000931322575, 0.0, 0.125], [-0.0062500000931322575, 0.75, -0.125, -0.0062500000931322575, 0.75, 0.125, 0.24375000596046448, 0.75, 0.125, 0.24375000596046448, 0.75, -0.125], [0.24375000596046448, 0.0, -0.125, 0.24375000596046448, 0.0, 0.125, -0.0062500000931322575, 0.0, 0.125, -0.0062500000931322575, 0.0, -0.125], [0.24375000596046448, 0.0, -0.125, 0.24375000596046448, 0.75, -0.125, 0.24375000596046448, 0.75, 0.125, 0.24375000596046448, 0.0, 0.125], [-0.0062500000931322575, 0.0, 0.125, -0.0062500000931322575, 0.75, 0.125, -0.0062500000931322575, 0.75, -0.125, -0.0062500000931322575, 0.0, -0.125]],'tex_coords':[[0.9433962264150944, 0.0, 0.9433962264150944, 0.75, 0.9622641509433962, 0.75, 0.9622641509433962, 0.0], [0.9811320754716981, 0.0, 0.9811320754716981, 0.75, 1.0, 0.75, 1.0, 0.0], [0.9433962264150944, 0.75, 0.9433962264150944, 1.0, 0.9622641509433962, 1.0, 0.9622641509433962, 0.75], [0.9622641509433962, 0.75, 0.9622641509433962, 1.0, 0.9811320754716981, 1.0, 0.9811320754716981, 0.75], [0.9622641509433962, 0.0, 0.9622641509433962, 0.75, 0.9811320754716981, 0.75, 0.9811320754716981, 0.0], [0.9245283018867925, 0.0, 0.9245283018867925, 0.75, 0.9433962264150944, 0.75, 0.9433962264150944, 0.0]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}] diff --git a/community/models/pig.py b/community/models/pig.py index d454f0b1..eddfc53d 100644 --- a/community/models/pig.py +++ b/community/models/pig.py @@ -5,6 +5,4 @@ colliders = [] -vertex_positions = [[-0.3124999701976776, 0.3750000298023224, 0.5, -0.3124999701976776, 0.375, -0.5, 0.3124999701976776, 0.375, -0.5, 0.3124999701976776, 0.3750000298023224, 0.5], [0.3124999701976776, 0.8750000596046448, 0.5, 0.3124999701976776, 0.875, -0.5, -0.3124999701976776, 0.875, -0.5, -0.3124999701976776, 0.8750000596046448, 0.5], [-0.3124999701976776, 0.375, -0.5, -0.3124999701976776, 0.875, -0.5, 0.3124999701976776, 0.875, -0.5, 0.3124999701976776, 0.375, -0.5], [0.3124999701976776, 0.3750000298023224, 0.5, 0.3124999701976776, 0.8750000596046448, 0.5, -0.3124999701976776, 0.8750000596046448, 0.5, -0.3124999701976776, 0.3750000298023224, 0.5], [0.3124999701976776, 0.3750000298023224, 0.5, 0.3124999701976776, 0.375, -0.5, 0.3124999701976776, 0.875, -0.5, 0.3124999701976776, 0.8750000596046448, 0.5], [-0.3124999701976776, 0.8750000596046448, 0.5, -0.3124999701976776, 0.875, -0.5, -0.3124999701976776, 0.375, -0.5, -0.3124999701976776, 0.3750000298023224, 0.5], [-0.25, 0.5, -0.875, -0.25, 1.0, -0.875, 0.25, 1.0, -0.875, 0.25, 0.5, -0.875], [0.25, 0.5, -0.375, 0.25, 1.0, -0.375, -0.25, 1.0, -0.375, -0.25, 0.5, -0.375], [-0.25, 1.0, -0.875, -0.25, 1.0, -0.375, 0.25, 1.0, -0.375, 0.25, 1.0, -0.875], [0.25, 0.5, -0.875, 0.25, 0.5, -0.375, -0.25, 0.5, -0.375, -0.25, 0.5, -0.875], [0.25, 0.5, -0.875, 0.25, 1.0, -0.875, 0.25, 1.0, -0.375, 0.25, 0.5, -0.375], [-0.25, 0.5, -0.375, -0.25, 1.0, -0.375, -0.25, 1.0, -0.875, -0.25, 0.5, -0.875], [-0.125, 0.5625, -0.9375, -0.125, 0.75, -0.9375, 0.125, 0.75, -0.9375, 0.125, 0.5625, -0.9375], [0.125, 0.5625, -0.875, 0.125, 0.75, -0.875, -0.125, 0.75, -0.875, -0.125, 0.5625, -0.875], [-0.125, 0.75, -0.9375, -0.125, 0.75, -0.875, 0.125, 0.75, -0.875, 0.125, 0.75, -0.9375], [0.125, 0.5625, -0.9375, 0.125, 0.5625, -0.875, -0.125, 0.5625, -0.875, -0.125, 0.5625, -0.9375], [0.125, 0.5625, -0.9375, 0.125, 0.75, -0.9375, 0.125, 0.75, -0.875, 0.125, 0.5625, -0.875], [-0.125, 0.5625, -0.875, -0.125, 0.75, -0.875, -0.125, 0.75, -0.9375, -0.125, 0.5625, -0.9375], [-0.3125, 0.0, 0.3125, -0.3125, 0.375, 0.3125, -0.0625, 0.375, 0.3125, -0.0625, 0.0, 0.3125], [-0.0625, 0.0, 0.5625, -0.0625, 0.375, 0.5625, -0.3125, 0.375, 0.5625, -0.3125, 0.0, 0.5625], [-0.3125, 0.375, 0.3125, -0.3125, 0.375, 0.5625, -0.0625, 0.375, 0.5625, -0.0625, 0.375, 0.3125], [-0.0625, 0.0, 0.3125, -0.0625, 0.0, 0.5625, -0.3125, 0.0, 0.5625, -0.3125, 0.0, 0.3125], [-0.0625, 0.0, 0.3125, -0.0625, 0.375, 0.3125, -0.0625, 0.375, 0.5625, -0.0625, 0.0, 0.5625], [-0.3125, 0.0, 0.5625, -0.3125, 0.375, 0.5625, -0.3125, 0.375, 0.3125, -0.3125, 0.0, 0.3125], [0.0625, 0.0, 0.3125, 0.0625, 0.375, 0.3125, 0.3125, 0.375, 0.3125, 0.3125, 0.0, 0.3125], [0.3125, 0.0, 0.5625, 0.3125, 0.375, 0.5625, 0.0625, 0.375, 0.5625, 0.0625, 0.0, 0.5625], [0.0625, 0.375, 0.3125, 0.0625, 0.375, 0.5625, 0.3125, 0.375, 0.5625, 0.3125, 0.375, 0.3125], [0.3125, 0.0, 0.3125, 0.3125, 0.0, 0.5625, 0.0625, 0.0, 0.5625, 0.0625, 0.0, 0.3125], [0.3125, 0.0, 0.3125, 0.3125, 0.375, 0.3125, 0.3125, 0.375, 0.5625, 0.3125, 0.0, 0.5625], [0.0625, 0.0, 0.5625, 0.0625, 0.375, 0.5625, 0.0625, 0.375, 0.3125, 0.0625, 0.0, 0.3125], [-0.3125, 0.0, -0.4375, -0.3125, 0.375, -0.4375, -0.0625, 0.375, -0.4375, -0.0625, 0.0, -0.4375], [-0.0625, 0.0, -0.1875, -0.0625, 0.375, -0.1875, -0.3125, 0.375, -0.1875, -0.3125, 0.0, -0.1875], [-0.3125, 0.375, -0.4375, -0.3125, 0.375, -0.1875, -0.0625, 0.375, -0.1875, -0.0625, 0.375, -0.4375], [-0.0625, 0.0, -0.4375, -0.0625, 0.0, -0.1875, -0.3125, 0.0, -0.1875, -0.3125, 0.0, -0.4375], [-0.0625, 0.0, -0.4375, -0.0625, 0.375, -0.4375, -0.0625, 0.375, -0.1875, -0.0625, 0.0, -0.1875], [-0.3125, 0.0, -0.1875, -0.3125, 0.375, -0.1875, -0.3125, 0.375, -0.4375, -0.3125, 0.0, -0.4375], [0.0625, 0.0, -0.4375, 0.0625, 0.375, -0.4375, 0.3125, 0.375, -0.4375, 0.3125, 0.0, -0.4375], [0.3125, 0.0, -0.1875, 0.3125, 0.375, -0.1875, 0.0625, 0.375, -0.1875, 0.0625, 0.0, -0.1875], [0.0625, 0.375, -0.4375, 0.0625, 0.375, -0.1875, 0.3125, 0.375, -0.1875, 0.3125, 0.375, -0.4375], [0.3125, 0.0, -0.4375, 0.3125, 0.0, -0.1875, 0.0625, 0.0, -0.1875, 0.0625, 0.0, -0.4375], [0.3125, 0.0, -0.4375, 0.3125, 0.375, -0.4375, 0.3125, 0.375, -0.1875, 0.3125, 0.0, -0.1875], [0.0625, 0.0, -0.1875, 0.0625, 0.375, -0.1875, 0.0625, 0.375, -0.4375, 0.0625, 0.0, -0.4375]] -tex_coords = [[0.056338028169014086, 0.0, 0, 0.056338028169014086, 0.6666666666666667, 0, 0.1267605633802817, 0.6666666666666667, 0, 0.1267605633802817, 0.0, 0], [0.18309859154929578, 0.0, 0, 0.18309859154929578, 0.6666666666666667, 0, 0.2535211267605634, 0.6666666666666667, 0, 0.2535211267605634, 0.0, 0], [0.056338028169014086, 0.6666666666666667, 0, 0.056338028169014086, 1.0, 0, 0.1267605633802817, 1.0, 0, 0.1267605633802817, 0.6666666666666667, 0], [0.1267605633802817, 0.6666666666666667, 0, 0.1267605633802817, 1.0, 0, 0.19718309859154928, 1.0, 0, 0.19718309859154928, 0.6666666666666667, 0], [0.1267605633802817, 0.0, 0, 0.1267605633802817, 0.6666666666666667, 0, 0.18309859154929578, 0.6666666666666667, 0, 0.18309859154929578, 0.0, 0], [0.0, 0.0, 0, 0.0, 0.6666666666666667, 0, 0.056338028169014086, 0.6666666666666667, 0, 0.056338028169014086, 0.0, 0], [0.30985915492957744, 0.33333333333333337, 0, 0.30985915492957744, 0.6666666666666667, 0, 0.36619718309859156, 0.6666666666666667, 0, 0.36619718309859156, 0.33333333333333337, 0], [0.4225352112676056, 0.33333333333333337, 0, 0.4225352112676056, 0.6666666666666667, 0, 0.4788732394366197, 0.6666666666666667, 0, 0.4788732394366197, 0.33333333333333337, 0], [0.30985915492957744, 0.6666666666666667, 0, 0.30985915492957744, 1.0, 0, 0.36619718309859156, 1.0, 0, 0.36619718309859156, 0.6666666666666667, 0], [0.36619718309859156, 0.6666666666666667, 0, 0.36619718309859156, 1.0, 0, 0.4225352112676056, 1.0, 0, 0.4225352112676056, 0.6666666666666667, 0], [0.36619718309859156, 0.33333333333333337, 0, 0.36619718309859156, 0.6666666666666667, 0, 0.4225352112676056, 0.6666666666666667, 0, 0.4225352112676056, 0.33333333333333337, 0], [0.2535211267605634, 0.33333333333333337, 0, 0.2535211267605634, 0.6666666666666667, 0, 0.30985915492957744, 0.6666666666666667, 0, 0.30985915492957744, 0.33333333333333337, 0], [0.4859154929577465, 0.8333333333333334, 0, 0.4859154929577465, 0.9583333333333334, 0, 0.5140845070422535, 0.9583333333333334, 0, 0.5140845070422535, 0.8333333333333334, 0], [0.5211267605633803, 0.8333333333333334, 0, 0.5211267605633803, 0.9583333333333334, 0, 0.5492957746478874, 0.9583333333333334, 0, 0.5492957746478874, 0.8333333333333334, 0], [0.4859154929577465, 0.9583333333333334, 0, 0.4859154929577465, 1.0, 0, 0.5140845070422535, 1.0, 0, 0.5140845070422535, 0.9583333333333334, 0], [0.5140845070422535, 0.9583333333333334, 0, 0.5140845070422535, 1.0, 0, 0.5422535211267606, 1.0, 0, 0.5422535211267606, 0.9583333333333334, 0], [0.5140845070422535, 0.8333333333333334, 0, 0.5140845070422535, 0.9583333333333334, 0, 0.5211267605633803, 0.9583333333333334, 0, 0.5211267605633803, 0.8333333333333334, 0], [0.4788732394366197, 0.8333333333333334, 0, 0.4788732394366197, 0.9583333333333334, 0, 0.4859154929577465, 0.9583333333333334, 0, 0.4859154929577465, 0.8333333333333334, 0], [0.5774647887323944, 0.5833333333333333, 0, 0.5774647887323944, 0.8333333333333334, 0, 0.6056338028169014, 0.8333333333333334, 0, 0.6056338028169014, 0.5833333333333333, 0], [0.6338028169014085, 0.5833333333333333, 0, 0.6338028169014085, 0.8333333333333334, 0, 0.6619718309859155, 0.8333333333333334, 0, 0.6619718309859155, 0.5833333333333333, 0], [0.5774647887323944, 0.8333333333333334, 0, 0.5774647887323944, 1.0, 0, 0.6056338028169014, 1.0, 0, 0.6056338028169014, 0.8333333333333334, 0], [0.6056338028169014, 0.8333333333333334, 0, 0.6056338028169014, 1.0, 0, 0.6338028169014085, 1.0, 0, 0.6338028169014085, 0.8333333333333334, 0], [0.6056338028169014, 0.5833333333333333, 0, 0.6056338028169014, 0.8333333333333334, 0, 0.6338028169014085, 0.8333333333333334, 0, 0.6338028169014085, 0.5833333333333333, 0], [0.5492957746478874, 0.5833333333333333, 0, 0.5492957746478874, 0.8333333333333334, 0, 0.5774647887323944, 0.8333333333333334, 0, 0.5774647887323944, 0.5833333333333333, 0], [0.6901408450704225, 0.5833333333333333, 0, 0.6901408450704225, 0.8333333333333334, 0, 0.7183098591549296, 0.8333333333333334, 0, 0.7183098591549296, 0.5833333333333333, 0], [0.7464788732394366, 0.5833333333333333, 0, 0.7464788732394366, 0.8333333333333334, 0, 0.7746478873239436, 0.8333333333333334, 0, 0.7746478873239436, 0.5833333333333333, 0], [0.6901408450704225, 0.8333333333333334, 0, 0.6901408450704225, 1.0, 0, 0.7183098591549296, 1.0, 0, 0.7183098591549296, 0.8333333333333334, 0], [0.7183098591549296, 0.8333333333333334, 0, 0.7183098591549296, 1.0, 0, 0.7464788732394366, 1.0, 0, 0.7464788732394366, 0.8333333333333334, 0], [0.7183098591549296, 0.5833333333333333, 0, 0.7183098591549296, 0.8333333333333334, 0, 0.7464788732394366, 0.8333333333333334, 0, 0.7464788732394366, 0.5833333333333333, 0], [0.6619718309859155, 0.5833333333333333, 0, 0.6619718309859155, 0.8333333333333334, 0, 0.6901408450704225, 0.8333333333333334, 0, 0.6901408450704225, 0.5833333333333333, 0], [0.8028169014084507, 0.5833333333333333, 0, 0.8028169014084507, 0.8333333333333334, 0, 0.8309859154929577, 0.8333333333333334, 0, 0.8309859154929577, 0.5833333333333333, 0], [0.8591549295774648, 0.5833333333333333, 0, 0.8591549295774648, 0.8333333333333334, 0, 0.8873239436619719, 0.8333333333333334, 0, 0.8873239436619719, 0.5833333333333333, 0], [0.8028169014084507, 0.8333333333333334, 0, 0.8028169014084507, 1.0, 0, 0.8309859154929577, 1.0, 0, 0.8309859154929577, 0.8333333333333334, 0], [0.8309859154929577, 0.8333333333333334, 0, 0.8309859154929577, 1.0, 0, 0.8591549295774648, 1.0, 0, 0.8591549295774648, 0.8333333333333334, 0], [0.8309859154929577, 0.5833333333333333, 0, 0.8309859154929577, 0.8333333333333334, 0, 0.8591549295774648, 0.8333333333333334, 0, 0.8591549295774648, 0.5833333333333333, 0], [0.7746478873239436, 0.5833333333333333, 0, 0.7746478873239436, 0.8333333333333334, 0, 0.8028169014084507, 0.8333333333333334, 0, 0.8028169014084507, 0.5833333333333333, 0], [0.9154929577464789, 0.5833333333333333, 0, 0.9154929577464789, 0.8333333333333334, 0, 0.9436619718309859, 0.8333333333333334, 0, 0.9436619718309859, 0.5833333333333333, 0], [0.971830985915493, 0.5833333333333333, 0, 0.971830985915493, 0.8333333333333334, 0, 1.0, 0.8333333333333334, 0, 1.0, 0.5833333333333333, 0], [0.9154929577464789, 0.8333333333333334, 0, 0.9154929577464789, 1.0, 0, 0.9436619718309859, 1.0, 0, 0.9436619718309859, 0.8333333333333334, 0], [0.9436619718309859, 0.8333333333333334, 0, 0.9436619718309859, 1.0, 0, 0.971830985915493, 1.0, 0, 0.971830985915493, 0.8333333333333334, 0], [0.9436619718309859, 0.5833333333333333, 0, 0.9436619718309859, 0.8333333333333334, 0, 0.971830985915493, 0.8333333333333334, 0, 0.971830985915493, 0.5833333333333333, 0], [0.8873239436619719, 0.5833333333333333, 0, 0.8873239436619719, 0.8333333333333334, 0, 0.9154929577464789, 0.8333333333333334, 0, 0.9154929577464789, 0.5833333333333333, 0]] -shading_values = [[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]] +bones = [{'name':'body','pivot':[0.0, 0.8125, 0.125],'vertices':[[-0.3124999701976776, 0.3750000298023224, 0.5, -0.3124999701976776, 0.375, -0.5, 0.3124999701976776, 0.375, -0.5, 0.3124999701976776, 0.3750000298023224, 0.5], [0.3124999701976776, 0.8750000596046448, 0.5, 0.3124999701976776, 0.875, -0.5, -0.3124999701976776, 0.875, -0.5, -0.3124999701976776, 0.8750000596046448, 0.5], [-0.3124999701976776, 0.375, -0.5, -0.3124999701976776, 0.875, -0.5, 0.3124999701976776, 0.875, -0.5, 0.3124999701976776, 0.375, -0.5], [0.3124999701976776, 0.3750000298023224, 0.5, 0.3124999701976776, 0.8750000596046448, 0.5, -0.3124999701976776, 0.8750000596046448, 0.5, -0.3124999701976776, 0.3750000298023224, 0.5], [0.3124999701976776, 0.3750000298023224, 0.5, 0.3124999701976776, 0.375, -0.5, 0.3124999701976776, 0.875, -0.5, 0.3124999701976776, 0.8750000596046448, 0.5], [-0.3124999701976776, 0.8750000596046448, 0.5, -0.3124999701976776, 0.875, -0.5, -0.3124999701976776, 0.375, -0.5, -0.3124999701976776, 0.3750000298023224, 0.5]],'tex_coords':[[0.056338028169014086, 0.0, 0.056338028169014086, 0.6666666666666667, 0.1267605633802817, 0.6666666666666667, 0.1267605633802817, 0.0], [0.18309859154929578, 0.0, 0.18309859154929578, 0.6666666666666667, 0.2535211267605634, 0.6666666666666667, 0.2535211267605634, 0.0], [0.056338028169014086, 0.6666666666666667, 0.056338028169014086, 1.0, 0.1267605633802817, 1.0, 0.1267605633802817, 0.6666666666666667], [0.1267605633802817, 0.6666666666666667, 0.1267605633802817, 1.0, 0.19718309859154928, 1.0, 0.19718309859154928, 0.6666666666666667], [0.1267605633802817, 0.0, 0.1267605633802817, 0.6666666666666667, 0.18309859154929578, 0.6666666666666667, 0.18309859154929578, 0.0], [0.0, 0.0, 0.0, 0.6666666666666667, 0.056338028169014086, 0.6666666666666667, 0.056338028169014086, 0.0]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'head','pivot':[0.0, 0.75, -0.375],'vertices':[[-0.25, 0.5, -0.875, -0.25, 1.0, -0.875, 0.25, 1.0, -0.875, 0.25, 0.5, -0.875], [0.25, 0.5, -0.375, 0.25, 1.0, -0.375, -0.25, 1.0, -0.375, -0.25, 0.5, -0.375], [-0.25, 1.0, -0.875, -0.25, 1.0, -0.375, 0.25, 1.0, -0.375, 0.25, 1.0, -0.875], [0.25, 0.5, -0.875, 0.25, 0.5, -0.375, -0.25, 0.5, -0.375, -0.25, 0.5, -0.875], [0.25, 0.5, -0.875, 0.25, 1.0, -0.875, 0.25, 1.0, -0.375, 0.25, 0.5, -0.375], [-0.25, 0.5, -0.375, -0.25, 1.0, -0.375, -0.25, 1.0, -0.875, -0.25, 0.5, -0.875], [-0.125, 0.5625, -0.9375, -0.125, 0.75, -0.9375, 0.125, 0.75, -0.9375, 0.125, 0.5625, -0.9375], [0.125, 0.5625, -0.875, 0.125, 0.75, -0.875, -0.125, 0.75, -0.875, -0.125, 0.5625, -0.875], [-0.125, 0.75, -0.9375, -0.125, 0.75, -0.875, 0.125, 0.75, -0.875, 0.125, 0.75, -0.9375], [0.125, 0.5625, -0.9375, 0.125, 0.5625, -0.875, -0.125, 0.5625, -0.875, -0.125, 0.5625, -0.9375], [0.125, 0.5625, -0.9375, 0.125, 0.75, -0.9375, 0.125, 0.75, -0.875, 0.125, 0.5625, -0.875], [-0.125, 0.5625, -0.875, -0.125, 0.75, -0.875, -0.125, 0.75, -0.9375, -0.125, 0.5625, -0.9375]],'tex_coords':[[0.30985915492957744, 0.33333333333333337, 0.30985915492957744, 0.6666666666666667, 0.36619718309859156, 0.6666666666666667, 0.36619718309859156, 0.33333333333333337], [0.4225352112676056, 0.33333333333333337, 0.4225352112676056, 0.6666666666666667, 0.4788732394366197, 0.6666666666666667, 0.4788732394366197, 0.33333333333333337], [0.30985915492957744, 0.6666666666666667, 0.30985915492957744, 1.0, 0.36619718309859156, 1.0, 0.36619718309859156, 0.6666666666666667], [0.36619718309859156, 0.6666666666666667, 0.36619718309859156, 1.0, 0.4225352112676056, 1.0, 0.4225352112676056, 0.6666666666666667], [0.36619718309859156, 0.33333333333333337, 0.36619718309859156, 0.6666666666666667, 0.4225352112676056, 0.6666666666666667, 0.4225352112676056, 0.33333333333333337], [0.2535211267605634, 0.33333333333333337, 0.2535211267605634, 0.6666666666666667, 0.30985915492957744, 0.6666666666666667, 0.30985915492957744, 0.33333333333333337], [0.4859154929577465, 0.8333333333333334, 0.4859154929577465, 0.9583333333333334, 0.5140845070422535, 0.9583333333333334, 0.5140845070422535, 0.8333333333333334], [0.5211267605633803, 0.8333333333333334, 0.5211267605633803, 0.9583333333333334, 0.5492957746478874, 0.9583333333333334, 0.5492957746478874, 0.8333333333333334], [0.4859154929577465, 0.9583333333333334, 0.4859154929577465, 1.0, 0.5140845070422535, 1.0, 0.5140845070422535, 0.9583333333333334], [0.5140845070422535, 0.9583333333333334, 0.5140845070422535, 1.0, 0.5422535211267606, 1.0, 0.5422535211267606, 0.9583333333333334], [0.5140845070422535, 0.8333333333333334, 0.5140845070422535, 0.9583333333333334, 0.5211267605633803, 0.9583333333333334, 0.5211267605633803, 0.8333333333333334], [0.4788732394366197, 0.8333333333333334, 0.4788732394366197, 0.9583333333333334, 0.4859154929577465, 0.9583333333333334, 0.4859154929577465, 0.8333333333333334]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'leg0','pivot':[-0.1875, 0.375, 0.4375],'vertices':[[-0.3125, 0.0, 0.3125, -0.3125, 0.375, 0.3125, -0.0625, 0.375, 0.3125, -0.0625, 0.0, 0.3125], [-0.0625, 0.0, 0.5625, -0.0625, 0.375, 0.5625, -0.3125, 0.375, 0.5625, -0.3125, 0.0, 0.5625], [-0.3125, 0.375, 0.3125, -0.3125, 0.375, 0.5625, -0.0625, 0.375, 0.5625, -0.0625, 0.375, 0.3125], [-0.0625, 0.0, 0.3125, -0.0625, 0.0, 0.5625, -0.3125, 0.0, 0.5625, -0.3125, 0.0, 0.3125], [-0.0625, 0.0, 0.3125, -0.0625, 0.375, 0.3125, -0.0625, 0.375, 0.5625, -0.0625, 0.0, 0.5625], [-0.3125, 0.0, 0.5625, -0.3125, 0.375, 0.5625, -0.3125, 0.375, 0.3125, -0.3125, 0.0, 0.3125]],'tex_coords':[[0.5774647887323944, 0.5833333333333333, 0.5774647887323944, 0.8333333333333334, 0.6056338028169014, 0.8333333333333334, 0.6056338028169014, 0.5833333333333333], [0.6338028169014085, 0.5833333333333333, 0.6338028169014085, 0.8333333333333334, 0.6619718309859155, 0.8333333333333334, 0.6619718309859155, 0.5833333333333333], [0.5774647887323944, 0.8333333333333334, 0.5774647887323944, 1.0, 0.6056338028169014, 1.0, 0.6056338028169014, 0.8333333333333334], [0.6056338028169014, 0.8333333333333334, 0.6056338028169014, 1.0, 0.6338028169014085, 1.0, 0.6338028169014085, 0.8333333333333334], [0.6056338028169014, 0.5833333333333333, 0.6056338028169014, 0.8333333333333334, 0.6338028169014085, 0.8333333333333334, 0.6338028169014085, 0.5833333333333333], [0.5492957746478874, 0.5833333333333333, 0.5492957746478874, 0.8333333333333334, 0.5774647887323944, 0.8333333333333334, 0.5774647887323944, 0.5833333333333333]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'leg1','pivot':[0.1875, 0.375, 0.4375],'vertices':[[0.0625, 0.0, 0.3125, 0.0625, 0.375, 0.3125, 0.3125, 0.375, 0.3125, 0.3125, 0.0, 0.3125], [0.3125, 0.0, 0.5625, 0.3125, 0.375, 0.5625, 0.0625, 0.375, 0.5625, 0.0625, 0.0, 0.5625], [0.0625, 0.375, 0.3125, 0.0625, 0.375, 0.5625, 0.3125, 0.375, 0.5625, 0.3125, 0.375, 0.3125], [0.3125, 0.0, 0.3125, 0.3125, 0.0, 0.5625, 0.0625, 0.0, 0.5625, 0.0625, 0.0, 0.3125], [0.3125, 0.0, 0.3125, 0.3125, 0.375, 0.3125, 0.3125, 0.375, 0.5625, 0.3125, 0.0, 0.5625], [0.0625, 0.0, 0.5625, 0.0625, 0.375, 0.5625, 0.0625, 0.375, 0.3125, 0.0625, 0.0, 0.3125]],'tex_coords':[[0.6901408450704225, 0.5833333333333333, 0.6901408450704225, 0.8333333333333334, 0.7183098591549296, 0.8333333333333334, 0.7183098591549296, 0.5833333333333333], [0.7464788732394366, 0.5833333333333333, 0.7464788732394366, 0.8333333333333334, 0.7746478873239436, 0.8333333333333334, 0.7746478873239436, 0.5833333333333333], [0.6901408450704225, 0.8333333333333334, 0.6901408450704225, 1.0, 0.7183098591549296, 1.0, 0.7183098591549296, 0.8333333333333334], [0.7183098591549296, 0.8333333333333334, 0.7183098591549296, 1.0, 0.7464788732394366, 1.0, 0.7464788732394366, 0.8333333333333334], [0.7183098591549296, 0.5833333333333333, 0.7183098591549296, 0.8333333333333334, 0.7464788732394366, 0.8333333333333334, 0.7464788732394366, 0.5833333333333333], [0.6619718309859155, 0.5833333333333333, 0.6619718309859155, 0.8333333333333334, 0.6901408450704225, 0.8333333333333334, 0.6901408450704225, 0.5833333333333333]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'leg2','pivot':[-0.1875, 0.375, -0.3125],'vertices':[[-0.3125, 0.0, -0.4375, -0.3125, 0.375, -0.4375, -0.0625, 0.375, -0.4375, -0.0625, 0.0, -0.4375], [-0.0625, 0.0, -0.1875, -0.0625, 0.375, -0.1875, -0.3125, 0.375, -0.1875, -0.3125, 0.0, -0.1875], [-0.3125, 0.375, -0.4375, -0.3125, 0.375, -0.1875, -0.0625, 0.375, -0.1875, -0.0625, 0.375, -0.4375], [-0.0625, 0.0, -0.4375, -0.0625, 0.0, -0.1875, -0.3125, 0.0, -0.1875, -0.3125, 0.0, -0.4375], [-0.0625, 0.0, -0.4375, -0.0625, 0.375, -0.4375, -0.0625, 0.375, -0.1875, -0.0625, 0.0, -0.1875], [-0.3125, 0.0, -0.1875, -0.3125, 0.375, -0.1875, -0.3125, 0.375, -0.4375, -0.3125, 0.0, -0.4375]],'tex_coords':[[0.8028169014084507, 0.5833333333333333, 0.8028169014084507, 0.8333333333333334, 0.8309859154929577, 0.8333333333333334, 0.8309859154929577, 0.5833333333333333], [0.8591549295774648, 0.5833333333333333, 0.8591549295774648, 0.8333333333333334, 0.8873239436619719, 0.8333333333333334, 0.8873239436619719, 0.5833333333333333], [0.8028169014084507, 0.8333333333333334, 0.8028169014084507, 1.0, 0.8309859154929577, 1.0, 0.8309859154929577, 0.8333333333333334], [0.8309859154929577, 0.8333333333333334, 0.8309859154929577, 1.0, 0.8591549295774648, 1.0, 0.8591549295774648, 0.8333333333333334], [0.8309859154929577, 0.5833333333333333, 0.8309859154929577, 0.8333333333333334, 0.8591549295774648, 0.8333333333333334, 0.8591549295774648, 0.5833333333333333], [0.7746478873239436, 0.5833333333333333, 0.7746478873239436, 0.8333333333333334, 0.8028169014084507, 0.8333333333333334, 0.8028169014084507, 0.5833333333333333]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'leg3','pivot':[0.1875, 0.375, -0.3125],'vertices':[[0.0625, 0.0, -0.4375, 0.0625, 0.375, -0.4375, 0.3125, 0.375, -0.4375, 0.3125, 0.0, -0.4375], [0.3125, 0.0, -0.1875, 0.3125, 0.375, -0.1875, 0.0625, 0.375, -0.1875, 0.0625, 0.0, -0.1875], [0.0625, 0.375, -0.4375, 0.0625, 0.375, -0.1875, 0.3125, 0.375, -0.1875, 0.3125, 0.375, -0.4375], [0.3125, 0.0, -0.4375, 0.3125, 0.0, -0.1875, 0.0625, 0.0, -0.1875, 0.0625, 0.0, -0.4375], [0.3125, 0.0, -0.4375, 0.3125, 0.375, -0.4375, 0.3125, 0.375, -0.1875, 0.3125, 0.0, -0.1875], [0.0625, 0.0, -0.1875, 0.0625, 0.375, -0.1875, 0.0625, 0.375, -0.4375, 0.0625, 0.0, -0.4375]],'tex_coords':[[0.9154929577464789, 0.5833333333333333, 0.9154929577464789, 0.8333333333333334, 0.9436619718309859, 0.8333333333333334, 0.9436619718309859, 0.5833333333333333], [0.971830985915493, 0.5833333333333333, 0.971830985915493, 0.8333333333333334, 1.0, 0.8333333333333334, 1.0, 0.5833333333333333], [0.9154929577464789, 0.8333333333333334, 0.9154929577464789, 1.0, 0.9436619718309859, 1.0, 0.9436619718309859, 0.8333333333333334], [0.9436619718309859, 0.8333333333333334, 0.9436619718309859, 1.0, 0.971830985915493, 1.0, 0.971830985915493, 0.8333333333333334], [0.9436619718309859, 0.5833333333333333, 0.9436619718309859, 0.8333333333333334, 0.971830985915493, 0.8333333333333334, 0.971830985915493, 0.5833333333333333], [0.8873239436619719, 0.5833333333333333, 0.8873239436619719, 0.8333333333333334, 0.9154929577464789, 0.8333333333333334, 0.9154929577464789, 0.5833333333333333]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}] diff --git a/community/models/skeleton.py b/community/models/skeleton.py index e528a48e..003cd6c2 100644 --- a/community/models/skeleton.py +++ b/community/models/skeleton.py @@ -5,6 +5,4 @@ colliders = [] -vertex_positions = [[-0.25, 0.75, -0.125, -0.25, 1.5, -0.125, 0.25, 1.5, -0.125, 0.25, 0.75, -0.125], [0.25, 0.75, 0.125, 0.25, 1.5, 0.125, -0.25, 1.5, 0.125, -0.25, 0.75, 0.125], [-0.25, 1.5, -0.125, -0.25, 1.5, 0.125, 0.25, 1.5, 0.125, 0.25, 1.5, -0.125], [0.25, 0.75, -0.125, 0.25, 0.75, 0.125, -0.25, 0.75, 0.125, -0.25, 0.75, -0.125], [0.25, 0.75, -0.125, 0.25, 1.5, -0.125, 0.25, 1.5, 0.125, 0.25, 0.75, 0.125], [-0.25, 0.75, 0.125, -0.25, 1.5, 0.125, -0.25, 1.5, -0.125, -0.25, 0.75, -0.125], [-0.25, 1.5, -0.25, -0.25, 2.0, -0.25, 0.25, 2.0, -0.25, 0.25, 1.5, -0.25], [0.25, 1.5, 0.25, 0.25, 2.0, 0.25, -0.25, 2.0, 0.25, -0.25, 1.5, 0.25], [-0.25, 2.0, -0.25, -0.25, 2.0, 0.25, 0.25, 2.0, 0.25, 0.25, 2.0, -0.25], [0.25, 1.5, -0.25, 0.25, 1.5, 0.25, -0.25, 1.5, 0.25, -0.25, 1.5, -0.25], [0.25, 1.5, -0.25, 0.25, 2.0, -0.25, 0.25, 2.0, 0.25, 0.25, 1.5, 0.25], [-0.25, 1.5, 0.25, -0.25, 2.0, 0.25, -0.25, 2.0, -0.25, -0.25, 1.5, -0.25], [-0.25, 1.5, -0.25, -0.25, 2.0, -0.25, 0.25, 2.0, -0.25, 0.25, 1.5, -0.25], [0.25, 1.5, 0.25, 0.25, 2.0, 0.25, -0.25, 2.0, 0.25, -0.25, 1.5, 0.25], [-0.25, 2.0, -0.25, -0.25, 2.0, 0.25, 0.25, 2.0, 0.25, 0.25, 2.0, -0.25], [0.25, 1.5, -0.25, 0.25, 1.5, 0.25, -0.25, 1.5, 0.25, -0.25, 1.5, -0.25], [0.25, 1.5, -0.25, 0.25, 2.0, -0.25, 0.25, 2.0, 0.25, 0.25, 1.5, 0.25], [-0.25, 1.5, 0.25, -0.25, 2.0, 0.25, -0.25, 2.0, -0.25, -0.25, 1.5, -0.25], [-0.375, 0.75, -0.0625, -0.375, 1.5, -0.0625, -0.25, 1.5, -0.0625, -0.25, 0.75, -0.0625], [-0.25, 0.75, 0.0625, -0.25, 1.5, 0.0625, -0.375, 1.5, 0.0625, -0.375, 0.75, 0.0625], [-0.375, 1.5, -0.0625, -0.375, 1.5, 0.0625, -0.25, 1.5, 0.0625, -0.25, 1.5, -0.0625], [-0.25, 0.75, -0.0625, -0.25, 0.75, 0.0625, -0.375, 0.75, 0.0625, -0.375, 0.75, -0.0625], [-0.25, 0.75, -0.0625, -0.25, 1.5, -0.0625, -0.25, 1.5, 0.0625, -0.25, 0.75, 0.0625], [-0.375, 0.75, 0.0625, -0.375, 1.5, 0.0625, -0.375, 1.5, -0.0625, -0.375, 0.75, -0.0625], [0.25, 0.75, -0.0625, 0.25, 1.5, -0.0625, 0.375, 1.5, -0.0625, 0.375, 0.75, -0.0625], [0.375, 0.75, 0.0625, 0.375, 1.5, 0.0625, 0.25, 1.5, 0.0625, 0.25, 0.75, 0.0625], [0.25, 1.5, -0.0625, 0.25, 1.5, 0.0625, 0.375, 1.5, 0.0625, 0.375, 1.5, -0.0625], [0.375, 0.75, -0.0625, 0.375, 0.75, 0.0625, 0.25, 0.75, 0.0625, 0.25, 0.75, -0.0625], [0.375, 0.75, -0.0625, 0.375, 1.5, -0.0625, 0.375, 1.5, 0.0625, 0.375, 0.75, 0.0625], [0.25, 0.75, 0.0625, 0.25, 1.5, 0.0625, 0.25, 1.5, -0.0625, 0.25, 0.75, -0.0625], [-0.1875, 0.0, -0.0625, -0.1875, 0.75, -0.0625, -0.0625, 0.75, -0.0625, -0.0625, 0.0, -0.0625], [-0.0625, 0.0, 0.0625, -0.0625, 0.75, 0.0625, -0.1875, 0.75, 0.0625, -0.1875, 0.0, 0.0625], [-0.1875, 0.75, -0.0625, -0.1875, 0.75, 0.0625, -0.0625, 0.75, 0.0625, -0.0625, 0.75, -0.0625], [-0.0625, 0.0, -0.0625, -0.0625, 0.0, 0.0625, -0.1875, 0.0, 0.0625, -0.1875, 0.0, -0.0625], [-0.0625, 0.0, -0.0625, -0.0625, 0.75, -0.0625, -0.0625, 0.75, 0.0625, -0.0625, 0.0, 0.0625], [-0.1875, 0.0, 0.0625, -0.1875, 0.75, 0.0625, -0.1875, 0.75, -0.0625, -0.1875, 0.0, -0.0625], [0.0625, 0.0, -0.0625, 0.0625, 0.75, -0.0625, 0.1875, 0.75, -0.0625, 0.1875, 0.0, -0.0625], [0.1875, 0.0, 0.0625, 0.1875, 0.75, 0.0625, 0.0625, 0.75, 0.0625, 0.0625, 0.0, 0.0625], [0.0625, 0.75, -0.0625, 0.0625, 0.75, 0.0625, 0.1875, 0.75, 0.0625, 0.1875, 0.75, -0.0625], [0.1875, 0.0, -0.0625, 0.1875, 0.0, 0.0625, 0.0625, 0.0, 0.0625, 0.0625, 0.0, -0.0625], [0.1875, 0.0, -0.0625, 0.1875, 0.75, -0.0625, 0.1875, 0.75, 0.0625, 0.1875, 0.0, 0.0625], [0.0625, 0.0, 0.0625, 0.0625, 0.75, 0.0625, 0.0625, 0.75, -0.0625, 0.0625, 0.0, -0.0625]] -tex_coords = [[0.03333333333333333, 0.0, 0, 0.03333333333333333, 0.75, 0, 0.1, 0.75, 0, 0.1, 0.0, 0], [0.13333333333333333, 0.0, 0, 0.13333333333333333, 0.75, 0, 0.2, 0.75, 0, 0.2, 0.0, 0], [0.03333333333333333, 0.75, 0, 0.03333333333333333, 1.0, 0, 0.1, 1.0, 0, 0.1, 0.75, 0], [0.1, 0.75, 0, 0.1, 1.0, 0, 0.16666666666666666, 1.0, 0, 0.16666666666666666, 0.75, 0], [0.1, 0.0, 0, 0.1, 0.75, 0, 0.13333333333333333, 0.75, 0, 0.13333333333333333, 0.0, 0], [0.0, 0.0, 0, 0.0, 0.75, 0, 0.03333333333333333, 0.75, 0, 0.03333333333333333, 0.0, 0], [0.26666666666666666, 0.0, 0, 0.26666666666666666, 0.5, 0, 0.3333333333333333, 0.5, 0, 0.3333333333333333, 0.0, 0], [0.4, 0.0, 0, 0.4, 0.5, 0, 0.4666666666666667, 0.5, 0, 0.4666666666666667, 0.0, 0], [0.26666666666666666, 0.5, 0, 0.26666666666666666, 1.0, 0, 0.3333333333333333, 1.0, 0, 0.3333333333333333, 0.5, 0], [0.3333333333333333, 0.5, 0, 0.3333333333333333, 1.0, 0, 0.4, 1.0, 0, 0.4, 0.5, 0], [0.3333333333333333, 0.0, 0, 0.3333333333333333, 0.5, 0, 0.4, 0.5, 0, 0.4, 0.0, 0], [0.2, 0.0, 0, 0.2, 0.5, 0, 0.26666666666666666, 0.5, 0, 0.26666666666666666, 0.0, 0], [0.5333333333333333, 0.0, 0, 0.5333333333333333, 0.5, 0, 0.6, 0.5, 0, 0.6, 0.0, 0], [0.6666666666666666, 0.0, 0, 0.6666666666666666, 0.5, 0, 0.7333333333333333, 0.5, 0, 0.7333333333333333, 0.0, 0], [0.5333333333333333, 0.5, 0, 0.5333333333333333, 1.0, 0, 0.6, 1.0, 0, 0.6, 0.5, 0], [0.6, 0.5, 0, 0.6, 1.0, 0, 0.6666666666666666, 1.0, 0, 0.6666666666666666, 0.5, 0], [0.6, 0.0, 0, 0.6, 0.5, 0, 0.6666666666666666, 0.5, 0, 0.6666666666666666, 0.0, 0], [0.4666666666666667, 0.0, 0, 0.4666666666666667, 0.5, 0, 0.5333333333333333, 0.5, 0, 0.5333333333333333, 0.0, 0], [0.75, 0.125, 0, 0.75, 0.875, 0, 0.7666666666666667, 0.875, 0, 0.7666666666666667, 0.125, 0], [0.7833333333333333, 0.125, 0, 0.7833333333333333, 0.875, 0, 0.8, 0.875, 0, 0.8, 0.125, 0], [0.75, 0.875, 0, 0.75, 1.0, 0, 0.7666666666666667, 1.0, 0, 0.7666666666666667, 0.875, 0], [0.7666666666666667, 0.875, 0, 0.7666666666666667, 1.0, 0, 0.7833333333333333, 1.0, 0, 0.7833333333333333, 0.875, 0], [0.7666666666666667, 0.125, 0, 0.7666666666666667, 0.875, 0, 0.7833333333333333, 0.875, 0, 0.7833333333333333, 0.125, 0], [0.7333333333333333, 0.125, 0, 0.7333333333333333, 0.875, 0, 0.75, 0.875, 0, 0.75, 0.125, 0], [0.8166666666666667, 0.125, 0, 0.8166666666666667, 0.875, 0, 0.8333333333333334, 0.875, 0, 0.8333333333333334, 0.125, 0], [0.85, 0.125, 0, 0.85, 0.875, 0, 0.8666666666666667, 0.875, 0, 0.8666666666666667, 0.125, 0], [0.8166666666666667, 0.875, 0, 0.8166666666666667, 1.0, 0, 0.8333333333333334, 1.0, 0, 0.8333333333333334, 0.875, 0], [0.8333333333333334, 0.875, 0, 0.8333333333333334, 1.0, 0, 0.85, 1.0, 0, 0.85, 0.875, 0], [0.8333333333333334, 0.125, 0, 0.8333333333333334, 0.875, 0, 0.85, 0.875, 0, 0.85, 0.125, 0], [0.8, 0.125, 0, 0.8, 0.875, 0, 0.8166666666666667, 0.875, 0, 0.8166666666666667, 0.125, 0], [0.8833333333333333, 0.125, 0, 0.8833333333333333, 0.875, 0, 0.9, 0.875, 0, 0.9, 0.125, 0], [0.9166666666666666, 0.125, 0, 0.9166666666666666, 0.875, 0, 0.9333333333333333, 0.875, 0, 0.9333333333333333, 0.125, 0], [0.8833333333333333, 0.875, 0, 0.8833333333333333, 1.0, 0, 0.9, 1.0, 0, 0.9, 0.875, 0], [0.9, 0.875, 0, 0.9, 1.0, 0, 0.9166666666666666, 1.0, 0, 0.9166666666666666, 0.875, 0], [0.9, 0.125, 0, 0.9, 0.875, 0, 0.9166666666666666, 0.875, 0, 0.9166666666666666, 0.125, 0], [0.8666666666666667, 0.125, 0, 0.8666666666666667, 0.875, 0, 0.8833333333333333, 0.875, 0, 0.8833333333333333, 0.125, 0], [0.95, 0.125, 0, 0.95, 0.875, 0, 0.9666666666666667, 0.875, 0, 0.9666666666666667, 0.125, 0], [0.9833333333333333, 0.125, 0, 0.9833333333333333, 0.875, 0, 1.0, 0.875, 0, 1.0, 0.125, 0], [0.95, 0.875, 0, 0.95, 1.0, 0, 0.9666666666666667, 1.0, 0, 0.9666666666666667, 0.875, 0], [0.9666666666666667, 0.875, 0, 0.9666666666666667, 1.0, 0, 0.9833333333333333, 1.0, 0, 0.9833333333333333, 0.875, 0], [0.9666666666666667, 0.125, 0, 0.9666666666666667, 0.875, 0, 0.9833333333333333, 0.875, 0, 0.9833333333333333, 0.125, 0], [0.9333333333333333, 0.125, 0, 0.9333333333333333, 0.875, 0, 0.95, 0.875, 0, 0.95, 0.125, 0]] -shading_values = [[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]] +bones = [{'name':'body','pivot':[0.0, 1.5, 0.0],'vertices':[[-0.25, 0.75, -0.125, -0.25, 1.5, -0.125, 0.25, 1.5, -0.125, 0.25, 0.75, -0.125], [0.25, 0.75, 0.125, 0.25, 1.5, 0.125, -0.25, 1.5, 0.125, -0.25, 0.75, 0.125], [-0.25, 1.5, -0.125, -0.25, 1.5, 0.125, 0.25, 1.5, 0.125, 0.25, 1.5, -0.125], [0.25, 0.75, -0.125, 0.25, 0.75, 0.125, -0.25, 0.75, 0.125, -0.25, 0.75, -0.125], [0.25, 0.75, -0.125, 0.25, 1.5, -0.125, 0.25, 1.5, 0.125, 0.25, 0.75, 0.125], [-0.25, 0.75, 0.125, -0.25, 1.5, 0.125, -0.25, 1.5, -0.125, -0.25, 0.75, -0.125]],'tex_coords':[[0.03333333333333333, 0.0, 0.03333333333333333, 0.75, 0.1, 0.75, 0.1, 0.0], [0.13333333333333333, 0.0, 0.13333333333333333, 0.75, 0.2, 0.75, 0.2, 0.0], [0.03333333333333333, 0.75, 0.03333333333333333, 1.0, 0.1, 1.0, 0.1, 0.75], [0.1, 0.75, 0.1, 1.0, 0.16666666666666666, 1.0, 0.16666666666666666, 0.75], [0.1, 0.0, 0.1, 0.75, 0.13333333333333333, 0.75, 0.13333333333333333, 0.0], [0.0, 0.0, 0.0, 0.75, 0.03333333333333333, 0.75, 0.03333333333333333, 0.0]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'head','pivot':[0.0, 1.5, 0.0],'vertices':[[-0.25, 1.5, -0.25, -0.25, 2.0, -0.25, 0.25, 2.0, -0.25, 0.25, 1.5, -0.25], [0.25, 1.5, 0.25, 0.25, 2.0, 0.25, -0.25, 2.0, 0.25, -0.25, 1.5, 0.25], [-0.25, 2.0, -0.25, -0.25, 2.0, 0.25, 0.25, 2.0, 0.25, 0.25, 2.0, -0.25], [0.25, 1.5, -0.25, 0.25, 1.5, 0.25, -0.25, 1.5, 0.25, -0.25, 1.5, -0.25], [0.25, 1.5, -0.25, 0.25, 2.0, -0.25, 0.25, 2.0, 0.25, 0.25, 1.5, 0.25], [-0.25, 1.5, 0.25, -0.25, 2.0, 0.25, -0.25, 2.0, -0.25, -0.25, 1.5, -0.25]],'tex_coords':[[0.26666666666666666, 0.0, 0.26666666666666666, 0.5, 0.3333333333333333, 0.5, 0.3333333333333333, 0.0], [0.4, 0.0, 0.4, 0.5, 0.4666666666666667, 0.5, 0.4666666666666667, 0.0], [0.26666666666666666, 0.5, 0.26666666666666666, 1.0, 0.3333333333333333, 1.0, 0.3333333333333333, 0.5], [0.3333333333333333, 0.5, 0.3333333333333333, 1.0, 0.4, 1.0, 0.4, 0.5], [0.3333333333333333, 0.0, 0.3333333333333333, 0.5, 0.4, 0.5, 0.4, 0.0], [0.2, 0.0, 0.2, 0.5, 0.26666666666666666, 0.5, 0.26666666666666666, 0.0]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'hat','pivot':[0.0, 1.5, 0.0],'vertices':[[-0.25, 1.5, -0.25, -0.25, 2.0, -0.25, 0.25, 2.0, -0.25, 0.25, 1.5, -0.25], [0.25, 1.5, 0.25, 0.25, 2.0, 0.25, -0.25, 2.0, 0.25, -0.25, 1.5, 0.25], [-0.25, 2.0, -0.25, -0.25, 2.0, 0.25, 0.25, 2.0, 0.25, 0.25, 2.0, -0.25], [0.25, 1.5, -0.25, 0.25, 1.5, 0.25, -0.25, 1.5, 0.25, -0.25, 1.5, -0.25], [0.25, 1.5, -0.25, 0.25, 2.0, -0.25, 0.25, 2.0, 0.25, 0.25, 1.5, 0.25], [-0.25, 1.5, 0.25, -0.25, 2.0, 0.25, -0.25, 2.0, -0.25, -0.25, 1.5, -0.25]],'tex_coords':[[0.5333333333333333, 0.0, 0.5333333333333333, 0.5, 0.6, 0.5, 0.6, 0.0], [0.6666666666666666, 0.0, 0.6666666666666666, 0.5, 0.7333333333333333, 0.5, 0.7333333333333333, 0.0], [0.5333333333333333, 0.5, 0.5333333333333333, 1.0, 0.6, 1.0, 0.6, 0.5], [0.6, 0.5, 0.6, 1.0, 0.6666666666666666, 1.0, 0.6666666666666666, 0.5], [0.6, 0.0, 0.6, 0.5, 0.6666666666666666, 0.5, 0.6666666666666666, 0.0], [0.4666666666666667, 0.0, 0.4666666666666667, 0.5, 0.5333333333333333, 0.5, 0.5333333333333333, 0.0]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'rightArm','pivot':[-0.3125, 1.375, 0.0],'vertices':[[-0.375, 0.75, -0.0625, -0.375, 1.5, -0.0625, -0.25, 1.5, -0.0625, -0.25, 0.75, -0.0625], [-0.25, 0.75, 0.0625, -0.25, 1.5, 0.0625, -0.375, 1.5, 0.0625, -0.375, 0.75, 0.0625], [-0.375, 1.5, -0.0625, -0.375, 1.5, 0.0625, -0.25, 1.5, 0.0625, -0.25, 1.5, -0.0625], [-0.25, 0.75, -0.0625, -0.25, 0.75, 0.0625, -0.375, 0.75, 0.0625, -0.375, 0.75, -0.0625], [-0.25, 0.75, -0.0625, -0.25, 1.5, -0.0625, -0.25, 1.5, 0.0625, -0.25, 0.75, 0.0625], [-0.375, 0.75, 0.0625, -0.375, 1.5, 0.0625, -0.375, 1.5, -0.0625, -0.375, 0.75, -0.0625]],'tex_coords':[[0.75, 0.125, 0.75, 0.875, 0.7666666666666667, 0.875, 0.7666666666666667, 0.125], [0.7833333333333333, 0.125, 0.7833333333333333, 0.875, 0.8, 0.875, 0.8, 0.125], [0.75, 0.875, 0.75, 1.0, 0.7666666666666667, 1.0, 0.7666666666666667, 0.875], [0.7666666666666667, 0.875, 0.7666666666666667, 1.0, 0.7833333333333333, 1.0, 0.7833333333333333, 0.875], [0.7666666666666667, 0.125, 0.7666666666666667, 0.875, 0.7833333333333333, 0.875, 0.7833333333333333, 0.125], [0.7333333333333333, 0.125, 0.7333333333333333, 0.875, 0.75, 0.875, 0.75, 0.125]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'leftArm','pivot':[0.3125, 1.375, 0.0],'vertices':[[0.25, 0.75, -0.0625, 0.25, 1.5, -0.0625, 0.375, 1.5, -0.0625, 0.375, 0.75, -0.0625], [0.375, 0.75, 0.0625, 0.375, 1.5, 0.0625, 0.25, 1.5, 0.0625, 0.25, 0.75, 0.0625], [0.25, 1.5, -0.0625, 0.25, 1.5, 0.0625, 0.375, 1.5, 0.0625, 0.375, 1.5, -0.0625], [0.375, 0.75, -0.0625, 0.375, 0.75, 0.0625, 0.25, 0.75, 0.0625, 0.25, 0.75, -0.0625], [0.375, 0.75, -0.0625, 0.375, 1.5, -0.0625, 0.375, 1.5, 0.0625, 0.375, 0.75, 0.0625], [0.25, 0.75, 0.0625, 0.25, 1.5, 0.0625, 0.25, 1.5, -0.0625, 0.25, 0.75, -0.0625]],'tex_coords':[[0.8166666666666667, 0.125, 0.8166666666666667, 0.875, 0.8333333333333334, 0.875, 0.8333333333333334, 0.125], [0.85, 0.125, 0.85, 0.875, 0.8666666666666667, 0.875, 0.8666666666666667, 0.125], [0.8166666666666667, 0.875, 0.8166666666666667, 1.0, 0.8333333333333334, 1.0, 0.8333333333333334, 0.875], [0.8333333333333334, 0.875, 0.8333333333333334, 1.0, 0.85, 1.0, 0.85, 0.875], [0.8333333333333334, 0.125, 0.8333333333333334, 0.875, 0.85, 0.875, 0.85, 0.125], [0.8, 0.125, 0.8, 0.875, 0.8166666666666667, 0.875, 0.8166666666666667, 0.125]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'rightLeg','pivot':[-0.125, 0.75, 0.0],'vertices':[[-0.1875, 0.0, -0.0625, -0.1875, 0.75, -0.0625, -0.0625, 0.75, -0.0625, -0.0625, 0.0, -0.0625], [-0.0625, 0.0, 0.0625, -0.0625, 0.75, 0.0625, -0.1875, 0.75, 0.0625, -0.1875, 0.0, 0.0625], [-0.1875, 0.75, -0.0625, -0.1875, 0.75, 0.0625, -0.0625, 0.75, 0.0625, -0.0625, 0.75, -0.0625], [-0.0625, 0.0, -0.0625, -0.0625, 0.0, 0.0625, -0.1875, 0.0, 0.0625, -0.1875, 0.0, -0.0625], [-0.0625, 0.0, -0.0625, -0.0625, 0.75, -0.0625, -0.0625, 0.75, 0.0625, -0.0625, 0.0, 0.0625], [-0.1875, 0.0, 0.0625, -0.1875, 0.75, 0.0625, -0.1875, 0.75, -0.0625, -0.1875, 0.0, -0.0625]],'tex_coords':[[0.8833333333333333, 0.125, 0.8833333333333333, 0.875, 0.9, 0.875, 0.9, 0.125], [0.9166666666666666, 0.125, 0.9166666666666666, 0.875, 0.9333333333333333, 0.875, 0.9333333333333333, 0.125], [0.8833333333333333, 0.875, 0.8833333333333333, 1.0, 0.9, 1.0, 0.9, 0.875], [0.9, 0.875, 0.9, 1.0, 0.9166666666666666, 1.0, 0.9166666666666666, 0.875], [0.9, 0.125, 0.9, 0.875, 0.9166666666666666, 0.875, 0.9166666666666666, 0.125], [0.8666666666666667, 0.125, 0.8666666666666667, 0.875, 0.8833333333333333, 0.875, 0.8833333333333333, 0.125]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'leftLeg','pivot':[0.125, 0.75, 0.0],'vertices':[[0.0625, 0.0, -0.0625, 0.0625, 0.75, -0.0625, 0.1875, 0.75, -0.0625, 0.1875, 0.0, -0.0625], [0.1875, 0.0, 0.0625, 0.1875, 0.75, 0.0625, 0.0625, 0.75, 0.0625, 0.0625, 0.0, 0.0625], [0.0625, 0.75, -0.0625, 0.0625, 0.75, 0.0625, 0.1875, 0.75, 0.0625, 0.1875, 0.75, -0.0625], [0.1875, 0.0, -0.0625, 0.1875, 0.0, 0.0625, 0.0625, 0.0, 0.0625, 0.0625, 0.0, -0.0625], [0.1875, 0.0, -0.0625, 0.1875, 0.75, -0.0625, 0.1875, 0.75, 0.0625, 0.1875, 0.0, 0.0625], [0.0625, 0.0, 0.0625, 0.0625, 0.75, 0.0625, 0.0625, 0.75, -0.0625, 0.0625, 0.0, -0.0625]],'tex_coords':[[0.95, 0.125, 0.95, 0.875, 0.9666666666666667, 0.875, 0.9666666666666667, 0.125], [0.9833333333333333, 0.125, 0.9833333333333333, 0.875, 1.0, 0.875, 1.0, 0.125], [0.95, 0.875, 0.95, 1.0, 0.9666666666666667, 1.0, 0.9666666666666667, 0.875], [0.9666666666666667, 0.875, 0.9666666666666667, 1.0, 0.9833333333333333, 1.0, 0.9833333333333333, 0.875], [0.9666666666666667, 0.125, 0.9666666666666667, 0.875, 0.9833333333333333, 0.875, 0.9833333333333333, 0.125], [0.9333333333333333, 0.125, 0.9333333333333333, 0.875, 0.95, 0.875, 0.95, 0.125]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}] diff --git a/community/models/zombie.py b/community/models/zombie.py index 3bdc469d..d1650af9 100644 --- a/community/models/zombie.py +++ b/community/models/zombie.py @@ -5,6 +5,4 @@ colliders = [] -vertex_positions = [[-0.25, 0.75, -0.125, -0.25, 1.5, -0.125, 0.25, 1.5, -0.125, 0.25, 0.75, -0.125], [0.25, 0.75, 0.125, 0.25, 1.5, 0.125, -0.25, 1.5, 0.125, -0.25, 0.75, 0.125], [-0.25, 1.5, -0.125, -0.25, 1.5, 0.125, 0.25, 1.5, 0.125, 0.25, 1.5, -0.125], [0.25, 0.75, -0.125, 0.25, 0.75, 0.125, -0.25, 0.75, 0.125, -0.25, 0.75, -0.125], [0.25, 0.75, -0.125, 0.25, 1.5, -0.125, 0.25, 1.5, 0.125, 0.25, 0.75, 0.125], [-0.25, 0.75, 0.125, -0.25, 1.5, 0.125, -0.25, 1.5, -0.125, -0.25, 0.75, -0.125], [-0.25, 1.5, -0.25, -0.25, 2.0, -0.25, 0.25, 2.0, -0.25, 0.25, 1.5, -0.25], [0.25, 1.5, 0.25, 0.25, 2.0, 0.25, -0.25, 2.0, 0.25, -0.25, 1.5, 0.25], [-0.25, 2.0, -0.25, -0.25, 2.0, 0.25, 0.25, 2.0, 0.25, 0.25, 2.0, -0.25], [0.25, 1.5, -0.25, 0.25, 1.5, 0.25, -0.25, 1.5, 0.25, -0.25, 1.5, -0.25], [0.25, 1.5, -0.25, 0.25, 2.0, -0.25, 0.25, 2.0, 0.25, 0.25, 1.5, 0.25], [-0.25, 1.5, 0.25, -0.25, 2.0, 0.25, -0.25, 2.0, -0.25, -0.25, 1.5, -0.25], [-0.25, 1.5, -0.25, -0.25, 2.0, -0.25, 0.25, 2.0, -0.25, 0.25, 1.5, -0.25], [0.25, 1.5, 0.25, 0.25, 2.0, 0.25, -0.25, 2.0, 0.25, -0.25, 1.5, 0.25], [-0.25, 2.0, -0.25, -0.25, 2.0, 0.25, 0.25, 2.0, 0.25, 0.25, 2.0, -0.25], [0.25, 1.5, -0.25, 0.25, 1.5, 0.25, -0.25, 1.5, 0.25, -0.25, 1.5, -0.25], [0.25, 1.5, -0.25, 0.25, 2.0, -0.25, 0.25, 2.0, 0.25, 0.25, 1.5, 0.25], [-0.25, 1.5, 0.25, -0.25, 2.0, 0.25, -0.25, 2.0, -0.25, -0.25, 1.5, -0.25], [-0.5, 0.75, -0.125, -0.5, 1.5, -0.125, -0.25, 1.5, -0.125, -0.25, 0.75, -0.125], [-0.25, 0.75, 0.125, -0.25, 1.5, 0.125, -0.5, 1.5, 0.125, -0.5, 0.75, 0.125], [-0.5, 1.5, -0.125, -0.5, 1.5, 0.125, -0.25, 1.5, 0.125, -0.25, 1.5, -0.125], [-0.25, 0.75, -0.125, -0.25, 0.75, 0.125, -0.5, 0.75, 0.125, -0.5, 0.75, -0.125], [-0.25, 0.75, -0.125, -0.25, 1.5, -0.125, -0.25, 1.5, 0.125, -0.25, 0.75, 0.125], [-0.5, 0.75, 0.125, -0.5, 1.5, 0.125, -0.5, 1.5, -0.125, -0.5, 0.75, -0.125], [0.25, 0.75, -0.125, 0.25, 1.5, -0.125, 0.5, 1.5, -0.125, 0.5, 0.75, -0.125], [0.5, 0.75, 0.125, 0.5, 1.5, 0.125, 0.25, 1.5, 0.125, 0.25, 0.75, 0.125], [0.25, 1.5, -0.125, 0.25, 1.5, 0.125, 0.5, 1.5, 0.125, 0.5, 1.5, -0.125], [0.5, 0.75, -0.125, 0.5, 0.75, 0.125, 0.25, 0.75, 0.125, 0.25, 0.75, -0.125], [0.5, 0.75, -0.125, 0.5, 1.5, -0.125, 0.5, 1.5, 0.125, 0.5, 0.75, 0.125], [0.25, 0.75, 0.125, 0.25, 1.5, 0.125, 0.25, 1.5, -0.125, 0.25, 0.75, -0.125], [-0.24375000596046448, 0.0, -0.125, -0.24375000596046448, 0.75, -0.125, 0.0062500000931322575, 0.75, -0.125, 0.0062500000931322575, 0.0, -0.125], [0.0062500000931322575, 0.0, 0.125, 0.0062500000931322575, 0.75, 0.125, -0.24375000596046448, 0.75, 0.125, -0.24375000596046448, 0.0, 0.125], [-0.24375000596046448, 0.75, -0.125, -0.24375000596046448, 0.75, 0.125, 0.0062500000931322575, 0.75, 0.125, 0.0062500000931322575, 0.75, -0.125], [0.0062500000931322575, 0.0, -0.125, 0.0062500000931322575, 0.0, 0.125, -0.24375000596046448, 0.0, 0.125, -0.24375000596046448, 0.0, -0.125], [0.0062500000931322575, 0.0, -0.125, 0.0062500000931322575, 0.75, -0.125, 0.0062500000931322575, 0.75, 0.125, 0.0062500000931322575, 0.0, 0.125], [-0.24375000596046448, 0.0, 0.125, -0.24375000596046448, 0.75, 0.125, -0.24375000596046448, 0.75, -0.125, -0.24375000596046448, 0.0, -0.125], [-0.0062500000931322575, 0.0, -0.125, -0.0062500000931322575, 0.75, -0.125, 0.24375000596046448, 0.75, -0.125, 0.24375000596046448, 0.0, -0.125], [0.24375000596046448, 0.0, 0.125, 0.24375000596046448, 0.75, 0.125, -0.0062500000931322575, 0.75, 0.125, -0.0062500000931322575, 0.0, 0.125], [-0.0062500000931322575, 0.75, -0.125, -0.0062500000931322575, 0.75, 0.125, 0.24375000596046448, 0.75, 0.125, 0.24375000596046448, 0.75, -0.125], [0.24375000596046448, 0.0, -0.125, 0.24375000596046448, 0.0, 0.125, -0.0062500000931322575, 0.0, 0.125, -0.0062500000931322575, 0.0, -0.125], [0.24375000596046448, 0.0, -0.125, 0.24375000596046448, 0.75, -0.125, 0.24375000596046448, 0.75, 0.125, 0.24375000596046448, 0.0, 0.125], [-0.0062500000931322575, 0.0, 0.125, -0.0062500000931322575, 0.75, 0.125, -0.0062500000931322575, 0.75, -0.125, -0.0062500000931322575, 0.0, -0.125]] -tex_coords = [[0.02631578947368421, 0.0, 0, 0.02631578947368421, 0.75, 0, 0.07894736842105263, 0.75, 0, 0.07894736842105263, 0.0, 0], [0.10526315789473684, 0.0, 0, 0.10526315789473684, 0.75, 0, 0.15789473684210525, 0.75, 0, 0.15789473684210525, 0.0, 0], [0.02631578947368421, 0.75, 0, 0.02631578947368421, 1.0, 0, 0.07894736842105263, 1.0, 0, 0.07894736842105263, 0.75, 0], [0.07894736842105263, 0.75, 0, 0.07894736842105263, 1.0, 0, 0.13157894736842105, 1.0, 0, 0.13157894736842105, 0.75, 0], [0.07894736842105263, 0.0, 0, 0.07894736842105263, 0.75, 0, 0.10526315789473684, 0.75, 0, 0.10526315789473684, 0.0, 0], [0.0, 0.0, 0, 0.0, 0.75, 0, 0.02631578947368421, 0.75, 0, 0.02631578947368421, 0.0, 0], [0.21052631578947367, 0.0, 0, 0.21052631578947367, 0.5, 0, 0.2631578947368421, 0.5, 0, 0.2631578947368421, 0.0, 0], [0.3157894736842105, 0.0, 0, 0.3157894736842105, 0.5, 0, 0.3684210526315789, 0.5, 0, 0.3684210526315789, 0.0, 0], [0.21052631578947367, 0.5, 0, 0.21052631578947367, 1.0, 0, 0.2631578947368421, 1.0, 0, 0.2631578947368421, 0.5, 0], [0.2631578947368421, 0.5, 0, 0.2631578947368421, 1.0, 0, 0.3157894736842105, 1.0, 0, 0.3157894736842105, 0.5, 0], [0.2631578947368421, 0.0, 0, 0.2631578947368421, 0.5, 0, 0.3157894736842105, 0.5, 0, 0.3157894736842105, 0.0, 0], [0.15789473684210525, 0.0, 0, 0.15789473684210525, 0.5, 0, 0.21052631578947367, 0.5, 0, 0.21052631578947367, 0.0, 0], [0.42105263157894735, 0.0, 0, 0.42105263157894735, 0.5, 0, 0.47368421052631576, 0.5, 0, 0.47368421052631576, 0.0, 0], [0.5263157894736842, 0.0, 0, 0.5263157894736842, 0.5, 0, 0.5789473684210527, 0.5, 0, 0.5789473684210527, 0.0, 0], [0.42105263157894735, 0.5, 0, 0.42105263157894735, 1.0, 0, 0.47368421052631576, 1.0, 0, 0.47368421052631576, 0.5, 0], [0.47368421052631576, 0.5, 0, 0.47368421052631576, 1.0, 0, 0.5263157894736842, 1.0, 0, 0.5263157894736842, 0.5, 0], [0.47368421052631576, 0.0, 0, 0.47368421052631576, 0.5, 0, 0.5263157894736842, 0.5, 0, 0.5263157894736842, 0.0, 0], [0.3684210526315789, 0.0, 0, 0.3684210526315789, 0.5, 0, 0.42105263157894735, 0.5, 0, 0.42105263157894735, 0.0, 0], [0.6052631578947368, 0.0, 0, 0.6052631578947368, 0.75, 0, 0.631578947368421, 0.75, 0, 0.631578947368421, 0.0, 0], [0.6578947368421053, 0.0, 0, 0.6578947368421053, 0.75, 0, 0.6842105263157895, 0.75, 0, 0.6842105263157895, 0.0, 0], [0.6052631578947368, 0.75, 0, 0.6052631578947368, 1.0, 0, 0.631578947368421, 1.0, 0, 0.631578947368421, 0.75, 0], [0.631578947368421, 0.75, 0, 0.631578947368421, 1.0, 0, 0.6578947368421053, 1.0, 0, 0.6578947368421053, 0.75, 0], [0.631578947368421, 0.0, 0, 0.631578947368421, 0.75, 0, 0.6578947368421053, 0.75, 0, 0.6578947368421053, 0.0, 0], [0.5789473684210527, 0.0, 0, 0.5789473684210527, 0.75, 0, 0.6052631578947368, 0.75, 0, 0.6052631578947368, 0.0, 0], [0.7105263157894737, 0.0, 0, 0.7105263157894737, 0.75, 0, 0.7368421052631579, 0.75, 0, 0.7368421052631579, 0.0, 0], [0.7631578947368421, 0.0, 0, 0.7631578947368421, 0.75, 0, 0.7894736842105263, 0.75, 0, 0.7894736842105263, 0.0, 0], [0.7105263157894737, 0.75, 0, 0.7105263157894737, 1.0, 0, 0.7368421052631579, 1.0, 0, 0.7368421052631579, 0.75, 0], [0.7368421052631579, 0.75, 0, 0.7368421052631579, 1.0, 0, 0.7631578947368421, 1.0, 0, 0.7631578947368421, 0.75, 0], [0.7368421052631579, 0.0, 0, 0.7368421052631579, 0.75, 0, 0.7631578947368421, 0.75, 0, 0.7631578947368421, 0.0, 0], [0.6842105263157895, 0.0, 0, 0.6842105263157895, 0.75, 0, 0.7105263157894737, 0.75, 0, 0.7105263157894737, 0.0, 0], [0.8157894736842105, 0.0, 0, 0.8157894736842105, 0.75, 0, 0.8421052631578947, 0.75, 0, 0.8421052631578947, 0.0, 0], [0.868421052631579, 0.0, 0, 0.868421052631579, 0.75, 0, 0.8947368421052632, 0.75, 0, 0.8947368421052632, 0.0, 0], [0.8157894736842105, 0.75, 0, 0.8157894736842105, 1.0, 0, 0.8421052631578947, 1.0, 0, 0.8421052631578947, 0.75, 0], [0.8421052631578947, 0.75, 0, 0.8421052631578947, 1.0, 0, 0.868421052631579, 1.0, 0, 0.868421052631579, 0.75, 0], [0.8421052631578947, 0.0, 0, 0.8421052631578947, 0.75, 0, 0.868421052631579, 0.75, 0, 0.868421052631579, 0.0, 0], [0.7894736842105263, 0.0, 0, 0.7894736842105263, 0.75, 0, 0.8157894736842105, 0.75, 0, 0.8157894736842105, 0.0, 0], [0.9210526315789473, 0.0, 0, 0.9210526315789473, 0.75, 0, 0.9473684210526315, 0.75, 0, 0.9473684210526315, 0.0, 0], [0.9736842105263158, 0.0, 0, 0.9736842105263158, 0.75, 0, 1.0, 0.75, 0, 1.0, 0.0, 0], [0.9210526315789473, 0.75, 0, 0.9210526315789473, 1.0, 0, 0.9473684210526315, 1.0, 0, 0.9473684210526315, 0.75, 0], [0.9473684210526315, 0.75, 0, 0.9473684210526315, 1.0, 0, 0.9736842105263158, 1.0, 0, 0.9736842105263158, 0.75, 0], [0.9473684210526315, 0.0, 0, 0.9473684210526315, 0.75, 0, 0.9736842105263158, 0.75, 0, 0.9736842105263158, 0.0, 0], [0.8947368421052632, 0.0, 0, 0.8947368421052632, 0.75, 0, 0.9210526315789473, 0.75, 0, 0.9210526315789473, 0.0, 0]] -shading_values = [[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]] +bones = [{'name':'body','pivot':[0.0, 1.5, 0.0],'vertices':[[-0.25, 0.75, -0.125, -0.25, 1.5, -0.125, 0.25, 1.5, -0.125, 0.25, 0.75, -0.125], [0.25, 0.75, 0.125, 0.25, 1.5, 0.125, -0.25, 1.5, 0.125, -0.25, 0.75, 0.125], [-0.25, 1.5, -0.125, -0.25, 1.5, 0.125, 0.25, 1.5, 0.125, 0.25, 1.5, -0.125], [0.25, 0.75, -0.125, 0.25, 0.75, 0.125, -0.25, 0.75, 0.125, -0.25, 0.75, -0.125], [0.25, 0.75, -0.125, 0.25, 1.5, -0.125, 0.25, 1.5, 0.125, 0.25, 0.75, 0.125], [-0.25, 0.75, 0.125, -0.25, 1.5, 0.125, -0.25, 1.5, -0.125, -0.25, 0.75, -0.125]],'tex_coords':[[0.02631578947368421, 0.0, 0.02631578947368421, 0.75, 0.07894736842105263, 0.75, 0.07894736842105263, 0.0], [0.10526315789473684, 0.0, 0.10526315789473684, 0.75, 0.15789473684210525, 0.75, 0.15789473684210525, 0.0], [0.02631578947368421, 0.75, 0.02631578947368421, 1.0, 0.07894736842105263, 1.0, 0.07894736842105263, 0.75], [0.07894736842105263, 0.75, 0.07894736842105263, 1.0, 0.13157894736842105, 1.0, 0.13157894736842105, 0.75], [0.07894736842105263, 0.0, 0.07894736842105263, 0.75, 0.10526315789473684, 0.75, 0.10526315789473684, 0.0], [0.0, 0.0, 0.0, 0.75, 0.02631578947368421, 0.75, 0.02631578947368421, 0.0]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'head','pivot':[0.0, 1.5, 0.0],'vertices':[[-0.25, 1.5, -0.25, -0.25, 2.0, -0.25, 0.25, 2.0, -0.25, 0.25, 1.5, -0.25], [0.25, 1.5, 0.25, 0.25, 2.0, 0.25, -0.25, 2.0, 0.25, -0.25, 1.5, 0.25], [-0.25, 2.0, -0.25, -0.25, 2.0, 0.25, 0.25, 2.0, 0.25, 0.25, 2.0, -0.25], [0.25, 1.5, -0.25, 0.25, 1.5, 0.25, -0.25, 1.5, 0.25, -0.25, 1.5, -0.25], [0.25, 1.5, -0.25, 0.25, 2.0, -0.25, 0.25, 2.0, 0.25, 0.25, 1.5, 0.25], [-0.25, 1.5, 0.25, -0.25, 2.0, 0.25, -0.25, 2.0, -0.25, -0.25, 1.5, -0.25]],'tex_coords':[[0.21052631578947367, 0.0, 0.21052631578947367, 0.5, 0.2631578947368421, 0.5, 0.2631578947368421, 0.0], [0.3157894736842105, 0.0, 0.3157894736842105, 0.5, 0.3684210526315789, 0.5, 0.3684210526315789, 0.0], [0.21052631578947367, 0.5, 0.21052631578947367, 1.0, 0.2631578947368421, 1.0, 0.2631578947368421, 0.5], [0.2631578947368421, 0.5, 0.2631578947368421, 1.0, 0.3157894736842105, 1.0, 0.3157894736842105, 0.5], [0.2631578947368421, 0.0, 0.2631578947368421, 0.5, 0.3157894736842105, 0.5, 0.3157894736842105, 0.0], [0.15789473684210525, 0.0, 0.15789473684210525, 0.5, 0.21052631578947367, 0.5, 0.21052631578947367, 0.0]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'hat','pivot':[0.0, 1.5, 0.0],'vertices':[[-0.25, 1.5, -0.25, -0.25, 2.0, -0.25, 0.25, 2.0, -0.25, 0.25, 1.5, -0.25], [0.25, 1.5, 0.25, 0.25, 2.0, 0.25, -0.25, 2.0, 0.25, -0.25, 1.5, 0.25], [-0.25, 2.0, -0.25, -0.25, 2.0, 0.25, 0.25, 2.0, 0.25, 0.25, 2.0, -0.25], [0.25, 1.5, -0.25, 0.25, 1.5, 0.25, -0.25, 1.5, 0.25, -0.25, 1.5, -0.25], [0.25, 1.5, -0.25, 0.25, 2.0, -0.25, 0.25, 2.0, 0.25, 0.25, 1.5, 0.25], [-0.25, 1.5, 0.25, -0.25, 2.0, 0.25, -0.25, 2.0, -0.25, -0.25, 1.5, -0.25]],'tex_coords':[[0.42105263157894735, 0.0, 0.42105263157894735, 0.5, 0.47368421052631576, 0.5, 0.47368421052631576, 0.0], [0.5263157894736842, 0.0, 0.5263157894736842, 0.5, 0.5789473684210527, 0.5, 0.5789473684210527, 0.0], [0.42105263157894735, 0.5, 0.42105263157894735, 1.0, 0.47368421052631576, 1.0, 0.47368421052631576, 0.5], [0.47368421052631576, 0.5, 0.47368421052631576, 1.0, 0.5263157894736842, 1.0, 0.5263157894736842, 0.5], [0.47368421052631576, 0.0, 0.47368421052631576, 0.5, 0.5263157894736842, 0.5, 0.5263157894736842, 0.0], [0.3684210526315789, 0.0, 0.3684210526315789, 0.5, 0.42105263157894735, 0.5, 0.42105263157894735, 0.0]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'rightArm','pivot':[-0.3125, 1.375, 0.0],'vertices':[[-0.5, 0.75, -0.125, -0.5, 1.5, -0.125, -0.25, 1.5, -0.125, -0.25, 0.75, -0.125], [-0.25, 0.75, 0.125, -0.25, 1.5, 0.125, -0.5, 1.5, 0.125, -0.5, 0.75, 0.125], [-0.5, 1.5, -0.125, -0.5, 1.5, 0.125, -0.25, 1.5, 0.125, -0.25, 1.5, -0.125], [-0.25, 0.75, -0.125, -0.25, 0.75, 0.125, -0.5, 0.75, 0.125, -0.5, 0.75, -0.125], [-0.25, 0.75, -0.125, -0.25, 1.5, -0.125, -0.25, 1.5, 0.125, -0.25, 0.75, 0.125], [-0.5, 0.75, 0.125, -0.5, 1.5, 0.125, -0.5, 1.5, -0.125, -0.5, 0.75, -0.125]],'tex_coords':[[0.6052631578947368, 0.0, 0.6052631578947368, 0.75, 0.631578947368421, 0.75, 0.631578947368421, 0.0], [0.6578947368421053, 0.0, 0.6578947368421053, 0.75, 0.6842105263157895, 0.75, 0.6842105263157895, 0.0], [0.6052631578947368, 0.75, 0.6052631578947368, 1.0, 0.631578947368421, 1.0, 0.631578947368421, 0.75], [0.631578947368421, 0.75, 0.631578947368421, 1.0, 0.6578947368421053, 1.0, 0.6578947368421053, 0.75], [0.631578947368421, 0.0, 0.631578947368421, 0.75, 0.6578947368421053, 0.75, 0.6578947368421053, 0.0], [0.5789473684210527, 0.0, 0.5789473684210527, 0.75, 0.6052631578947368, 0.75, 0.6052631578947368, 0.0]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'leftArm','pivot':[0.3125, 1.375, 0.0],'vertices':[[0.25, 0.75, -0.125, 0.25, 1.5, -0.125, 0.5, 1.5, -0.125, 0.5, 0.75, -0.125], [0.5, 0.75, 0.125, 0.5, 1.5, 0.125, 0.25, 1.5, 0.125, 0.25, 0.75, 0.125], [0.25, 1.5, -0.125, 0.25, 1.5, 0.125, 0.5, 1.5, 0.125, 0.5, 1.5, -0.125], [0.5, 0.75, -0.125, 0.5, 0.75, 0.125, 0.25, 0.75, 0.125, 0.25, 0.75, -0.125], [0.5, 0.75, -0.125, 0.5, 1.5, -0.125, 0.5, 1.5, 0.125, 0.5, 0.75, 0.125], [0.25, 0.75, 0.125, 0.25, 1.5, 0.125, 0.25, 1.5, -0.125, 0.25, 0.75, -0.125]],'tex_coords':[[0.7105263157894737, 0.0, 0.7105263157894737, 0.75, 0.7368421052631579, 0.75, 0.7368421052631579, 0.0], [0.7631578947368421, 0.0, 0.7631578947368421, 0.75, 0.7894736842105263, 0.75, 0.7894736842105263, 0.0], [0.7105263157894737, 0.75, 0.7105263157894737, 1.0, 0.7368421052631579, 1.0, 0.7368421052631579, 0.75], [0.7368421052631579, 0.75, 0.7368421052631579, 1.0, 0.7631578947368421, 1.0, 0.7631578947368421, 0.75], [0.7368421052631579, 0.0, 0.7368421052631579, 0.75, 0.7631578947368421, 0.75, 0.7631578947368421, 0.0], [0.6842105263157895, 0.0, 0.6842105263157895, 0.75, 0.7105263157894737, 0.75, 0.7105263157894737, 0.0]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'rightLeg','pivot':[-0.11875, 0.75, 0.0],'vertices':[[-0.24375000596046448, 0.0, -0.125, -0.24375000596046448, 0.75, -0.125, 0.0062500000931322575, 0.75, -0.125, 0.0062500000931322575, 0.0, -0.125], [0.0062500000931322575, 0.0, 0.125, 0.0062500000931322575, 0.75, 0.125, -0.24375000596046448, 0.75, 0.125, -0.24375000596046448, 0.0, 0.125], [-0.24375000596046448, 0.75, -0.125, -0.24375000596046448, 0.75, 0.125, 0.0062500000931322575, 0.75, 0.125, 0.0062500000931322575, 0.75, -0.125], [0.0062500000931322575, 0.0, -0.125, 0.0062500000931322575, 0.0, 0.125, -0.24375000596046448, 0.0, 0.125, -0.24375000596046448, 0.0, -0.125], [0.0062500000931322575, 0.0, -0.125, 0.0062500000931322575, 0.75, -0.125, 0.0062500000931322575, 0.75, 0.125, 0.0062500000931322575, 0.0, 0.125], [-0.24375000596046448, 0.0, 0.125, -0.24375000596046448, 0.75, 0.125, -0.24375000596046448, 0.75, -0.125, -0.24375000596046448, 0.0, -0.125]],'tex_coords':[[0.8157894736842105, 0.0, 0.8157894736842105, 0.75, 0.8421052631578947, 0.75, 0.8421052631578947, 0.0], [0.868421052631579, 0.0, 0.868421052631579, 0.75, 0.8947368421052632, 0.75, 0.8947368421052632, 0.0], [0.8157894736842105, 0.75, 0.8157894736842105, 1.0, 0.8421052631578947, 1.0, 0.8421052631578947, 0.75], [0.8421052631578947, 0.75, 0.8421052631578947, 1.0, 0.868421052631579, 1.0, 0.868421052631579, 0.75], [0.8421052631578947, 0.0, 0.8421052631578947, 0.75, 0.868421052631579, 0.75, 0.868421052631579, 0.0], [0.7894736842105263, 0.0, 0.7894736842105263, 0.75, 0.8157894736842105, 0.75, 0.8157894736842105, 0.0]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}, {'name':'leftLeg','pivot':[0.11875, 0.75, 0.0],'vertices':[[-0.0062500000931322575, 0.0, -0.125, -0.0062500000931322575, 0.75, -0.125, 0.24375000596046448, 0.75, -0.125, 0.24375000596046448, 0.0, -0.125], [0.24375000596046448, 0.0, 0.125, 0.24375000596046448, 0.75, 0.125, -0.0062500000931322575, 0.75, 0.125, -0.0062500000931322575, 0.0, 0.125], [-0.0062500000931322575, 0.75, -0.125, -0.0062500000931322575, 0.75, 0.125, 0.24375000596046448, 0.75, 0.125, 0.24375000596046448, 0.75, -0.125], [0.24375000596046448, 0.0, -0.125, 0.24375000596046448, 0.0, 0.125, -0.0062500000931322575, 0.0, 0.125, -0.0062500000931322575, 0.0, -0.125], [0.24375000596046448, 0.0, -0.125, 0.24375000596046448, 0.75, -0.125, 0.24375000596046448, 0.75, 0.125, 0.24375000596046448, 0.0, 0.125], [-0.0062500000931322575, 0.0, 0.125, -0.0062500000931322575, 0.75, 0.125, -0.0062500000931322575, 0.75, -0.125, -0.0062500000931322575, 0.0, -0.125]],'tex_coords':[[0.9210526315789473, 0.0, 0.9210526315789473, 0.75, 0.9473684210526315, 0.75, 0.9473684210526315, 0.0], [0.9736842105263158, 0.0, 0.9736842105263158, 0.75, 1.0, 0.75, 1.0, 0.0], [0.9210526315789473, 0.75, 0.9210526315789473, 1.0, 0.9473684210526315, 1.0, 0.9473684210526315, 0.75], [0.9473684210526315, 0.75, 0.9473684210526315, 1.0, 0.9736842105263158, 1.0, 0.9736842105263158, 0.75], [0.9473684210526315, 0.0, 0.9473684210526315, 0.75, 0.9736842105263158, 0.75, 0.9736842105263158, 0.0], [0.8947368421052632, 0.0, 0.8947368421052632, 0.75, 0.9210526315789473, 0.75, 0.9210526315789473, 0.0]],'shading_values':[[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]}] diff --git a/community/save.py b/community/save.py index f7a5b779..52b4c63f 100644 --- a/community/save.py +++ b/community/save.py @@ -85,9 +85,9 @@ def load(self): # for y in range(-15, 1): # self.load_chunk((x, 0, y)) - # for x in range(-4, 4): - # for y in range(-4, 4): - # self.load_chunk((x, 0, y)) + for x in range(-4, 4): + for y in range(-4, 4): + self.load_chunk((x, 0, y)) for x in range(-1, 1): for y in range(-1, 1): diff --git a/community/shaders/entity/vert.glsl b/community/shaders/entity/vert.glsl index 2a2fe90e..b3339810 100644 --- a/community/shaders/entity/vert.glsl +++ b/community/shaders/entity/vert.glsl @@ -1,14 +1,14 @@ #version 330 layout(location = 0) in vec3 vertex_position; -layout(location = 1) in vec3 tex_coords; -layout(location = 2) in vec3 normal; +layout(location = 1) in vec3 normal; +layout(location = 2) in vec3 tex_coords; out vec3 local_position; out vec3 interpolated_tex_coords; out float shading; -uniform mat4 transform_matrix; +uniform mat4 inverse_transform_matrix; uniform mat4 matrix; uniform float lighting; @@ -17,10 +17,13 @@ void main(void) { interpolated_tex_coords = tex_coords; - vec3 adjusted_normal = (vec4(normal, 1.0) * transform_matrix).xyz; - vec3 sunlight = vec3(0.0, 0.0, 1.0); + vec3 transformed_normal = (vec4(normal, 1.0) * inverse_transform_matrix).xyz; + vec3 sunlight = vec3(0.0, 2.0, 1.0); - shading = (1.0 - 0.4 * abs(dot(normalize(adjusted_normal), normalize(sunlight)))) * lighting; + vec3 xz_absolute_normal = vec3(abs(transformed_normal.x), transformed_normal.y, abs(transformed_normal.z)); + float facing = dot(normalize(xz_absolute_normal), normalize(sunlight)); + + shading = max(0.4, (1. + facing) / 2) * lighting; gl_Position = matrix * vec4(vertex_position, 1.0); } diff --git a/community/world.py b/community/world.py index 6eacff96..104dff86 100644 --- a/community/world.py +++ b/community/world.py @@ -160,6 +160,8 @@ def __init__(self, player, texture_manager, options): indices.append(4 * nquad + 3) indices.append(4 * nquad + 0) + gl.glBindVertexArray(0) + self.ibo = gl.GLuint(0) gl.glGenBuffers(1, self.ibo) gl.glBindBuffer(gl.GL_ELEMENT_ARRAY_BUFFER, self.ibo) @@ -193,7 +195,7 @@ def __init__(self, player, texture_manager, options): self.entity_shader = shader.Shader("shaders/entity/vert.glsl", "shaders/entity/frag.glsl") self.entity_shader_sampler_location = self.entity_shader.find_uniform(b"texture_sampler") - self.entity_shader_transform_matrix_location = self.entity_shader.find_uniform(b"transform_matrix") + self.entity_shader_inverse_transform_matrix_location = self.entity_shader.find_uniform(b"inverse_transform_matrix") self.entity_shader_matrix_location = self.entity_shader.find_uniform(b"matrix") self.entity_shader_lighting_location = self.entity_shader.find_uniform(b"lighting") From a4c7c4ef6d1e4e28f0795222b27d6ce58ca2741e Mon Sep 17 00:00:00 2001 From: Arta <63291774+Arta48@users.noreply.github.com> Date: Tue, 7 Feb 2023 14:40:27 +0000 Subject: [PATCH 44/45] community: Make sprinting behaviour more similar to Minecraft - fixes #84 --- community/keyboard_mouse.py | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/community/keyboard_mouse.py b/community/keyboard_mouse.py index 419019dc..fbed18bc 100644 --- a/community/keyboard_mouse.py +++ b/community/keyboard_mouse.py @@ -14,6 +14,9 @@ def __init__(self, game): self.game.on_key_press = self.on_key_press self.game.on_key_release = self.on_key_release + self.w_pressed = False + self.ctrl_pressed = False + def on_mouse_press(self, x, y, button, modifiers): if not self.game.mouse_captured: self.game.mouse_captured = True @@ -43,12 +46,19 @@ def on_key_press(self, key, modifiers): if key == pyglet.window.key.D: self.start_move(self.MoveMode.RIGHT) elif key == pyglet.window.key.A: self.start_move(self.MoveMode.LEFT) - elif key == pyglet.window.key.W: self.start_move(self.MoveMode.FORWARD) + elif key == pyglet.window.key.W: + self.w_pressed = True + self.start_move(self.MoveMode.FORWARD) + if self.ctrl_pressed: + self.start_modifier(self.ModifierMode.SPRINT) elif key == pyglet.window.key.S: self.start_move(self.MoveMode.BACKWARD) elif key == pyglet.window.key.SPACE : self.start_move(self.MoveMode.UP) elif key == pyglet.window.key.LSHIFT: self.start_move(self.MoveMode.DOWN) - elif key == pyglet.window.key.LCTRL : self.start_modifier(self.ModifierMode.SPRINT) + elif key == pyglet.window.key.LCTRL: + self.ctrl_pressed = True + if self.w_pressed: + self.start_modifier(self.ModifierMode.SPRINT) elif key == pyglet.window.key.E: self.misc(self.MiscMode.SPAWN) elif key == pyglet.window.key.F: self.misc(self.MiscMode.FLY) @@ -67,9 +77,15 @@ def on_key_release(self, key, modifiers): if key == pyglet.window.key.D: self.end_move(self.MoveMode.RIGHT) elif key == pyglet.window.key.A: self.end_move(self.MoveMode.LEFT) - elif key == pyglet.window.key.W: self.end_move(self.MoveMode.FORWARD) + elif key == pyglet.window.key.W: + self.w_pressed = False + self.end_move(self.MoveMode.FORWARD) + self.end_modifier(self.ModifierMode.SPRINT) elif key == pyglet.window.key.S: self.end_move(self.MoveMode.BACKWARD) elif key == pyglet.window.key.SPACE : self.end_move(self.MoveMode.UP) elif key == pyglet.window.key.LSHIFT: self.end_move(self.MoveMode.DOWN) - elif key == pyglet.window.key.LCTRL : self.end_modifier(self.ModifierMode.SPRINT) + elif key == pyglet.window.key.LCTRL: + self.ctrl_pressed = False + if not self.w_pressed: + self.end_modifier(self.ModifierMode.SPRINT) From eec9efaaa1effe6c705dd250eb8eda4f573592f6 Mon Sep 17 00:00:00 2001 From: obiwac Date: Mon, 15 May 2023 18:47:59 +0200 Subject: [PATCH 45/45] 13: Set `double_buffer` to true in GL config --- episode-12/.main.py.swp | Bin 16384 -> 0 bytes episode-13/main.py | 3 +-- 2 files changed, 1 insertion(+), 2 deletions(-) delete mode 100644 episode-12/.main.py.swp diff --git a/episode-12/.main.py.swp b/episode-12/.main.py.swp deleted file mode 100644 index db12fdf8f466fd93ce75a91f581f7c298d8c23e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 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 diff --git a/episode-13/main.py b/episode-13/main.py index 5c6a28af..67b11c0a 100644 --- a/episode-13/main.py +++ b/episode-13/main.py @@ -1,4 +1,3 @@ - import math import random import pyglet @@ -162,7 +161,7 @@ def on_key_release(self, key, modifiers): class Game: def __init__(self): - self.config = gl.Config(major_version = 3, minor_version = 3, depth_size = 16) + self.config = gl.Config(double_buffer = True, major_version = 3, minor_version = 3, depth_size = 16) self.window = Window(config = self.config, width = 800, height = 600, caption = "Minecraft clone", resizable = True, vsync = False) def run(self):